/* m.AI Character Platform — design tokens (compiled from the m.AI design system's tokens.json).
   Dark is the default; [data-theme="light"] on any element switches that subtree. The stage and
   the logo plates pin their own theme. Fonts are self-hosted: latin, latin-ext and vietnamese
   subsets; Traditional Chinese falls back to the system faces listed in --font-sans. */
:root, [data-theme="dark"] { --bg-primary: #0a0f1a; --bg-secondary: #111827; --bg-tertiary: #1e293b; --text-primary: #f8fafc; --text-secondary: #cbd5e1; --text-muted: #94a3b8; --text-on-brand: #0a0f1a; --brand-primary: #38bdf8; --brand-primary-hover: #7dd3fc; --brand-accent: #fb923c; --brand-accent-text: #fdba74; --accent-mark: #fb923c; --accent-fill: #fb923c; --text-on-accent: #1a0f04; --brand-navy: #1e40af; --color-destructive: #f87171; --color-success: #4ade80; --color-warning: #fbbf24; --border-color: #334155; --border-strong: #475569; --border-subtle: #1e293b; --border-control: #64748b; --glass-bg: #0f172ac7; --logo-plate: #ffffff; --stage-bg: #070b14; --stage-glow: #38bdf829; --stage-glow-accent: #fb923c1a; --stage-glass: #0a0f1acc; --scrim: #05080fcc; --shadow-sm: 0 1px 2px #0006; --shadow-lg: 0 12px 28px #0009; --shadow-xl: 0 24px 48px #000000b3; --glow: 0 0 0 1px #38bdf859, 0 0 24px #38bdf82e; --glow-accent: 0 0 0 1px #fb923c99, 0 0 34px #fb923c59; }
[data-theme="light"] { --bg-primary: #f8fafc; --bg-secondary: #ffffff; --bg-tertiary: #f1f5f9; --text-primary: #0f172a; --text-secondary: #334155; --text-muted: #475569; --text-on-brand: #ffffff; --brand-primary: #0369a1; --brand-primary-hover: #075985; --brand-accent: #f97316; --brand-accent-text: #c2410c; --accent-mark: #ea580c; --accent-fill: #c2410c; --text-on-accent: #ffffff; --color-destructive: #dc2626; --color-success: #15803d; --color-warning: #b45309; --border-color: #cbd5e1; --border-strong: #94a3b8; --border-subtle: #e2e8f0; --border-control: #64748b; --glass-bg: #ffffffd1; --scrim: #0f172a73; --shadow-sm: 0 1px 2px #0f172a0f; --shadow-lg: 0 12px 28px #0f172a1f; --shadow-xl: 0 24px 48px #0f172a29; --glow: 0 0 0 1px #0369a140, 0 8px 28px #0369a12e; --glow-accent: 0 0 0 1px #f9731673, 0 10px 34px #f9731640; }
:root { --space-xs: 0.25rem; --space-sm: 0.5rem; --space-md: 1rem; --space-lg: 1.5rem; --space-xl: 2rem; --space-2xl: 3rem; --space-3xl: 4rem; --radius-xs: 4px; --radius-sm: 8px; --radius-md: 12px; --radius-lg: 20px; --radius-full: 9999px; --ease: cubic-bezier(.4, 0, .2, 1); --dur-fast: 0.15s; --dur: 0.22s; --dur-slow: 0.32s; --header-h: 68px; --rail-w: 440px; --ptt-h: 72px; --control-h: 48px; --admin-nav-w: 248px; --container-admin: 1280px; --font-sans: "Plus Jakarta Sans", system-ui, -apple-system, "Segoe UI", "PingFang TC", "Noto Sans TC", "Microsoft JhengHei", sans-serif; --font-mono: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace; }
@font-face { font-family: "Plus Jakarta Sans"; src: url("fonts/plus-jakarta-sans-vietnamese-wght-normal.woff2") format("woff2"); font-weight: 200 800; font-style: normal; font-display: swap; unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-vietnamese-500-normal.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-vietnamese-600-normal.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; unicode-range: U+0102-0103,U+0110-0111,U+0128-0129,U+0168-0169,U+01A0-01A1,U+01AF-01B0,U+0300-0301,U+0303-0304,U+0308-0309,U+0323,U+0329,U+1EA0-1EF9,U+20AB; }
@font-face { font-family: "Plus Jakarta Sans"; src: url("fonts/plus-jakarta-sans-latin-ext-wght-normal.woff2") format("woff2"); font-weight: 200 800; font-style: normal; font-display: swap; unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-latin-ext-500-normal.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-latin-ext-600-normal.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; unicode-range: U+0100-02BA,U+02BD-02C5,U+02C7-02CC,U+02CE-02D7,U+02DD-02FF,U+0304,U+0308,U+0329,U+1D00-1DBF,U+1E00-1E9F,U+1EF2-1EFF,U+2020,U+20A0-20AB,U+20AD-20C0,U+2113,U+2C60-2C7F,U+A720-A7FF; }
@font-face { font-family: "Plus Jakarta Sans"; src: url("fonts/plus-jakarta-sans-latin-wght-normal.woff2") format("woff2"); font-weight: 200 800; font-style: normal; font-display: swap; unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-latin-500-normal.woff2") format("woff2"); font-weight: 500; font-style: normal; font-display: swap; unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
@font-face { font-family: "IBM Plex Mono"; src: url("fonts/ibm-plex-mono-latin-600-normal.woff2") format("woff2"); font-weight: 600; font-style: normal; font-display: swap; unicode-range: U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD; }
