@import "tailwindcss"; @import "tw-animate-css"; @import "@xyflow/react/dist/style.css"; @custom-variant dark (&:is(.dark *)); /* ============================================================ 双主题 · 玻璃拟物(Rivet/Flowise 风) ============================================================ */ :root { color-scheme: light; /* ---- Light · 暖白底 ---- */ --bg-canvas-1: #f6f4ed; --bg-canvas-2: #ece6d8; --bg-grid: rgba(0, 0, 0, 0.06); --bg-aurora-1: rgba(120, 100, 220, 0.15); --bg-aurora-2: rgba(220, 120, 180, 0.12); --node-bg: rgba(255, 255, 255, 0.7); --node-bg-hover: rgba(255, 255, 255, 0.82); --node-border: rgba(0, 0, 0, 0.08); --node-border-hover: rgba(0, 0, 0, 0.18); --node-ring: rgba(255, 255, 255, 0.9); --node-shadow: 0 1px 1px rgba(0, 0, 0, 0.04), 0 8px 24px -8px rgba(0, 0, 0, 0.12), 0 30px 60px -30px rgba(40, 30, 80, 0.18); --node-shadow-hover: 0 1px 1px rgba(0, 0, 0, 0.06), 0 12px 32px -10px rgba(40, 30, 80, 0.22), 0 40px 80px -30px rgba(40, 30, 80, 0.3); --text-strong: oklch(0.18 0.02 280); --text-soft: oklch(0.45 0.02 280); --text-faint: oklch(0.6 0.02 280); --edge-stroke: rgba(60, 50, 120, 0.35); --edge-glow: rgba(120, 100, 220, 0.4); --divider: rgba(0, 0, 0, 0.08); --background: oklch(0.97 0.005 80); --foreground: oklch(0.18 0.02 280); --border: var(--node-border); --ring: rgba(120, 100, 220, 0.5); --radius: 1rem; /* 节点头渐变(4 类型)*/ --grad-input: linear-gradient(135deg, #6366f1, #a855f7); --grad-process: linear-gradient(135deg, #f59e0b, #ef4444); --grad-ai: linear-gradient(135deg, #d946ef, #ec4899); --grad-output: linear-gradient(135deg, #10b981, #06b6d4); /* 状态色 */ --status-pending: oklch(0.7 0.02 280); --status-running: oklch(0.7 0.18 260); --status-done: oklch(0.7 0.18 160); --status-failed: oklch(0.65 0.22 25); } .dark { color-scheme: dark; /* ---- Dark · 深蓝紫 ---- */ --bg-canvas-1: #0a0d1c; --bg-canvas-2: #14172e; --bg-grid: rgba(255, 255, 255, 0.04); --bg-aurora-1: rgba(120, 100, 220, 0.22); --bg-aurora-2: rgba(220, 80, 180, 0.16); --node-bg: rgba(22, 26, 48, 0.62); --node-bg-hover: rgba(30, 35, 60, 0.76); --node-border: rgba(255, 255, 255, 0.08); --node-border-hover: rgba(255, 255, 255, 0.18); --node-ring: rgba(255, 255, 255, 0.05); --node-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 1px 2px rgba(0, 0, 0, 0.4), 0 16px 40px -12px rgba(0, 0, 0, 0.6), 0 30px 80px -20px rgba(80, 50, 200, 0.3); --node-shadow-hover: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 2px rgba(0, 0, 0, 0.5), 0 20px 50px -10px rgba(0, 0, 0, 0.7), 0 40px 100px -20px rgba(120, 80, 240, 0.4); --text-strong: oklch(0.96 0.005 280); --text-soft: oklch(0.7 0.015 280); --text-faint: oklch(0.5 0.015 280); --edge-stroke: rgba(180, 170, 240, 0.45); --edge-glow: rgba(120, 100, 220, 0.7); --divider: rgba(255, 255, 255, 0.08); --background: oklch(0.1 0.02 280); --foreground: oklch(0.96 0.005 280); --border: var(--node-border); --ring: rgba(180, 160, 255, 0.5); } @theme inline { --font-sans: "Geist", "Geist Fallback"; --font-serif: "Playfair Display", Georgia, serif; --font-mono: "Geist Mono", "Geist Mono Fallback"; --color-background: var(--background); --color-foreground: var(--foreground); --color-border: var(--border); --color-ring: var(--ring); --radius-lg: var(--radius); --radius-md: calc(var(--radius) - 0.25rem); --radius-sm: calc(var(--radius) - 0.5rem); --radius-xl: calc(var(--radius) + 0.25rem); } @layer base { * { border-color: var(--border); } html, body { background: var(--background); color: var(--foreground); min-height: 100vh; } } /* Next 16 still injects its dev overlay portal for baseline warnings in local screenshots. */ nextjs-portal { display: none !important; } /* ============================================================ 生产登录页 · 动画角色登录风格 ============================================================ */ .login-page { background: linear-gradient(112deg, #f7f7f4 0 50%, #111214 50% 100%); font-family: Roboto, "Geist", "Geist Fallback", sans-serif; } .login-page::before { content: ""; position: absolute; inset: 0; pointer-events: none; background: linear-gradient(90deg, rgba(40, 40, 40, 0.035) 1px, transparent 1px), linear-gradient(180deg, rgba(40, 40, 40, 0.035) 1px, transparent 1px), linear-gradient(180deg, rgba(255, 255, 255, 0.42), transparent 40%, rgba(0, 0, 0, 0.42)); background-size: 56px 56px, 56px 56px, auto; } .login-page::after { content: ""; position: absolute; inset: 0; pointer-events: none; background-image: linear-gradient(114deg, transparent 0 23%, rgba(255, 255, 255, 0.26) 23% 33%, transparent 33% 54%, rgba(214, 179, 106, 0.12) 54% 62%, transparent 62%), linear-gradient(rgba(255, 255, 255, 0.035) 1px, transparent 1px); background-size: auto, 100% 6px; opacity: 0.78; mix-blend-mode: screen; } .login-page--oasis { background: #030303; color: #fff; } .login-page--oasis::before { z-index: 1; background: linear-gradient(90deg, rgba(255, 255, 255, 0.028) 1px, transparent 1px), linear-gradient(180deg, rgba(255, 255, 255, 0.024) 1px, transparent 1px); background-size: 64px 64px; opacity: 0.38; } .login-page--oasis::after { z-index: 1; background: radial-gradient(circle at 50% 26%, rgba(214, 179, 106, 0.16), transparent 32%), linear-gradient(90deg, rgba(0, 0, 0, 0.86), rgba(0, 0, 0, 0.34) 48%, rgba(0, 0, 0, 0.76)); background-size: auto; opacity: 1; mix-blend-mode: normal; } .login-oasis-canvas { position: fixed; inset: 0; z-index: 0; width: 100vw; height: 100vh; border: 0; background: #030303; } .login-oasis-shade { position: fixed; inset: 0; z-index: 2; pointer-events: none; background: linear-gradient(180deg, rgba(0, 0, 0, 0.62), rgba(0, 0, 0, 0.12) 42%, rgba(0, 0, 0, 0.74)), radial-gradient(circle at 78% 50%, rgba(214, 179, 106, 0.12), transparent 32%); } .login-page--oasis .login-oasis-hero { color: #fff; border: 1px solid rgba(140, 180, 120, 0.12); border-radius: 16px; background: rgba(10, 18, 10, 0.55); box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4); padding: 36px 28px; backdrop-filter: blur(16px); transition: border-color 0.4s, background 0.4s; } .login-page--oasis .login-oasis-hero:hover { border-color: rgba(140, 180, 120, 0.3); background: rgba(20, 35, 20, 0.45); } .login-page--oasis .login-hero::before, .login-page--oasis .login-hero::after { display: none; } .login-page--oasis .login-wordmark, .login-page--oasis .login-brand-mark { color: rgba(255, 255, 255, 0.94); } .login-page--oasis .login-wordmark__sub, .login-page--oasis .login-brand-mark__sub { color: rgba(255, 255, 255, 0.58); } .login-page--oasis .login-secure-pill, .login-page--oasis .login-store-pill { border: 1px solid rgba(140, 180, 120, 0.18); background: rgba(10, 18, 10, 0.42); color: rgba(255, 255, 255, 0.82); box-shadow: 0 8px 30px rgba(0, 0, 0, 0.32); backdrop-filter: blur(16px); } .login-page--oasis .login-kicker { color: rgba(224, 210, 128, 0.92); text-shadow: 0 0 24px rgba(214, 179, 106, 0.2); } .login-page--oasis .login-premium-title { max-width: 720px; color: #f8f7ef; font-size: clamp(54px, 7vw, 104px); font-weight: 600; letter-spacing: 0; text-shadow: 0 3px 30px rgba(0, 0, 0, 0.78), 0 0 70px rgba(214, 179, 106, 0.12); } .login-page--oasis .login-premium-copy { max-width: 560px; color: rgba(247, 246, 236, 0.68); text-shadow: 0 2px 18px rgba(0, 0, 0, 0.68); } .login-page--oasis .login-creative-stage { min-height: 400px; margin-top: auto; } .login-page--oasis .login-creative-caption { left: min(470px, 58%); bottom: 54px; width: min(300px, 34%); border-top-color: rgba(255, 255, 255, 0.18); color: #fff; text-shadow: 0 2px 22px rgba(0, 0, 0, 0.66); } .login-page--oasis .login-creative-caption span { color: rgba(255, 255, 255, 0.55); } .login-page--oasis .login-creative-caption b { color: rgba(255, 255, 255, 0.94); } .login-page--oasis .login-dynamic-dock { left: 0; bottom: 104px; width: min(430px, 54%); border-color: rgba(140, 180, 120, 0.12); background: rgba(10, 18, 10, 0.55); padding: 18px; box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4); backdrop-filter: blur(16px); } .login-page--oasis .login-dynamic-dock__label { margin-bottom: 12px; color: rgba(224, 210, 128, 0.78); } .login-page--oasis .login-dynamic-dock .login-character-stage { min-height: 250px; border-color: rgba(255, 255, 255, 0.1); background: linear-gradient(90deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px), linear-gradient(180deg, rgba(255, 255, 255, 0.05) 1px, transparent 1px), rgba(255, 255, 255, 0.045); background-size: 22px 22px, 22px 22px, auto; } .login-page--oasis .login-dynamic-dock .login-character-stage::after { background: linear-gradient(180deg, transparent, rgba(0, 0, 0, 0.26)); } .login-page--oasis .login-dynamic-dock .login-stage-grid { border-color: rgba(255, 255, 255, 0.1); } .login-page--oasis .login-dynamic-dock .login-characters-container { transform: translateX(-50%) scale(0.58); } .login-page--oasis .login-studio-chip { border-color: rgba(140, 180, 120, 0.14); background: rgba(10, 18, 10, 0.55); color: rgba(255, 255, 255, 0.82); box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4); backdrop-filter: blur(16px); } .login-page--oasis .login-studio-chip--visual { right: auto; left: min(470px, 58%); top: 176px; } .login-page--oasis .login-premium-metrics { border-color: rgba(140, 180, 120, 0.12); background: rgba(140, 180, 120, 0.12); box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4); backdrop-filter: blur(16px); } .login-page--oasis .login-premium-metric { background: rgba(10, 18, 10, 0.55); } .login-page--oasis .login-premium-metric span { color: rgba(255, 255, 255, 0.5); } .login-page--oasis .login-premium-metric b { color: rgba(255, 255, 255, 0.94); } .login-page--oasis .login-auth-panel { border: 1px solid rgba(140, 180, 120, 0.12); border-radius: 16px; background: rgba(10, 18, 10, 0.55); box-shadow: 0 8px 40px rgba(0, 0, 0, 0.4); padding: 24px 22px; backdrop-filter: blur(16px); transition: border-color 0.4s, background 0.4s; } .login-page--oasis .login-auth-panel:hover { border-color: rgba(140, 180, 120, 0.3); background: rgba(20, 35, 20, 0.45); } .login-page--oasis .login-auth-icon { border-color: rgba(140, 180, 120, 0.2); background: rgba(10, 18, 10, 0.55); box-shadow: 0 8px 30px rgba(0, 0, 0, 0.36); } .login-page--oasis .login-auth-panel label > span.flex { border-color: rgba(140, 180, 120, 0.12); background: rgba(10, 18, 10, 0.36); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.04); backdrop-filter: blur(16px); } .login-page--oasis .login-auth-panel label > span.flex:focus-within { border-color: rgba(140, 180, 120, 0.36); background: rgba(20, 35, 20, 0.42); box-shadow: 0 0 0 2px rgba(230, 245, 120, 0.12); } .login-page--oasis .login-auth-panel button[type="submit"] { background: rgba(245, 250, 235, 0.94); color: #090c07; box-shadow: 0 8px 40px rgba(0, 0, 0, 0.38); } .login-page--oasis .login-auth-panel button[type="submit"]:hover { background: rgba(230, 245, 120, 0.92); } .login-page--oasis .login-auth-panel input:-webkit-autofill, .login-page--oasis .login-auth-panel input:-webkit-autofill:hover, .login-page--oasis .login-auth-panel input:-webkit-autofill:focus { -webkit-text-fill-color: #fff; transition: background-color 9999s ease-in-out 0s; } .login-page--source::before, .login-page--source::after { display: none; } .login-page--source .login-oasis-shade { background: radial-gradient(circle at 34% 52%, rgba(230, 245, 120, 0.08), transparent 28%), linear-gradient(90deg, rgba(0, 0, 0, 0.22), rgba(0, 0, 0, 0.04) 44%, rgba(0, 0, 0, 0.38)); } .login-source-overlay { position: fixed; inset: 0; z-index: 10; display: block; min-height: 100vh; min-height: 100dvh; padding: clamp(20px, 4vw, 56px); pointer-events: none; } .login-page--oasis .login-source-auth-panel { position: fixed; left: 50%; top: 50%; display: grid; width: min(820px, calc(100vw - 40px)); grid-template-columns: minmax(320px, 360px) minmax(300px, 360px); align-items: center; gap: 20px; padding: 18px; transform: translate(-50%, -50%); pointer-events: auto; background: rgba(10, 18, 10, 0.2); backdrop-filter: none; overflow: visible; } .login-top-brand { position: absolute; left: 24px; top: 22px; z-index: 5; display: flex; align-items: center; gap: 14px; pointer-events: none; } .login-top-brand__logo { width: 150px; height: auto; opacity: 0.86; filter: invert(1) brightness(1.25) drop-shadow(0 10px 20px rgba(0, 0, 0, 0.45)); } .login-top-brand__system { display: inline-flex; min-height: 20px; align-items: center; transform: translateY(4px); border-left: 1px solid rgba(255, 255, 255, 0.18); padding-left: 14px; color: rgba(255, 255, 255, 0.66); font-size: 13px; font-weight: 500; letter-spacing: 0.08em; line-height: 1; text-shadow: 0 10px 22px rgba(0, 0, 0, 0.38); } .login-page--source .login-auth-icon { margin-bottom: 0; } .login-source-character-strip { height: 340px; margin-bottom: 0; overflow: hidden; pointer-events: none; } .login-source-character-strip .login-character-stage { min-height: 340px; border: 0; background: transparent; box-shadow: none; perspective: 900px; } .login-source-character-strip .login-character-stage::after, .login-source-character-strip .login-stage-grid, .login-source-character-strip .login-character-base { display: none; } .login-source-character-strip .login-characters-container { transform: translateX(-50%) scale(0.66); transform-style: preserve-3d; } .login-source-form-pane { min-width: 0; transform: translateY(44px); } /* ============================================================ 信息流工作台 · 登录页同源质感 ============================================================ */ .skg-board-theme { --skg-gold-1: #d6b36a; --skg-gold-2: #c89b3c; --skg-cream: #f5efe3; --skg-bg-1: #0a0a0a; --skg-bg-2: #111111; --skg-bg-3: rgba(255, 255, 255, 0.035); --skg-border: rgba(255, 255, 255, 0.1); --skg-text-1: #ffffff; --skg-text-2: rgba(255, 255, 255, 0.62); --skg-text-3: rgba(255, 255, 255, 0.34); --skg-success: #34d399; --skg-warn: #fcd34d; --skg-danger: #fb7185; --skg-info: #67e8f9; --skg-radius-sm: 6px; --skg-radius-md: 8px; --skg-radius-lg: 12px; --skg-shadow-button: 0 6px 24px -8px rgba(0, 0, 0, 0.45); color: var(--skg-text-1); background: radial-gradient(circle at 52% 4%, rgba(214, 179, 106, 0.1), transparent 30%), radial-gradient(circle at 12% 96%, rgba(214, 179, 106, 0.065), transparent 34%), linear-gradient(120deg, #0a0a0a 0%, #10100f 46%, #050505 100%); } .skg-board-theme::before { content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none; background: linear-gradient(90deg, rgba(255, 255, 255, 0.026) 1px, transparent 1px), linear-gradient(180deg, rgba(255, 255, 255, 0.022) 1px, transparent 1px); background-size: 64px 64px; opacity: 0.44; } .skg-board-theme::after { content: ""; position: fixed; inset: 0; z-index: 0; pointer-events: none; background: linear-gradient(180deg, rgba(0, 0, 0, 0.22), transparent 42%, rgba(0, 0, 0, 0.4)), linear-gradient(90deg, rgba(0, 0, 0, 0.28), transparent 38%, rgba(0, 0, 0, 0.24)); } .skg-board-ambient { background: radial-gradient(circle at 78% 0%, rgba(232, 201, 122, 0.08), transparent 30%), radial-gradient(circle at 8% 100%, rgba(214, 179, 106, 0.06), transparent 34%); } .skg-board-topbar, .skg-board-panel { border-color: var(--skg-border) !important; background: linear-gradient(180deg, rgba(255, 255, 255, 0.05), rgba(255, 255, 255, 0.022)), rgba(17, 17, 17, 0.74) !important; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 18px 54px rgba(0, 0, 0, 0.34); backdrop-filter: blur(10px); } .skg-board-topbar { background: linear-gradient(100deg, rgba(214, 179, 106, 0.075), rgba(255, 255, 255, 0.03) 54%, rgba(214, 179, 106, 0.035)), rgba(12, 12, 12, 0.76) !important; } .skg-board-theme input:focus, .skg-board-theme textarea:focus, .skg-board-theme select:focus { border-color: rgba(214, 179, 106, 0.58) !important; box-shadow: 0 0 0 2px rgba(214, 179, 106, 0.14); } .skg-board-theme input[type="checkbox"] { accent-color: #d6b36a; } .skg-board-theme ::selection { background: rgba(214, 179, 106, 0.28); color: #fff; } .skg-board-theme--light { --skg-bg-1: #faf8f4; --skg-bg-2: #ffffff; --skg-bg-3: rgba(0, 0, 0, 0.03); --skg-border: rgba(0, 0, 0, 0.08); --skg-text-1: #0a0a0a; --skg-text-2: rgba(0, 0, 0, 0.62); --skg-text-3: rgba(0, 0, 0, 0.34); --skg-success: #059669; --skg-warn: #b7791f; --skg-danger: #e11d48; --skg-info: #0891b2; color: var(--skg-text-1); background: radial-gradient(circle at 50% 0%, rgba(232, 212, 168, 0.18), transparent 31%), radial-gradient(circle at 4% 100%, rgba(214, 179, 106, 0.12), transparent 28%), linear-gradient(126deg, #faf8f4 0%, #f4efe5 48%, #ffffff 100%); } .skg-board-theme--light::before { background: linear-gradient(90deg, rgba(42, 50, 36, 0.05) 1px, transparent 1px), linear-gradient(180deg, rgba(42, 50, 36, 0.045) 1px, transparent 1px); opacity: 0.72; } .skg-board-theme--light::after { background: linear-gradient(180deg, rgba(255, 255, 255, 0.36), transparent 46%, rgba(214, 179, 106, 0.08)), linear-gradient(90deg, rgba(255, 255, 255, 0.3), transparent 42%, rgba(255, 255, 255, 0.24)); } .skg-board-theme--light .skg-board-ambient { background: radial-gradient(circle at 20% 18%, rgba(214, 179, 106, 0.2), transparent 28%), radial-gradient(circle at 70% 6%, rgba(143, 176, 113, 0.16), transparent 30%), radial-gradient(circle at 52% 100%, rgba(214, 179, 106, 0.12), transparent 38%); } .skg-board-theme--light .skg-board-topbar, .skg-board-theme--light .skg-board-panel { border-color: rgba(82, 93, 62, 0.16) !important; background: linear-gradient(180deg, rgba(255, 255, 255, 0.78), rgba(255, 255, 255, 0.48)), rgba(249, 246, 236, 0.7) !important; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.78), 0 18px 48px rgba(65, 55, 30, 0.1); } .skg-board-theme--light .skg-board-topbar { background: linear-gradient(100deg, rgba(214, 179, 106, 0.14), rgba(143, 176, 113, 0.08) 42%, rgba(255, 255, 255, 0.58)), rgba(252, 249, 241, 0.82) !important; } .skg-board-theme--light .skg-board-theme-toggle { border-color: rgba(82, 93, 62, 0.16) !important; background: rgba(255, 255, 255, 0.54) !important; color: rgba(36, 40, 30, 0.72) !important; } .skg-board-theme--light .text-white, .skg-board-theme--light [class*="text-white/"] { color: rgba(32, 36, 28, 0.78) !important; } .skg-board-theme--light [class*="bg-black/"], .skg-board-theme--light [class*="bg-white/"] { background-color: rgba(255, 255, 250, 0.52) !important; } .skg-board-theme--light [class*="border-white/"] { border-color: rgba(70, 78, 54, 0.14) !important; } .skg-board-theme--light [class*="text-[#d7efbc]"] { color: #43662d !important; } .skg-board-theme--light [class*="text-[#e8c77a]"], .skg-board-theme--light [class*="text-[#f2d58a]"], .skg-board-theme--light [class*="text-[#f5d98e]"] { color: #856015 !important; } .skg-board-theme--light [class*="text-emerald-"] { color: #2f6d3d !important; } .skg-board-theme--light [class*="text-cyan-"], .skg-board-theme--light [class*="text-sky-"], .skg-board-theme--light [class*="text-teal-"] { color: #17606f !important; } .skg-board-theme--light [class*="text-amber-"], .skg-board-theme--light [class*="text-yellow-"] { color: #8a5c00 !important; } .skg-board-theme--light [class*="text-rose-"], .skg-board-theme--light [class*="text-red-"] { color: #9f1239 !important; } .skg-board-theme--light [class*="text-violet-"], .skg-board-theme--light [class*="text-purple-"] { color: #62438a !important; } .skg-board-theme--light [class*="border-[#8fb071]"] { border-color: rgba(67, 102, 45, 0.28) !important; } .skg-board-theme--light [class*="border-[#d6b36a]"] { border-color: rgba(133, 96, 21, 0.26) !important; } .skg-board-theme--light [class*="bg-[#8fb071]"], .skg-board-theme--light [class*="bg-[#d6b36a]"] { background-color: rgba(214, 179, 106, 0.14) !important; } .skg-board-theme--light input, .skg-board-theme--light textarea, .skg-board-theme--light select { color: #22261f !important; } .skg-board-theme--light input::placeholder, .skg-board-theme--light textarea::placeholder { color: rgba(34, 38, 31, 0.36) !important; } .skg-board-theme--light ::selection { background: rgba(214, 179, 106, 0.32); color: #171a14; } .skg-board-brand { display: flex; min-width: 0; align-items: center; gap: 14px; } .skg-board-brand__logo-chip { display: inline-flex; height: 42px; width: 132px; flex-shrink: 0; align-items: center; justify-content: center; border: 1px solid rgba(214, 179, 106, 0.24); border-radius: var(--skg-radius-md); background: #f5efe3; box-shadow: var(--skg-shadow-button); } .skg-board-brand__logo { width: 96px; height: auto; display: block; } .skg-board-brand__system { font-size: 12px; font-weight: 700; letter-spacing: 0.16em; color: var(--skg-gold-1); } .skg-board-brand__title { margin-top: 3px; color: var(--skg-text-1); font-size: 20px; font-weight: 650; line-height: 1.1; letter-spacing: 0; } .skg-board-brand__subtitle { margin-top: 4px; color: var(--skg-text-3); font-size: 12px; line-height: 1.3; } .skg-stat-card { border: 1px solid rgba(214, 179, 106, 0.18); border-radius: var(--skg-radius-md); background: var(--skg-cream); color: #0a0a0a; box-shadow: var(--skg-shadow-button); } .skg-stat-card__label { color: rgba(0, 0, 0, 0.5); } .skg-stat-card__value { color: #0a0a0a; } .skg-primary-action { border-radius: var(--skg-radius-md); background: #f5efe3; color: #0a0a0a; box-shadow: var(--skg-shadow-button); } .skg-primary-action:hover { background: #fff7df; } .skg-secondary-action { border: 1px solid rgba(214, 179, 106, 0.3); border-radius: var(--skg-radius-md); background: rgba(214, 179, 106, 0.08); color: var(--skg-gold-1); } .skg-secondary-action:hover { border-color: rgba(214, 179, 106, 0.54); background: rgba(214, 179, 106, 0.12); color: #f5d98e; } .skg-empty-state { border: 1px dashed rgba(214, 179, 106, 0.22); border-radius: var(--skg-radius-lg); background: radial-gradient(circle at 50% 0%, rgba(214, 179, 106, 0.1), transparent 38%), rgba(255, 255, 255, 0.028); color: var(--skg-text-3); } .skg-empty-character { width: min(230px, 82%); margin: 0 auto 12px; pointer-events: none; } .skg-empty-character .login-character-stage { min-height: 112px; border-color: rgba(214, 179, 106, 0.16); background: radial-gradient(circle at 78% 18%, rgba(214, 179, 106, 0.16), transparent 28%), linear-gradient(180deg, rgba(255, 255, 255, 0.06), rgba(255, 255, 255, 0.026)); box-shadow: none; } .skg-empty-character .login-character-stage::after, .skg-empty-character .login-stage-grid { display: none; } .skg-empty-character .login-characters-container { bottom: -6px; transform: translateX(-50%) scale(0.22); } .skg-board-theme--light .skg-board-brand__logo-chip { background: #ffffff; } .skg-board-theme--light .skg-stat-card { background: #0a0a0a; color: #fff; box-shadow: 0 10px 24px -12px rgba(133, 96, 21, 0.38); } .skg-board-theme--light .skg-stat-card__label { color: rgba(255, 255, 255, 0.54); } .skg-board-theme--light .skg-stat-card__value { color: #fff; } .skg-board-theme--light .skg-primary-action { background: #0a0a0a; color: #fff; box-shadow: 0 10px 24px -12px rgba(133, 96, 21, 0.42); } .skg-board-theme--light .skg-primary-action:hover { background: #252525; } .skg-board-theme--light .skg-empty-state { background: radial-gradient(circle at 50% 0%, rgba(232, 212, 168, 0.28), transparent 38%), rgba(255, 255, 255, 0.66); } .login-hero { isolation: isolate; color: #282828; border: 1px solid rgba(255, 255, 255, 0.8); background: linear-gradient(145deg, rgba(255, 255, 255, 0.96), rgba(239, 239, 235, 0.9)), #f7f7f4; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.92), 0 28px 70px rgba(15, 15, 15, 0.16); } .login-hero::before { content: ""; position: absolute; inset: 0; z-index: 0; background: linear-gradient(90deg, transparent 0 48%, rgba(255, 255, 255, 0.58) 48% 100%), linear-gradient(18deg, transparent 0 58%, rgba(214, 179, 106, 0.1) 58% 66%, transparent 66%), linear-gradient(180deg, rgba(255, 255, 255, 0.55), transparent 48%); } .login-hero::after { content: ""; position: absolute; right: 10%; bottom: 126px; z-index: 0; width: 46%; height: 1px; background: linear-gradient(90deg, transparent, rgba(40, 40, 40, 0.16), transparent); box-shadow: 0 28px 52px rgba(40, 40, 40, 0.22); pointer-events: none; } .login-wordmark, .login-brand-mark { display: inline-flex; align-items: baseline; gap: 8px; color: #282828; letter-spacing: 0; } .login-wordmark__logo, .login-brand-mark__logo { font-size: 26px; font-weight: 700; line-height: 1; } .login-wordmark__sub, .login-brand-mark__sub { font-size: 13px; color: rgba(40, 40, 40, 0.54); } .login-secure-pill, .login-store-pill { display: inline-flex; align-items: center; gap: 8px; min-height: 36px; border-radius: 999px; background: #282828; padding: 0 14px; color: #fff; font-size: 13px; box-shadow: 0 10px 24px rgba(40, 40, 40, 0.18); } .login-kicker { margin: 0 0 16px; color: rgba(40, 40, 40, 0.48); font-size: 12px; font-weight: 700; letter-spacing: 0.18em; } .login-premium-title { margin: 0; max-width: 620px; color: #0d0d0d; font-size: clamp(44px, 5.5vw, 74px); font-weight: 600; line-height: 0.98; letter-spacing: 0; } .login-premium-copy { margin: 18px 0 0; max-width: 430px; color: rgba(40, 40, 40, 0.58); font-size: 16px; line-height: 1.7; } .login-creative-stage { position: relative; flex: 1; min-height: 300px; margin-top: 26px; } .login-creative-stage__halo { position: absolute; right: 10%; bottom: 54px; width: 46%; height: 46px; border-radius: 50%; background: rgba(40, 40, 40, 0.11); filter: blur(20px); transform: perspective(500px) rotateX(58deg); } .login-creative-orbit { position: absolute; right: 2%; bottom: 8px; width: min(40%, 330px); aspect-ratio: 1; border: 1px solid rgba(40, 40, 40, 0.08); border-radius: 8px; background: radial-gradient(circle at 50% 50%, rgba(214, 179, 106, 0.16), transparent 36%), linear-gradient(145deg, rgba(255, 255, 255, 0.88), rgba(244, 244, 240, 0.64)); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9), 0 34px 70px rgba(40, 40, 40, 0.12); overflow: hidden; } .login-creative-orbit::before, .login-creative-orbit::after, .login-creative-orbit span { content: ""; position: absolute; border-radius: 999px; } .login-creative-orbit::before { inset: 17%; border: 1px solid rgba(40, 40, 40, 0.12); } .login-creative-orbit::after { left: 50%; top: 50%; width: 42%; height: 42%; background: linear-gradient(145deg, #18191c, #343434); box-shadow: 0 18px 44px rgba(40, 40, 40, 0.18); transform: translate(-50%, -50%); } .login-creative-orbit span:nth-child(1) { left: 18%; top: 22%; width: 16%; height: 16%; background: #d6b36a; } .login-creative-orbit span:nth-child(2) { right: 18%; top: 34%; width: 11%; height: 11%; background: #111214; } .login-creative-orbit span:nth-child(3) { left: 50%; bottom: 15%; width: 13%; height: 13%; background: rgba(40, 40, 40, 0.18); } .login-creative-caption { position: absolute; left: 0; bottom: 50px; width: min(310px, 46%); border-top: 1px solid rgba(40, 40, 40, 0.16); padding-top: 18px; color: #151515; } .login-creative-caption span { display: block; color: rgba(40, 40, 40, 0.5); font-size: 13px; } .login-creative-caption b { display: block; margin-top: 5px; font-size: 28px; font-weight: 600; line-height: 1.05; } .login-dynamic-dock { position: absolute; left: 0; bottom: 118px; width: 252px; border: 1px solid rgba(255, 255, 255, 0.72); border-radius: 8px; background: rgba(255, 255, 255, 0.64); padding: 12px; box-shadow: 0 22px 52px rgba(40, 40, 40, 0.12); backdrop-filter: blur(18px); } .login-dynamic-dock__label { display: block; margin-bottom: 8px; color: rgba(40, 40, 40, 0.46); font-size: 11px; font-weight: 700; letter-spacing: 0.12em; text-transform: uppercase; } .login-dynamic-dock .login-character-stage { min-height: 116px; border-color: rgba(40, 40, 40, 0.08); background: linear-gradient(90deg, rgba(40, 40, 40, 0.04) 1px, transparent 1px), linear-gradient(180deg, rgba(40, 40, 40, 0.04) 1px, transparent 1px), rgba(255, 255, 255, 0.5); background-size: 22px 22px, 22px 22px, auto; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.84); } .login-dynamic-dock .login-character-stage::after { height: 48%; background: linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.7)); } .login-dynamic-dock .login-stage-grid { inset: 12px; border-color: rgba(40, 40, 40, 0.08); } .login-dynamic-dock .login-characters-container { left: 50%; bottom: 0; transform: translateX(-50%) scale(0.28); } .login-studio-chip { position: absolute; display: inline-flex; align-items: center; gap: 8px; min-height: 40px; border: 1px solid rgba(255, 255, 255, 0.72); border-radius: 999px; background: rgba(255, 255, 255, 0.72); padding: 0 14px; color: rgba(40, 40, 40, 0.68); font-size: 13px; box-shadow: 0 18px 40px rgba(40, 40, 40, 0.1); backdrop-filter: blur(18px); } .login-studio-chip--visual { right: 3%; top: 28px; } .login-studio-chip--review { right: 35%; bottom: 104px; } .login-premium-metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 1px; margin-top: 24px; overflow: hidden; border: 1px solid rgba(40, 40, 40, 0.1); border-radius: 8px; background: rgba(40, 40, 40, 0.1); } .login-premium-metric { min-height: 78px; background: rgba(255, 255, 255, 0.62); padding: 14px 16px; } .login-premium-metric span { display: block; color: rgba(40, 40, 40, 0.48); font-size: 12px; } .login-premium-metric b { display: block; margin-top: 8px; color: #121212; font-size: 20px; font-weight: 600; } .login-auth-panel { border: 1px solid rgba(255, 255, 255, 0.1); background: linear-gradient(180deg, rgba(22, 23, 28, 0.98), rgba(10, 11, 14, 0.98)), #101114; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.06), 0 32px 70px rgba(0, 0, 0, 0.35); } .login-auth-icon { background: linear-gradient(145deg, #2b2b2b, #111); border: 1px solid rgba(214, 179, 106, 0.42); box-shadow: 0 18px 42px rgba(0, 0, 0, 0.3), 0 0 0 5px rgba(214, 179, 106, 0.06); } .login-skg-tile { border: 1px solid rgba(40, 40, 40, 0.08); background: linear-gradient(135deg, rgba(255, 255, 255, 0.9), rgba(244, 245, 247, 0.75)), #f5f5f5; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8), 0 16px 34px rgba(40, 40, 40, 0.08); } .login-character-stage { position: relative; min-height: 320px; overflow: hidden; border: 1px solid rgba(40, 40, 40, 0.08); border-radius: 8px; background: radial-gradient(circle at 82% 28%, rgba(245, 135, 32, 0.14), transparent 24%), linear-gradient(90deg, rgba(40, 40, 40, 0.04) 1px, transparent 1px), linear-gradient(180deg, rgba(40, 40, 40, 0.04) 1px, transparent 1px), linear-gradient(180deg, rgba(255, 255, 255, 0.86), rgba(235, 237, 241, 0.78)); background-size: auto, 34px 34px, 34px 34px, auto; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.8), 0 30px 70px rgba(40, 40, 40, 0.13); } .login-character-stage::after { content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 40%; background: linear-gradient(180deg, transparent, rgba(255, 255, 255, 0.56)), linear-gradient(90deg, transparent 40%, rgba(40, 40, 40, 0.08) 40% 58%, transparent 58%); pointer-events: none; } .login-stage-grid { position: absolute; inset: 26px; border: 1px dashed rgba(40, 40, 40, 0.11); border-radius: 8px; } .login-characters-container { position: absolute; z-index: 1; left: 50%; bottom: 0; width: 550px; height: 400px; transform: translateX(-50%) scale(0.74); transform-origin: bottom center; } .login-character-base { position: absolute; left: 28px; right: 18px; bottom: -12px; height: 28px; border-radius: 999px; background: radial-gradient(ellipse at center, rgba(0, 0, 0, 0.48), rgba(0, 0, 0, 0) 72%); filter: blur(1px); } .login-figure { position: absolute; bottom: 0; transform-origin: bottom center; overflow: hidden; border: 1px solid rgba(255, 255, 255, 0.2); transition: transform 0.7s cubic-bezier(0.4, 0, 0.2, 1), height 0.55s cubic-bezier(0.4, 0, 0.2, 1), opacity 0.2s ease; will-change: transform; filter: drop-shadow(0 34px 32px rgba(0, 0, 0, 0.42)); } .login-figure::before { content: ""; position: absolute; inset: 0; z-index: 1; background: radial-gradient(circle at 30% 18%, rgba(255, 255, 255, 0.34), transparent 24%), linear-gradient(90deg, rgba(255, 255, 255, 0.18), transparent 26%, transparent 62%, rgba(0, 0, 0, 0.3)), linear-gradient(180deg, rgba(255, 255, 255, 0.14), transparent 34%, rgba(0, 0, 0, 0.18)); mix-blend-mode: screen; pointer-events: none; } .login-figure::after { content: ""; position: absolute; inset: 0; z-index: 1; background: linear-gradient(105deg, rgba(255, 255, 255, 0.2), transparent 30%, rgba(0, 0, 0, 0.26)), radial-gradient(ellipse at 50% 106%, rgba(0, 0, 0, 0.28), transparent 54%); box-shadow: inset 12px 0 22px rgba(255, 255, 255, 0.09), inset -18px 0 28px rgba(0, 0, 0, 0.22), inset 0 -28px 36px rgba(0, 0, 0, 0.18); pointer-events: none; } .login-figure__rim { position: absolute; inset: 8px; z-index: 1; border: 1px solid rgba(255, 255, 255, 0.16); border-radius: inherit; opacity: 0.85; pointer-events: none; } .login-figure__shine { position: absolute; z-index: 1; left: 18%; top: 18%; width: 42%; height: 11%; border-radius: 999px; background: rgba(255, 255, 255, 0.22); transform: rotate(-14deg); pointer-events: none; } .login-figure__panel { position: absolute; z-index: 1; border: 1px solid rgba(255, 255, 255, 0.13); background: rgba(255, 255, 255, 0.1); pointer-events: none; } .login-figure__signal { position: absolute; z-index: 2; display: flex; gap: 6px; pointer-events: none; } .login-figure__signal span { width: 7px; height: 7px; border-radius: 999px; background: rgba(255, 255, 255, 0.56); box-shadow: 0 0 12px rgba(255, 255, 255, 0.24); } .login-figure--purple { left: 72px; width: 176px; height: 392px; z-index: 1; background: linear-gradient(165deg, #9b7bff 0%, #6c3ff5 46%, #3e1eb8 100%); border-radius: 22px 22px 8px 8px; box-shadow: inset 18px 0 26px rgba(255, 255, 255, 0.12), inset -22px 0 32px rgba(31, 14, 114, 0.42), inset 0 -30px 38px rgba(26, 12, 88, 0.32), 0 24px 44px rgba(45, 22, 140, 0.26); } .login-figure--black { left: 240px; width: 120px; height: 310px; z-index: 2; background: linear-gradient(165deg, #34343a 0%, #202126 48%, #111217 100%); border-radius: 18px 18px 6px 6px; border-color: rgba(170, 160, 255, 0.18); box-shadow: inset 14px 0 22px rgba(255, 255, 255, 0.08), inset -18px 0 28px rgba(0, 0, 0, 0.45), inset 0 -26px 34px rgba(0, 0, 0, 0.34), 0 22px 38px rgba(0, 0, 0, 0.36); } .login-figure--orange { left: 0; width: 240px; height: 150px; z-index: 3; background: linear-gradient(160deg, #ffb27f 0%, #ff8f61 56%, #dc6f48 100%); border-radius: 120px 120px 0 0; box-shadow: inset 18px 0 24px rgba(255, 255, 255, 0.16), inset -20px 0 28px rgba(153, 66, 41, 0.32), inset 0 -22px 34px rgba(149, 55, 37, 0.24), 0 22px 36px rgba(113, 42, 30, 0.28); } .login-figure--yellow { left: 310px; width: 140px; height: 230px; z-index: 4; background: linear-gradient(160deg, #fff17a 0%, #e8d754 58%, #bfa73a 100%); border-radius: 70px 70px 0 0; box-shadow: inset 14px 0 22px rgba(255, 255, 255, 0.2), inset -18px 0 24px rgba(113, 94, 20, 0.28), inset 0 -24px 32px rgba(117, 96, 17, 0.22), 0 22px 34px rgba(84, 69, 16, 0.22); } .login-figure--purple .login-figure__panel { left: 22px; bottom: 88px; width: 36px; height: 152px; border-radius: 999px; } .login-figure--purple .login-figure__signal { left: 26px; bottom: 46px; } .login-figure--black .login-figure__panel { right: 16px; bottom: 40px; width: 12px; height: 190px; border-radius: 999px; background: rgba(255, 255, 255, 0.08); } .login-figure--black .login-figure__signal { right: 18px; top: 88px; flex-direction: column; } .login-figure--orange .login-figure__panel { left: 42px; bottom: 24px; width: 88px; height: 18px; border-radius: 999px; background: rgba(255, 255, 255, 0.16); } .login-figure--orange .login-figure__signal { right: 54px; bottom: 28px; } .login-figure--yellow .login-figure__panel { left: 24px; bottom: 44px; width: 92px; height: 24px; border-radius: 999px; background: rgba(45, 45, 45, 0.08); border-color: rgba(45, 45, 45, 0.12); } .login-figure--yellow .login-figure__shine { background: rgba(255, 255, 255, 0.3); } .login-figure--yellow .login-figure__signal { left: 34px; top: 124px; } .login-figure--yellow .login-figure__signal span, .login-figure--orange .login-figure__signal span { background: rgba(45, 45, 45, 0.36); box-shadow: none; } .login-eyes { position: absolute; z-index: 2; display: flex; transition: left 0.35s cubic-bezier(0.4, 0, 0.2, 1), top 0.35s cubic-bezier(0.4, 0, 0.2, 1); } .login-eyes--purple { left: 75px; top: 25px; gap: 32px; } .login-eyes--black { left: 26px; top: 32px; gap: 24px; } .login-eyes--orange { left: 112px; top: 60px; gap: 32px; } .login-eyes--yellow { left: 52px; top: 40px; gap: 24px; } .login-eye { position: relative; width: 22px; height: 22px; border-radius: 999px; background: white; overflow: hidden; box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25); } .login-eye--small { width: 20px; height: 20px; } .login-eye::after, .login-pupil::after { content: ""; position: absolute; left: 50%; top: 50%; width: 8px; height: 8px; border-radius: 50%; background: #2d2d2d; transform: translate(var(--eye-x), var(--eye-y)); transition: transform 0.08s linear, opacity 0.2s ease; } .login-eye::after { margin: -4px 0 0 -4px; } .login-pupil { position: relative; width: 12px; height: 12px; border-radius: 50%; } .login-pupil::after { width: 12px; height: 12px; margin: -6px 0 0 -6px; } .login-mouth { position: absolute; z-index: 2; background: #2d2d2d; transition: width 0.35s cubic-bezier(0.4, 0, 0.2, 1), height 0.35s cubic-bezier(0.4, 0, 0.2, 1), border-radius 0.35s cubic-bezier(0.4, 0, 0.2, 1), transform 0.35s cubic-bezier(0.4, 0, 0.2, 1), left 0.35s cubic-bezier(0.4, 0, 0.2, 1), top 0.35s cubic-bezier(0.4, 0, 0.2, 1); } .login-mouth--purple { left: 97px; top: 57px; width: 24px; height: 8px; border-radius: 0 0 12px 12px; } .login-mouth--orange { left: 126px; top: 92px; width: 26px; height: 13px; border-radius: 0 0 13px 13px; } .login-yellow-mouth { position: absolute; z-index: 2; left: 40px; top: 88px; } .login-yellow-mouth path { stroke: #2d2d2d; stroke-width: 3; fill: none; stroke-linecap: round; } .login-character-stage[data-mood="typing"] .login-figure--purple { height: 430px; transform: skewX(-10deg) translateX(36px); } .login-character-stage[data-mood="typing"] .login-figure--black { transform: skewX(7deg) translateX(6px); } .login-character-stage[data-mood="typing"] .login-figure--orange { transform: skewX(-5deg); } .login-character-stage[data-mood="typing"] .login-figure--yellow { transform: skewX(4deg); } .login-character-stage[data-mood="typing"] .login-mouth--purple { width: 7px; height: 32px; border-radius: 0; transform: translate(14px, -28px) skewX(10deg); } .login-character-stage[data-mood="typing"] .login-mouth--orange { width: 14px; height: 14px; border-radius: 50%; transform: translateX(6px); } .login-character-stage[data-mood="peek"] .login-figure--purple, .login-character-stage[data-mood="peek"] .login-figure--black { transform: skewX(0deg) translateY(-10px); } .login-character-stage[data-mood="peek"] .login-eyes--purple { left: 40px; top: 14px; } .login-character-stage[data-mood="peek"] .login-eyes--black { left: 2px; top: 20px; } .login-character-stage[data-mood="peek"] .login-eyes--orange { left: 68px; top: 48px; } .login-character-stage[data-mood="peek"] .login-eyes--yellow { left: 10px; top: 28px; } .login-character-stage[data-mood="peek"] .login-eye::after, .login-character-stage[data-mood="peek"] .login-pupil::after { transform: translate(-8px, -6px); } .login-character-stage[data-mood="error"] .login-characters-container { animation: login-shake 0.28s ease-in-out 2; } .login-character-stage[data-mood="error"] .login-eye { height: 10px; margin-top: 4px; } .login-character-stage[data-mood="error"] .login-mouth--purple, .login-character-stage[data-mood="error"] .login-mouth--orange { border-radius: 12px 12px 0 0; transform: translateY(10px); } .login-character-stage[data-mood="error"] .login-yellow-mouth path { d: path("M0 10 Q10 2, 20 10 Q30 18, 40 10 Q50 2, 60 10 Q70 18, 80 10"); } .login-character-stage[data-mood="success"] .login-characters-container { animation: login-stage-success 0.75s cubic-bezier(0.34, 1.56, 0.64, 1) both; } .login-character-stage[data-mood="success"] .login-mouth--purple { width: 30px; height: 16px; border-radius: 0 0 15px 15px; } .login-character-stage[data-mood="success"] .login-mouth--orange { width: 32px; height: 18px; border-radius: 0 0 16px 16px; } .login-character-stage[data-mood="success"] .login-yellow-mouth path { d: path("M0 6 Q20 18, 40 18 Q60 18, 80 6"); } @keyframes login-shake { 0%, 100% { translate: 0 0; } 33% { translate: -5px 0; } 66% { translate: 5px 0; } } @keyframes login-stage-success { 0% { translate: 0 0; } 45% { translate: 0 -22px; } 100% { translate: 0 -8px; } } @media (max-width: 720px) { .login-page { background: linear-gradient(164deg, #f7f7f4 0 48%, #111214 48% 100%); } .login-page--oasis { background: #030303; } .login-page--oasis::after { background: radial-gradient(circle at 50% 34%, rgba(214, 179, 106, 0.16), transparent 40%), linear-gradient(180deg, rgba(0, 0, 0, 0.72), rgba(0, 0, 0, 0.2) 48%, rgba(0, 0, 0, 0.82)); } .login-page--oasis .login-oasis-hero { min-height: 740px; padding: 24px 20px; } .login-page--oasis .login-auth-panel { padding: 24px 18px; } .login-source-overlay { min-height: 100vh; grid-template-columns: 1fr; align-content: center; padding: 20px; pointer-events: none; } .login-page--oasis .login-source-auth-panel { display: block; width: min(100%, 350px); justify-self: center; padding: 16px 18px 20px; } .login-source-form-pane { transform: none; } .login-top-brand { left: 18px; top: 16px; gap: 10px; } .login-top-brand__logo { width: 112px; } .login-top-brand__system { min-height: 16px; max-width: 104px; padding-left: 10px; font-size: 10px; letter-spacing: 0.06em; transform: translateY(2px); white-space: normal; } .login-source-character-strip { height: 172px; margin-bottom: 12px; } .login-source-character-strip .login-character-stage { min-height: 172px; } .login-source-character-strip .login-characters-container { transform: translateX(-50%) scale(0.43); } .login-page--oasis .login-wordmark__logo { font-size: 24px; } .login-page--oasis .login-secure-pill { min-height: 34px; padding: 0 12px; font-size: 12px; } .login-premium-title { font-size: 34px; } .login-page--oasis .login-premium-title { font-size: 42px; line-height: 1.06; } .login-premium-copy { font-size: 14px; } .login-page--oasis .login-premium-copy { max-width: 320px; color: rgba(247, 246, 236, 0.72); } .login-creative-stage { min-height: 340px; } .login-page--oasis .login-creative-stage { min-height: 450px; } .login-creative-orbit { right: -20%; bottom: 34px; width: 78%; } .login-creative-caption { bottom: 34px; width: 48%; } .login-page--oasis .login-creative-caption { display: none; } .login-creative-caption b { font-size: 22px; } .login-dynamic-dock { left: 0; bottom: 132px; width: 210px; padding: 10px; } .login-page--oasis .login-dynamic-dock { bottom: 112px; width: min(100%, 330px); padding: 14px; } .login-dynamic-dock .login-character-stage { min-height: 94px; } .login-dynamic-dock .login-characters-container { transform: translateX(-50%) scale(0.22); } .login-page--oasis .login-dynamic-dock .login-character-stage { min-height: 190px; } .login-page--oasis .login-dynamic-dock .login-characters-container { transform: translateX(-50%) scale(0.45); } .login-studio-chip { font-size: 12px; } .login-studio-chip--visual { right: 0; top: 12px; } .login-page--oasis .login-studio-chip--visual { left: auto; right: 0; top: 118px; } .login-studio-chip--review { display: none; } .login-premium-metrics { grid-template-columns: 1fr; } .login-character-stage { min-height: 270px; } .login-characters-container { transform: translateX(-50%) scale(0.58); } } @media (prefers-reduced-motion: reduce) { .login-character-stage[data-mood="error"] .login-characters-container, .login-character-stage[data-mood="success"] .login-characters-container { animation: none; } } /* ============================================================ 画布背景:渐变 + 极光 + 颗粒 ============================================================ */ .canvas-bg { position: fixed; inset: 0; z-index: 0; background: radial-gradient(ellipse 80% 60% at 20% 10%, var(--bg-aurora-1), transparent 60%), radial-gradient(ellipse 70% 50% at 80% 90%, var(--bg-aurora-2), transparent 60%), linear-gradient(180deg, var(--bg-canvas-1), var(--bg-canvas-2)); } /* ============================================================ 节点:玻璃拟物 + 头部 4 色渐变 ============================================================ */ .glass-node { position: relative; background: var(--node-bg); backdrop-filter: blur(20px) saturate(140%); -webkit-backdrop-filter: blur(20px) saturate(140%); border: 1px solid var(--node-border); border-radius: var(--radius); box-shadow: var(--node-shadow); transition: transform 0.25s cubic-bezier(0.32, 0.72, 0, 1), box-shadow 0.25s cubic-bezier(0.32, 0.72, 0, 1), border-color 0.2s, background 0.2s; color: var(--text-strong); overflow: hidden; } .glass-node:hover { background: var(--node-bg-hover); border-color: var(--node-border-hover); box-shadow: var(--node-shadow-hover); transform: translateY(-1px); } .glass-node--selected { border-color: var(--ring); box-shadow: var(--node-shadow-hover), 0 0 0 3px var(--ring); } .glass-node--running::after { content: ""; position: absolute; inset: -1px; border-radius: inherit; pointer-events: none; background: conic-gradient(from 0deg, transparent 70%, var(--edge-glow), transparent); animation: spin 3s linear infinite; mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); mask-composite: exclude; -webkit-mask: linear-gradient(#000 0 0) content-box, linear-gradient(#000 0 0); -webkit-mask-composite: xor; padding: 1.5px; opacity: 0.8; } @keyframes spin { to { transform: rotate(360deg); } } .glass-node__header { display: flex; align-items: center; gap: 0.625rem; padding: 0.75rem 1rem; border-bottom: 1px solid var(--divider); color: white; font-weight: 600; letter-spacing: 0.01em; position: relative; } .glass-node__header::before { content: ""; position: absolute; inset: 0; opacity: 0.92; } .glass-node__header > * { position: relative; z-index: 1; } .glass-node[data-type="input"] .glass-node__header::before { background: var(--grad-input); } .glass-node[data-type="process"] .glass-node__header::before { background: var(--grad-process); } .glass-node[data-type="ai"] .glass-node__header::before { background: var(--grad-ai); } .glass-node[data-type="output"] .glass-node__header::before { background: var(--grad-output); } .glass-node__body { padding: 0.85rem 1rem 1rem; } /* ============================================================ Kanban 卡片(Storyflow/参考图风格) ============================================================ */ .kanban-card { position: relative; border-radius: 14px; padding: 12px 14px; border: 1px solid rgba(255, 255, 255, 0.08); transition: transform 0.2s, box-shadow 0.2s, border-color 0.2s; } .kanban-card:hover { transform: translateY(-1px); border-color: rgba(255, 255, 255, 0.16); box-shadow: 0 8px 24px -10px rgba(0, 0, 0, 0.5); } /* dark 模式下:低明度彩色 */ .dark .kanban-violet { background: linear-gradient(160deg, rgba(167, 139, 250, 0.18), rgba(139, 92, 246, 0.08)); } .dark .kanban-pink { background: linear-gradient(160deg, rgba(244, 114, 182, 0.18), rgba(236, 72, 153, 0.08)); } .dark .kanban-orange { background: linear-gradient(160deg, rgba(251, 146, 60, 0.18), rgba(249, 115, 22, 0.08)); } .dark .kanban-blue { background: linear-gradient(160deg, rgba(96, 165, 250, 0.18), rgba(59, 130, 246, 0.08)); } .dark .kanban-green { background: linear-gradient(160deg, rgba(74, 222, 128, 0.18), rgba(34, 197, 94, 0.08)); } .dark .kanban-cyan { background: linear-gradient(160deg, rgba(34, 211, 238, 0.18), rgba(6, 182, 212, 0.08)); } .dark .kanban-rose { background: linear-gradient(160deg, rgba(251, 113, 133, 0.18), rgba(244, 63, 94, 0.08)); } .dark .kanban-amber { background: linear-gradient(160deg, rgba(252, 211, 77, 0.18), rgba(245, 158, 11, 0.08)); } /* light 模式:pastel 暖底 */ :root:not(.dark) .kanban-violet { background: #ede9fe; border-color: rgba(139, 92, 246, 0.18); } :root:not(.dark) .kanban-pink { background: #fce7f3; border-color: rgba(236, 72, 153, 0.18); } :root:not(.dark) .kanban-orange { background: #ffedd5; border-color: rgba(249, 115, 22, 0.18); } :root:not(.dark) .kanban-blue { background: #dbeafe; border-color: rgba(59, 130, 246, 0.18); } :root:not(.dark) .kanban-green { background: #dcfce7; border-color: rgba(34, 197, 94, 0.18); } :root:not(.dark) .kanban-cyan { background: #cffafe; border-color: rgba(6, 182, 212, 0.18); } :root:not(.dark) .kanban-rose { background: #ffe4e6; border-color: rgba(244, 63, 94, 0.18); } :root:not(.dark) .kanban-amber { background: #fef3c7; border-color: rgba(245, 158, 11, 0.18); } .kanban-tag { display: inline-flex; align-items: center; gap: 4px; padding: 2px 8px; border-radius: 999px; font-size: 10.5px; font-weight: 500; background: rgba(255, 255, 255, 0.08); border: 1px solid rgba(255, 255, 255, 0.1); color: var(--text-soft); } :root:not(.dark) .kanban-tag { background: rgba(255, 255, 255, 0.7); border-color: rgba(0, 0, 0, 0.06); color: var(--text-soft); } .kanban-meta { display: flex; align-items: center; gap: 8px; margin-top: 10px; padding-top: 8px; border-top: 1px solid rgba(255, 255, 255, 0.06); font-size: 10.5px; color: var(--text-faint); } :root:not(.dark) .kanban-meta { border-top-color: rgba(0, 0, 0, 0.06); } .glass-node__row { display: flex; align-items: center; gap: 0.5rem; font-size: 12px; color: var(--text-soft); } .glass-node__kbd { font-family: var(--font-mono); font-size: 10.5px; color: var(--text-faint); } /* 状态点 */ .status-dot { width: 8px; height: 8px; border-radius: 50%; background: var(--status-pending); box-shadow: 0 0 0 0 currentColor; } .status-dot--running { background: var(--status-running); animation: pulse-dot 1.4s ease-in-out infinite; } .status-dot--done { background: var(--status-done); } .status-dot--failed { background: var(--status-failed); } @keyframes pulse-dot { 0%,100% { box-shadow: 0 0 0 0 var(--status-running); opacity: 1; } 50% { box-shadow: 0 0 0 6px transparent; opacity: 0.7; } } @keyframes drawer-in { from { transform: translateX(-24px); opacity: 0; } to { transform: translateX(0); opacity: 1; } } /* 覆盖 ReactFlow 内置 reserved type(input/output/default/group)的默认白底 提高 specificity:用 .react-flow 前缀确保盖过内置 CSS 变量 */ .react-flow .react-flow__node-input, .react-flow .react-flow__node-output, .react-flow .react-flow__node-default, .react-flow .react-flow__node-group { background: transparent !important; border: none !important; padding: 0 !important; border-radius: 0 !important; font-size: inherit !important; color: inherit !important; text-align: left !important; box-shadow: none !important; } /* 节点 handle(ReactFlow) */ .react-flow__handle { width: 12px !important; height: 12px !important; background: var(--node-bg) !important; border: 2px solid var(--edge-stroke) !important; box-shadow: 0 0 0 3px var(--node-ring) !important; } .react-flow__handle:hover { background: var(--edge-glow) !important; transform: scale(1.2); } .react-flow__edge .react-flow__edge-path { stroke: var(--edge-stroke); stroke-width: 1.6; } .react-flow__edge.animated .react-flow__edge-path { stroke: var(--edge-glow); stroke-width: 2; filter: drop-shadow(0 0 6px var(--edge-glow)); } .react-flow__controls, .react-flow__panel { background: var(--node-bg) !important; border: 1px solid var(--node-border) !important; border-radius: 12px !important; backdrop-filter: blur(16px); box-shadow: var(--node-shadow) !important; } .react-flow__controls button { background: transparent !important; border-bottom: 1px solid var(--divider) !important; color: var(--text-strong) !important; } .react-flow__controls button:hover { background: var(--node-bg-hover) !important; } .react-flow__minimap { background: var(--node-bg) !important; border-radius: 12px !important; border: 1px solid var(--node-border) !important; box-shadow: var(--node-shadow) !important; } .react-flow__background pattern circle { fill: var(--bg-grid) !important; } .react-flow__attribution { display: none !important; } ::-webkit-scrollbar { width: 8px; height: 8px; } ::-webkit-scrollbar-thumb { background: var(--divider); border-radius: 4px; } ::-webkit-scrollbar-track { background: transparent; } /* 节点内缩略图浮条(横滚)专用:加粗 + 紫色高亮 + 大可拖区,避免在画布 zoom 下拖不到 */ .react-flow__node .overflow-x-auto { scrollbar-color: rgba(167, 139, 250, 0.65) rgba(255, 255, 255, 0.08); scrollbar-width: auto; } .react-flow__node .overflow-x-auto::-webkit-scrollbar { height: 14px; } .react-flow__node .overflow-x-auto::-webkit-scrollbar-track { background: rgba(255, 255, 255, 0.06); border-radius: 8px; margin: 0 4px; border: 1px solid rgba(255, 255, 255, 0.08); } .react-flow__node .overflow-x-auto::-webkit-scrollbar-thumb { background: rgba(167, 139, 250, 0.55); border-radius: 8px; border: 2px solid rgba(255, 255, 255, 0.18); min-width: 48px; background-clip: padding-box; } .react-flow__node .overflow-x-auto::-webkit-scrollbar-thumb:hover { background: rgba(167, 139, 250, 0.85); border-color: rgba(255, 255, 255, 0.3); } .react-flow__node .overflow-x-auto::-webkit-scrollbar-thumb:active { background: rgba(217, 70, 239, 0.95); } .react-flow__node .thumbnail-strip { scrollbar-width: none; overscroll-behavior-x: contain; } .react-flow__node .thumbnail-strip::-webkit-scrollbar { width: 0; height: 0; display: none; } .react-flow__node .thumbnail-scroll-rail { touch-action: none; } .react-flow__node .thumbnail-scroll-rail:hover > div, .react-flow__node .thumbnail-scroll-rail:focus-visible > div { background: rgb(216, 180, 254); }