@import "tailwindcss"; @import "tw-animate-css"; @source "../node_modules/streamdown/dist"; @source "../node_modules/@streamdown/*/dist"; @custom-variant dark (&:where(.dark, .dark *)); @theme inline { --color-background: hsl(var(--background)); --color-foreground: hsl(var(--foreground)); --color-card: hsl(var(--card)); --color-card-foreground: hsl(var(--card-foreground)); --color-popover: hsl(var(--popover)); --color-popover-foreground: hsl(var(--popover-foreground)); --color-primary: hsl(var(--primary)); --color-primary-foreground: hsl(var(--primary-foreground)); --color-secondary: hsl(var(--secondary)); --color-secondary-foreground: hsl(var(--secondary-foreground)); --color-muted: hsl(var(--muted)); --color-muted-foreground: hsl(var(--muted-foreground)); --color-accent: hsl(var(--accent)); --color-accent-foreground: hsl(var(--accent-foreground)); --color-destructive: hsl(var(--destructive)); --color-destructive-foreground: hsl(var(--destructive-foreground)); --color-border: hsl(var(--border)); --color-input: hsl(var(--input)); --color-ring: hsl(var(--ring)); --radius-lg: var(--radius); --radius-md: calc(var(--radius) - 2px); --radius-sm: calc(var(--radius) - 4px); --shadow-glass: 0 18px 50px rgba(10, 18, 32, 0.18); } @theme { --animate-accordion-down: accordion-down 0.2s ease-out; --animate-accordion-up: accordion-up 0.2s ease-out; @keyframes accordion-down { from { height: 0; } to { height: var(--radix-accordion-content-height); } } @keyframes accordion-up { from { height: var(--radix-accordion-content-height); } to { height: 0; } } } :root { color-scheme: light; background: oklch(94.5% 0.012 250); --canvas-map: oklch(94.5% 0.012 250); --canvas-map-grid: rgba(37, 99, 235, 0.06); --acrylic-navigation: rgba(242, 248, 252, 0.74); --acrylic-panel: rgba(232, 241, 249, 0.58); --acrylic-control: rgba(249, 251, 255, 0.84); --acrylic-panel-blur: 22px; --acrylic-control-blur: 18px; --acrylic-backdrop-saturation: 1.2; --acrylic-exclusion: rgba(255, 255, 255, 0.05); --acrylic-luminosity: rgba(255, 255, 255, 0.22); --acrylic-noise: url("data:image/svg+xml,%3Csvg viewBox='0 0 180 180' xmlns='http://www.w3.org/2000/svg'%3E%3Cfilter id='noise'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23noise)' opacity='.06'/%3E%3C/svg%3E"); --acrylic-border: rgba(255, 255, 255, 0.58); --acrylic-outline: rgba(71, 85, 105, 0.18); --acrylic-highlight: rgba(255, 255, 255, 0.82); --acrylic-shadow: 0 14px 36px rgba(15, 23, 42, 0.14); --surface-dock: oklch(97% 0.006 250); --surface-control: rgba(252, 253, 255, 0.96); --surface-well: rgba(232, 240, 248, 0.2); --surface-reading: rgba(255, 255, 255, 0.985); --glass-transient: rgba(248, 252, 255, 0.88); --surface-border: oklch(86.5% 0.012 250); --surface-divider: oklch(90.5% 0.009 250); --surface-shadow: 0 12px 32px rgba(15, 23, 42, 0.12); --dock-shadow: 8px 0 24px rgba(15, 23, 42, 0.07); --radius-icon: 8px; --radius-control: 12px; --radius-panel: 16px; --radius-pill: 9999px; --action-blue: #2563eb; --action-blue-hover: #1d4ed8; --action-blue-soft: #dbeafe; --ink: #0f172a; --ink-secondary: #334155; --ink-muted: #64748b; --border-soft: var(--surface-divider); --border-strong: var(--surface-border); --tone-info: oklch(95% 0.035 250); --tone-normal: oklch(95% 0.04 175); --tone-warning: oklch(95% 0.05 70); --tone-danger: oklch(95% 0.045 25); --tone-agent: oklch(95% 0.035 290); --scrim-soft: rgba(15, 23, 42, 0.2); --scrim-focus: rgba(15, 23, 42, 0.48); --background: 210 40% 98%; --foreground: 222 47% 11%; --card: 0 0% 100%; --card-foreground: 222 47% 11%; --popover: 0 0% 100%; --popover-foreground: 222 47% 11%; --primary: 221 83% 53%; --primary-foreground: 210 40% 98%; --secondary: 214 32% 91%; --secondary-foreground: 222 47% 11%; --muted: 210 40% 96%; --muted-foreground: 215 16% 47%; --accent: 210 40% 96%; --accent-foreground: 222 47% 11%; --destructive: 0 84% 60%; --destructive-foreground: 210 40% 98%; --border: 214 32% 91%; --input: 214 32% 91%; --ring: 221 83% 53%; --radius: 0.5rem; } [data-basemap-tone="light"] { --acrylic-navigation: rgba(242, 248, 252, 0.68); --acrylic-panel: rgba(232, 241, 249, 0.7); --acrylic-control: rgba(249, 251, 255, 0.78); --acrylic-panel-blur: 24px; --acrylic-control-blur: 20px; --acrylic-backdrop-saturation: 1.22; --acrylic-exclusion: rgba(255, 255, 255, 0.04); --acrylic-luminosity: rgba(255, 255, 255, 0.18); --surface-control: rgba(252, 253, 255, 0.95); --surface-well: rgba(232, 240, 248, 0.34); --surface-reading: rgba(255, 255, 255, 0.97); --glass-transient: rgba(238, 247, 253, 0.56); } [data-basemap-tone="satellite"] { --acrylic-navigation: rgba(242, 248, 252, 0.82); --acrylic-panel: rgba(232, 241, 249, 0.7); --acrylic-control: rgba(250, 252, 255, 0.9); --acrylic-panel-blur: 20px; --acrylic-control-blur: 16px; --acrylic-backdrop-saturation: 1.1; --acrylic-exclusion: rgba(255, 255, 255, 0.06); --acrylic-luminosity: rgba(255, 255, 255, 0.24); --surface-control: rgba(252, 253, 255, 0.98); --surface-well: rgba(232, 240, 248, 0.28); --surface-reading: rgba(255, 255, 255, 0.99); --glass-transient: rgba(238, 247, 253, 0.72); --acrylic-outline: rgba(71, 85, 105, 0.24); --acrylic-shadow: 0 14px 38px rgba(15, 23, 42, 0.2); } * { box-sizing: border-box; } html, body { height: 100%; margin: 0; } body { font-family: -apple-system, BlinkMacSystemFont, "SF Pro Text", "Segoe UI", "PingFang SC", "Noto Sans SC", "Microsoft YaHei", sans-serif; color: var(--ink); -webkit-font-smoothing: antialiased; -moz-osx-font-smoothing: grayscale; } button:focus-visible, input:focus-visible { outline: 2px solid #0f172a; outline-offset: 2px; } .map-grid { background: linear-gradient(rgba(255, 255, 255, 0.42), rgba(255, 255, 255, 0.08)), linear-gradient(90deg, var(--canvas-map-grid) 1px, transparent 1px), linear-gradient(var(--canvas-map-grid) 1px, transparent 1px), var(--canvas-map); background-size: auto, 68px 68px, 68px 68px, auto; } .acrylic-navigation, .acrylic-panel, .acrylic-control, .glass-transient, .material-tone-info, .material-tone-normal, .material-tone-warning, .material-tone-danger, .material-tone-agent { border-color: var(--surface-border); background-clip: padding-box; } .acrylic-navigation, .acrylic-panel, .acrylic-control, .glass-transient { border-color: var(--acrylic-border); background-image: linear-gradient(var(--acrylic-exclusion), var(--acrylic-exclusion)), linear-gradient(var(--acrylic-luminosity), var(--acrylic-luminosity)), var(--acrylic-noise); background-blend-mode: exclusion, luminosity, soft-light; box-shadow: inset 0 1px 0 var(--acrylic-highlight), 0 0 0 1px var(--acrylic-outline), var(--acrylic-shadow); } .acrylic-navigation { background-color: var(--acrylic-navigation); box-shadow: 0 1px 0 var(--acrylic-outline), 0 8px 24px rgba(15, 23, 42, 0.08); backdrop-filter: blur(var(--acrylic-panel-blur)) saturate(var(--acrylic-backdrop-saturation)); -webkit-backdrop-filter: blur(var(--acrylic-panel-blur)) saturate(var(--acrylic-backdrop-saturation)); } .acrylic-panel { background-color: var(--acrylic-panel); backdrop-filter: blur(var(--acrylic-panel-blur)) saturate(var(--acrylic-backdrop-saturation)); -webkit-backdrop-filter: blur(var(--acrylic-panel-blur)) saturate(var(--acrylic-backdrop-saturation)); } .acrylic-control { background-color: var(--acrylic-control); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.86), 0 0 0 1px rgba(59, 130, 246, 0.14), 0 14px 34px rgba(15, 23, 42, 0.13); backdrop-filter: blur(var(--acrylic-control-blur)) saturate(var(--acrylic-backdrop-saturation)); -webkit-backdrop-filter: blur(var(--acrylic-control-blur)) saturate(var(--acrylic-backdrop-saturation)); } @layer components { .surface-dock, .surface-control, .surface-well, .surface-reading { border-color: var(--surface-border); background-clip: padding-box; } .surface-dock { background-color: var(--surface-dock); } .surface-control { background-color: var(--surface-control); } .surface-well { background-color: var(--surface-well); } .surface-reading { background-color: var(--surface-reading); } } .glass-transient { background-color: var(--glass-transient); box-shadow: inset 0 1px 0 var(--acrylic-highlight), 0 0 0 1px var(--acrylic-outline), 0 10px 28px rgba(15, 23, 42, 0.14); backdrop-filter: blur(var(--acrylic-control-blur)) saturate(var(--acrylic-backdrop-saturation)); -webkit-backdrop-filter: blur(var(--acrylic-control-blur)) saturate(var(--acrylic-backdrop-saturation)); } .material-tone-info { background-color: var(--tone-info); box-shadow: inset 0 1px 0 rgba(147, 197, 253, 0.42); } .material-tone-normal { background-color: var(--tone-normal); box-shadow: inset 0 1px 0 rgba(94, 234, 212, 0.4); } .material-tone-warning { background-color: var(--tone-warning); box-shadow: inset 0 1px 0 rgba(253, 186, 116, 0.46); } .material-tone-danger { background-color: var(--tone-danger); box-shadow: inset 0 1px 0 rgba(252, 165, 165, 0.48); } .material-tone-agent { background-color: var(--tone-agent); box-shadow: inset 0 1px 0 rgba(196, 181, 253, 0.42); } @supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) { .acrylic-navigation, .acrylic-panel, .acrylic-control, .glass-transient { background-color: rgba(250, 252, 255, 0.98); background-image: none; backdrop-filter: none; -webkit-backdrop-filter: none; } } @media (prefers-reduced-transparency: reduce) { .acrylic-navigation, .acrylic-panel, .acrylic-control, .glass-transient { background-color: rgba(250, 252, 255, 0.98); background-image: none; backdrop-filter: none; -webkit-backdrop-filter: none; } .surface-well, .surface-control, .surface-reading { background-color: rgba(255, 255, 255, 0.98); background-image: none; } .material-tone-info { background-color: #eff6ff; } .material-tone-normal { background-color: #f0fdfa; } .material-tone-warning { background-color: #fff7ed; } .material-tone-danger { background-color: #fef2f2; } .material-tone-agent { background-color: #f5f3ff; } } @media (forced-colors: active) { .acrylic-navigation, .acrylic-panel, .acrylic-control, .glass-transient, .surface-dock, .surface-control, .surface-well, .surface-reading, .material-tone-info, .material-tone-normal, .material-tone-warning, .material-tone-danger, .material-tone-agent { forced-color-adjust: none; border-color: CanvasText; background-color: Canvas; background-image: none; box-shadow: none; color: CanvasText; backdrop-filter: none; -webkit-backdrop-filter: none; } } .agent-panel-shell { border-color: var(--acrylic-border); } .agent-panel-header { position: relative; z-index: 1; border-top-left-radius: inherit; border-top-right-radius: inherit; box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.86), 0 10px 24px rgba(15, 23, 42, 0.07); } .agent-panel-band { background: var(--surface-control); } .agent-panel-conversation { background: rgba(232, 240, 248, 0.12); } .agent-panel-message { border: 1px solid var(--surface-divider); background: var(--surface-reading); } .agent-streaming-response { display: block; --sd-animation: agent-stream-token-in; --sd-duration: 260ms; --sd-easing: cubic-bezier(0.16, 1, 0.3, 1); } [data-streamdown="table-fullscreen"] [data-sd-animate] { animation: none; filter: none; opacity: 1; transform: none; } .agent-chart-line { animation: agent-chart-line-in 220ms cubic-bezier(0.22, 1, 0.36, 1) both; transform-origin: center; will-change: opacity, transform; } .agent-chart-point, .agent-chart-bar { animation: agent-chart-mark-in 180ms cubic-bezier(0.22, 1, 0.36, 1) both; transform-box: fill-box; transform-origin: center bottom; will-change: opacity, transform; } .agent-panel-nested { border: 1px solid var(--surface-divider); background: var(--surface-control); } .agent-panel-control { border: 1px solid rgba(100, 116, 139, 0.16); background: var(--surface-reading); } .agent-ready-orbit, .agent-ready-core { transform-box: fill-box; transform-origin: center; } .agent-ready-orbit { animation: agent-ready-orbit 9s linear infinite; } .agent-ready-core { animation: agent-ready-core 2.8s ease-in-out infinite; } .agent-panel-icon-button { border: 1px solid var(--surface-divider); background: var(--surface-control); box-shadow: none; } .agent-panel-icon-button:hover { border-color: rgba(37, 99, 235, 0.26); background: rgba(239, 246, 255, 0.94); color: #1d4ed8; } .agent-panel-primary-icon, .agent-panel-primary-action { border: 1px solid rgba(37, 99, 235, 0.24); background: #2563eb; color: #ffffff; box-shadow: none; } .agent-panel-primary-icon:hover, .agent-panel-primary-action:hover { border-color: rgba(29, 78, 216, 0.34); background: #1d4ed8; color: #ffffff; } .agent-panel-primary-icon:disabled, .agent-panel-primary-action:disabled { background: #93c5fd; color: rgba(255, 255, 255, 0.86); } .scheduled-feed-scroll, .scheduled-feed-detail-scroll, .agent-conversation-scroll { scrollbar-width: thin; scrollbar-color: rgba(100, 116, 139, 0.26) transparent; scrollbar-gutter: stable; overscroll-behavior: contain; } .scheduled-feed-scroll::-webkit-scrollbar, .scheduled-feed-detail-scroll::-webkit-scrollbar, .agent-conversation-scroll::-webkit-scrollbar { width: 6px; height: 6px; } .scheduled-feed-scroll::-webkit-scrollbar-track, .scheduled-feed-detail-scroll::-webkit-scrollbar-track, .agent-conversation-scroll::-webkit-scrollbar-track { background: transparent; border-radius: 9999px; } .scheduled-feed-scroll::-webkit-scrollbar-thumb, .scheduled-feed-detail-scroll::-webkit-scrollbar-thumb, .agent-conversation-scroll::-webkit-scrollbar-thumb { background: rgba(100, 116, 139, 0.24); border-radius: 9999px; } .scheduled-feed-scroll:hover::-webkit-scrollbar-thumb, .scheduled-feed-detail-scroll:hover::-webkit-scrollbar-thumb, .agent-conversation-scroll:hover::-webkit-scrollbar-thumb { background: rgba(100, 116, 139, 0.36); } .scheduled-feed-panel-shell { transition: width 180ms cubic-bezier(0.22, 1, 0.36, 1), max-height 180ms cubic-bezier(0.22, 1, 0.36, 1), opacity 150ms ease-out; } .scheduled-feed-detail-enter { animation: scheduled-feed-detail-show 140ms ease-out 180ms both; will-change: opacity; } .scheduled-feed-layout { grid-template-columns: 0 minmax(0, 1fr); column-gap: 0; transition: grid-template-columns 180ms cubic-bezier(0.22, 1, 0.36, 1), column-gap 180ms cubic-bezier(0.22, 1, 0.36, 1); will-change: grid-template-columns; } .scheduled-feed-layout-expanded { grid-template-columns: minmax(0, 1fr) 432px; column-gap: 0.75rem; } .scheduled-feed-layout-collapsed { grid-template-columns: 0 minmax(0, 1fr); column-gap: 0; } .scheduled-feed-shell-enter { animation: scheduled-feed-shell-show 170ms cubic-bezier(0.22, 1, 0.36, 1), agent-panel-fade 140ms ease-out; transform-origin: top right; } .scheduled-feed-shell-exit { animation: scheduled-feed-shell-hide 170ms cubic-bezier(0.5, 0, 0.2, 1) forwards, agent-panel-dim 140ms ease-in forwards; pointer-events: none; transform-origin: top right; } .agent-panel-confirmation { border: 1px solid rgba(253, 186, 116, 0.46); background: rgba(255, 247, 237, 0.82); } .agent-panel-enter { animation: agent-panel-reveal 170ms cubic-bezier(0.22, 1, 0.36, 1), agent-panel-fade 150ms ease-out; transform-origin: left top; } .agent-panel-collapse { animation: agent-panel-dismiss 170ms cubic-bezier(0.5, 0, 0.2, 1) forwards, agent-panel-dim 150ms ease-in forwards; pointer-events: none; transform-origin: left top; } .agent-rail-enter { animation: agent-rail-shell 170ms cubic-bezier(0.22, 1, 0.36, 1), agent-panel-fade 130ms ease-out; transform-origin: left top; } .agent-rail-item { animation: agent-rail-item 180ms cubic-bezier(0.22, 1, 0.36, 1) both; } .agent-rail-item:nth-child(2) { animation-delay: 24ms; } .agent-rail-item:nth-child(3) { animation-delay: 42ms; } .agent-rail-item:nth-child(4) { animation-delay: 58ms; } @keyframes agent-panel-reveal { from { transform: translateX(-8px) scale(0.985); } to { transform: translateX(0) scale(1); } } @keyframes agent-panel-fade { from { opacity: 0; } to { opacity: 1; } } @keyframes agent-panel-dim { from { opacity: 1; } to { opacity: 0; } } @keyframes agent-panel-dismiss { from { transform: translateX(0) scale(1); } to { transform: translateX(-8px) scale(0.985); } } @keyframes agent-rail-shell { from { transform: translateX(-5px) scale(0.94); } to { transform: translateX(0) scale(1); } } @keyframes agent-rail-item { from { opacity: 0; transform: translateY(-3px) scale(0.92); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes agent-stream-token-in { from { opacity: 0; filter: blur(0.75px); transform: translateY(2px); } 60% { opacity: 0.88; filter: blur(0); } to { opacity: 1; filter: blur(0); transform: translateY(0); } } @keyframes agent-chart-line-in { from { opacity: 0; transform: translateY(3px); } to { opacity: 1; transform: translateY(0); } } @keyframes agent-chart-mark-in { from { opacity: 0; transform: translateY(4px) scaleY(0.75); } to { opacity: 1; transform: translateY(0) scaleY(1); } } @keyframes scheduled-feed-detail-show { from { opacity: 0; } to { opacity: 1; } } @keyframes scheduled-feed-shell-show { from { transform: translateX(10px) translateY(-4px) scale(0.985); } to { transform: translateX(0) translateY(0) scale(1); } } @keyframes scheduled-feed-shell-hide { from { transform: translateX(0) translateY(0) scale(1); } to { transform: translateX(10px) translateY(-4px) scale(0.985); } } @keyframes agent-ready-orbit { to { transform: rotate(360deg); } } @keyframes agent-ready-core { 0%, 100% { opacity: 0.72; transform: scale(0.94); } 50% { opacity: 1; transform: scale(1.04); } } @media (prefers-reduced-motion: reduce) { .agent-panel-enter, .agent-panel-collapse, .agent-rail-enter, .agent-rail-item, .scheduled-feed-shell-enter, .scheduled-feed-shell-exit, .scheduled-feed-detail-enter { animation: none; clip-path: none; transform: none; } .scheduled-feed-panel-shell { transition: none; } .scheduled-feed-layout { transition: none; } .agent-streaming-response [data-sd-animate] { animation: none; filter: none; opacity: 1; transform: none; } .agent-chart-line, .agent-chart-point, .agent-chart-bar { animation: none; opacity: 1; transform: none; } .agent-ready-orbit, .agent-ready-core { animation: none; opacity: 1; transform: none; } } .maplibregl-ctrl-group { border: 1px solid var(--surface-border) !important; border-radius: var(--radius-control) !important; box-shadow: var(--surface-shadow) !important; overflow: hidden; } .maplibregl-ctrl button { width: 34px !important; height: 34px !important; } .maplibregl-ctrl-attrib { border-radius: 8px 0 0 0 !important; color: #475569 !important; }