
/* generated by src/tools/palette.py - do not edit by hand */
:root {
  --cyan-50: #EBFAFF; --cyan-100: #B8E9FD; --cyan-200: #90D6F4; --cyan-300: #6BC4EB; --cyan-400: #43B2E3; --cyan-500: #03A3DE; --cyan-600: #0085BD; --cyan-700: #00689C; --cyan-800: #004D7B; --cyan-900: #00335A; --cyan-950: #001C3A;
  --crimson-50: #FFF4F4; --crimson-100: #FFC9CD; --crimson-200: #F5A3A8; --crimson-300: #E58286; --crimson-400: #D36266; --crimson-500: #C34247; --crimson-600: #B51E2A; --crimson-700: #98071C; --crimson-800: #790012; --crimson-900: #5A000A; --crimson-950: #3C0004;
  --gold-50: #FCF7E4; --gold-100: #F5E3A3; --gold-200: #EDCF6B; --gold-300: #E8BE23; --gold-400: #D2A000; --gold-500: #B98300; --gold-600: #9E6900; --gold-700: #835000; --gold-800: #683900; --gold-900: #4C2400; --gold-950: #311100;
  --emerald-50: #E7FEEA; --emerald-100: #B3F5BC; --emerald-200: #88E995; --emerald-300: #5CDC6F; --emerald-400: #22D147; --emerald-500: #00B14B; --emerald-600: #009149; --emerald-700: #007341; --emerald-800: #005635; --emerald-900: #003B26; --emerald-950: #002316;
  --night-50: #F5F6FE; --night-100: #EBECF8; --night-200: #D6D7EA; --night-300: #B9BBD6; --night-400: #999BBD; --night-500: #7A7CA5; --night-600: #5C5E8D; --night-700: #414174; --night-800: #2A275E; --night-900: #1A1446; --night-950: #0E0731; --night-975: #060320;
  --ink: #010101; --sticker: #FDFDFA;
}

/* ==========================================================================
   RoGenie design tokens — "Ink & Lamplight"
   Seeds -> semantic tokens. Every page (and every app theme) sets only the
   eight --seed-* values plus data-scheme; everything else derives from them.
   ========================================================================== */
:root {
  /* ---- theme seeds: the brand "RoGenie Night", sampled from the mascot artwork ----
     These are the pre-JS values for the public pages. They are deliberately the brand
     palette (body #00A0DC, turban #B41E28, trim #F0BE1E, gem #20D040) rather than the app's
     saved theme: a visitor landing on / has no saved preference, and the marketing pages
     must be on-brand. The app applies its own saved theme on boot. */
  --seed-accent: #03A3DE;       /* genie cyan */
  --seed-accent-deep: #00689C;
  --seed-danger: #B51E2A;       /* turban crimson */
  --seed-gold: #E8BE23;         /* wish gold */
  --seed-gold-deep: #B98300;
  --seed-bg-deep: #0E0731;      /* night */
  --seed-bg-royal: #241A6E;     /* royal */
  --seed-bg-panel: #151041;
  --seed-success: #22D147;      /* turban gem (constant across themes) */
  --on-gold: #010101;           /* set per theme by JS (ink or white, whichever passes contrast) */
  --on-danger: #FDFDFA;
  --on-accent: #010101;

  /* ---- scheme helpers ---- */
  --mix-up: #FFFFFF;            /* lighten surfaces toward this */
  --fg: #FDFDFA;
  --ink: #010101;
  --sticker: #FDFDFA;

  /* ---- surfaces ---- */
  --bg: var(--seed-bg-deep);
  --bg-abyss: color-mix(in oklch, var(--seed-bg-deep) 62%, #000);
  --bg-royal: var(--seed-bg-royal);
  --panel: var(--seed-bg-panel);
  --panel-2: color-mix(in oklch, var(--seed-bg-panel), var(--mix-up) 5%);
  --panel-3: color-mix(in oklch, var(--seed-bg-panel), var(--mix-up) 10%);
  --glass: color-mix(in oklch, var(--seed-bg-panel) 76%, transparent);
  --glass-2: color-mix(in oklch, color-mix(in oklch, var(--seed-bg-panel), var(--mix-up) 6%) 82%, transparent);
  --scrim: color-mix(in oklch, var(--seed-bg-deep) 70%, transparent);
  --line: color-mix(in oklch, var(--fg) 13%, transparent);
  --line-2: color-mix(in oklch, var(--fg) 22%, transparent);
  --line-accent: color-mix(in oklch, var(--seed-accent) 45%, transparent);

  /* ---- text ---- */
  --text: var(--fg);
  --text-2: color-mix(in oklch, var(--fg) 84%, var(--seed-bg-panel));
  --text-3: color-mix(in oklch, var(--fg) 66%, var(--seed-bg-panel));
  --text-4: color-mix(in oklch, var(--fg) 46%, var(--seed-bg-panel)); /* decorative only, never body text */

  /* ---- accents (fills) ---- */
  --accent: var(--seed-accent);
  --accent-deep: var(--seed-accent-deep);
  --gold: var(--seed-gold);
  --gold-deep: var(--seed-gold-deep);
  --gold-hi: color-mix(in oklch, var(--seed-gold), #FFFFFF 55%);
  --danger: var(--seed-danger);
  --success: var(--seed-success);
  --warn: #F5C84B;

  /* ---- accents readable as text on the current scheme ---- */
  --accent-text: #6BC4EB;
  --gold-text: #F2CB45;
  --danger-text: #FF7B82;
  --success-text: #5CDC6F;
  --warn-text: #F5C84B;

  /* ---- tints (backgrounds for badges, rows, callouts) ---- */
  --accent-tint: color-mix(in oklch, var(--seed-accent) 16%, transparent);
  --gold-tint: color-mix(in oklch, var(--seed-gold) 16%, transparent);
  --danger-tint: color-mix(in oklch, var(--seed-danger) 22%, transparent);
  --success-tint: color-mix(in oklch, var(--seed-success) 15%, transparent);
  --warn-tint: color-mix(in oklch, #F5C84B 15%, transparent);

  /* ---- code (chat code blocks, diffs, the IDE editor). The theme's own night (its own paper in a
     light theme), and a syntax palette tinted toward the theme: each role keeps its own hue, so
     keywords, calls and strings stay apart in every theme, and leans to the theme's colours ---- */
  --code-bg: color-mix(in oklch, var(--bg-abyss) 88%, #000);
  --code-head: color-mix(in oklch, var(--fg) 4%, transparent);
  --code-fg: color-mix(in oklch, #D6D8F0 88%, var(--seed-accent));
  --code-kw: color-mix(in oklch, #FF8FD0 76%, var(--accent-text));
  --code-fn: color-mix(in oklch, #6BC4EB 50%, var(--accent-text));
  --code-str: color-mix(in oklch, #F5E3A3 64%, var(--gold-text));
  --code-num: color-mix(in oklch, #5CDC6F 80%, var(--accent-text));
  --code-com: color-mix(in oklch, #8C8EB5 80%, var(--accent-text));
  --code-bi: color-mix(in oklch, #B9A2F2 74%, var(--accent-text));
  --code-op: color-mix(in oklch, #C9CBE6 88%, var(--accent-text));
  --code-add: #A8F2B4; --code-add-bg: rgb(34 209 71 / .13);
  --code-del: #FFB9BD; --code-del-bg: rgb(255 123 130 / .13);

  /* ---- light & glow (glow is a material: light sources, not drop shadows) ---- */
  --glow-gold: 0 0 24px color-mix(in oklch, var(--seed-gold) 45%, transparent), 0 0 72px color-mix(in oklch, var(--seed-gold) 20%, transparent);
  --glow-accent: 0 0 22px color-mix(in oklch, var(--seed-accent) 45%, transparent), 0 0 64px color-mix(in oklch, var(--seed-accent) 18%, transparent);
  --glow-success: 0 0 16px color-mix(in oklch, var(--seed-success) 55%, transparent);
  --glow-danger: 0 0 16px color-mix(in oklch, var(--seed-danger) 60%, transparent);
  --rim: inset 0 1px 0 color-mix(in oklch, var(--mix-up) 9%, transparent);

  /* ---- elevation ---- */
  --e1: var(--rim), 0 1px 2px rgb(2 0 16 / .25), 0 8px 24px -14px rgb(2 0 16 / .6);
  --e2: var(--rim), 0 2px 6px rgb(2 0 16 / .25), 0 24px 60px -28px rgb(2 0 16 / .85);
  --e3: var(--rim), 0 4px 12px rgb(2 0 16 / .3), 0 40px 120px -36px rgb(2 0 16 / .95);
  --sticker-shadow: 4px 4px 0 var(--ink);
  --sticker-shadow-sm: 3px 3px 0 var(--ink);
  --sticker-shadow-lg: 6px 6px 0 var(--ink);

  /* ---- grain (kills banding on big gradients) ---- */
  --grain: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.9' numOctaves='2' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 .55 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E");

  /* ---- type ---- */
  --font-display: "Shrikhand", "Atkinson Hyperlegible Next", Georgia, serif;
  --font-text: "Atkinson Hyperlegible Next", "Segoe UI", system-ui, -apple-system, sans-serif;
  --font-mono: "Atkinson Hyperlegible Mono", ui-monospace, "Cascadia Mono", Consolas, monospace;
  --fs-hero: clamp(3.1rem, 1.6rem + 6.4vw, 8.4rem);
  --fs-d1: clamp(2.4rem, 1.5rem + 3.8vw, 5.4rem);
  --fs-d2: clamp(2rem, 1.45rem + 2.4vw, 3.9rem);
  --fs-d3: clamp(1.6rem, 1.3rem + 1.3vw, 2.5rem);
  --fs-h3: clamp(1.25rem, 1.1rem + .6vw, 1.625rem);
  --fs-h4: 1.125rem;
  --fs-lead: clamp(1.0625rem, 1rem + .35vw, 1.3125rem);
  --fs-body: 1rem;
  --fs-sm: .875rem;
  --fs-xs: .78125rem;
  --fs-micro: .6875rem;
  --lh-tight: 1.02;
  --lh-snug: 1.2;
  --lh-body: 1.58;
  --track-display: -0.012em;
  --track-eyebrow: .14em;

  /* ---- space (4-based) ---- */
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 20px; --s-6: 24px; --s-7: 32px;
  --s-8: 40px; --s-9: 48px; --s-10: 64px; --s-11: 80px; --s-12: 96px; --s-13: 128px;
  --gutter: clamp(16px, 4vw, 48px);
  --section: clamp(88px, 12vw, 176px);
  --measure: 68ch;

  /* ---- radius ---- */
  --r-xs: 6px; --r-sm: 10px; --r-md: 14px; --r-lg: 20px; --r-xl: 28px; --r-pill: 999px;

  /* ---- motion ---- */
  --dur-instant: 90ms; --dur-quick: 160ms; --dur-base: 240ms; --dur-slow: 420ms; --dur-scene: 700ms; --dur-epic: 1200ms;
  --ease-out: cubic-bezier(.22, 1, .36, 1);
  --ease-in-out: cubic-bezier(.65, 0, .35, 1);
  --ease-in: cubic-bezier(.55, 0, 1, .45);
  --ease-smoke: cubic-bezier(.4, 0, .2, 1);
  --spring-snappy: linear(0, 0.034, 0.112, 0.215, 0.329, 0.434, 0.542, 0.639, 0.724, 0.791, 0.851, 0.899, 0.936, 0.962, 0.984, 0.998, 1.008, 1.014, 1.017, 1.018, 1.018, 1.017, 1.015, 1.013, 1.011, 1.009, 1.007, 1.006, 1.004, 1.003, 1.002, 1.001, 1.001, 1, 1);
  --dur-spring-snappy: 434ms;
  --spring-bouncy: linear(0, 0.077, 0.248, 0.462, 0.678, 0.867, 1.02, 1.117, 1.168, 1.182, 1.168, 1.136, 1.096, 1.057, 1.023, 0.996, 0.979, 0.969, 0.967, 0.97, 0.976, 0.983, 0.99, 0.996, 1.001, 1.004, 1.006, 1.006, 1.005, 1.004, 1.003, 1.002, 1.001, 1, 1);
  --dur-spring-bouncy: 754ms;
  --spring-soft: linear(0, 0.025, 0.085, 0.163, 0.25, 0.339, 0.425, 0.5, 0.574, 0.639, 0.697, 0.747, 0.79, 0.826, 0.856, 0.882, 0.904, 0.922, 0.937, 0.949, 0.959, 0.967, 0.974, 0.979, 0.984, 0.987, 0.99, 0.992, 0.994, 0.995, 0.996, 0.997, 0.998, 0.998, 1);
  --dur-spring-soft: 607ms;
  --stagger-list: 40ms; --stagger-card: 70ms; --stagger-letter: 22ms;

  /* ---- layers ---- */
  --z-sky: 0; --z-content: 1; --z-sticky: 20; --z-nav: 40; --z-dock: 50; --z-popover: 70; --z-sheet: 80;
  --z-dialog: 90; --z-toast: 100; --z-dev: 120;

  color-scheme: dark;
}

/* Relative colors keep hue and chroma while guaranteeing readable lightness.
   Browsers without them keep the static values above. */
@supports (color: oklch(from red l c h)) {
  :root {
    --accent-text: oklch(from var(--seed-accent) max(l, 0.76) min(c, 0.14) h);
    --gold-text: oklch(from var(--seed-gold) max(l, 0.82) c h);
    --danger-text: oklch(from var(--seed-danger) max(l, 0.74) max(c, 0.14) h);
    --success-text: oklch(from var(--seed-success) max(l, 0.8) c h);
  }
}

/* ---- light scheme (used by the 7 light themes in the app) ---- */
:root[data-scheme="light"] {
  --mix-up: #000000;
  --fg: #16123A;
  --bg-abyss: color-mix(in oklch, var(--seed-bg-deep) 94%, #000);
  --line: color-mix(in oklch, var(--fg) 12%, transparent);
  --line-2: color-mix(in oklch, var(--fg) 20%, transparent);
  --text-2: color-mix(in oklch, var(--fg) 82%, var(--seed-bg-panel));
  --text-3: color-mix(in oklch, var(--fg) 68%, var(--seed-bg-panel));
  --accent-text: #00689C; --gold-text: #835000; --danger-text: #98071C; --success-text: #007341;
  --warn-text: #835000;
  --glass: color-mix(in oklch, var(--seed-bg-panel) 82%, transparent);
  --rim: inset 0 1px 0 rgb(255 255 255 / .7);
  --e1: 0 1px 2px rgb(20 16 60 / .08), 0 8px 24px -14px rgb(20 16 60 / .25);
  --e2: 0 2px 6px rgb(20 16 60 / .08), 0 24px 60px -28px rgb(20 16 60 / .35);
  --e3: 0 4px 12px rgb(20 16 60 / .12), 0 40px 120px -36px rgb(20 16 60 / .45);
  /* code reads dark on the theme's own paper, never as a dark slab in a light theme */
  --code-bg: color-mix(in oklch, var(--seed-bg-royal) 42%, #FFFFFF);
  --code-head: color-mix(in oklch, var(--fg) 5%, transparent);
  --code-fg: color-mix(in oklch, #16123A 90%, var(--seed-accent));
  --code-kw: color-mix(in oklch, #A3125F 76%, var(--accent-text));
  --code-fn: color-mix(in oklch, #00628F 50%, var(--accent-text));
  --code-str: color-mix(in oklch, #6E4A00 64%, var(--gold-text));
  --code-num: color-mix(in oklch, #00693A 80%, var(--accent-text));
  --code-com: color-mix(in oklch, #5C5980 82%, var(--accent-text));
  --code-bi: color-mix(in oklch, #5233A6 74%, var(--accent-text));
  --code-op: color-mix(in oklch, #34305E 88%, var(--accent-text));
  --code-add: #0B6B2F; --code-add-bg: rgb(34 209 71 / .14);
  --code-del: #A3122A; --code-del-bg: rgb(229 72 77 / .12);
  color-scheme: light;
}
@supports (color: oklch(from red l c h)) {
  :root[data-scheme="light"] {
    --accent-text: oklch(from var(--seed-accent) min(l, 0.5) c h);
    --gold-text: oklch(from var(--seed-gold) min(l, 0.5) c h);
    --danger-text: oklch(from var(--seed-danger) min(l, 0.5) c h);
    --success-text: oklch(from var(--seed-success) min(l, 0.48) c h);
  }
}

/* ==========================================================================
   Base: reset, type, focus, selection, scrollbars, motion safety
   ========================================================================== */
*, *::before, *::after { box-sizing: border-box; }
* { margin: 0; }
html {
  -webkit-text-size-adjust: 100%;
  text-size-adjust: 100%;
  -webkit-tap-highlight-color: color-mix(in oklch, var(--seed-accent) 22%, transparent);
  scrollbar-color: color-mix(in oklch, var(--fg) 24%, transparent) transparent;
  scrollbar-width: thin;
  /* (every rule that truncates one line with an ellipsis turns it off: Safari would hang a closing
     bracket or quote outside the box and clip it, as in "Auto (intelligent & cheap") */
  hanging-punctuation: first last;
}
body {
  min-height: 100dvh;
  background: var(--bg);
  color: var(--text);
  font: 400 var(--fs-body)/var(--lh-body) var(--font-text);
  font-synthesis: none;
  text-rendering: optimizeLegibility;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  caret-color: var(--gold);
  overflow-x: clip;
}
img, picture, video, canvas, svg { display: block; max-width: 100%; }
img, video { height: auto; }
input, button, textarea, select { font: inherit; color: inherit; letter-spacing: inherit; }
button { background: none; border: 0; padding: 0; cursor: pointer; }
button:disabled { cursor: not-allowed; }
textarea { resize: vertical; }
p, h1, h2, h3, h4, h5, h6, li, dd, figcaption, blockquote { overflow-wrap: break-word; }
h1, h2, h3, h4 { line-height: var(--lh-snug); text-wrap: balance; font-weight: 800; }
p, li { text-wrap: pretty; }
ul[role="list"], ol[role="list"] { list-style: none; padding: 0; }
table { border-collapse: collapse; }
[hidden] { display: none !important; }
::selection { background: color-mix(in oklch, var(--seed-gold) 88%, transparent); color: var(--ink); }

a { color: var(--accent-text); text-decoration-thickness: .08em; text-underline-offset: .22em; transition: color var(--dur-quick) var(--ease-out); }
a:hover { color: var(--gold-text); }

code, kbd, samp, pre { font-family: var(--font-mono); font-size: .92em; }

/* ---- focus: a cyan ring that snaps in (drawn, never the browser default) ---- */
:focus { outline: none; }
:focus-visible {
  outline: 2.5px solid var(--accent-text);
  outline-offset: 3px;
  animation: focus-snap var(--dur-spring-snappy) var(--spring-snappy);
}
@keyframes focus-snap { from { outline-offset: 9px; outline-color: transparent; } }
.btn-wish:focus-visible, .btn-danger:focus-visible { outline-color: var(--sticker); box-shadow: var(--sticker-shadow), 0 0 0 7px color-mix(in oklch, var(--seed-accent) 55%, transparent); }

/* ---- scrollbars (WebKit / Blink fallback; Firefox + modern Chrome use scrollbar-color) ---- */
::-webkit-scrollbar { width: 11px; height: 11px; }
::-webkit-scrollbar-track { background: transparent; }
::-webkit-scrollbar-thumb { background: color-mix(in oklch, var(--fg) 20%, transparent); border-radius: 99px; border: 3px solid transparent; background-clip: padding-box; }
::-webkit-scrollbar-thumb:hover { background-color: color-mix(in oklch, var(--seed-gold) 70%, transparent); }
::-webkit-scrollbar-corner { background: transparent; }

/* ---- utilities ---- */
.sr-only { position: absolute !important; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0 0 0 0); clip-path: inset(50%); white-space: nowrap; border: 0; }
.skip-link {
  position: fixed; left: 16px; top: 12px; z-index: var(--z-dev);
  padding: 12px 18px; border-radius: var(--r-md); background: var(--gold); color: var(--on-gold);
  border: 2px solid var(--ink); box-shadow: var(--sticker-shadow); font-weight: 800; text-decoration: none;
  transform: translateY(-160%); transition: transform var(--dur-base) var(--ease-out);
}
.skip-link:focus-visible { transform: none; }
.wrap { width: min(100% - 2 * var(--gutter), 1280px); margin-inline: auto; }
.wrap-wide { width: min(100% - 2 * var(--gutter), 1440px); margin-inline: auto; }
.mono { font-family: var(--font-mono); }
.tnum { font-variant-numeric: tabular-nums; }
.nowrap { white-space: nowrap; }
.grain { position: relative; isolation: isolate; }
.grain::after { content: ""; position: absolute; inset: 0; background: var(--grain); opacity: .055; mix-blend-mode: overlay; pointer-events: none; z-index: 1; border-radius: inherit; }

/* ---- type roles ---- */
/* Shrikhand kerns a round letter hard into the d: at 78.72px its `de`/`do`/`ds` pairs pull
   -6.3px (-.08em), five times its next-largest pair, so the d's bowl swallows the e's stem and
   "idea" reads as "ide a" (reported 2026-10-21). Nothing else in the face collides; the pairs
   that do get adjusted otherwise are <= 3.15px, which is invisible at these sizes. Turning
   kerning off for the display face only -- body text keeps it -- is what removes the collision
   without touching the letter fit anywhere else. qa/land-checks.mjs asserts every element that
   computes to Shrikhand has it off, so a new display rule cannot quietly miss this. Every rule
   that sets var(--font-display) carries it directly: a `font:` shorthand resets font-kerning to
   auto, so one shared rule elsewhere in the cascade would be undone by the later shorthand. */
.display { font-family: var(--font-display); font-weight: 400; letter-spacing: var(--track-display); line-height: var(--lh-tight); font-kerning: none; }
.sticker-type {
  font-family: var(--font-display); font-weight: 400; color: var(--gold);
  -webkit-text-stroke: .075em var(--ink); paint-order: stroke fill;
  text-shadow: .07em .07em 0 var(--ink);
  font-kerning: none;
}
.eyebrow {
  display: inline-flex; align-items: center; gap: 8px;
  font: 600 var(--fs-micro)/1 var(--font-mono); letter-spacing: var(--track-eyebrow); text-transform: uppercase;
  color: var(--accent-text);
}
.lead { font-size: var(--fs-lead); line-height: 1.55; color: var(--text-2); }
.muted { color: var(--text-3); }

/* ---- icons ---- */
.ic { width: 1.25em; height: 1.25em; flex: none; fill: none; stroke: currentColor; stroke-width: var(--ic-stroke, 1.85); stroke-linecap: round; stroke-linejoin: round; vertical-align: -.24em; overflow: visible; }
/* filled parts use presentation attributes: document CSS cannot reach into <use> shadow trees */
.ic-spin { animation: spin 900ms linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

/* ---- touch: hide keyboard-shortcut hints ---- */
@media (hover: none), (pointer: coarse) {
  [data-kbd-hint], .kbd-hint { display: none !important; }
}

/* ---- motion safety ---- */
/* transitions are switched off outright (0s, so none is created): a 1ms transition on every element
   (transition-property defaults to all) could stick at its start value in WebKit. No script waits
   for transitionend. Animations keep 1ms so their end states still apply. */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after {
    animation-duration: 1ms !important; animation-iteration-count: 1 !important;
    transition-duration: 0s !important; transition-delay: 0ms !important; scroll-behavior: auto !important;
  }
}
html.motion-paused [data-ambient], html.motion-paused [data-ambient] * { animation-play-state: paused !important; }

/* ---- cross-document view transitions (landing -> login -> app) ---- */
@view-transition { navigation: auto; }
::view-transition-old(root), ::view-transition-new(root) { animation-duration: 380ms; animation-timing-function: var(--ease-out); }
::view-transition-group(brand), ::view-transition-group(genie) { animation-duration: 520ms; animation-timing-function: var(--ease-out); }
@media (prefers-reduced-motion: reduce) {
  @view-transition { navigation: none; }
}

/* ==========================================================================
   Components (shared by all nine pages)
   ========================================================================== */

/* ---------- brand lockup ---------- */
.lockup { display: inline-flex; align-items: center; gap: 10px; color: var(--text); text-decoration: none; font: 800 1.22rem/1 var(--font-text); letter-spacing: -.01em; }
.vt-brand { view-transition-name: brand; }
.vt-genie { view-transition-name: genie; }
.lockup img { width: 38px; height: 38px; flex-shrink: 0; max-width: none; object-fit: contain; filter: drop-shadow(0 2px 0 var(--ink)); transition: transform var(--dur-spring-bouncy) var(--spring-bouncy); }
.lockup:hover { color: var(--text); }
.lockup:hover img { transform: rotate(-8deg) scale(1.06); }
.lockup .wordmark span { color: var(--gold-text); }
.lockup.compact { gap: 8px; font-size: 1.05rem; }
.lockup.compact img { width: 30px; height: 30px; }

/* ---------- buttons ---------- */
.btn {
  --btn-h: 44px;
  position: relative; isolation: isolate;
  display: inline-flex; align-items: center; justify-content: center; gap: 9px;
  min-height: var(--btn-h); padding: 0 18px; border-radius: var(--r-md);
  border: 1px solid transparent; font: 700 .9375rem/1.1 var(--font-text); letter-spacing: .005em;
  text-decoration: none; white-space: nowrap; user-select: none; color: var(--text);
  transition: transform var(--dur-quick) var(--ease-out), box-shadow var(--dur-quick) var(--ease-out),
              background-color var(--dur-quick) var(--ease-out), border-color var(--dur-quick) var(--ease-out), color var(--dur-quick);
}
.btn .ic { width: 1.15em; height: 1.15em; }
.btn:disabled, .btn[aria-disabled="true"] { opacity: .45; pointer-events: none; box-shadow: none; }
.btn-sm { --btn-h: 36px; padding: 0 12px; font-size: .875rem; border-radius: var(--r-sm); }
/* 44px touch target: the ring sits 4px past the border box (it is placed from the padding box,
   so it also clears the 1px border, or the 2px border of the sticker buttons) */
.btn-sm::before { content: ""; position: absolute; inset: -5px; }
.btn-wish.btn-sm::before, .btn-danger.btn-sm::before { inset: -6px; }
.btn-lg { --btn-h: 56px; padding: 0 26px; font-size: 1.0625rem; border-radius: 16px; }
.btn-xl { --btn-h: 64px; padding: 0 30px; font-size: 1.1875rem; border-radius: 18px; }
.btn-block { width: 100%; }
/* an icon button is a fixed square: without flex:none a cramped flex row (the phone topbar)
   shrinks it below its width, and the tap target silently falls under the 24px minimum */
.btn-icon { width: var(--btn-h); min-width: var(--btn-h); padding: 0; flex: none; }

/* The wish button: a gold sticker that presses into its own ink shadow */
.btn-wish {
  color: var(--on-gold); font-weight: 800;
  background: linear-gradient(180deg, color-mix(in oklch, var(--gold), #fff 26%) 0%, var(--gold) 46%, color-mix(in oklch, var(--gold), var(--gold-deep) 40%) 100%);
  border: 2px solid var(--ink); box-shadow: var(--sticker-shadow), inset 0 1px 0 rgb(255 255 255 / .55);
}
/* the shine: a band swept across the button's own box by background-position, so the button needs
   no overflow clip (a clip would also cut .btn-sm's 44px touch ring and make every wish button a
   scroll container). Same band, angle, path and timing as the moving-box version it replaces. */
.btn-wish::after {
  content: ""; position: absolute; inset: 0; z-index: -1; pointer-events: none; border-radius: inherit;
  background: linear-gradient(105deg, transparent 46.5%, rgb(255 255 255 / .6) 50%, transparent 53.5%) 100% 0 / 360% 100% no-repeat;
}
.btn-wish:hover { transform: translate(-1px, -1px); box-shadow: 5px 5px 0 var(--ink), inset 0 1px 0 rgb(255 255 255 / .55), var(--glow-gold); color: var(--on-gold); }
.btn-wish:hover::after { background-position: 0 0; transition: background-position 700ms var(--ease-out); }
.btn-wish:active { transform: translate(3px, 3px); box-shadow: 1px 1px 0 var(--ink), inset 0 1px 0 rgb(255 255 255 / .4); transition-duration: 60ms; }

.btn-glass { background: var(--glass-2); border-color: var(--line-2); box-shadow: var(--rim); backdrop-filter: blur(14px) saturate(140%); }
.btn-glass:hover { border-color: var(--line-accent); background: color-mix(in oklch, var(--panel-3) 85%, transparent); color: var(--text); }
.btn-glass:active { transform: translateY(1px) scale(.985); }

.btn-ghost { background: transparent; color: var(--text-2); }
.btn-ghost:hover { background: color-mix(in oklch, var(--fg) 8%, transparent); color: var(--text); }
.btn-ghost:active { transform: scale(.97); }
.btn-ghost[aria-pressed="true"], .btn-ghost[aria-expanded="true"] { background: color-mix(in oklch, var(--fg) 10%, transparent); color: var(--text); }

.btn-danger { color: var(--on-danger); font-weight: 800; background: var(--danger); border: 2px solid var(--ink); box-shadow: var(--sticker-shadow); }
.btn-danger:hover { transform: translate(-1px, -1px); box-shadow: 5px 5px 0 var(--ink), var(--glow-danger); color: var(--on-danger); }
.btn-danger:active { transform: translate(3px, 3px); box-shadow: 1px 1px 0 var(--ink); }
.btn-danger-quiet { color: var(--danger-text); }
.btn-danger-quiet:hover { background: var(--danger-tint); color: var(--danger-text); }

.btn[aria-busy="true"] { pointer-events: none; }
.btn[aria-busy="true"] .ic:not(.ic-spin) { display: none; }

/* ---------- fields ---------- */
.field { display: grid; gap: 7px; }
.field > label, .label { font: 700 .875rem/1.2 var(--font-text); color: var(--text-2); }
.hint { font-size: .8125rem; color: var(--text-3); line-height: 1.45; }
.error-text { font-size: .8125rem; color: var(--danger-text); display: flex; gap: 6px; align-items: flex-start; line-height: 1.4; }
.input, .textarea, .select {
  width: 100%; min-height: 46px; padding: 11px 14px; border-radius: var(--r-md);
  background: color-mix(in oklch, var(--bg-abyss) 55%, transparent); border: 1.5px solid var(--line-2); color: var(--text);
  transition: border-color var(--dur-quick), box-shadow var(--dur-quick), background var(--dur-quick);
}
.input::placeholder, .textarea::placeholder { color: var(--text-3); opacity: 1; }
.input:hover, .textarea:hover, .select:hover { border-color: color-mix(in oklch, var(--fg) 34%, transparent); }
.input:focus-visible, .textarea:focus-visible, .select:focus-visible { outline: none; border-color: var(--accent-text); box-shadow: 0 0 0 4px color-mix(in oklch, var(--seed-accent) 26%, transparent); animation: none; }
.input[aria-invalid="true"], .textarea[aria-invalid="true"] { border-color: var(--danger-text); }
.select { appearance: none; padding-right: 40px; background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23B9BBD6' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M6 9l6 6 6-6'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: right 12px center; background-size: 18px; }
.select option { background: var(--panel); color: var(--text); }
.input-group { position: relative; display: flex; align-items: center; }
.input-group > .ic:first-child { position: absolute; left: 13px; color: var(--text-3); pointer-events: none; }
.input-group > .ic:first-child + .input { padding-left: 40px; }
.input-group .input-action { position: absolute; right: 5px; }

/* ---------- switch (button[role=switch]) ---------- */
.switch { position: relative; width: 48px; height: 28px; flex: none; border-radius: 99px; background: color-mix(in oklch, var(--fg) 16%, transparent); border: 1.5px solid var(--line-2); transition: background var(--dur-base) var(--ease-out), border-color var(--dur-base); }
.switch::before { content: ""; position: absolute; inset: -9px -2px; }
.switch::after { content: ""; position: absolute; left: 3px; top: 3px; width: 19px; height: 19px; border-radius: 50%; background: var(--text-2); box-shadow: 0 1px 3px rgb(0 0 0 / .4); transition: transform var(--dur-spring-snappy) var(--spring-snappy), background var(--dur-base); }
.switch[aria-checked="true"] { background: var(--success); border-color: var(--ink); }
.switch[aria-checked="true"]::after { transform: translateX(20px); background: var(--sticker); box-shadow: 0 0 0 1.5px var(--ink); }
.switch:disabled { opacity: .45; }
.toggle-row { display: flex; align-items: flex-start; gap: 14px; justify-content: space-between; padding: 14px 0; }
.toggle-row + .toggle-row { border-top: 1px solid var(--line); }
.toggle-row .copy { display: grid; gap: 3px; }
.toggle-row .copy b { font-size: .9375rem; }

/* ---------- checkbox ---------- */
.check { appearance: none; width: 20px; height: 20px; flex: none; border-radius: 6px; border: 1.5px solid var(--line-2); background: transparent; display: inline-grid; place-items: center; transition: background var(--dur-quick), border-color var(--dur-quick); }
.check::after { content: ""; width: 11px; height: 6px; border: solid var(--ink); border-width: 0 0 2.5px 2.5px; transform: rotate(-45deg) translate(1px, -1px) scale(0); transition: transform var(--dur-spring-snappy) var(--spring-snappy); }
.check:checked { background: var(--success); border-color: var(--ink); }
.check:checked::after { transform: rotate(-45deg) translate(1px, -1px) scale(1); }

/* ---------- segmented control ---------- */
.seg { display: inline-flex; padding: 4px; gap: 2px; border-radius: var(--r-md); background: color-mix(in oklch, var(--bg-abyss) 60%, transparent); border: 1px solid var(--line); }
.seg button { min-height: 36px; padding: 0 14px; border-radius: 10px; font-weight: 700; font-size: .875rem; color: var(--text-3); transition: color var(--dur-quick), background var(--dur-quick); }
.seg button:hover { color: var(--text); }
.seg button[aria-pressed="true"], .seg button[aria-selected="true"], .seg button[aria-checked="true"] { background: var(--panel-3); color: var(--text); box-shadow: var(--e1); }

/* ---------- chips, badges, pills ---------- */
.chip { display: inline-flex; align-items: center; gap: 7px; min-height: 36px; padding: 0 13px; border-radius: 99px; border: 1px solid var(--line-2); background: color-mix(in oklch, var(--fg) 4%, transparent); color: var(--text-2); font-size: .875rem; font-weight: 600; transition: all var(--dur-quick) var(--ease-out); }
.chip:hover { border-color: var(--line-accent); color: var(--text); }
.chip[aria-pressed="true"], .chip[aria-selected="true"] { background: var(--accent-tint); border-color: var(--line-accent); color: var(--text); }
.chip .count { font: 600 .75rem var(--font-mono); color: var(--text-3); }
.badge { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px; border-radius: 7px; font: 800 .6875rem/1 var(--font-text); letter-spacing: .06em; text-transform: uppercase; white-space: nowrap; background: color-mix(in oklch, var(--fg) 10%, transparent); color: var(--text-2); }
.badge-gold { background: var(--gold-tint); color: var(--gold-text); }
.badge-accent { background: var(--accent-tint); color: var(--accent-text); }
.badge-success { background: var(--success-tint); color: var(--success-text); }
.badge-danger { background: var(--danger-tint); color: var(--danger-text); }
.badge-warn { background: var(--warn-tint); color: var(--warn-text); }
.badge-sticker { background: var(--gold); color: var(--on-gold); border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink); height: 24px; }
.status-dot { width: 9px; height: 9px; border-radius: 50%; flex: none; background: var(--text-3); }
.status-dot.ok { background: var(--success); box-shadow: var(--glow-success); }
.status-dot.warn { background: var(--warn); box-shadow: 0 0 12px color-mix(in oklch, var(--warn) 60%, transparent); }
.status-dot.bad { background: var(--danger-text); box-shadow: var(--glow-danger); }
.status-dot.busy { background: var(--gold); box-shadow: var(--glow-gold); animation: pulse-dot 1.4s var(--ease-in-out) infinite; }
@keyframes pulse-dot { 50% { transform: scale(.6); opacity: .6; } }

/* quota multiplier pill: cheap / par / costly / unknown */
.mult { display: inline-flex; align-items: center; gap: 4px; height: 24px; padding: 0 8px; border-radius: 99px; font: 700 .75rem/1 var(--font-mono); white-space: nowrap; font-variant-numeric: tabular-nums; }
.mult.cheap { background: var(--success-tint); color: var(--success-text); }
.mult.par { background: color-mix(in oklch, var(--fg) 11%, transparent); color: var(--text-2); }
.mult.costly { background: var(--gold-tint); color: var(--gold-text); box-shadow: inset 0 0 0 1px color-mix(in oklch, var(--seed-gold) 40%, transparent); }
.mult.unknown { background: transparent; color: var(--text-3); box-shadow: inset 0 0 0 1px var(--line-2); }

/* verification stamps */
.stamp { width: 24px; height: 24px; flex: none; border-radius: 8px; display: inline-grid; place-items: center; border: 2px solid var(--ink); color: var(--ink); background: transparent; }
.stamp .ic { width: 14px; height: 14px; --ic-stroke: 3; }
.stamp.pass { background: var(--success); box-shadow: 2px 2px 0 var(--ink); }
.stamp.fail { background: var(--danger-text); box-shadow: 2px 2px 0 var(--ink); }
.stamp.run { background: var(--gold); box-shadow: 2px 2px 0 var(--ink); }
.stamp.pending { border-color: var(--line-2); color: var(--text-3); border-style: dashed; }
.stamp.in { animation: stamp-in var(--dur-spring-bouncy) var(--spring-bouncy); }
@keyframes stamp-in { from { transform: scale(.2) rotate(-25deg); opacity: 0; } }

.kbd { display: inline-flex; align-items: center; min-width: 22px; height: 22px; padding: 0 6px; border-radius: 6px; border: 1px solid var(--line-2); border-bottom-width: 2px; font: 600 .6875rem/1 var(--font-mono); color: var(--text-2); justify-content: center; background: color-mix(in oklch, var(--fg) 5%, transparent); }

/* ---------- cards & surfaces ---------- */
.card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--e1); }
.card-glass { background: var(--glass); border: 1px solid var(--line); border-radius: var(--r-lg); box-shadow: var(--e2); backdrop-filter: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); }
.card-sticker { background: var(--sticker); color: #0E0731; border: 2.5px solid var(--ink); border-radius: var(--r-lg); box-shadow: var(--sticker-shadow-lg); }

/* ---------- tooltip (one floating element, managed by core.js) ---------- */
.tip {
  position: fixed; z-index: var(--z-toast); max-width: min(320px, calc(100vw - 24px)); padding: 8px 11px; border-radius: 10px;
  background: color-mix(in oklch, var(--panel-3) 96%, transparent); color: var(--text); border: 1px solid var(--line-2);
  font-size: .8125rem; line-height: 1.4; box-shadow: var(--e2); pointer-events: none; white-space: pre-line;
  opacity: 0; transform: translateY(4px) scale(.97); transition: opacity var(--dur-quick) var(--ease-out), transform var(--dur-quick) var(--ease-out);
}
.tip.show { opacity: 1; transform: none; }

/* ---------- popovers & menus ---------- */
.popover {
  position: fixed; z-index: var(--z-popover); min-width: 220px; max-width: min(420px, calc(100vw - 16px));
  max-height: min(70vh, 560px); overflow: auto; overscroll-behavior: contain;
  background: color-mix(in oklch, var(--panel-2) 94%, transparent); border: 1px solid var(--line-2); border-radius: var(--r-lg);
  box-shadow: var(--e3); backdrop-filter: blur(22px) saturate(160%); -webkit-backdrop-filter: blur(22px) saturate(160%);
  padding: 6px; transform-origin: var(--origin, top left);
  animation: pop-in var(--dur-spring-snappy) var(--spring-snappy);
}
.popover.closing { animation: pop-out var(--dur-quick) var(--ease-in) forwards; }
@keyframes pop-in { from { opacity: 0; transform: scale(.92) translateY(-4px); } }
@keyframes pop-out { to { opacity: 0; transform: scale(.96); } }
.menu-item { display: flex; align-items: center; gap: 10px; width: 100%; min-height: 40px; padding: 8px 10px; border-radius: 10px; text-align: left; font-size: .9rem; color: var(--text-2); }
.menu-item:hover, .menu-item:focus-visible, .menu-item[data-active="true"] { background: color-mix(in oklch, var(--fg) 9%, transparent); color: var(--text); outline: none; animation: none; }
.menu-item.danger { color: var(--danger-text); }
.menu-item.danger:hover, .menu-item.danger:focus-visible { background: var(--danger-tint); }
.menu-item .ic { color: var(--text-3); }
.menu-item .kbd-hint { margin-left: auto; }
.menu-sep { height: 1px; background: var(--line); margin: 6px 4px; }
.menu-label { padding: 8px 10px 4px; font: 600 var(--fs-micro)/1 var(--font-mono); letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); }

/* ---------- dialogs (native <dialog> with showModal: inert background + focus containment) ---------- */
dialog.dlg {
  /* margin:auto restores the UA centering that the `* { margin: 0 }` reset removes */
  margin: auto; width: min(520px, calc(100vw - 24px)); max-height: calc(100dvh - 32px); padding: 0; border: 1px solid var(--line-2); border-radius: var(--r-xl);
  background: linear-gradient(180deg, var(--panel-2), var(--panel)); color: var(--text); box-shadow: var(--e3), 0 0 0 1px rgb(0 0 0 / .2);
  overflow: hidden; transform-origin: var(--origin, 50% 50%);
}
dialog.dlg[open] { display: flex; flex-direction: column; animation: dlg-in var(--dur-spring-soft) var(--spring-soft); }
dialog.dlg.closing { animation: dlg-out var(--dur-quick) var(--ease-in) forwards; }
dialog.dlg::backdrop { background: color-mix(in oklch, var(--seed-bg-deep) 72%, transparent); backdrop-filter: blur(6px); animation: fade-in var(--dur-base) var(--ease-out); }
@keyframes dlg-in { from { opacity: 0; transform: translate(var(--from-x, 0), var(--from-y, 16px)) scale(.9); } }
@keyframes dlg-out { to { opacity: 0; transform: scale(.96); } }
@keyframes fade-in { from { opacity: 0; } }
.dlg-head { display: flex; align-items: flex-start; gap: 14px; padding: 22px 22px 4px; }
.dlg-head h2 { font-size: 1.25rem; line-height: 1.25; flex: 1; }
/* a long email or id in a title or a text paragraph wraps instead of widening the dialog past a
   phone screen (focus would then scroll the whole dialog sideways); tables keep their columns */
.dlg-head h2, .dlg-body > p { min-width: 0; overflow-wrap: anywhere; }
.dlg-icon { width: 44px; height: 44px; border-radius: 14px; display: grid; place-items: center; flex: none; background: var(--accent-tint); color: var(--accent-text); }
.dlg-icon.danger { background: var(--danger-tint); color: var(--danger-text); }
.dlg-icon.gold { background: var(--gold-tint); color: var(--gold-text); }
.dlg-body { padding: 8px 22px 18px; color: var(--text-2); display: grid; gap: 14px; align-content: start; grid-auto-rows: min-content; overflow: auto; }
.dlg-foot { display: flex; gap: 10px; justify-content: flex-end; padding: 14px 22px 20px; border-top: 1px solid var(--line); background: color-mix(in oklch, var(--bg-abyss) 30%, transparent); flex-wrap: wrap; }
.dlg-close { margin: -6px -8px 0 0; }
dialog.dlg.wide { width: min(880px, calc(100vw - 24px)); }
dialog.dlg.full { width: min(1240px, calc(100vw - 24px)); height: min(860px, calc(100dvh - 24px)); }

/* sheets: bottom on phones, side on desktop */
dialog.sheet { margin: 0; padding: 0; border: 0; max-width: none; max-height: none; color: var(--text); background: var(--panel); box-shadow: var(--e3); }
dialog.sheet::backdrop { background: color-mix(in oklch, var(--seed-bg-deep) 66%, transparent); backdrop-filter: blur(4px); }
dialog.sheet.side { inset: 0 0 0 auto; width: min(480px, 100vw); height: 100dvh; border-left: 1px solid var(--line-2); }
dialog.sheet.side[open] { display: flex; flex-direction: column; animation: sheet-side var(--dur-spring-soft) var(--spring-soft); }
dialog.sheet.bottom { inset: auto 0 0 0; width: 100vw; max-height: 92dvh; border-radius: 24px 24px 0 0; border-top: 1px solid var(--line-2); }
dialog.sheet.bottom[open] { display: flex; flex-direction: column; animation: sheet-up var(--dur-spring-soft) var(--spring-soft); }
@keyframes sheet-side { from { transform: translateX(100%); } }
@keyframes sheet-up { from { transform: translateY(100%); } }
.sheet-grab { width: 44px; height: 5px; border-radius: 9px; background: var(--line-2); margin: 10px auto 2px; flex: none; }

/* ---------- toasts ---------- */
.toasts { position: fixed; z-index: var(--z-toast); right: max(16px, env(safe-area-inset-right)); bottom: max(16px, env(safe-area-inset-bottom)); display: flex; flex-direction: column-reverse; gap: 10px; width: min(380px, calc(100vw - 32px)); pointer-events: none; }
.toast {
  pointer-events: auto; display: flex; align-items: flex-start; gap: 12px; padding: 13px 14px; border-radius: 16px;
  background: color-mix(in oklch, var(--panel-3) 96%, transparent); border: 1px solid var(--line-2); box-shadow: var(--e3);
  backdrop-filter: blur(16px); animation: toast-in var(--dur-spring-bouncy) var(--spring-bouncy); font-size: .9rem; line-height: 1.4;
}
.toast .t-ic { width: 28px; height: 28px; border-radius: 9px; display: grid; place-items: center; flex: none; border: 2px solid var(--ink); color: var(--ink); }
.toast.success .t-ic { background: var(--success); }
.toast.error .t-ic { background: var(--danger-text); }
.toast.info .t-ic { background: var(--accent); }
.toast .t-msg { flex: 1; padding-top: 3px; color: var(--text); }
.toast .t-act { margin: -2px 0; }
.toast.leaving { animation: toast-out var(--dur-base) var(--ease-in) forwards; }
@keyframes toast-in { from { opacity: 0; transform: translateY(18px) scale(.9); } }
@keyframes toast-out { to { opacity: 0; transform: translateX(40px); } }
@media (max-width: 600px) { .toasts { left: 16px; right: 16px; width: auto; bottom: max(12px, env(safe-area-inset-bottom)); } }
/* Toasts float in the top layer (RG.toast makes the host a manual popover), laid out against the page
   and above any open dialog. While a modal dialog is open the host lives inside it (outside it would
   be inert); as a plain position:fixed child it was laid out against the DIALOG while the dialog's
   open animation ran (a transform makes it the containing block), then jumped to the page corner
   when the animation ended (2026-10-24). The popover's own UA box (centred, bordered) is undone here. */
.toasts[popover] { top: auto; left: auto; height: auto; margin: 0; padding: 0; border: 0; background: transparent; color: inherit; overflow: visible; }
@media (max-width: 600px) { .toasts[popover] { left: 16px; } }
/* the big work surfaces (the IDE, full-size dialogs such as Settings) keep their toasts in their own
   corner, inside the panel the person is looking at, and they stay put there */
.toasts.anchored { position: absolute; right: 16px; bottom: 16px; left: auto; width: min(380px, calc(100% - 32px)); }
@media (max-width: 600px) { .toasts.anchored { left: 12px; right: 12px; width: auto; bottom: max(12px, env(safe-area-inset-bottom)); } }

/* ---------- skeletons ---------- */
.sk { display: block; border-radius: 8px; background: linear-gradient(90deg, color-mix(in oklch, var(--fg) 7%, transparent) 0%, color-mix(in oklch, var(--fg) 14%, transparent) 40%, color-mix(in oklch, var(--fg) 7%, transparent) 80%); background-size: 300% 100%; animation: sk 1.6s var(--ease-in-out) infinite; }
@keyframes sk { from { background-position: 100% 0; } to { background-position: -50% 0; } }
.sk-line { height: .8em; margin: .35em 0; }
.sk-circle { border-radius: 50%; }

/* ---------- meters ---------- */
.meter { position: relative; height: 8px; border-radius: 99px; background: color-mix(in oklch, var(--fg) 10%, transparent); overflow: hidden; }
.meter > i { position: absolute; inset: 0 auto 0 0; width: var(--v, 0%); border-radius: inherit; background: linear-gradient(90deg, var(--accent), color-mix(in oklch, var(--accent), #fff 30%)); transition: width var(--dur-slow) var(--ease-out); }
.meter.gold > i { background: linear-gradient(90deg, var(--gold-deep), var(--gold), var(--gold-hi)); }
.meter.success > i { background: linear-gradient(90deg, color-mix(in oklch, var(--success), #000 20%), var(--success)); }
.meter.warn > i { background: linear-gradient(90deg, #d2a000, var(--warn)); }
.meter.danger > i { background: linear-gradient(90deg, var(--danger), var(--danger-text)); }
.ring { --v: 0; --c: var(--accent); width: 28px; height: 28px; border-radius: 50%; flex: none; background: conic-gradient(var(--c) calc(var(--v) * 1%), color-mix(in oklch, var(--fg) 14%, transparent) 0); mask: radial-gradient(circle, transparent 52%, #000 54%); -webkit-mask: radial-gradient(circle, transparent 52%, #000 54%); transition: --v var(--dur-slow); }

/* ---------- tabs ---------- */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tab { position: relative; min-height: 44px; padding: 0 14px; font-weight: 700; font-size: .9rem; color: var(--text-3); white-space: nowrap; }
.tab:hover { color: var(--text); }
.tab[aria-selected="true"] { color: var(--text); }
.tab[aria-selected="true"]::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 3px; border-radius: 3px 3px 0 0; background: var(--gold); box-shadow: var(--glow-gold); }

/* ---------- callouts & empty states ---------- */
.callout { display: flex; gap: 12px; align-items: flex-start; padding: 14px 16px; border-radius: var(--r-md); border: 1px solid var(--line-accent); background: var(--accent-tint); color: var(--text-2); font-size: .9rem; line-height: 1.5; }
.callout > .ic { color: var(--accent-text); margin-top: 1px; }
.callout.warn { border-color: color-mix(in oklch, var(--warn) 45%, transparent); background: var(--warn-tint); }
.callout.warn > .ic { color: var(--warn-text); }
.callout.danger { border-color: color-mix(in oklch, var(--seed-danger) 55%, transparent); background: var(--danger-tint); }
.callout.danger > .ic { color: var(--danger-text); }
.callout.success { border-color: color-mix(in oklch, var(--seed-success) 45%, transparent); background: var(--success-tint); }
.callout.success > .ic { color: var(--success-text); }
.empty { display: grid; justify-items: center; text-align: center; gap: 10px; padding: 28px 18px; color: var(--text-3); }
.empty img { width: 96px; height: 96px; object-fit: contain; }
.empty b { color: var(--text); font-size: 1rem; }

.avatar { width: 34px; height: 34px; border-radius: 50%; flex: none; display: grid; place-items: center; overflow: hidden; background: linear-gradient(135deg, var(--accent), var(--seed-bg-royal)); color: #fff; font-weight: 800; font-size: .85rem; border: 2px solid var(--ink); }
.avatar img { width: 100%; height: 100%; object-fit: cover; }
/* A real picture brings its own background: the tinted disc showed through every transparent
   pixel as a coloured halo behind the face. It stays for the initial-only fallback. */
.avatar.has-img { background: none; border-color: transparent; }

.btn-wish .spinner, .btn-danger .spinner { border-color: rgb(1 1 1 / .22); border-top-color: var(--ink); }
.spinner { width: 18px; height: 18px; border-radius: 50%; border: 2.5px solid color-mix(in oklch, var(--fg) 20%, transparent); border-top-color: var(--gold); animation: spin 800ms linear infinite; flex: none; }

/* ---------- tables (admin + comparisons) ---------- */
.table-wrap { overflow: auto; border: 1px solid var(--line); border-radius: var(--r-lg); background: var(--panel); max-height: var(--table-max, none); }
.table { width: 100%; font-size: .875rem; font-variant-numeric: tabular-nums; }
.table th, .table td { padding: 11px 14px; text-align: left; border-bottom: 1px solid var(--line); white-space: nowrap; vertical-align: middle; }
.table thead th { position: sticky; top: 0; z-index: 2; background: color-mix(in oklch, var(--panel-2) 97%, transparent); font: 700 .75rem/1.2 var(--font-text); letter-spacing: .04em; text-transform: uppercase; color: var(--text-3); backdrop-filter: blur(10px); }
.table th .sort { display: inline-flex; align-items: center; gap: 6px; color: inherit; font: inherit; text-transform: inherit; letter-spacing: inherit; min-height: 32px; }
.table th .sort:hover { color: var(--text); }
.table th[aria-sort="ascending"] .sort, .table th[aria-sort="descending"] .sort { color: var(--gold-text); }
.table tbody tr { transition: background var(--dur-quick); }
.table tbody tr:hover { background: color-mix(in oklch, var(--fg) 4%, transparent); }
.table td.num, .table th.num { text-align: right; }

/* ---------- media placeholders (owner drops real files into /assets/media/) ---------- */
.ph { position: relative; overflow: hidden; border-radius: var(--r-lg); background: radial-gradient(120% 90% at 30% 20%, color-mix(in oklch, var(--seed-bg-royal) 80%, #fff 4%), var(--bg-abyss)); isolation: isolate; }
.ph::before { content: ""; position: absolute; inset: 0; z-index: 0; background-image: radial-gradient(1.5px 1.5px at 20% 30%, var(--gold) 50%, transparent 55%), radial-gradient(1px 1px at 70% 60%, var(--gold-hi) 50%, transparent 55%), radial-gradient(1.2px 1.2px at 45% 80%, var(--accent) 50%, transparent 55%), radial-gradient(1px 1px at 85% 25%, #fff 50%, transparent 55%); background-size: 180px 140px; opacity: .55; animation: ph-drift 14s linear infinite; }
.ph::after { content: ""; position: absolute; inset: 0; z-index: 0; background: linear-gradient(115deg, transparent 30%, color-mix(in oklch, var(--seed-gold) 12%, transparent) 50%, transparent 70%); background-size: 250% 100%; animation: ph-shimmer 5s var(--ease-in-out) infinite; }
@keyframes ph-drift { to { background-position: 180px -140px; } }
@keyframes ph-shimmer { from { background-position: 120% 0; } to { background-position: -120% 0; } }
.ph > img, .ph > video, .ph > picture, .ph > picture img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: cover; z-index: 1; }
.ph-art { position: absolute; left: 50%; top: 50%; translate: -50% -50%; z-index: 1; display: grid; justify-items: center; gap: 10px; color: var(--text-3); text-align: center; pointer-events: none; }
.ph-art .ic { width: 44px; height: 44px; padding: 10px; border-radius: 16px; color: var(--gold-text); background: color-mix(in oklch, var(--seed-gold) 12%, transparent); border: 1px solid color-mix(in oklch, var(--seed-gold) 35%, transparent); box-shadow: 0 0 40px -6px color-mix(in oklch, var(--seed-gold) 45%, transparent); --ic-stroke: 1.6; animation: ph-float 5s var(--ease-in-out) infinite; }
.ph-art span { font: 700 .8125rem/1.3 var(--font-text); max-width: 32ch; }
@keyframes ph-float { 50% { transform: translateY(-5px); } }
.ph.loaded .ph-art, html.clean .ph-art, .ph-bleed .ph-art { display: none; }
.ph .ph-label { position: absolute; left: 12px; bottom: 12px; z-index: 2; max-width: calc(100% - 24px); padding: 6px 10px; border-radius: 9px; background: color-mix(in oklch, var(--bg-abyss) 82%, transparent); border: 1px solid var(--line-2); font: 600 .6875rem/1.35 var(--font-mono); color: var(--text-2); }
.ph .ph-label b { color: var(--gold-text); }
/* The label text lives in data attributes and is drawn here, not in the markup: it is a
   designer note for the placeholder state, and as text nodes it led every crawler's text
   extract ("IMG-LAND-HERO-01 · 2880×1600 ..."). ::before matches the old <b> exactly. */
.ph .ph-label[data-ph-id]::before { content: attr(data-ph-id); color: var(--gold-text); font-weight: bolder; }
.ph .ph-label[data-ph-spec]::after { content: attr(data-ph-spec); }
.ph.loaded::before, .ph.loaded::after, .ph.loaded .ph-label { display: none; }
html.clean .ph-label { display: none; }
.ph-play { position: absolute; z-index: 3; left: 50%; top: 50%; translate: -50% -50%; }

/* ---------- mascot ---------- */
.genie { position: relative; display: block; }
.genie-stage { position: relative; display: block; width: 100%; aspect-ratio: 1; will-change: transform; }
.genie-stage img { position: absolute; inset: 0; width: 100%; height: 100%; object-fit: contain; opacity: 0; transition: opacity 170ms var(--ease-out); user-select: none; -webkit-user-drag: none; pointer-events: none; }
.genie-stage img.on { opacity: 1; }
.rg-spark { position: absolute; width: 14px; height: 14px; background: var(--gold); pointer-events: none; z-index: 3; clip-path: polygon(50% 0, 61% 39%, 100% 50%, 61% 61%, 50% 100%, 39% 61%, 0 50%, 39% 39%); filter: drop-shadow(0 0 6px var(--gold)); }

/* ---------- dev / QA panel ---------- */
.dev-panel { position: fixed; left: 12px; bottom: 66px; z-index: var(--z-dev); display: flex; flex-direction: column-reverse; align-items: flex-start; gap: 8px; max-height: calc(100dvh - 24px); font-family: var(--font-text); }
.dev-fab { display: inline-flex; gap: 6px; align-items: center; height: 40px; padding: 0 14px; border-radius: 12px; background: #17151f; color: #fff; border: 2px solid var(--ink); box-shadow: 3px 3px 0 var(--ink); font: 800 13px var(--font-text); }
.dev-body { width: min(360px, calc(100vw - 24px)); max-height: 72dvh; overflow: auto; padding: 4px 14px 14px; border-radius: 16px; background: #15131d; border: 1px solid #ffffff24; box-shadow: var(--e3); color: #eee; font-size: 13px; }
.dev-sec h3 { font: 700 11px var(--font-mono); letter-spacing: .1em; text-transform: uppercase; color: #a6a9c9; margin: 12px 0 6px; }
.dev-row { display: flex; flex-wrap: wrap; gap: 6px; align-items: center; justify-content: space-between; padding: 3px 0; }
.dev-row .select { min-height: 34px; padding: 4px 30px 4px 8px; width: auto; max-width: 200px; font-size: 13px; }

/* the genie's head by the wordmark follows the theme with the genie (js/genie.js): hidden for the
   moment its art takes to arrive, so it never flashes the official colours first */
html[data-genie-tint="pending"] img[data-genie-builtin="logo"] { visibility: hidden; }

/* ---- theme effects: the perspective grids of Tron Grid, Laser Grid and Synthwave 84 (js/effects.js,
   grid()), laid the way Design Studio's Tron lays its floor: a tiled plane tipped 85° under a CSS
   perspective, so every line keeps its true width and the far tiles blur together. The values are
   set per effect and per size from JS; the defaults are the reference's. */
.fx-grid { position: absolute; inset: 0; overflow: hidden; pointer-events: none; perspective: var(--g-persp, 300px); perspective-origin: var(--g-vx, 50%) var(--g-hy, 50%); animation: fx-grid-in .7s ease-out both; }
@keyframes fx-grid-in { from { opacity: 0; } }
/* the plane hangs --g-drop below the eye (the ceiling as far above it), so the camera rides above the
   floor instead of skimming it and the nearest tiles stay a sensible size */
.fx-grid .pl { position: absolute; left: 0; top: calc(var(--g-hy, 50%) + var(--g-drop, 0px)); width: 100%; height: 100%; transform: rotateX(85deg); transform-origin: 50% 0; transform-style: preserve-3d; }
.fx-grid .pl.ceiling { top: auto; bottom: calc(100% - var(--g-hy, 50%) + var(--g-drop, 0px)); transform: rotateX(-85deg); transform-origin: 50% 100%; }
.fx-grid .fl { position: absolute; top: -100%; left: -100%; width: 300%; height: 300%;
  background-image: linear-gradient(90deg, var(--g-line) var(--g-w, 2px), transparent var(--g-w, 2px)), linear-gradient(0deg, var(--g-line) var(--g-w, 2px), transparent var(--g-w, 2px));
  background-size: var(--g-tile, 60px) var(--g-tile, 60px);
  filter: drop-shadow(0 0 var(--g-blur, 4px) var(--g-glow));
  -webkit-mask-image: linear-gradient(to bottom, transparent 0%, #000 30%, #000 100%); mask-image: linear-gradient(to bottom, transparent 0%, #000 30%, #000 100%);
  animation: fx-grid-floor var(--g-dur, 1s) linear infinite; }
.fx-grid .ceiling .fl { -webkit-mask-image: linear-gradient(to top, transparent 0%, #000 30%, #000 100%); mask-image: linear-gradient(to top, transparent 0%, #000 30%, #000 100%); animation-name: fx-grid-ceiling; }
@keyframes fx-grid-floor { to { transform: translateY(var(--g-tile, 60px)); } }
@keyframes fx-grid-ceiling { to { transform: translateY(calc(-1 * var(--g-tile, 60px))); } }
.fx-grid.paused .fl { animation-play-state: paused; }
.fx-grid .hz { position: absolute; inset: 0; }

/* GENERATED from src/icons/model-families.json by src/build.py -- do not edit. */
/* The official vendor mark for each model family, lifted unmodified from the deployed
   RoGenie. One rule per family so each image ships once. */
.fam.has-icon.fam-auto-cheap { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTExLjkgMy4xaDcuMmExLjggMS44IDAgMCAxIDEuOCAxLjh2Ny4yYTEuOCAxLjggMCAwIDEtLjUzIDEuMjdsLTguMiA4LjJhMS44IDEuOCAwIDAgMS0yLjU0IDBsLTcuMi03LjJhMS44IDEuOCAwIDAgMSAwLTIuNTRsOC4yLTguMkExLjggMS44IDAgMCAxIDExLjkgMy4xeiIgZmlsbD0iIzIyYzU1ZSIgZmlsbC1vcGFjaXR5PSIwLjIwIiBzdHJva2U9IiMyMmM1NWUiIHN0cm9rZS13aWR0aD0iMS44IiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+PGNpcmNsZSBjeD0iMTYuNiIgY3k9IjcuNCIgcj0iMS45IiBmaWxsPSIjMjJjNTVlIi8+PC9zdmc+"); }
.fam.has-icon.fam-auto-smart { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOGI1Y2Y2IiBzdHJva2Utd2lkdGg9IjEuNiIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIj48cGF0aCBkPSJNMTIgMy44QTMuMCAzLjAgMCAwIDAgNi42IDUuNkEzLjMgMy4zIDAgMCAwIDQuNCAxMC40QTMuMyAzLjMgMCAwIDAgNi42IDE1LjRBMy4wIDMuMCAwIDAgMCAxMi4wIDE3LjBaIi8+PHBhdGggZD0iTTEyIDMuOEEzLjAgMy4wIDAgMCAxIDE3LjQgNS42QTMuMyAzLjMgMCAwIDEgMTkuNiAxMC40QTMuMyAzLjMgMCAwIDEgMTcuNCAxNS40QTMuMCAzLjAgMCAwIDEgMTIuMCAxNy4wWiIvPjxwYXRoIGQ9Ik0xMiAzLjh2MTMuMiIvPjxwYXRoIGQ9Ik04LjYgOS42YzEuMy4zIDIuMSAxLjQgMi4xIDIuNiIvPjxwYXRoIGQ9Ik0xNS40IDkuNmMtMS4zLjMtMi4xIDEuNC0yLjEgMi42Ii8+PC9zdmc+"); }
.fam.has-icon.fam-claude { background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9Ii0yLjA1MCAtMi4wMDAgMTA0LjAwMCAxMDQuMDAwIiBjbGFzcz0idy1mdWxsIiBmaWxsPSJoc2woMTQuOCwgNjMuMSUsIDU5LjYlKSI+PHBhdGggZD0ibTE5LjYgNjYuNSAxOS43LTExIC4zLTEtLjMtLjVoLTFsLTMuMy0uMi0xMS4yLS4zTDE0IDUzbC05LjUtLjUtMi40LS41TDAgNDlsLjItMS41IDItMS4zIDIuOS4yIDYuMy41IDkuNS42IDYuOS40TDM4IDQ5LjFoMS42bC4yLS43LS41LS40LS40LS40TDI5IDQxbC0xMC42LTctNS42LTQuMS0zLTItMS41LTItLjYtNC4yIDIuNy0zIDMuNy4zLjkuMiAzLjcgMi45IDggNi4xTDM3IDM2bDEuNSAxLjIuNi0uNC4xLS4zLS43LTEuMUwzMyAyNWwtNi0xMC40LTIuNy00LjMtLjctMi42Yy0uMy0xLS40LTItLjQtM2wzLTQuMkwyOCAwbDQuMi42TDMzLjggMmwyLjYgNiA0LjEgOS4zTDQ3IDI5LjlsMiAzLjggMSAzLjQuMyAxaC43di0uNWwuNS03LjIgMS04LjcgMS0xMS4yLjMtMy4yIDEuNi0zLjggMy0yTDYxIDIuNmwyIDIuOS0uMyAxLjgtMS4xIDcuN0w1OSAyNy4xbC0xLjUgOC4yaC45bDEtMS4xIDQuMS01LjQgNi45LTguNiAzLTMuNUw3NyAxM2wyLjMtMS44aDQuM2wzLjEgNC43LTEuNCA0LjktNC40IDUuNi0zLjcgNC43LTUuMyA3LjEtMy4yIDUuNy4zLjRoLjdsMTItMi42IDYuNC0xLjEgNy42LTEuMyAzLjUgMS42LjQgMS42LTEuNCAzLjQtOC4yIDItOS42IDItMTQuMyAzLjMtLjIuMS4yLjMgNi40LjYgMi44LjJoNi44bDEyLjYgMSAzLjMgMiAxLjkgMi43LS4zIDItNS4xIDIuNi02LjgtMS42LTE2LTMuOC01LjQtMS4zaC0uOHYuNGw0LjYgNC41IDguMyA3LjVMODkgODAuMWwuNSAyLjQtMS4zIDItMS40LS4yLTkuMi03LTMuNi0zLTgtNi44aC0uNXYuN2wxLjggMi43IDkuOCAxNC43LjUgNC41LS43IDEuNC0yLjYgMS0yLjctLjYtNS44LTgtNi05LTQuNy04LjItLjUuNC0yLjkgMzAuMi0xLjMgMS41LTMgMS4yLTIuNS0yLTEuNC0zIDEuNC02LjIgMS42LTggMS4zLTYuNCAxLjItNy45LjctMi42di0uMkg0OUw0MyA3MmwtOSAxMi4zLTcuMiA3LjYtMS43LjctMy0xLjUuMy0yLjhMMjQgODZsMTAtMTIuOCA2LTcuOSA0LTQuNi0uMS0uNWgtLjNMMTcuMiA3Ny40bC00LjcuNi0yLTIgLjItMyAxLTEgOC01LjVaIj48L3BhdGg+PC9zdmc+"); }
.fam.has-icon.fam-codestral { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEVHcEzdBAb/ggPfBAT/hQP/lwLbAwjIABrLARf/rgHFABz/hAPGABzEAB37UA//rQH6UA/7Tw/7ggDEAB37UA//ggThBQD/rwH6TQ//gwPgAAD/ngLQAhTiBQB30kzeAAAAEnRSTlMA2XFnXaBUc5lzhNjrpnPc29q2zZkpAAAAvElEQVRYhe2SwQ6CMBBEgVYoBUUjIEX5/99U0mkPa1YNJgbJPi6d2c1rDySJIGwOXYKlC+UFcIId5o0I1iy4Aq11Nn9h8DjPja4w5wRZR4g3++ic84dqsaD7ThARwQuBI0QB6TnBYSC0HloPJ07QfshRBCsWFKOnDwXymCMb5JQT9CAUIUcB8s8FExFMG36Bmjz8C7BABbnxpDeAbBSwZKFGthDYM0O4Yc/MaxGsSJAXDMmbBfX8MwrCv3IHTWBri0Dy7JIAAAAASUVORK5CYII="); }
.fam.has-icon.fam-command { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAS1BMVEVHcEw1UUbRjuM1UUbRjuLRjuI1UUY1UUY1UUY1UUbSjuLRjuL/dln/d1n/d1nRjuL/d1nRjuI1UUb/d1n/d1n/d1k1UUbRjuL/d1lpWQy+AAAAFnRSTlMAnGcT7cUmb8TnFowc3mc/t6lDQ4fwUU2yTQAAAedJREFUWIWlVlcChSAMAxURcT4H3v+kT3AxiqLk26RtOhAhHTnFBZufwDBNEQT6zD1R5C49nK1ATXpevOSvSej832v6ChzJ16r4yJ/n3cn0K/+w4b1/J9Iv/dOhXIjgqxpiEpjZKvBifgGsIxjFnyMrkAI4is+ihmBWXYjzkMZNgbQgTgBHjgGL3KRtmyPamH+6pSdYHneNroP4yUX9WfhggvmqvL6IzqP0LgXsvmkvXGAYfFVDbwqjEDt4FvDPRw9RYJ4/ghP341TcBT988C6VHrxNekJ63pZgGWAztOAlz8QB0oISdhZGcCIMEDALtP5kHaExvUZGD34i8fqRpqblbe+yJbhXwUACBIdyqIZmGCqH3vrpKy4rm3pRqBuTz+/oQmT7Z8O0nJgGje8p3i6iWQxcSSRP/C0Fi38plI985UJl85dl95I882UrO1egC05A9FACewoPHdiQoRESGEMrEAKqYK8hiC/QBAlMwQIZgvjLEuqhIH6BsAz4jcDtGh1IUA3x66BFkADnaO/C8ybIOXI3QWLbhoAa5GH0WRCSgtpmYBRHFLZN/faZY2N93IPyvghyXENrGKfrMt4q9OdnlZFDrV/W0l+FcZI1H0ZkwnPVuf0wNd2aRt1ZR1mh5cQQyQjXov8BJXEYJmaBteYAAAAASUVORK5CYII="); }
.fam.has-icon.fam-composer { background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyBpZD0iRWJlbmVfMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB2ZXJzaW9uPSIxLjEiIHZpZXdCb3g9IjAgMCA0NjYuNzMgNTMyLjA5Ij4KICA8IS0tIEdlbmVyYXRvcjogQWRvYmUgSWxsdXN0cmF0b3IgMjkuNi4xLCBTVkcgRXhwb3J0IFBsdWctSW4gLiBTVkcgVmVyc2lvbjogMi4xLjEgQnVpbGQgOSkgIC0tPgogIDxkZWZzPgogICAgPHN0eWxlPgogICAgICAuc3QwIHsKICAgICAgICBmaWxsOiAjZWRlY2VjOwogICAgICB9CiAgICA8L3N0eWxlPgogIDwvZGVmcz4KICA8cGF0aCBjbGFzcz0ic3QwIiBkPSJNNDU3LjQzLDEyNS45NEwyNDQuNDIsMi45NmMtNi44NC0zLjk1LTE1LjI4LTMuOTUtMjIuMTIsMEw5LjMsMTI1Ljk0Yy01Ljc1LDMuMzItOS4zLDkuNDYtOS4zLDE2LjExdjI0Ny45OWMwLDYuNjUsMy41NSwxMi43OSw5LjMsMTYuMTFsMjEzLjAxLDEyMi45OGM2Ljg0LDMuOTUsMTUuMjgsMy45NSwyMi4xMiwwbDIxMy4wMS0xMjIuOThjNS43NS0zLjMyLDkuMy05LjQ2LDkuMy0xNi4xMXYtMjQ3Ljk5YzAtNi42NS0zLjU1LTEyLjc5LTkuMy0xNi4xMWgtLjAxWk00NDQuMDUsMTUxLjk5bC0yMDUuNjMsMzU2LjE2Yy0xLjM5LDIuNC01LjA2LDEuNDItNS4wNi0xLjM2di0yMzMuMjFjMC00LjY2LTIuNDktOC45Ny02LjUzLTExLjMxTDI0Ljg3LDE0NS42N2MtMi40LTEuMzktMS40Mi01LjA2LDEuMzYtNS4wNmg0MTEuMjZjNS44NCwwLDkuNDksNi4zMyw2LjU3LDExLjM5aC0uMDFaIi8+Cjwvc3ZnPg=="); }
.fam.has-icon.fam-deepseek { background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkRlZXBTZWVrPC90aXRsZT48cGF0aCBkPSJNMjMuNzQ4IDQuNDgyYy0uMjU0LS4xMjQtLjM2NC4xMTMtLjUxMi4yMzQtLjA1MS4wMzktLjA5NC4wOS0uMTM3LjEzNi0uMzcyLjM5Ny0uODA2LjY1Ny0xLjM3My42MjYtLjgyOS0uMDQ2LTEuNTM3LjIxNC0yLjE2My44NDgtLjEzMy0uNzgyLS41NzUtMS4yNDgtMS4yNDctMS41NDgtLjM1Mi0uMTU2LS43MDgtLjMxMS0uOTU1LS42NS0uMTcyLS4yNDEtLjIxOS0uNTEtLjMwNS0uNzc0LS4wNTUtLjE2LS4xMS0uMzIzLS4yOTMtLjM1LS4yLS4wMzEtLjI3OC4xMzYtLjM1Ni4yNzYtLjMxMy41NzItLjQzNCAxLjIwMi0uNDIyIDEuODQuMDI3IDEuNDM2LjYzMyAyLjU4IDEuODM4IDMuMzkzLjEzNy4wOTMuMTcyLjE4Ny4xMjkuMzIzLS4wODIuMjgtLjE4LjU1Mi0uMjY2LjgzMy0uMDU1LjE3OS0uMTM3LjIxNy0uMzI5LjE0YTUuNTI2IDUuNTI2IDAgMDEtMS43MzYtMS4xOGMtLjg1Ny0uODI4LTEuNjMxLTEuNzQyLTIuNTk3LTIuNDU4YTExLjM2NSAxMS4zNjUgMCAwMC0uNjg5LS40NzFjLS45ODUtLjk1Ny4xMy0xLjc0My4zODgtMS44MzYuMjctLjA5OC4wOTMtLjQzMi0uNzc5LS40MjgtLjg3Mi4wMDQtMS42Ny4yOTUtMi42ODcuNjg0YTMuMDU1IDMuMDU1IDAgMDEtLjQ2NS4xMzcgOS41OTcgOS41OTcgMCAwMC0yLjg4My0uMTAyYy0xLjg4NS4yMS0zLjM5IDEuMTAyLTQuNDk3IDIuNjIzQy4wODIgOC42MDYtLjIzMSAxMC42ODQuMTUyIDEyLjg1Yy40MDMgMi4yODQgMS41NjkgNC4xNzUgMy4zNiA1LjY1MyAxLjg1OCAxLjUzMyAzLjk5NyAyLjI4NCA2LjQzOCAyLjE0IDEuNDgyLS4wODUgMy4xMzMtLjI4NCA0Ljk5NC0xLjg2LjQ3LjIzNC45NjIuMzI3IDEuNzguMzk3LjYzLjA1OSAxLjIzNi0uMDMgMS43MDUtLjEyOC43MzUtLjE1Ni42ODQtLjgzNy40MTktLjk2MS0yLjE1NS0xLjAwNC0xLjY4Mi0uNTk1LTIuMTEzLS45MjYgMS4wOTYtMS4yOTYgMi43NDYtMi42NDIgMy4zOTItNy4wMDMuMDUtLjM0Ny4wMDctLjU2NSAwLS44NDUtLjAwNC0uMTcuMDM1LS4yMzcuMjMtLjI1NmE0LjE3MyA0LjE3MyAwIDAwMS41NDUtLjQ3NWMxLjM5Ni0uNzYzIDEuOTYtMi4wMTUgMi4wOTMtMy41MTcuMDItLjIzLS4wMDQtLjQ2Ny0uMjQ3LS41ODh6TTExLjU4MSAxOGMtMi4wODktMS42NDItMy4xMDItMi4xODMtMy41Mi0yLjE2LS4zOTIuMDI0LS4zMjEuNDcxLS4yMzUuNzYzLjA5LjI4OC4yMDcuNDg2LjM3MS43MzkuMTE0LjE2Ny4xOTIuNDE2LS4xMTMuNjAzLS42NzMuNDE2LTEuODQyLS4xNC0xLjg5Ny0uMTY3LTEuMzYxLS44MDItMi41LTEuODYtMy4zMDEtMy4zMDctLjc3NC0xLjM5My0xLjIyNC0yLjg4Ny0xLjI5OC00LjQ4Mi0uMDItLjM4Ni4wOTMtLjUyMi40NzctLjU5MmE0LjY5NiA0LjY5NiAwIDAxMS41MjktLjAzOWMyLjEzMi4zMTIgMy45NDYgMS4yNjUgNS40NjggMi43NzQuODY4Ljg2IDEuNTI1IDEuODg3IDIuMjAyIDIuODkxLjcyIDEuMDY2IDEuNDk0IDIuMDgyIDIuNDggMi45MTQuMzQ4LjI5Mi42MjUuNTE0Ljg5MS42NzctLjgwMi4wOS0yLjE0LjExLTMuMDU0LS42MTR6bTEtNi40NGEuMzA2LjMwNiAwIDAxLjQxNS0uMjg3LjMwMi4zMDIgMCAwMS4yLjI4OC4zMDYuMzA2IDAgMDEtLjMxLjMwNy4zMDMuMzAzIDAgMDEtLjMwNC0uMzA4em0zLjExIDEuNTk2Yy0uMi4wODEtLjM5OS4xNTEtLjU5LjE2YTEuMjQ1IDEuMjQ1IDAgMDEtLjc5OC0uMjU0Yy0uMjc0LS4yMy0uNDctLjM1OC0uNTUyLS43NThhMS43MyAxLjczIDAgMDEuMDE2LS41ODhjLjA3LS4zMjctLjAwOC0uNTM3LS4yMzktLjcyNy0uMTg3LS4xNTYtLjQyNi0uMTk5LS42ODgtLjE5OWEuNTU5LjU1OSAwIDAxLS4yNTQtLjA3OGMtLjExLS4wNTQtLjItLjE5LS4xMTQtLjM1OC4wMjgtLjA1NC4xNi0uMTg2LjE5Mi0uMjEuMzU2LS4yMDIuNzY3LS4xMzYgMS4xNDYuMDE2LjM1Mi4xNDQuNjE4LjQwOCAxLjAwMS43ODIuMzkxLjQ1MS40NjIuNTc2LjY4NS45MTQuMTc2LjI2NS4zMzYuNTM3LjQ0NS44NDguMDY3LjE5NS0uMDE5LjM1NC0uMjUuNDUyeiIgZmlsbD0iIzRENkJGRSI+PC9wYXRoPjwvc3ZnPg=="); }
.fam.has-icon.fam-devstral { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEVHcEzdBAb/ggPfBAT/hQP/lwLbAwjIABrLARf/rgHFABz/hAPGABzEAB37UA//rQH6UA/7Tw/7ggDEAB37UA//ggThBQD/rwH6TQ//gwPgAAD/ngLQAhTiBQB30kzeAAAAEnRSTlMA2XFnXaBUc5lzhNjrpnPc29q2zZkpAAAAvElEQVRYhe2SwQ6CMBBEgVYoBUUjIEX5/99U0mkPa1YNJgbJPi6d2c1rDySJIGwOXYKlC+UFcIId5o0I1iy4Aq11Nn9h8DjPja4w5wRZR4g3++ic84dqsaD7ThARwQuBI0QB6TnBYSC0HloPJ07QfshRBCsWFKOnDwXymCMb5JQT9CAUIUcB8s8FExFMG36Bmjz8C7BABbnxpDeAbBSwZKFGthDYM0O4Yc/MaxGsSJAXDMmbBfX8MwrCv3IHTWBri0Dy7JIAAAAASUVORK5CYII="); }
.fam.has-icon.fam-doubao { background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkRvdWJhbzwvdGl0bGU+PHBhdGggZD0iTTUuMzEgMTUuNzU2Yy4xNzItMy43NSAxLjg4My01Ljk5OSAyLjU0OS02LjczOS0zLjI2IDIuMDU4LTUuNDI1IDUuNjU4LTYuMzU4IDguMzA4djEuMTJDMS41MDEgMjEuNTEzIDQuMjI2IDI0IDcuNTkgMjRhNi41OSA2LjU5IDAgMDAyLjItLjM3NWMuMzUzLS4xMi43LS4yNDggMS4wMzktLjM3OC45MTMtLjg5OSAxLjY1LTEuOTEgMi4yNDMtMi45OTItNC44NzcgMi40MzEtNy45NzQuMDcyLTcuNzYzLTQuNWwuMDAyLjAwMXoiIGZpbGw9IiMxRTM3RkMiPjwvcGF0aD48cGF0aCBkPSJNMjIuNTcgMTAuMjgzYy0xLjIxMi0uOTAxLTQuMTA5LTIuNDA0LTcuMzk3LTIuOC4yOTUgMy43OTIuMDkzIDguNzY2LTIuMSAxMi43NzNhMTIuNzgyIDEyLjc4MiAwIDAxLTIuMjQ0IDIuOTkyYzMuNzY0LTEuNDQ4IDYuNzQ2LTMuNDU3IDguNTk2LTUuMjE5IDIuODItMi42ODMgMy4zNTMtNS4xNzggMy4zNjEtNi42NmEyLjczNyAyLjczNyAwIDAwLS4yMTYtMS4wODR2LS4wMDJ6IiBmaWxsPSIjMzdFMUJFIj48L3BhdGg+PHBhdGggZD0iTTE0LjMwMyAxLjg2N0MxMi45NTUuNyAxMS4yNDggMCA5LjM5IDAgNy41MzIgMCA1Ljg4My42NzcgNC41NDUgMS44MDcgMi43OTEgMy4yOSAxLjYyNyA1LjU1NyAxLjUgOC4xMjV2OS4yMDFjLjkzMi0yLjY1IDMuMDk3LTYuMjUgNi4zNTctOC4zMDcuNS0uMzE4IDEuMDI1LS41OTUgMS41NjktLjgyOSAxLjg4My0uODAxIDMuODc4LS45MzIgNS43NDYtLjcwNi0uMjIyLTIuODMtLjcxOC01LjAwMi0uODctNS42MTdoLjAwMXoiIGZpbGw9IiNBNTY5RkYiPjwvcGF0aD48cGF0aCBkPSJNMTcuMzA1IDQuOTYxYTE5OS40NyAxOTkuNDcgMCAwMS0xLjA4LTEuMDk0Yy0uMjAyLS4yMTMtLjM5OC0uNDE5LS41ODYtLjYyMmwtMS4zMzMtMS4zNzhjLjE1MS42MTUuNjQ4IDIuNzg2Ljg2OSA1LjYxNyAzLjI4OC4zOTUgNi4xODUgMS44OTggNy4zOTYgMi44LTEuMzA2LTEuMjc1LTMuNDc1LTMuNDg3LTUuMjY2LTUuMzIzeiIgZmlsbD0iIzFFMzdGQyI+PC9wYXRoPjwvc3ZnPg=="); }
.fam.has-icon.fam-ernie { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAANzUlEQVR4nOWbe3BU133HP7/7WElYIImHeLj4GULABhcCsR1oQ13bicPYLukwjTOpndZ18SM4ruN/2plOH9NOxm1CXCANcfxqOhNqMrZjOoE2cWwc49rGUAMF/CIWxsgCCxCClbSrvff8+se59+7dlbS7SEKZTH5/wNm9q3N+v9/5/p7nXKGMVPUy4M+A64ELgMby3/yaURY4DPwUeERE9qcfSjxQ1QywBrgLcMaSwzEkA3wXuF9E+iFSQCT8VuCaXx1vY0rPAzeISH+802sYQ+F7CrBub8jCTQE3bjW81KFjtXRM12BlRiKb38sYwX5bu+E7e0N2d3mgIeK41Hlw0wVw12XwW41SfZLRIQPMF1X9NnDfuV6trVvZsC/kP9uUguOjYT+CWCN0XBzfYVqdcvts5QuXCI3+mCjiIVHV/cDcc7VCtqBsfNvw+L6QjwoZCPsBjbyPVYCIgAh4HiKwYKJh9TxYMtVBzq0eDoiqnuEchboXDoes223YfRwEBQ2t4CKR0HYMKSUIiO/hqWHFxcLtc4RLxp8L7gDIiqqOugd664The7sLbGkzBOKiYaEoOESCpnY//s4hZRYOknGZ7Ib86RyHlZdAU2b04TCqCjjRqzy6J88PDwScDnzUFIjhnuwwgCOlgifPodQsAM9HHJjbpPz5HPj8BaOrhFFRQGBgy8E8a3f0c/CM9e6YMII6yY4Xx5ShgYFmUfbcmoVy7Uy4Z64wu3mkXFsasQLe6AhY91ofPz8UgOuBCaJNlATWUCq8iFiIuz6IQhgMNIsYDU7KTKJo0eLDFy9RbpsttNT9ihTQ2WN4ZFcfP9ido1frbFgTLQoCiJOCfWqHxcsgpp9LJ3pkC8qxXAYIsaG5TAkyiLm4HuLCrEa4+zL47Exwh2kZZ62AvoLy4/05Nuzso+20i4YBYEq9+GBQdgRxPXBc5k0Mue/Keq6Y4pILlWffDXhsX0CXqYcgVypsat4BZuF5OKIsmy7cORd+e9I5VsC2X+ZZ+3KWHR8aRBxUg2iDI0Gd4rhEEa6L42WYPs5wx4IMK2e7NNaVJp7vdhke3hPwzC9D1PWtKakO9B1DmMU4R/mDC5XbPyFnlU3WpIDDXQEbXu3hyT058vgQ5qPFy5yVk47p9jvHryPjGG6e7XHPojouanaHXMcovHjEsHZXP3ujVBlMWa7A4GbhuIgvnF+nrJoLN18k1A+9VG0KMAqP78jy8Ks9HDnj2F2JGSpnpCy0ieeDwFUzXb66uJ7fvdCvzk1Ep/PKprcDHvm/kM4cgJYKW24WaRR6rl13ivK1ecInJ49AAQ9t6+bB57OI44AGgzIwwN7FQXyfGY2walEdt8yvp94bnodqzyqrn8+z+7ggagbPEwagQUEcnDqXVk95dJnw8aZhKmDW3x8m2w82mSmP0wMVIX494/yQP5pXzx2LG5jZVAMGh6COHuWJfQWeeddwvM8UeYDE9KzMZZuRKMI6yblNIT/+3NB8eJWY6M0bNI5MAirFMfFnBxzHR9Vw3UWwemkTC2fUDvdyygXKDw8UeHRvQEefixoDmGTzVUi7BVRAHAWVhL/op2gQcOBE5fUqKkBicKi1whjIMWQEQZwMFzWF3LN0An94eQOZYcIdYPsHAet35nm1I8ohwhw4jhUcsQWVFc2OJBqr/b90ZfudW6XLUVEBqgY1MdRAHWIk2kxOlDsW+dy5ZCLTxg8f7oe6Qta93sfmd0IK4qEmgDBayJgE2iXrx/wgyUalnydoqLIfFRWAYmNxNJQiIBBx+exsn7/93PCT8tN5w8a9OR59o8CxnGfDDvnEoca4s+tpJJVaNDguoIgxxd9r/PsYDUK1IF8ZAUZJnK+D9QeAOKDGsOTi+mEJHhj46bt51r/ay76Tji2ctJDKI8r9jaKJo3MQL8OMhgJ3L8yw8c0CB055tvJMQmLRTDEjUADGgJGizUt6Rwyec/ZlxO6OgLWv9PKzg3lwXDD9duccQSJmrXNVJOXYxLG5RZ0UuO1y5SvzGpje6PDMOwW730YjJ5nOHnVkJqAKqhGcNOWINH5Wu+Adx3vYsPV9Ht9+nB6/icykZrxxDWXzW7LoT0HZ9VGU35kW8tVPjePKGUW2NTJTVVJOMprQes/hK2AgAtJhSKm1jHjpf9tZ9Q/P8eahM7YnaAxecwtNCxbSMON8VE0xtIk1NetoXXB9ZjUb7lpUz40fz5Ap87Vq1O6+2shgnWDRZHSkCIhUO0CTtQp/uOM0t/31f9HW0QeRneK6BKe6OPX6a7ifuQa/qSkRIHZeuD7j/ZAvzRdWLW5k8rih45kmcEw5SftkpAjQQRMh+7k2G3hi8wHaOnqjOiJFrkt45gx977fhz7siUbR6GTxHuf4S4Z4rx3PF9CpJVYQANZrwCUmmMDInqNHEIrEz0iQdVjFVtQvwxlsfMaQnchz6T3ahYQiujzgu86bAXyxt5LqP1SXCVORRtWgGJdGCkZuA9XRQElcpOq1aEBBUccPiuohbz6SGkK8squNPFo2jueEsDqki+FtnWrTVtMOuRFUREHep0nE5RkMtlJnUij2dHnQFzpvays1zfe5dMoHZU86+hlAtOsLSTNGiYcQIiDe5LLiAmprCYP2088lM/oD+jkM2r4/JGDLTZ3L3ijn83U0TqoXrijwmCEhnqkjxQwU6KwSk7crG6uoaENdjwryFZD3o7zyGGoM4DpnWqYy/bBGtE8cNX3giHuIwGGeqSZ0w0iiAJlEwms4uQO1hUI3B8TNMuHwBYU+WMJ/DbWjAGz8B8RswYRU3XXUBtR4/TgIQVGI0jLAWIELAYH0AEVNbKqgKxqChwRnXiNtoD/o0NIgTnl06Oej8RGHQRCmw2uRtNKpBTeKrRM6vdFwT7yadrcUNFttdUlN7NlmZR6JwPVgRVfnvawqDxbQi1YywaWItLEa1QzGUJn+n1W20+vRaFpJTPI60FqiGgFqY1xieRkuSKVtT1KrECvPHzq9s/thURw0BlkoRULP3LkNAaTJV6ySDk0R8pqvB4r/V5x9BKgzZXFiVwcoIqC2XGIqMKvn+qG1nDOpIsRqMmivVaoHKOWeq0EiESMaGza93czIbVJyipFgpmc+ORYcfBrcdzHHweIAG/daZmijipOav5mQrKkCjDCupCWJno6BhwM6Dvdy67hAvvXmmMqepbK043/AjQDavfP+VM3zt6S6yeWzfQmN+i2sWy+ShqYY8oBy6Uhyrsv2tXnataeOLS1q4b3krF06pGzBH0ZQozSRNjaE0lgl48Z0+vvn8KXa2G8TG2BKe7O9SpjqStngYpkve0mogdmQa5OkNXR7fdoqf7z3NvctbuWXpJM6LTn811T/TslmoOZTCwc5+/vUX3WzalSUQe3qsoog4KZ6K3eOYv6CKhVZUwPktGT44EYCaVJtJSh2ZCCIhWjC8f9zjgR98yH+8fJKv3ziNGxY04UUtrgGJikOx4VKBTvaEPLb9FI+9cpoTOb+kdW55SGWA5Qh1PW6aU7nCrKiAB2+/mLvWHaQ756NasDsmA6NCsqgWUMdh58Ecf7z2PVZ+eiKHO3O24ZGYUlSsQMU8QFV5dneWf3nuJPuPaaTFPooHouV5CdEztVdv3AyLZyjfWN4yfAXcdNUkWpt8HvzRB/zsjW4QF3tmn84LoASCxqDaT8E4bNzejT1VpnhwGf865VDLaV97jm/990m27MliHA+0YFeLnchgeUnMi5uhuR6+vMjnzqXjqzZXqlSDcNWcCTz5V3N4avtxHtx0hINHxXZxhzQLiXbFKqJkh9JHV5CUsTEdPxPw8AsneXz7KbryLoQhhKE9J4SBeUQqL8HL4DqGa2d5PHBtM/NmZKqJVpsCADKewy3LWlk2v5l1z7bzb899RHfOQzVEBkUDAxyeFB8Vv1TFFVuybt7VzT9vOc6bR0OLMikQX5rUqLSVwZydOIjjMqfVYfWyZlYsaDyr/sKwbonteS/Lmqfb2fxaFwVjL09IZJsD7xGk7vg4pddpxPX4wuLx5APYujeLSnQLRSTZ9ZJx+gqO4yBeHZMbQlYta+HWqyfQMu7sD2hHdE/wJztO8I1NR9jdFt3s0rBEEYntx2On6AXjC1XielFICBPISKQgoOSqXTJ2M7gSsHJxE6t/v4XZ04Z/WXDEFyW7ewK+v/UoG7Yc5ehpBROjgYFoKEcAlO3q4LueOFDXQxyXT17g8fXPT+G6uY01tc4r0ajdFX77SB/ffKqdp7Z30m+s5x5gFqlrdMmVusGUUo4Ax0Vcn2kTlLuvm8yXr26maRhwH4xG/bb4T3ac5J9+dIRd7/XZBTBFNFS16/KxPRGu95UVi5u4/4YpXDp1hHdjy+icXJc/3RuwcVsna55up70LoBDBHaAMDUOZhesjKEs/cR5/efM0Pj37vNFmE7AKOGcvTLQdzbF+cztPPNdJ3rhAYFtpibCDmIW4iOdz6VSP+5a3svLqFur9c/Y6U/acvzID8PKB0/zjxvf5xf4eKyimiIbELOzNj8Y65dbfm8S9y6cxvWX4t81qpANj9tJUbz7kyRc7+fYzH/JeZwiEFg0O4Pi4Dly/oIkHVkznU7PG7GXVh8b8tbkPT+RZ83Q7//5CJz156+U/Nr2O+1dM50ufaa16rW0UyQDzAVDV9TrG9D8HunX53+zTBx5t02Nd/WO9vKrqeohT9N/0V2ejF4lvAL5D1T7qrzUZrIw3lLw8nSb9DXt9/v8B9ILnL/wQy1oAAAAASUVORK5CYII="); }
.fam.has-icon.fam-flux { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAb1BMVEX///8AAAAHEw7g4uEyOTcACwMBEAvW2NcABwAABQAAEgvd3t709fReZGHl5uWjp6VrcW65vLoXIBxLUU6ws7KWmpmQlZOBhoR6f33CxMOqrasiKycqMi/v7+8QGxaMjo1BR0VVW1g5QT0ZJyESIRvo+PU4AAAB5UlEQVRYhe1V25aCMAy0xXJflKsKRfDy/9+4mSCgrriAZ5+WedDo6YRMJimr1YIFC/4JwvAzvhVF1kcJYiHiT/iZkFJk8/nW0ZTSPM4W4bu2JNiuPzNBRQKUIhHVPH4iTOnUtSNNkczh+66SpjocXFMqt5yR4AsO5KtVju/T9DZsSIA4I6oFiUin8j3iKx0gLGubMkz00j+h8FvvQhYxrQ1bcPbtr0wQTlP4FvGdM55ZVlmW7XZplqWH8XxPq1b1Fg/PESWuNzoBO8jj13sR6PEiUvC/4LwBL9bsxVrIsV4aEQSgAX47TCiF9jIyRiUoRDv9+84LDDT19TqGz5fIFpGFbWoEFA4t5rjLJYTsCFGguwnkUsbtpY8GOHwV98MUKirlYtGnOv62VczaIMo7L3wqCg3MO3HDYN91IwBeBF1SqD+jvfk7vtHv4BqHN01S7BKiZi/feNn43gvgcgPuarPNYSfrNfYd69A1rKzxZ7tIu4ctfQZ8t88sQJNlir2o+KHtkTIWw5eLAd/lxiJw27aIEix23BcNQbZ+3QawzCJyCTR0FHJkPtV8UUNeotlEY8iH8EeCW6MfERRCDeAhwRXHRBE88/1Yr4eg719tt7/iZy9LzxjG/YV8O+fNeVctWLDgL/EN8D8X+Xq69VYAAAAASUVORK5CYII="); }
.fam.has-icon.fam-glm { background-image: url("data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4KPCEtLSBHZW5lcmF0b3I6IEFkb2JlIElsbHVzdHJhdG9yIDI1LjMuMSwgU1ZHIEV4cG9ydCBQbHVnLUluIC4gU1ZHIFZlcnNpb246IDYuMDAgQnVpbGQgMCkgIC0tPgo8c3ZnIHZlcnNpb249IjEuMSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgeD0iMHB4IiB5PSIwcHgiCgkgdmlld0JveD0iMC45NDkgMC45NDQgMjguMTExIDI4LjExMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzAgMzA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KCS5zdDB7b3BhY2l0eTowLjM7ZmlsbDojRTJFNEU3O30KCS5zdDF7b3BhY2l0eTowLjg7ZmlsbDojRTJFNEU3O3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDo1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDJ7ZmlsbDp1cmwoI1NWR0lEXzFfKTt9Cgkuc3Qze2ZpbGw6bm9uZTtzdHJva2U6I0UwRTRFOTtzdHJva2Utd2lkdGg6MC4yNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3Q0e2ZpbGw6bm9uZTt9Cgkuc3Q1e2ZpbGw6IzlEQTFBNTt9Cgkuc3Q2e2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6bm9uZTt9Cgkuc3Q3e2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0RGRTJFNzt9Cgkuc3Q4e2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0NERDREQTt9Cgkuc3Q5e2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6I0IzQkNDNzt9Cgkuc3QxMHtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiM5REFBQjc7fQoJLnN0MTF7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojODY5OEE4O30KCS5zdDEye2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNTVkdJRF8yXyk7fQoJLnN0MTN7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzNfKTt9Cgkuc3QxNHtmaWxsOiMxRjYzRUM7fQoJLnN0MTV7ZmlsbDojMkQyRDJEO30KCS5zdDE2e2ZpbGw6bm9uZTtzdHJva2U6I0UwRTRFOTtzdHJva2Utd2lkdGg6MC41O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE3e2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNTVkdJRF80Xyk7fQoJLnN0MTh7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzVfKTt9Cgkuc3QxOXtmaWxsOm5vbmU7c3Ryb2tlOiM2NzczODA7c3Ryb2tlLXdpZHRoOjAuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QyMHtmaWxsOm5vbmU7c3Ryb2tlOnVybCgjU1ZHSURfNl8pO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDIxe2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNTVkdJRF83Xyk7fQoJLnN0MjJ7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzhfKTt9Cgkuc3QyM3tmaWxsOiNGRkZGRkY7fQoJLnN0MjR7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMkQyRDJEO30KCS5zdDI1e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzEwXyk7fQoJLnN0MjZ7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMTJfKTt9Cgkuc3QyN3tmaWxsOnVybCgjU1ZHSURfMTNfKTt9Cgkuc3QyOHtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOnVybCgjU1ZHSURfMTRfKTt9Cgkuc3QyOXtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOnVybCgjU1ZHSURfMTVfKTt9Cgkuc3QzMHtjbGlwLXBhdGg6dXJsKCNTVkdJRF8xN18pO30KCS5zdDMxe2NsaXAtcGF0aDp1cmwoI1NWR0lEXzE5Xyk7fQoJLnN0MzJ7ZmlsbDp1cmwoI1NWR0lEXzIwXyk7fQoJLnN0MzN7ZmlsbDpub25lO3N0cm9rZTp1cmwoI1NWR0lEXzIxXyk7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MzR7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzIyXyk7fQoJLnN0MzV7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzIzXyk7fQoJLnN0MzZ7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMjVfKTt9Cgkuc3QzN3tjbGlwLXBhdGg6dXJsKCNTVkdJRF8yN18pO30KCS5zdDM4e2ZpbGw6dXJsKCNTVkdJRF8yOF8pO30KCS5zdDM5e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzMwXyk7fQoJLnN0NDB7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMzJfKTt9Cgkuc3Q0MXtmaWxsOnVybCgjU1ZHSURfMzNfKTt9Cgkuc3Q0MntmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiMxMjZFRjY7fQoJLnN0NDN7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojRkZGRkZGO30KCS5zdDQ0e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzM1Xyk7fQoJLnN0NDV7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMzdfKTt9Cgkuc3Q0NntmaWxsOnVybCgjU1ZHSURfMzhfKTt9Cgkuc3Q0N3tmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiM5REExQTU7fQoJLnN0NDh7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzM5Xyk7fQoJLnN0NDl7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQwXyk7fQoJLnN0NTB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQxXyk7fQoJLnN0NTF7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQyXyk7fQoJLnN0NTJ7ZmlsbDpub25lO3N0cm9rZTp1cmwoI1NWR0lEXzQzXyk7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0NTN7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDpub25lO3N0cm9rZTojRTBFNEU5O3N0cm9rZS13aWR0aDowLjU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0NTR7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQ0Xyk7fQoJLnN0NTV7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQ1Xyk7fQoJLnN0NTZ7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQ2Xyk7fQoJLnN0NTd7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQ3Xyk7fQoJLnN0NTh7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQ4Xyk7fQoJLnN0NTl7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzQ5Xyk7fQoJLnN0NjB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzUwXyk7fQoJLnN0NjF7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzUxXyk7fQoJLnN0NjJ7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzUyXyk7fQoJLnN0NjN7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzUzXyk7fQoJLnN0NjR7Y2xpcC1wYXRoOnVybCgjU1ZHSURfNTVfKTt9Cgkuc3Q2NXtjbGlwLXBhdGg6dXJsKCNTVkdJRF81N18pO30KCS5zdDY2e2ZpbGw6dXJsKCNTVkdJRF81OF8pO30KCS5zdDY3e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzYwXyk7fQoJLnN0Njh7Y2xpcC1wYXRoOnVybCgjU1ZHSURfNjJfKTt9Cgkuc3Q2OXtmaWxsOnVybCgjU1ZHSURfNjNfKTt9Cgkuc3Q3MHtmaWxsOm5vbmU7c3Ryb2tlOnVybCgjU1ZHSURfNjRfKTtzdHJva2Utd2lkdGg6MjtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3Q3MXtjbGlwLXBhdGg6dXJsKCNTVkdJRF82Nl8pO30KCS5zdDcye2NsaXAtcGF0aDp1cmwoI1NWR0lEXzY4Xyk7fQoJLnN0NzN7ZmlsbDp1cmwoI1NWR0lEXzY5Xyk7fQoJLnN0NzR7Y2xpcC1wYXRoOnVybCgjU1ZHSURfNzFfKTt9Cgkuc3Q3NXtjbGlwLXBhdGg6dXJsKCNTVkdJRF83M18pO30KCS5zdDc2e2ZpbGw6dXJsKCNTVkdJRF83NF8pO30KCS5zdDc3e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzc2Xyk7fQoJLnN0Nzh7Y2xpcC1wYXRoOnVybCgjU1ZHSURfNzhfKTt9Cgkuc3Q3OXtmaWxsOnVybCgjU1ZHSURfNzlfKTt9Cgkuc3Q4MHtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOnVybCgjU1ZHSURfODBfKTt9Cgkuc3Q4MXtmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOnVybCgjU1ZHSURfODFfKTt9Cgkuc3Q4MntjbGlwLXBhdGg6dXJsKCNTVkdJRF84M18pO30KCS5zdDgze2NsaXAtcGF0aDp1cmwoI1NWR0lEXzg1Xyk7fQoJLnN0ODR7ZmlsbDp1cmwoI1NWR0lEXzg2Xyk7fQoJLnN0ODV7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzg3Xyk7fQoJLnN0ODZ7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDp1cmwoI1NWR0lEXzg4Xyk7fQoJLnN0ODd7Y2xpcC1wYXRoOnVybCgjU1ZHSURfOTBfKTt9Cgkuc3Q4OHtjbGlwLXBhdGg6dXJsKCNTVkdJRF85Ml8pO30KCS5zdDg5e2ZpbGw6dXJsKCNTVkdJRF85M18pO30KCS5zdDkwe2ZpbGw6bm9uZTtzdHJva2U6dXJsKCNTVkdJRF85NF8pO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDkxe2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNTVkdJRF85NV8pO30KCS5zdDkye2ZpbGwtcnVsZTpldmVub2RkO2NsaXAtcnVsZTpldmVub2RkO2ZpbGw6dXJsKCNTVkdJRF85Nl8pO30KCS5zdDkze2NsaXAtcGF0aDp1cmwoI1NWR0lEXzk4Xyk7fQoJLnN0OTR7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMTAwXyk7fQoJLnN0OTV7ZmlsbDp1cmwoI1NWR0lEXzEwMV8pO30KCS5zdDk2e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzEwM18pO30KCS5zdDk3e2NsaXAtcGF0aDp1cmwoI1NWR0lEXzEwNV8pO30KCS5zdDk4e2ZpbGw6dXJsKCNTVkdJRF8xMDZfKTt9Cgkuc3Q5OXtjbGlwLXBhdGg6dXJsKCNTVkdJRF8xMDhfKTt9Cgkuc3QxMDB7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMTEwXyk7fQoJLnN0MTAxe2ZpbGw6dXJsKCNTVkdJRF8xMTFfKTt9Cgkuc3QxMDJ7ZmlsbDojRkZGRkZGO3N0cm9rZTojQjNCQ0M3O3N0cm9rZS13aWR0aDowLjI3NTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QxMDN7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMTEzXyk7fQoJLnN0MTA0e2ZpbGw6I0ZERDEzODt9Cgkuc3QxMDV7ZmlsbDojRkNBNjJGO30KCS5zdDEwNntmaWxsOiNGQjc5Mjc7fQoJLnN0MTA3e2ZpbGw6I0Y0NEIyMjt9Cgkuc3QxMDh7ZmlsbDojRDgxOTE1O30KCS5zdDEwOXtmaWxsOiMyRDJEMkQ7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjAuMzM1NDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QxMTB7ZmlsbDpub25lO3N0cm9rZTojNjU3MjdGO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDExMXtmaWxsOm5vbmU7c3Ryb2tlOiM2NTcyN0Y7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTEye2ZpbGw6dXJsKCNTVkdJRF8xMTRfKTt9Cgkuc3QxMTN7ZmlsbDojRDA2QzUwO30KCS5zdDExNHtmaWxsOiMyRDJEMkQ7c3Ryb2tlOiNCM0JDQzc7c3Ryb2tlLXdpZHRoOjAuMjc1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDExNXtvcGFjaXR5OjAuMjt9Cgkuc3QxMTZ7ZmlsbDpub25lO3N0cm9rZTojNjc3MzgwO3N0cm9rZS13aWR0aDowLjM1NjQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTE3e2ZpbGw6bm9uZTtzdHJva2U6IzY3NzM4MDtzdHJva2Utd2lkdGg6MC4zNTY0O3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6MS4wMjEyLDEuMDIxMjt9Cgkuc3QxMTh7ZmlsbDpub25lO3N0cm9rZTojNjc3MzgwO3N0cm9rZS13aWR0aDowLjM1NjQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheToxLjAyMDUsMS4wMjA1O30KCS5zdDExOXtvcGFjaXR5OjAuMjtmaWxsOm5vbmU7fQoJLnN0MTIwe2ZpbGw6bm9uZTtzdHJva2U6IzY3NzM4MDtzdHJva2Utd2lkdGg6MC4zNjg5O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDEyMXtmaWxsOm5vbmU7c3Ryb2tlOiM2NzczODA7c3Ryb2tlLXdpZHRoOjAuMzY4OTtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5OjEuMDUwOSwxLjA1MDk7fQoJLnN0MTIye29wYWNpdHk6MC4zO2ZpbGw6IzFGNjNFQzt9Cgkuc3QxMjN7ZmlsbDojMkQyRDJEO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDowLjMxNjI7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTI0e2ZpbGw6I0ZGRkZGRjtzdHJva2U6I0IzQkNDNztzdHJva2Utd2lkdGg6MC4zMTYyO3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDEyNXtjbGlwLXBhdGg6dXJsKCNTVkdJRF8xMThfKTt9Cgkuc3QxMjZ7ZmlsbDp1cmwoI1NWR0lEXzExOV8pO30KCS5zdDEyN3tmaWxsOm5vbmU7c3Ryb2tlOiNERkUyRTc7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTI4e2ZpbGw6IzlEQTFBNTtzdHJva2U6I0ZGRkZGRjtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QxMjl7ZmlsbDp1cmwoI1NWR0lEXzEyMF8pO30KCS5zdDEzMHtmaWxsOm5vbmU7c3Ryb2tlOiM2NzczODA7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTMxe29wYWNpdHk6MC40O30KCS5zdDEzMntjbGlwLXBhdGg6dXJsKCNTVkdJRF8xMjJfKTt9Cgkuc3QxMzN7Y2xpcC1wYXRoOnVybCgjU1ZHSURfMTI0Xyk7fQoJLnN0MTM0e2ZpbGw6dXJsKCNTVkdJRF8xMjVfKTt9Cgkuc3QxMzV7ZmlsbDpub25lO3N0cm9rZTojODM5MkEzO3N0cm9rZS13aWR0aDowLjM1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDEzNntmaWxsOm5vbmU7c3Ryb2tlOiM4MzkyQTM7c3Ryb2tlLXdpZHRoOjAuMzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheTowLjk5NTEsMC45OTUxO30KCS5zdDEzN3tmaWxsOm5vbmU7c3Ryb2tlOiM4MzkyQTM7c3Ryb2tlLXdpZHRoOjAuMzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheToxLjAwNCwxLjAwNDt9Cgkuc3QxMzh7ZmlsbDpub25lO3N0cm9rZTp1cmwoI1NWR0lEXzEyNl8pO3N0cm9rZS13aWR0aDoxLjU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTM5e2ZpbGw6dXJsKCNTVkdJRF8xMjdfKTt9Cgkuc3QxNDB7ZmlsbDpub25lO3N0cm9rZTojRERFMEU0O3N0cm9rZS13aWR0aDowLjM1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE0MXtmaWxsOiMyRDJEMkQ7c3Ryb2tlOiNBOUIzQkU7c3Ryb2tlLXdpZHRoOjAuMjc1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE0MntmaWxsLXJ1bGU6ZXZlbm9kZDtjbGlwLXJ1bGU6ZXZlbm9kZDtmaWxsOiMxMjZFRjQ7fQoJLnN0MTQze2ZpbGw6I0ZGRkZGRjtzdHJva2U6I0IxQkFDNDtzdHJva2Utd2lkdGg6MC4yNzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTQ0e2ZpbGw6I0NFNkM1MDt9Cgkuc3QxNDV7ZmlsbDojNUI1QjVCO30KCS5zdDE0NntmaWxsOiM4MzkyQTM7fQoJLnN0MTQ3e2ZpbGw6bm9uZTtzdHJva2U6dXJsKCNTVkdJRF8xMjhfKTtzdHJva2Utd2lkdGg6MS41O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE0OHtmaWxsOnVybCgjU1ZHSURfMTI5Xyk7fQoJLnN0MTQ5e2ZpbGw6bm9uZTtzdHJva2U6I0I1QkRDNDtzdHJva2Utd2lkdGg6MC43O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE1MHtvcGFjaXR5OjAuNjtmaWxsOm5vbmU7c3Ryb2tlOiM3ODgzOEU7c3Ryb2tlLXdpZHRoOjAuMzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTUxe29wYWNpdHk6MC4yO2ZpbGw6bm9uZTtzdHJva2U6IzgzOTJBMztzdHJva2Utd2lkdGg6MC4zNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5OjEsMTt9Cgkuc3QxNTJ7ZmlsbDpub25lO3N0cm9rZTojRERFMEU0O3N0cm9rZS13aWR0aDowLjc1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE1M3tmaWxsOm5vbmU7c3Ryb2tlOiM4MzkyQTM7c3Ryb2tlLXdpZHRoOjAuNTtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QxNTR7b3BhY2l0eTowLjI7ZmlsbDpub25lO3N0cm9rZTojNjc3MzgwO3N0cm9rZS13aWR0aDowLjM1NjQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7c3Ryb2tlLWRhc2hhcnJheToxLjAxODIsMS4wMTgyO30KCS5zdDE1NXtmaWxsOm5vbmU7c3Ryb2tlOiNEREUwRTQ7c3Ryb2tlLXdpZHRoOjAuNzY1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE1NntmaWxsOnVybCgjU1ZHSURfMTMwXyk7fQoJLnN0MTU3e2ZpbGw6dXJsKCNTVkdJRF8xMzFfKTt9Cgkuc3QxNTh7ZmlsbDojQjFCQUM0O30KCS5zdDE1OXtmaWxsOiNDQkQxRDg7fQoJLnN0MTYwe2ZpbGw6IzBCMUIyQjt9Cgkuc3QxNjF7ZmlsbDojOTFEMTE5O30KCS5zdDE2MntvcGFjaXR5OjAuNzt9Cgkuc3QxNjN7ZmlsbDojRkZGRkZGO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDowLjQ0MTg7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTY0e2ZpbGw6bm9uZTtzdHJva2U6IzkzOUNBQTtzdHJva2Utd2lkdGg6MC4yMjA5O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE2NXtmaWxsOm5vbmU7c3Ryb2tlOiNGRkZGRkY7c3Ryb2tlLXdpZHRoOjMuMDkyNDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QxNjZ7ZmlsbDp1cmwoI1NWR0lEXzEzMl8pO30KCS5zdDE2N3tmaWxsOm5vbmU7c3Ryb2tlOnVybCgjU1ZHSURfMTMzXyk7c3Ryb2tlLXdpZHRoOjEuNzE0O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE2OHtmaWxsOnVybCgjU1ZHSURfMTM0Xyk7fQoJLnN0MTY5e2ZpbGw6dXJsKCNTVkdJRF8xMzVfKTt9Cgkuc3QxNzB7ZmlsbDp1cmwoI1NWR0lEXzEzNl8pO30KCS5zdDE3MXtmaWxsOnVybCgjU1ZHSURfMTM3Xyk7fQoJLnN0MTcye2ZpbGw6dXJsKCNTVkdJRF8xMzhfKTt9Cgkuc3QxNzN7ZmlsbDp1cmwoI1NWR0lEXzEzOV8pO30KCS5zdDE3NHtmaWxsOnVybCgjU1ZHSURfMTQwXyk7fQoJLnN0MTc1e2ZpbGw6dXJsKCNTVkdJRF8xNDFfKTt9Cgkuc3QxNzZ7ZmlsbDp1cmwoI1NWR0lEXzE0Ml8pO30KCS5zdDE3N3tmaWxsOnVybCgjU1ZHSURfMTQzXyk7fQoJLnN0MTc4e2ZpbGw6dXJsKCNTVkdJRF8xNDRfKTt9Cgkuc3QxNzl7ZmlsbDpub25lO3N0cm9rZTojMUY2M0VDO3N0cm9rZS13aWR0aDo0O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE4MHtmaWxsOm5vbmU7c3Ryb2tlOiMwQjFCMkI7c3Ryb2tlLXdpZHRoOjQ7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTgxe2ZpbGw6bm9uZTtzdHJva2U6IzY3NzM4MDtzdHJva2Utd2lkdGg6MC4zOTg5O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE4MntmaWxsOm5vbmU7c3Ryb2tlOiM2NzczODA7c3Ryb2tlLXdpZHRoOjAuMzk4OTtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5OjEuMTQsMS4xNDt9Cgkuc3QxODN7ZmlsbDojMjU3QUYxO30KCS5zdDE4NHtvcGFjaXR5OjAuMztmaWxsOiNGRkZGRkY7fQoJLnN0MTg1e2ZpbGw6bm9uZTtzdHJva2U6Izk4QTVCMjtzdHJva2Utd2lkdGg6NDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9Cgkuc3QxODZ7ZmlsbDpub25lO3N0cm9rZTojNjU3MjdGO3N0cm9rZS13aWR0aDowLjM5ODk7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTg3e2ZpbGw6bm9uZTtzdHJva2U6IzY1NzI3RjtzdHJva2Utd2lkdGg6MC4zOTg5O3N0cm9rZS1taXRlcmxpbWl0OjEwO3N0cm9rZS1kYXNoYXJyYXk6MS4xNCwxLjE0O30KCS5zdDE4OHtmaWxsOm5vbmU7c3Ryb2tlOiNERERGRTQ7c3Ryb2tlLXdpZHRoOjAuNzU7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQoJLnN0MTg5e2ZpbGw6IzlBOUVBMjt9Cgkuc3QxOTB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7ZmlsbDojMzI2N0FDO30KCS5zdDE5MXtmaWxsOiNGRkZGRkY7c3Ryb2tlOiNBRkI4QzM7c3Ryb2tlLXdpZHRoOjAuMjc1O3N0cm9rZS1taXRlcmxpbWl0OjEwO30KCS5zdDE5MntmaWxsOiNDNTY5NEU7fQoJLnN0MTkze2ZpbGw6IzgxOTJBMjt9Cgkuc3QxOTR7ZmlsbDojMkQyRDJEO3N0cm9rZTojRkZGRkZGO3N0cm9rZS13aWR0aDowLjYzMTc7c3Ryb2tlLW1pdGVybGltaXQ6MTA7fQo8L3N0eWxlPgo8ZyBpZD0i5Zu+5bGCXzIiPgo8L2c+CjxnIGlkPSLlm77lsYJfMSI+Cgk8cGF0aCBjbGFzcz0ic3QxOTQiIGQ9Ik0yNC41MSwyOC41MUg1LjQ5Yy0yLjIxLDAtNC0xLjc5LTQtNFY1LjQ5YzAtMi4yMSwxLjc5LTQsNC00aDE5LjAzYzIuMjEsMCw0LDEuNzksNCw0djE5LjAzCgkJQzI4LjUxLDI2LjcyLDI2LjcyLDI4LjUxLDI0LjUxLDI4LjUxeiIvPgoJPGc+CgkJPGc+CgkJCTxnPgoJCQkJPGc+CgkJCQkJPHBhdGggY2xhc3M9InN0MjMiIGQ9Ik0xNS40Nyw3LjFsLTEuMywxLjg1Yy0wLjIsMC4yOS0wLjU0LDAuNDctMC45LDAuNDdoLTcuMVY3LjA5QzYuMTYsNy4xLDE1LjQ3LDcuMSwxNS40Nyw3LjF6Ii8+CgkJCQkJPHBvbHlnb24gY2xhc3M9InN0MjMiIHBvaW50cz0iMjQuMyw3LjEgMTMuMTQsMjIuOTEgNS43LDIyLjkxIDE2Ljg2LDcuMSAJCQkJCSIvPgoJCQkJCTxwYXRoIGNsYXNzPSJzdDIzIiBkPSJNMTQuNTMsMjIuOTFsMS4zMS0xLjg2YzAuMi0wLjI5LDAuNTQtMC40NywwLjktMC40N2g3LjA5djIuMzNIMTQuNTN6Ii8+CgkJCQk8L2c+CgkJCTwvZz4KCQk8L2c+Cgk8L2c+CjwvZz4KPC9zdmc+Cg=="); }
.fam.has-icon.fam-gpt { background-image: url("data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSItNi4zOTEgLTYuNDAxIDMzMi43OTMgMzMyLjc5MyIgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KPHBhdGggZD0nbTI5Ny4wNiAxMzAuOTdjNy4yNi0yMS43OSA0Ljc2LTQ1LjY2LTYuODUtNjUuNDgtMTcuNDYtMzAuNC01Mi41Ni00Ni4wNC04Ni44NC0zOC42OC0xNS4yNS0xNy4xOC0zNy4xNi0yNi45NS02MC4xMy0yNi44MS0zNS4wNC0uMDgtNjYuMTMgMjIuNDgtNzYuOTEgNTUuODItMjIuNTEgNC42MS00MS45NCAxOC43LTUzLjMxIDM4LjY3LTE3LjU5IDMwLjMyLTEzLjU4IDY4LjU0IDkuOTIgOTQuNTQtNy4yNiAyMS43OS00Ljc2IDQ1LjY2IDYuODUgNjUuNDggMTcuNDYgMzAuNCA1Mi41NiA0Ni4wNCA4Ni44NCAzOC42OCAxNS4yNCAxNy4xOCAzNy4xNiAyNi45NSA2MC4xMyAyNi44IDM1LjA2LjA5IDY2LjE2LTIyLjQ5IDc2Ljk0LTU1Ljg2IDIyLjUxLTQuNjEgNDEuOTQtMTguNyA1My4zMS0zOC42NyAxNy41Ny0zMC4zMiAxMy41NS02OC41MS05Ljk0LTk0LjUxem0tMTIwLjI4IDE2OC4xMWMtMTQuMDMuMDItMjcuNjItNC44OS0zOC4zOS0xMy44OC40OS0uMjYgMS4zNC0uNzMgMS44OS0xLjA3bDYzLjcyLTM2LjhjMy4yNi0xLjg1IDUuMjYtNS4zMiA1LjI0LTkuMDd2LTg5LjgzbDI2LjkzIDE1LjU1Yy4yOS4xNC40OC40Mi41Mi43NHY3NC4zOWMtLjA0IDMzLjA4LTI2LjgzIDU5LjktNTkuOTEgNTkuOTd6bS0xMjguODQtNTUuMDNjLTcuMDMtMTIuMTQtOS41Ni0yNi4zNy03LjE1LTQwLjE4LjQ3LjI4IDEuMy43OSAxLjg5IDEuMTNsNjMuNzIgMzYuOGMzLjIzIDEuODkgNy4yMyAxLjg5IDEwLjQ3IDBsNzcuNzktNDQuOTJ2MzEuMWMuMDIuMzItLjEzLjYzLS4zOC44M2wtNjQuNDEgMzcuMTljLTI4LjY5IDE2LjUyLTY1LjMzIDYuNy04MS45Mi0yMS45NXptLTE2Ljc3LTEzOS4wOWM3LTEyLjE2IDE4LjA1LTIxLjQ2IDMxLjIxLTI2LjI5IDAgLjU1LS4wMyAxLjUyLS4wMyAyLjJ2NzMuNjFjLS4wMiAzLjc0IDEuOTggNy4yMSA1LjIzIDkuMDZsNzcuNzkgNDQuOTEtMjYuOTMgMTUuNTVjLS4yNy4xOC0uNjEuMjEtLjkxLjA4bC02NC40Mi0zNy4yMmMtMjguNjMtMTYuNTgtMzguNDUtNTMuMjEtMjEuOTUtODEuODl6bTIyMS4yNiA1MS40OS03Ny43OS00NC45MiAyNi45My0xNS41NGMuMjctLjE4LjYxLS4yMS45MS0uMDhsNjQuNDIgMzcuMTljMjguNjggMTYuNTcgMzguNTEgNTMuMjYgMjEuOTQgODEuOTQtNy4wMSAxMi4xNC0xOC4wNSAyMS40NC0zMS4yIDI2LjI4di03NS44MWMuMDMtMy43NC0xLjk2LTcuMi01LjItOS4wNnptMjYuOC00MC4zNGMtLjQ3LS4yOS0xLjMtLjc5LTEuODktMS4xM2wtNjMuNzItMzYuOGMtMy4yMy0xLjg5LTcuMjMtMS44OS0xMC40NyAwbC03Ny43OSA0NC45MnYtMzEuMWMtLjAyLS4zMi4xMy0uNjMuMzgtLjgzbDY0LjQxLTM3LjE2YzI4LjY5LTE2LjU1IDY1LjM3LTYuNyA4MS45MSAyMiA2Ljk5IDEyLjEyIDkuNTIgMjYuMzEgNy4xNSA0MC4xem0tMTY4LjUxIDU1LjQzLTI2Ljk0LTE1LjU1Yy0uMjktLjE0LS40OC0uNDItLjUyLS43NHYtNzQuMzljLjAyLTMzLjEyIDI2Ljg5LTU5Ljk2IDYwLjAxLTU5Ljk0IDE0LjAxIDAgMjcuNTcgNC45MiAzOC4zNCAxMy44OC0uNDkuMjYtMS4zMy43My0xLjg5IDEuMDdsLTYzLjcyIDM2LjhjLTMuMjYgMS44NS01LjI2IDUuMzEtNS4yNCA5LjA2bC0uMDQgODkuNzl6bTE0LjYzLTMxLjU0IDM0LjY1LTIwLjAxIDM0LjY1IDIwdjQwLjAxbC0zNC42NSAyMC0zNC42NS0yMHonLz4KPC9zdmc+"); }
.fam.has-icon.fam-gpt-oss { background-image: url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSIjMTBhMzdmIiB2aWV3Qm94PSItNi4zOTEgLTYuNDAxIDMzMi43OTMgMzMyLjc5MyIgeG1sbnM9J2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJz4KPHBhdGggZD0nbTI5Ny4wNiAxMzAuOTdjNy4yNi0yMS43OSA0Ljc2LTQ1LjY2LTYuODUtNjUuNDgtMTcuNDYtMzAuNC01Mi41Ni00Ni4wNC04Ni44NC0zOC42OC0xNS4yNS0xNy4xOC0zNy4xNi0yNi45NS02MC4xMy0yNi44MS0zNS4wNC0uMDgtNjYuMTMgMjIuNDgtNzYuOTEgNTUuODItMjIuNTEgNC42MS00MS45NCAxOC43LTUzLjMxIDM4LjY3LTE3LjU5IDMwLjMyLTEzLjU4IDY4LjU0IDkuOTIgOTQuNTQtNy4yNiAyMS43OS00Ljc2IDQ1LjY2IDYuODUgNjUuNDggMTcuNDYgMzAuNCA1Mi41NiA0Ni4wNCA4Ni44NCAzOC42OCAxNS4yNCAxNy4xOCAzNy4xNiAyNi45NSA2MC4xMyAyNi44IDM1LjA2LjA5IDY2LjE2LTIyLjQ5IDc2Ljk0LTU1Ljg2IDIyLjUxLTQuNjEgNDEuOTQtMTguNyA1My4zMS0zOC42NyAxNy41Ny0zMC4zMiAxMy41NS02OC41MS05Ljk0LTk0LjUxem0tMTIwLjI4IDE2OC4xMWMtMTQuMDMuMDItMjcuNjItNC44OS0zOC4zOS0xMy44OC40OS0uMjYgMS4zNC0uNzMgMS44OS0xLjA3bDYzLjcyLTM2LjhjMy4yNi0xLjg1IDUuMjYtNS4zMiA1LjI0LTkuMDd2LTg5LjgzbDI2LjkzIDE1LjU1Yy4yOS4xNC40OC40Mi41Mi43NHY3NC4zOWMtLjA0IDMzLjA4LTI2LjgzIDU5LjktNTkuOTEgNTkuOTd6bS0xMjguODQtNTUuMDNjLTcuMDMtMTIuMTQtOS41Ni0yNi4zNy03LjE1LTQwLjE4LjQ3LjI4IDEuMy43OSAxLjg5IDEuMTNsNjMuNzIgMzYuOGMzLjIzIDEuODkgNy4yMyAxLjg5IDEwLjQ3IDBsNzcuNzktNDQuOTJ2MzEuMWMuMDIuMzItLjEzLjYzLS4zOC44M2wtNjQuNDEgMzcuMTljLTI4LjY5IDE2LjUyLTY1LjMzIDYuNy04MS45Mi0yMS45NXptLTE2Ljc3LTEzOS4wOWM3LTEyLjE2IDE4LjA1LTIxLjQ2IDMxLjIxLTI2LjI5IDAgLjU1LS4wMyAxLjUyLS4wMyAyLjJ2NzMuNjFjLS4wMiAzLjc0IDEuOTggNy4yMSA1LjIzIDkuMDZsNzcuNzkgNDQuOTEtMjYuOTMgMTUuNTVjLS4yNy4xOC0uNjEuMjEtLjkxLjA4bC02NC40Mi0zNy4yMmMtMjguNjMtMTYuNTgtMzguNDUtNTMuMjEtMjEuOTUtODEuODl6bTIyMS4yNiA1MS40OS03Ny43OS00NC45MiAyNi45My0xNS41NGMuMjctLjE4LjYxLS4yMS45MS0uMDhsNjQuNDIgMzcuMTljMjguNjggMTYuNTcgMzguNTEgNTMuMjYgMjEuOTQgODEuOTQtNy4wMSAxMi4xNC0xOC4wNSAyMS40NC0zMS4yIDI2LjI4di03NS44MWMuMDMtMy43NC0xLjk2LTcuMi01LjItOS4wNnptMjYuOC00MC4zNGMtLjQ3LS4yOS0xLjMtLjc5LTEuODktMS4xM2wtNjMuNzItMzYuOGMtMy4yMy0xLjg5LTcuMjMtMS44OS0xMC40NyAwbC03Ny43OSA0NC45MnYtMzEuMWMtLjAyLS4zMi4xMy0uNjMuMzgtLjgzbDY0LjQxLTM3LjE2YzI4LjY5LTE2LjU1IDY1LjM3LTYuNyA4MS45MSAyMiA2Ljk5IDEyLjEyIDkuNTIgMjYuMzEgNy4xNSA0MC4xem0tMTY4LjUxIDU1LjQzLTI2Ljk0LTE1LjU1Yy0uMjktLjE0LS40OC0uNDItLjUyLS43NHYtNzQuMzljLjAyLTMzLjEyIDI2Ljg5LTU5Ljk2IDYwLjAxLTU5Ljk0IDE0LjAxIDAgMjcuNTcgNC45MiAzOC4zNCAxMy44OC0uNDkuMjYtMS4zMy43My0xLjg5IDEuMDdsLTYzLjcyIDM2LjhjLTMuMjYgMS44NS01LjI2IDUuMzEtNS4yNCA5LjA2bC0uMDQgODkuNzl6bTE0LjYzLTMxLjU0IDM0LjY1LTIwLjAxIDM0LjY1IDIwdjQwLjAxbC0zNC42NSAyMC0zNC42NS0yMHonLz4KPC9zdmc+"); }
.fam.has-icon.fam-gemini { background-image: url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCA2NSA2NSI+PG1hc2sgaWQ9Im1hc2ttZSIgc3R5bGU9Im1hc2stdHlwZTphbHBoYSIgbWFza1VuaXRzPSJ1c2VyU3BhY2VPblVzZSIgeD0iMCIgeT0iMCIgd2lkdGg9IjY1IiBoZWlnaHQ9IjY1Ij48cGF0aCBkPSJNMzIuNDQ3IDBjLjY4IDAgMS4yNzMuNDY1IDEuNDM5IDEuMTI1YTM4LjkwNCAzOC45MDQgMCAwMDEuOTk5IDUuOTA1YzIuMTUyIDUgNS4xMDUgOS4zNzYgOC44NTQgMTMuMTI1IDMuNzUxIDMuNzUgOC4xMjYgNi43MDMgMTMuMTI1IDguODU1YTM4Ljk4IDM4Ljk4IDAgMDA1LjkwNiAxLjk5OWMuNjYuMTY2IDEuMTI0Ljc1OCAxLjEyNCAxLjQzOCAwIC42OC0uNDY0IDEuMjczLTEuMTI1IDEuNDM5YTM4LjkwMiAzOC45MDIgMCAwMC01LjkwNSAxLjk5OWMtNSAyLjE1Mi05LjM3NSA1LjEwNS0xMy4xMjUgOC44NTQtMy43NDkgMy43NTEtNi43MDIgOC4xMjYtOC44NTQgMTMuMTI1YTM4Ljk3MyAzOC45NzMgMCAwMC0yIDUuOTA2IDEuNDg1IDEuNDg1IDAgMDEtMS40MzggMS4xMjRjLS42OCAwLTEuMjcyLS40NjQtMS40MzgtMS4xMjVhMzguOTEzIDM4LjkxMyAwIDAwLTItNS45MDVjLTIuMTUxLTUtNS4xMDMtOS4zNzUtOC44NTQtMTMuMTI1LTMuNzUtMy43NDktOC4xMjUtNi43MDItMTMuMTI1LTguODU0YTM4Ljk3MyAzOC45NzMgMCAwMC01LjkwNS0yQTEuNDg1IDEuNDg1IDAgMDEwIDMyLjQ0OGMwLS42OC40NjUtMS4yNzIgMS4xMjUtMS40MzhhMzguOTAzIDM4LjkwMyAwIDAwNS45MDUtMmM1LTIuMTUxIDkuMzc2LTUuMTA0IDEzLjEyNS04Ljg1NCAzLjc1LTMuNzQ5IDYuNzAzLTguMTI1IDguODU1LTEzLjEyNWEzOC45NzIgMzguOTcyIDAgMDAxLjk5OS01LjkwNUExLjQ4NSAxLjQ4NSAwIDAxMzIuNDQ3IDB6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTMyLjQ0NyAwYy42OCAwIDEuMjczLjQ2NSAxLjQzOSAxLjEyNWEzOC45MDQgMzguOTA0IDAgMDAxLjk5OSA1LjkwNWMyLjE1MiA1IDUuMTA1IDkuMzc2IDguODU0IDEzLjEyNSAzLjc1MSAzLjc1IDguMTI2IDYuNzAzIDEzLjEyNSA4Ljg1NWEzOC45OCAzOC45OCAwIDAwNS45MDYgMS45OTljLjY2LjE2NiAxLjEyNC43NTggMS4xMjQgMS40MzggMCAuNjgtLjQ2NCAxLjI3My0xLjEyNSAxLjQzOWEzOC45MDIgMzguOTAyIDAgMDAtNS45MDUgMS45OTljLTUgMi4xNTItOS4zNzUgNS4xMDUtMTMuMTI1IDguODU0LTMuNzQ5IDMuNzUxLTYuNzAyIDguMTI2LTguODU0IDEzLjEyNWEzOC45NzMgMzguOTczIDAgMDAtMiA1LjkwNiAxLjQ4NSAxLjQ4NSAwIDAxLTEuNDM4IDEuMTI0Yy0uNjggMC0xLjI3Mi0uNDY0LTEuNDM4LTEuMTI1YTM4LjkxMyAzOC45MTMgMCAwMC0yLTUuOTA1Yy0yLjE1MS01LTUuMTAzLTkuMzc1LTguODU0LTEzLjEyNS0zLjc1LTMuNzQ5LTguMTI1LTYuNzAyLTEzLjEyNS04Ljg1NGEzOC45NzMgMzguOTczIDAgMDAtNS45MDUtMkExLjQ4NSAxLjQ4NSAwIDAxMCAzMi40NDhjMC0uNjguNDY1LTEuMjcyIDEuMTI1LTEuNDM4YTM4LjkwMyAzOC45MDMgMCAwMDUuOTA1LTJjNS0yLjE1MSA5LjM3Ni01LjEwNCAxMy4xMjUtOC44NTQgMy43NS0zLjc0OSA2LjcwMy04LjEyNSA4Ljg1NS0xMy4xMjVhMzguOTcyIDM4Ljk3MiAwIDAwMS45OTktNS45MDVBMS40ODUgMS40ODUgMCAwMTMyLjQ0NyAweiIgZmlsbD0idXJsKCNwcmVmaXhfX3BhaW50MF9saW5lYXJfMjAwMV82NykiLz48L21hc2s+PGcgbWFzaz0idXJsKCNtYXNrbWUpIj48ZyBmaWx0ZXI9InVybCgjcHJlZml4X19maWx0ZXIwX2ZfMjAwMV82NykiPjxwYXRoIGQ9Ik0tNS44NTkgNTAuNzM0YzcuNDk4IDIuNjYzIDE2LjExNi0yLjMzIDE5LjI0OS0xMS4xNTIgMy4xMzMtOC44MjEtLjQwNi0xOC4xMzEtNy45MDQtMjAuNzk0LTcuNDk4LTIuNjYzLTE2LjExNiAyLjMzLTE5LjI1IDExLjE1MS0zLjEzMiA4LjgyMi40MDcgMTguMTMyIDcuOTA1IDIwLjc5NXoiIGZpbGw9IiNGRkU0MzIiLz48L2c+PGcgZmlsdGVyPSJ1cmwoI3ByZWZpeF9fZmlsdGVyMV9mXzIwMDFfNjcpIj48cGF0aCBkPSJNMjcuNDMzIDIxLjY0OWMxMC4zIDAgMTguNjUxLTguNTM1IDE4LjY1MS0xOS4wNjIgMC0xMC41MjgtOC4zNS0xOS4wNjItMTguNjUxLTE5LjA2MlM4Ljc4LTcuOTQgOC43OCAyLjU4N2MwIDEwLjUyNyA4LjM1IDE5LjA2MiAxOC42NTIgMTkuMDYyeiIgZmlsbD0iI0ZDNDEzRCIvPjwvZz48ZyBmaWx0ZXI9InVybCgjcHJlZml4X19maWx0ZXIyX2ZfMjAwMV82NykiPjxwYXRoIGQ9Ik0yMC4xODQgODIuNjA4YzEwLjc1My0uNTI1IDE4LjkxOC0xMi4yNDQgMTguMjM3LTI2LjE3NC0uNjgtMTMuOTMtOS45NS0yNC43OTctMjAuNzAzLTI0LjI3MUM2Ljk2NSAzMi42ODktMS4yIDQ0LjQwNy0uNTE5IDU4LjMzN2MuNjgxIDEzLjkzIDkuOTUgMjQuNzk3IDIwLjcwMyAyNC4yNzF6IiBmaWxsPSIjMDBCOTVDIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNwcmVmaXhfX2ZpbHRlcjNfZl8yMDAxXzY3KSI+PHBhdGggZD0iTTIwLjE4NCA4Mi42MDhjMTAuNzUzLS41MjUgMTguOTE4LTEyLjI0NCAxOC4yMzctMjYuMTc0LS42OC0xMy45My05Ljk1LTI0Ljc5Ny0yMC43MDMtMjQuMjcxQzYuOTY1IDMyLjY4OS0xLjIgNDQuNDA3LS41MTkgNTguMzM3Yy42ODEgMTMuOTMgOS45NSAyNC43OTcgMjAuNzAzIDI0LjI3MXoiIGZpbGw9IiMwMEI5NUMiLz48L2c+PGcgZmlsdGVyPSJ1cmwoI3ByZWZpeF9fZmlsdGVyNF9mXzIwMDFfNjcpIj48cGF0aCBkPSJNMzAuOTU0IDc0LjE4MWM5LjAxNC01LjQ4NSAxMS40MjctMTcuOTc2IDUuMzg5LTI3LjktNi4wMzgtOS45MjUtMTguMjQxLTEzLjUyNC0yNy4yNTYtOC4wNC05LjAxNSA1LjQ4Ni0xMS40MjggMTcuOTc3LTUuMzkgMjcuOTAyIDYuMDQgOS45MjQgMTguMjQyIDEzLjUyMyAyNy4yNTcgOC4wMzh6IiBmaWxsPSIjMDBCOTVDIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNwcmVmaXhfX2ZpbHRlcjVfZl8yMDAxXzY3KSI+PHBhdGggZD0iTTY3LjM5MSA0Mi45OTNjMTAuMTMyIDAgMTguMzQ2LTcuOTEgMTguMzQ2LTE3LjY2NiAwLTkuNzU3LTguMjE0LTE3LjY2Ny0xOC4zNDYtMTcuNjY3cy0xOC4zNDYgNy45MS0xOC4zNDYgMTcuNjY3YzAgOS43NTcgOC4yMTQgMTcuNjY2IDE4LjM0NiAxNy42NjZ6IiBmaWxsPSIjMzE4NkZGIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNwcmVmaXhfX2ZpbHRlcjZfZl8yMDAxXzY3KSI+PHBhdGggZD0iTS0xMy4wNjUgNDAuOTQ0YzkuMzMgNy4wOTQgMjIuOTU5IDQuODY5IDMwLjQ0Mi00Ljk3MiA3LjQ4My05Ljg0IDUuOTg3LTIzLjU2OS0zLjM0My0zMC42NjNDNC43MDQtMS43ODYtOC45MjQuNDM5LTE2LjQwOCAxMC4yOGMtNy40ODMgOS44NC01Ljk4NiAyMy41NyAzLjM0MyAzMC42NjR6IiBmaWxsPSIjRkJCQzA0Ii8+PC9nPjxnIGZpbHRlcj0idXJsKCNwcmVmaXhfX2ZpbHRlcjdfZl8yMDAxXzY3KSI+PHBhdGggZD0iTTM0Ljc0IDUxLjQzYzExLjEzNSA3LjY1NiAyNS44OTYgNS41MjQgMzIuOTY4LTQuNzY0IDcuMDczLTEwLjI4NyAzLjc3OS0yNC44MzItNy4zNTctMzIuNDg4QzQ5LjIxNSA2LjUyIDM0LjQ1NSA4LjY1NCAyNy4zODIgMTguOTRjLTcuMDcyIDEwLjI4OC0zLjc3OSAyNC44MzMgNy4zNTcgMzIuNDl6IiBmaWxsPSIjMzE4NkZGIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNwcmVmaXhfX2ZpbHRlcjhfZl8yMDAxXzY3KSI+PHBhdGggZD0iTTU0Ljk4NC0yLjMzNmMyLjgzMyAzLjg1Mi0uODA4IDExLjM0LTguMTMxIDE2LjcyNy03LjMyNCA1LjM4Ny0xNS41NTcgNi42MzEtMTguMzkgMi43OC0yLjgzMy0zLjg1My44MDctMTEuMzQyIDguMTMtMTYuNzI4IDcuMzI0LTUuMzg3IDE1LjU1OC02LjYzMSAxOC4zOS0yLjc4eiIgZmlsbD0iIzc0OUJGRiIvPjwvZz48ZyBmaWx0ZXI9InVybCgjcHJlZml4X19maWx0ZXI5X2ZfMjAwMV82NykiPjxwYXRoIGQ9Ik0zMS43MjcgMTYuMTA0QzQzLjA1MyA1LjU5OCA0Ni45NC04LjYyNiA0MC40MS0xNS42NjZjLTYuNTMtNy4wNC0yMS4wMDYtNC4yMzItMzIuMzMyIDYuMjc0cy0xNS4yMTQgMjQuNzMtOC42ODMgMzEuNzdjNi41MyA3LjA0IDIxLjAwNiA0LjIzMiAzMi4zMzItNi4yNzR6IiBmaWxsPSIjRkM0MTNEIi8+PC9nPjxnIGZpbHRlcj0idXJsKCNwcmVmaXhfX2ZpbHRlcjEwX2ZfMjAwMV82NykiPjxwYXRoIGQ9Ik04LjUxIDUzLjgzOGM2LjczMiA0LjgxOCAxNC40NiA1LjU1IDE3LjI2MiAxLjYzNiAyLjgwMi0zLjkxNS0uMzg0LTEwLjk5NC03LjExNi0xNS44MTItNi43MzEtNC44MTgtMTQuNDYtNS41NS0xNy4yNjEtMS42MzYtMi44MDIgMy45MTUuMzgzIDEwLjk5NCA3LjExNSAxNS44MTJ6IiBmaWxsPSIjRkZFRTQ4Ii8+PC9nPjwvZz48ZGVmcz48ZmlsdGVyIGlkPSJwcmVmaXhfX2ZpbHRlcjBfZl8yMDAxXzY3IiB4PSItMTkuODI0IiB5PSIxMy4xNTIiIHdpZHRoPSIzOS4yNzQiIGhlaWdodD0iNDMuMjE3IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIyLjQ2IiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMjAwMV82NyIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9InByZWZpeF9fZmlsdGVyMV9mXzIwMDFfNjciIHg9Ii0xNS4wMDEiIHk9Ii00MC4yNTciIHdpZHRoPSI4NC44NjgiIGhlaWdodD0iODUuNjg4IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxMS44OTEiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yMDAxXzY3Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0icHJlZml4X19maWx0ZXIyX2ZfMjAwMV82NyIgeD0iLTIwLjc3NiIgeT0iMTEuOTI3IiB3aWR0aD0iNzkuNDU0IiBoZWlnaHQ9IjkwLjkxNiIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iMTAuMTA5IiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMjAwMV82NyIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9InByZWZpeF9fZmlsdGVyM19mXzIwMDFfNjciIHg9Ii0yMC43NzYiIHk9IjExLjkyNyIgd2lkdGg9Ijc5LjQ1NCIgaGVpZ2h0PSI5MC45MTYiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjEwLjEwOSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzIwMDFfNjciLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJwcmVmaXhfX2ZpbHRlcjRfZl8yMDAxXzY3IiB4PSItMTkuODQ1IiB5PSIxNS40NTkiIHdpZHRoPSI3OS43MzEiIGhlaWdodD0iODEuNTA1IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSIxMC4xMDkiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yMDAxXzY3Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0icHJlZml4X19maWx0ZXI1X2ZfMjAwMV82NyIgeD0iMjkuODMyIiB5PSItMTEuNTUyIiB3aWR0aD0iNzUuMTE3IiBoZWlnaHQ9IjczLjc1OCIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iOS42MDYiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yMDAxXzY3Ii8+PC9maWx0ZXI+PGZpbHRlciBpZD0icHJlZml4X19maWx0ZXI2X2ZfMjAwMV82NyIgeD0iLTM4LjU4MyIgeT0iLTE2LjI1MyIgd2lkdGg9Ijc4LjEzNSIgaGVpZ2h0PSI3OC43NTgiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjguNzA2IiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMjAwMV82NyIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9InByZWZpeF9fZmlsdGVyN19mXzIwMDFfNjciIHg9IjguMTA3IiB5PSItNS45NjYiIHdpZHRoPSI3OC44NzciIGhlaWdodD0iNzcuNTM5IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI3Ljc3NSIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzIwMDFfNjciLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJwcmVmaXhfX2ZpbHRlcjhfZl8yMDAxXzY3IiB4PSIxMy41ODciIHk9Ii0xOC40ODgiIHdpZHRoPSI1Ni4yNzIiIGhlaWdodD0iNTEuODEiIGZpbHRlclVuaXRzPSJ1c2VyU3BhY2VPblVzZSIgY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzPSJzUkdCIj48ZmVGbG9vZCBmbG9vZC1vcGFjaXR5PSIwIiByZXN1bHQ9IkJhY2tncm91bmRJbWFnZUZpeCIvPjxmZUJsZW5kIGluPSJTb3VyY2VHcmFwaGljIiBpbjI9IkJhY2tncm91bmRJbWFnZUZpeCIgcmVzdWx0PSJzaGFwZSIvPjxmZUdhdXNzaWFuQmx1ciBzdGREZXZpYXRpb249IjYuOTU3IiByZXN1bHQ9ImVmZmVjdDFfZm9yZWdyb3VuZEJsdXJfMjAwMV82NyIvPjwvZmlsdGVyPjxmaWx0ZXIgaWQ9InByZWZpeF9fZmlsdGVyOV9mXzIwMDFfNjciIHg9Ii0xNS41MjYiIHk9Ii0zMS4yOTciIHdpZHRoPSI3MC44NTYiIGhlaWdodD0iNjkuMzA2IiBmaWx0ZXJVbml0cz0idXNlclNwYWNlT25Vc2UiIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycz0ic1JHQiI+PGZlRmxvb2QgZmxvb2Qtb3BhY2l0eT0iMCIgcmVzdWx0PSJCYWNrZ3JvdW5kSW1hZ2VGaXgiLz48ZmVCbGVuZCBpbj0iU291cmNlR3JhcGhpYyIgaW4yPSJCYWNrZ3JvdW5kSW1hZ2VGaXgiIHJlc3VsdD0ic2hhcGUiLz48ZmVHYXVzc2lhbkJsdXIgc3RkRGV2aWF0aW9uPSI1Ljg3NiIgcmVzdWx0PSJlZmZlY3QxX2ZvcmVncm91bmRCbHVyXzIwMDFfNjciLz48L2ZpbHRlcj48ZmlsdGVyIGlkPSJwcmVmaXhfX2ZpbHRlcjEwX2ZfMjAwMV82NyIgeD0iLTE0LjE2OCIgeT0iMjAuOTY0IiB3aWR0aD0iNTUuNTAxIiBoZWlnaHQ9IjUxLjU3MSIgZmlsdGVyVW5pdHM9InVzZXJTcGFjZU9uVXNlIiBjb2xvci1pbnRlcnBvbGF0aW9uLWZpbHRlcnM9InNSR0IiPjxmZUZsb29kIGZsb29kLW9wYWNpdHk9IjAiIHJlc3VsdD0iQmFja2dyb3VuZEltYWdlRml4Ii8+PGZlQmxlbmQgaW49IlNvdXJjZUdyYXBoaWMiIGluMj0iQmFja2dyb3VuZEltYWdlRml4IiByZXN1bHQ9InNoYXBlIi8+PGZlR2F1c3NpYW5CbHVyIHN0ZERldmlhdGlvbj0iNy4yNzMiIHJlc3VsdD0iZWZmZWN0MV9mb3JlZ3JvdW5kQmx1cl8yMDAxXzY3Ii8+PC9maWx0ZXI+PGxpbmVhckdyYWRpZW50IGlkPSJwcmVmaXhfX3BhaW50MF9saW5lYXJfMjAwMV82NyIgeDE9IjE4LjQ0NyIgeTE9IjQzLjQyIiB4Mj0iNTIuMTUzIiB5Mj0iMTUuMDA0IiBncmFkaWVudFVuaXRzPSJ1c2VyU3BhY2VPblVzZSI+PHN0b3Agc3RvcC1jb2xvcj0iIzQ4OTNGQyIvPjxzdG9wIG9mZnNldD0iLjI3IiBzdG9wLWNvbG9yPSIjNDg5M0ZDIi8+PHN0b3Agb2Zmc2V0PSIuNzc3IiBzdG9wLWNvbG9yPSIjOTY5REZGIi8+PHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjQkQ5OUZFIi8+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PC9zdmc+"); }
.fam.has-icon.fam-gemma { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAApVBMVEVHcEzy8/P7+/v6+vv+/v7Kzc/y8/P6+/v09/ni4+T4+Pn7+/vs7e719vb7+/v////////bUjxLnFRAfu5OnlfaTzj1uTBFge5DgO1BmEvYQSb2uzNNhu4wd+3ZSTL18eP2th/ieWfpoJfdYEyMvpP439zM4tX73aGrzq5wr3r2xV7vurSLrfTyycSowffqkjJllPDErzW5zfgyfMxHjqNzp1pCgOBQ4ou7AAAAEHRSTlMAn3VS3wpF/vsWLLRp2InFWqPpGAAAAyJJREFUWIXNV2uTojAQFBUCiAoBXcEFBAF13ffe3v//aZfwyBtkvaqr6y+WCd2Z6ZkkMJn817As2zBsy7qLbKzWptvCXK+Mn7FnC1fCYjaaPgUyHQNMx9HV7LES9nyAjzC371++xWAQCu9kLPr5N8Inafwlv1dB5KfXPDsiZPlLOkaBzx9csyhKNhhJEkXZle8NhQ+8/7mXbLwWtUjkXbkHpFrY7GzpJR7FpokjOpbsM2I/sAbkkedJAliCDUKwgUkACHxGIOtPgl0/UfM3PN91Wf5KHT9aNOpqIfHdlTKAkvKRbflLWb7kR6wh8dkQZnSQrh7luH3q8qeoJ2S+S0+YtWxAwhetVPDddcfXyRB4awWSrOdU4qBLGZwOb3UDbo5j+CQHjYw8bfeHI5KIygEahSZ2YXrYI2RJko/id92ok3BPSGC7379F5hCNAjQmWGTghNhY4Yl5yH8UsHumk5awEZEF++12ezgxAvEDxq6Fj/BOJ5staZD/mI0FUkmAUfEf6aQhVHFYoAvikZZ4dpfAgygwMgVig5QCa2IjIJi448AK2EIZnw61AFfG2Cdo6/BOJy2pkWr+B2QEzA7gM675Me2DtpHYVm744dlV4BmH4O/iTzLSHaz0SsEufsMgCBWb0Yz9upFi2ufdZnLICMohQPwAXtQBCI3otALUxfQD0xHCQuQjB2on41c6Rl7flmSoaAWC8MJn8YoSaATo+JKciTQHELYCAYSMk+nly5cDcIjAhKiCiigEISyqNDXT6vwdQvirbQbKB8y9QA81t6AKMGwBMWqFuKJPaowAtdF1L1QBaeCiwBa/uQS6LmrA3G2AU6B0hC/mMOJuNgT2FCxCqOKHXIOaPJ/Z0whnogBZfsU+I719a+xsWoQhFOgF1xiayGe7qZEIWvdrdlDwL2pLmT/RhcsAVOcLriQMLudK2FymrhCYWIotCNA5oBjt+YaxRl5IZu83kL68zUb5K+NX1UINhf8sjBtpmLe/vrSBdwtwY/kGltYTBdDGfkHq06UUBlhOh8yTw3AWcwBqGfQzXzj3fL7qtjFznJlh/2jpf44/zLDDahtKeg0AAAAASUVORK5CYII="); }
.fam.has-icon.fam-granite { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAJ1BMVEVHcEyHjZaHjZaHjZaHjZaHjZaHjZaHjZaHjZaHjZaHjZaHjZaHjZZo9OLZAAAADHRSTlMAVx7fNQ3vtXedy4lwS3vfAAACkUlEQVRYhe1XyXLlMAi0NrT5/783ArTwLD9ZnkPmkk5VKkVQgzCN8XH84RbOKmXd2rKAjifB9wPOsyXqnfM2nRXGVotplmQ30qdoiVg8RdRoAZM+s/oKhaGVtQrDqnvLEiUQUKIWL10COiwJW6Ck9khQjxWUzFO5gy6Unm+HVDsEmf/KXEYs4bBsEdRKpZEBJ071fSQoTtBr12vAFmiXWQHPQbY2m85Uzhm0wNZT4D4AGE99tuwwSG9h2epllxNg6+VhygYtKW/LSYWg9NryO3Aqx5jVbuJXDF3vqHhCGytvRslNeJOS+ackeAjFMgXKHIhyPG0C40Obog4HwcYk4ND0O2BIcW2NCQXh8BWK5Xq2sdR5oSl5LaciPKZp8TpCU2KV6D0CcBg/1wyr6jk5CPPJcZ4IzKxbVKRhgq8MgR74wSWL1//GWlZyumWonVcJvLrAS4KZnyefILiDIGijv4M6H8weAU6Xizp4aIW8RxCoWrLMjpSjqIytiNp+/GhRxECNcqbOoKnz1SEJ8nFBlgQ06um1gyDlGnW8ITjoVc0aH+ffELDgkYHqZ4YIdwmYoVRSiWHxioAflkLhnE047whoBfEHiK56SYC3B7FQfBCstNAJaGMRGbQV5qkTo5MZpDH98KB5IjDCn5YuTLuKM9brLAny8Pd0HYdN6a1zlvZJVwmi0x9wTQvDP1V/amuWch2Yy4lU/Q10f0ejkACh72d3M7HuarO/qiuMby/yeH0tlJeTyGryL/8OMYbxPaDOqZPyKTa0q/+MaaGj5e+7/wTyF5eweyuiAD3S0BqGyva8o0po/uzI+JmQxcfHPixXGgw/8D7/9uGy7OLtFVNCR1PilxzM+xWrc+CO9B8W1N/FDyemMD+vuUh0AAAAAElFTkSuQmCC"); }
.fam.has-icon.fam-grok { background-image: url("data:image/svg+xml;base64,PHN2ZyBmaWxsPSJjdXJyZW50Q29sb3IiIGZpbGwtcnVsZT0iZXZlbm9kZCIgaGVpZ2h0PSIxZW0iIHN0eWxlPSJmbGV4Om5vbmU7bGluZS1oZWlnaHQ6MSIgdmlld0JveD0iMCAwIDI0IDI0IiB3aWR0aD0iMWVtIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPjx0aXRsZT5Hcm9rPC90aXRsZT48cGF0aCBkPSJNOS4yNyAxNS4yOWw3Ljk3OC01Ljg5N2MuMzkxLS4yOS45NS0uMTc3IDEuMTM3LjI3Mi45OCAyLjM2OS41NDIgNS4yMTUtMS40MSA3LjE2OS0xLjk1MSAxLjk1NC00LjY2NyAyLjM4Mi03LjE0OSAxLjQwNmwtMi43MTEgMS4yNTdjMy44ODkgMi42NjEgOC42MTEgMi4wMDMgMTEuNTYyLS45NTMgMi4zNDEtMi4zNDQgMy4wNjYtNS41MzkgMi4zODgtOC40MmwuMDA2LjAwN2MtLjk4My00LjIzMi4yNDItNS45MjQgMi43NS05LjM4My4wNi0uMDgyLjEyLS4xNjQuMTc5LS4yNDhsLTMuMzAxIDMuMzA1di0uMDFMOS4yNjcgMTUuMjkyTTcuNjIzIDE2LjcyM2MtMi43OTItMi42Ny0yLjMxLTYuODAxLjA3MS05LjE4NCAxLjc2MS0xLjc2MyA0LjY0Ny0yLjQ4MyA3LjE2Ni0xLjQyNWwyLjcwNS0xLjI1YTcuODA4IDcuODA4IDAgMDAtMS44MjktMUE4Ljk3NSA4Ljk3NSAwIDAwNS45ODQgNS44M2MtMi41MzMgMi41MzYtMy4zMyA2LjQzNi0xLjk2MiA5Ljc2NCAxLjAyMiAyLjQ4Ny0uNjUzIDQuMjQ2LTIuMzQgNi4wMjItLjU5OS42My0xLjE5OSAxLjI1OS0xLjY4MiAxLjkyNWw3LjYyLTYuODE1Ij48L3BhdGg+PC9zdmc+"); }
.fam.has-icon.fam-hunyuan { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADwAAAA8CAYAAAA6/NlyAAAJz0lEQVRogeWaaWwd1RXHf3fmLd5jO8YrBJImtEmTECgKWxFJi+ADtGJJEzaVFlH1Q6mgrQq0ChAopFBVlL0pFIpCCdhZgCYVymLFCBMRgiEkIqHZTTbvu98+c/rh+eX57TPvPQck/pLlmfvOPff859xz7rl3Br5hUBOl+M2jQxUSkLlK9NlKl8tEtHlKqXKgwkBcImg+UeagoUY7g/rJLT7n/9p6aWGUXWwf2c7jpcMTYVdeCf/zoOeMEk27EQksAv0KFA47/Ys14cW+ItZ3KaGHTez3rGbvwGYaG77Ml415IfzawcEFuua4TYM7ctVZoEyqHHBPRzEfDyg4GAqw2/MGnd6/s7p2e6625mTcyvbBc9ym4zkRrrbrzXRwK2F2YYh/9RSx/KQTAsAuH7QNv4Z4l7Hm7EPZ6s6K8JoD4jYco4+Kqe7JJ9HxcCuT+cVBVnSX8KcTznBjN7CpJ8CI+SxzVtzLgw+ZdvXaJtzUPjjPNByrUUy329cuJusm84qC/O5EGSu79HDjMLC+F4aNw4i6kjXVtryt2RFuOjJyp2E4Wk4HWYBeQ2MopLG8dghcY42lwI2ToVSfipI9/KTrdjs6LRNuPOJ5zBT1klJMsjNArmgP6BRosG7KaLTRDVw3GUp1N8irLO5YZlWfJcJvto88LiJ/tGtsPtBrKAS4vCRAaem4H4qAhZXha1EPsbjrcSv6MhJ+o937Z0x1Xxa25gUGCq8oFPBIhT/2xzoF88rC1yL3sbjzkUz60hJ+o330bmWa92dtbZ4QMsO5dXGFJ9Hi+QVQNpbQhKUsOXl3Ol0ps3TjvqHz+gPaji27DGfLoRA9HuHSBp2Fs3TmnKPnxsAmLiwMUu4wEeCM/RUwGiewLwRb+yJ3Xozg5aw7sy2ZrqSEVx0emPLCu7S0tgamEpREgVlOnrvBRVXZhJXiMZhfFKRMDxO+82g57/QmGXdVLwwb4WuR3eiOBTRW9cWLJZ3StywP/qp1qz85WYA9Qe562cuwz/a6nxWKtfA4CqjXjeRCM4qj10rNwTSSJtlEwjd3zGTAvDejFSdNGt9PMXgeUaJM9HEOLdJSOGFOQXzLb1nSeUl8YzIPP2PVmC3b/EiK8fOFOlfsLPJJijAqIJq8wlCYPBYvFkv49s4LCakrLVszCjuPTJyXnZjUOaP6BTgQSpMwpxfHtyxgUd9l4xtiCQdUwhPJBI9v4lw8tcDEFefQjf40ibLCGd+iIBizNkcJX9dVjyFX2TWqZtLEZOpah8EUZ+zsGTY08KTpVJ7E+4pL+VFXReQ2SriQn2LXWVWK6fX5X5MbHAYzC0IJ7RuH3ZBuYXCnaC2UuyI3UcKGXG/XsCVXJB8hWyhMZrhDfKcgFJOZIRy/v+lJyMSxSL4zV4hcG7kJE17S04Aw345xsy9xcv1F+dn7a8qk1mHy/ZIQZ7sMVJIoaR524xvJeojzuXGwGiLPxAj+AGVjazxNZ+n1uXnXiUmNE6p0g0qHiZYmFQwZGjcdK8qsNDEKxqAcaL5rgVfChDXtPMvxW6l4/tbcyJ7lNJjqCuGy8IwFWNZZDP6MouBN+YtCZDZEPCzMtmIoCh64pZDJpbYOSsZ1N5lZaFLvsL52P9FZwsoui6HjT5PRlDoLThGW6qSBE4eZF7v47pTsyAJ8u8A6WVNgeWcpT3XYyBO9Kec0wCyI5rWGjMrKFfdcnX2SqnManOm0RvZ4UOeao2UcG7I5yPHUcxqogAjh8CuQtFh4oYtJRdl5VxOTc91pnz4A3SGdp7uLWNHjALsVqwmcCKSTmARRDyfUZDFwCjdfnn2BUeUE51jEiMCIqWEIeERxyK/zhc/J26NOPuzPoWr70gjHQWq44RRhJZBqGwKc66SsMDvviggfDTp4ta+IjX6NTh9hb8i4//nAnvhjkAQoOEVY/EBhKsmfzbUfu6M+Yd2HIf7b6oerqmGybRXWMQQc9WWSCkJ0Sg+ShvDF59rz7vb9Bn9r8sHgmPtSas4TdlgpwWQAosvSAErVJpWrVJQXWyf80pYgzZv9sVN1Ik+CeoAD6bZQEahjEKmllfo8pdxk62RXbA7SvMmfGJdDE8TYCzQnnNOlgHRDdLeU8oXz92qtZefGD4K0bE5R/x3OGF/Zoc0DA5mXuzDMzyFCWEjp4erSzEtFe7fJW5vSFLuHrEw5m/jYD59b3j4J6J9ChLDb2IBI0kfltJCg79sQSFe4g8eEvUGrxmXGJ35oG7TXR9NbIEL49fpOFJ8mkwtlCL9PDhqw18K02j4IA/ZsTEAQ2OaFHTbJinxEY9VxiD3E25BMdmA0fWWw8iOLnvObsLk//EI7G/QD/+mH3bYVCMK6yE2UsE97liS7zm0nU7vYFxQ6rHg3gr5g+O19j/UuBIEdPljdBT1ZhoXh+3fkMkp4fXU/SrYlCJ9MXcXvO2aC3QQ8bMDaLmgegd40cr3Ah154vQc+GcqhBJVNvH3OichdbEoytAfR5P2YtiFhxGtSkqSWPt6fQyF8wBP+K9WhzAHuseVvNARDBnjzcsAvBM2l4xtiWaytbgW2xnVhx4Hk07pjMA+V/7ABx/3hpeuQBzoD+SILsIW36z8e35CsjFoa37Dqs+Rx6rcRvl8BBJOEl+OJhFfXbAN5cnzT8P4QA6OJXi6YkC+08gJB1F9YW7M3/ofkhbI28hio3afuvbChLXGaVZacnhfi9qEOogdfSPZLcsKN0/vQAj9HReunDR8EMOOcPK3660hYApjGolQfpKbeCjWe2YY57lOlfuHF5th18Ft1Gji+VqQFtN+ztu6zVALp935rap9CMx6N3LZs8fPFsejULnQpZlzwtQlkQYWeYHV12hf6mTe7jfUPoKsnxlSybJU/5tuO6853TOBn5pYRJtvU8IdMgtZ2929W349SDwNCj8nyd6LxfME0HWZ8pV4WFMutkAU7H5c2VS/Dad4B+A+3hXj63fAZsFKw/FpX9OPP0woZQPgFTTUJtUMq2DudW1X3KqJmAYe3vxfguXcDmMC0Wo3F1+T3XXEGCMg+NFnImpqX7XS0f9i8pvoQc6qngzzZujXgv+V5L8f7TG64xMmlC04DaZEgSvsrntBcGut22u2eW7q5rXMaPvNhyrRb7/ixW115npN/bAryXnOSg7xcIRJEUxsJya9ZV3skWzX5ya+LOi5Gab+snKvdfPcVLlfPCOrZt3wwkDNrQRAUr6DkdZpqW3JVmN8FZUnfFDTjh1PP1xbPrdGvcjuVatrsgxHL44SfkEgIVAtK1qIVrKOxvDtfJk7cCnrnkVIqCy+66YLCmTuPhi77osecTrfRgE8mEVIFCCZIAFQ/wgCKnQit6OYePPou1lf3T5ht3yT8Hz5NlqJkAcQIAAAAAElFTkSuQmCC"); }
.fam.has-icon.fam-imagen { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABp1BMVEVHcEwks4M2ltktu2/sxyHkVmPkbFyGymJeieuhzlE7if00kO3qXVo7ifxKkez0uhzzqh4St3FLwWsxhv9Fhvj3vBj2R0gxhv8zh//KyTsrvWf6RUMUuWj0VkjxqCTwXU7zXEbsT1f4vRfb0THC1UOtcqnuZE3CaZH1nCCb1FnxSlAxhv+a01klrpoxhv85oc/wgjL4RkWDgdT2SEn6Q0FtyWW91UUxhv8yhv8yh/82h/43ivo+iPw5jfY6kPBHifg8nNNSifI8lOnsUVc8oMf2vhhLr5wUuWeTfMBqhuRJqqo7mNzyS053x2pDpblpw3KEgc1VtY/4RkXWYHZhvns0pLszqKutdKU7luPdW2y10EbCao7MZYOieLHYyi9fuYQetnbqkTLooitgk93nfka4bpmS0Fzysxx3hNlTnsxEunsqr5LTuDJLwG6Ku2aovU9kpLA/tIsxrJ29wT/Tf2q2hY+aiLBMl+GMlq1xmsLRcXjRjVuUrXPlvSW/eY6CjMfPnEvK0TrIrENxjdewqV6skouzm3GQn5R2uHZ2rotqqpoAshpHcEw3yyA9AAAAjXRSTlMA/hL+/v7+/v7+vlT91P0v/S1JLUaB3N7yEtwqgRJMvVNB3dpVSdTa2sV9fdPaha+w8rCFhbCv/////////////////////////////////////////////////////////////////////////////////////////////////////////////////wC9sE0CAAADIElEQVRYhc2V+1vSUBjHj1GghTM1byipaaV2v8LGRUVj3hCdSmVFJmaCoCKi4B0UsP7q3nO24eaVnT1PT9/fP5993/dsZwj972lu1skLgj7DW0F4o0tQLwj1enirIIyNWXUIekAw0KND8AoKDNyi59sJ/7mdWlBP+KnH1AWAx4KvD6kLiPwXygptMv/zI12FU/7bEA3fquAnXmvn2xT80MTSPa28Vc0PD9/QKDCbzVNKvrxcG//oLN/fX6mFbzUbjdvbKr6/97aG5xsxv7+P9y/xvZCSDRfzTqeztCmsxoWFjY2N/WRyc3PiYAnWJ/NOrrGEs2hbIHwS8wcHRxJPcJw71/Evgd/Z2UnmcoQ/KvKcGPvVi7j/AwJ8PpdLpVLAh9S8HefyElVdmD88PMznc4VUKp0OhcoZBW8XY2uovfjpXfM4wB/n84UC4UMM0+sivJ3jWLtssFWe+zSsdXdJ5uez2ezx8W6hsJZOh0NbDONykefbWZaVcZzGJ4oDqap78EtMNBol/O7vP2tr4fDWFuN2ORwceboosJ2m4bk0StUHKXt7YEhkV4GXBR4scMgC29nUqgR7kGgisbq6snICgvFwuA8LXJLAxrKXCPAIN0mCwWBRMDIyHu4b9ZAKHF4ACNSG4gg4TXUEDyYyouD7pHdkfLBv9BOpwJ03qJYoHWNHMJjJJGYrKkySABs87mIFWAHLipLzxyiO0pHJzIJgxXcyrazgkCrIiobLL8hOIjCZfNMXVJDfg6u/p/dgWDT5/NPqLYgG7Lj2VukEwaLP58cCpUFSXPs5w4FUKCsMikeJDbCJUi4UyNNFYpj0FoeQDCVfzN2nFWYUBg3XcreigmRwuzTwMIVcIQAVsMHj1vRjQcjkwxXi3oBsYLTxqAlXiMS964EZ0aD154pqiCC+LhlKOP+zeeePRSLx5fUANrzQziPkj8Wggmig4VENCCJly9hAMQCOJRYxlGHDMzoeKhgMc9hQTSlAFhCAgbYAVMCCubIaagEy8DwI6HnUwoOhRYfgBgh4zS+xMhaet+jh8Qx6JkComuepXwLJoJP/B/kLRT9a7+Axo0UAAAAASUVORK5CYII="); }
.fam.has-icon.fam-jamba { background-image: url("data:image/x-icon;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAEAAQAMBEQACEQEDEQH/xAAbAAEAAQUBAAAAAAAAAAAAAAAABwECAwUGBP/EAC8QAAEEAQMCAwUJAAAAAAAAAAEAAgMEEQUGIRIxE1GxFHFygZEHIiM2QWFiY6H/xAAbAQEBAQACAwAAAAAAAAAAAAAABgEDBQIEB//EACYRAQABBAEDAwUBAAAAAAAAAAABAgMEEQUSISITMUEyNFFxgSP/2gAMAwEAAhEDEQA/ANMj6WI0RggICAgICNEYIKgZQ2ohsRm4EaICAg6rZ+03ay32y44x0mnjHBk8/kjpeS5SMbwo+p276O1tHY2KxHp8Lv7ukk/VE/62bfnqpmVk+2dvar4dmpFXb0uBElfGHYPYgcI2M/LseNUz/Xsu6VoFOuZ7VGjFGOC50bceiOK3kZVyrppqmZQ1b6Pa5zHjo8R3TjtjJwi6sb9OOr3YkcggvhjMs0cY7vcGj5lHhcnpomUwazZbtza7n1WBpgiEcQx2J4REY9ucvL8vmUPzSyTzOlne6SRxy5zjkkot7Vum3TFNMNttbWJtH1SJzHkQyPDJWE/dIJ7480ejyOHRftTOu8JE+0L8qz/Gz1RNcR93SiIcBFtoQEF8EhhnjlAyY3h2Pcco8LtPVRNP5TFrFdu4trObWcC6WISRH+QGcIh8eucPM3V8Sh6eGWtM6KxG5kjThzXDBCLi3cprjdM9m12vo8+rapE1rHeBE8OlfjgAc4z58f6j0ORzKLNmrv3n4SJ9ofG1rHxs9UTfD/d0oiRbbEBA/RDTqtobtfouK1tr5KZORg8x+79kdLyPF+v/AKW/d3Bv7Y1gCSWXT7Du/wCMG9Q+vK1Pxazcfxjcfpjn3Nt/SjHWqTV3F7g0MrAYbk4ySOAjYwczI864nt+Xqt6roF6s6C3doyxO5LHvaQU047WPlWqommJQ5bEYtz+FjoEjg0DtjPCxcWNzbiavdiRyiAgqgcIzQgojdKlBRAQEBAQEBAQEH//Z"); }
.fam.has-icon.fam-kimi { background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPktpbWk8L3RpdGxlPjxwYXRoIGQ9Ik0yMS44NDYgMGExLjkyMyAxLjkyMyAwIDExMCAzLjg0NkgyMC4xNWEuMjI2LjIyNiAwIDAxLS4yMjctLjIyNlYxLjkyM0MxOS45MjMuODYxIDIwLjc4NCAwIDIxLjg0NiAweiIgZmlsbD0iIzE3ODNGRiI+PC9wYXRoPjxwYXRoIGQ9Ik0xMS4wNjUgMTEuMTk5bDcuMjU3LTcuMmMuMTM3LS4xMzYuMDYtLjQxLS4xMTYtLjQxSDE0LjNhLjE2NC4xNjQgMCAwMC0uMTE3LjA1MWwtNy44MiA3Ljc1NmMtLjEyMi4xMi0uMzAyLjAxMy0uMzAyLS4xNzlWMy44MmMwLS4xMjctLjA4My0uMjMtLjE4NS0uMjNIMy4xODZjLS4xMDMgMC0uMTg2LjEwMy0uMTg2LjIzVjE5Ljc3YzAgLjEyOC4wODMuMjMuMTg2LjIzaDIuNjljLjEwMyAwIC4xODYtLjEwMi4xODYtLjIzdi0zLjI1YzAtLjA2OS4wMjUtLjEzNS4wNjktLjE3OGwyLjQyNC0yLjQwNmEuMTU4LjE1OCAwIDAxLjIwNS0uMDIzbDYuNDg0IDQuNzcyYTcuNjc3IDcuNjc3IDAgMDAzLjQ1MyAxLjI4M2MuMTA4LjAxMi4yLS4wOTUuMi0uMjN2LTMuMDZjMC0uMTE3LS4wNy0uMjEyLS4xNjQtLjIyN2E1LjAyOCA1LjAyOCAwIDAxLTIuMDI3LS44MDdsLTUuNjEzLTQuMDY0Yy0uMTE3LS4wNzgtLjEzMi0uMjc5LS4wMjgtLjM4MXoiIGZpbGw9IiNmZmYiPjwvcGF0aD48L3N2Zz4="); }
.fam.has-icon.fam-laguna { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAgVBMVEVDN/////9BNf8zI/9AM/84Kv9NQv/p6P89MP87Lv/d2//19f+dmP/T0f/9/f+inv+7uP9kW/+rp//t7P8vHv/y8f9TSf9aUP/Myv9eVf9IPf/l5P/Z1/9nXv8nEv+uqv9tZf91bv/DwP+Tjf+Ff/+0sP+Xkv97dP+OiP8fAP9/ef95+YSIAAADfklEQVRYhe1XW5uiMAytSctVQKTcFcHbOPP/f+A2LaiMoM7u0+63eXAqNuHkJD3NMPbf/nUDAM7Vx+95c4GCWVlmMbXgPw0CAvOosP2FMt8OohLFT0IAwtpejCxZV8jffjtbLSZsZb2HguNycFHgiyKok/5rGL0DwrU2ZrsXxQyVfUJxBeFZ7it/EWviFkUsNfUgD+FdGv5WvPBvzZtKacA6IjDozwOM9mkEN9ablg0f49lJeSUmfpIFt2h/2GH/HY8GT47gdJQX/exbs0wCEn/hNU15Nq8n7nmuVvuc+NjgXDXFcpSk8Q8/9H6oCMpnpzOcoYFbFD9oOToa/0HTnpndAAq+LU2PVNMQcOi/TSeBCf2yhDl9eo5qpwRZ41FP4mQAeSv4Ct1c+8NAGLgUQAAv6fn0CUfv1jAbUavP1HLYtwBMUkOsJ1mA6rS7XA4rXfrkW8mHFBinVrGncwAhXNdFd+Di0CC6PVhgmkTKlIDmz04VNEOEsF4dpTmBYOkOUCsRqVX0tKGhqe/OzymjRtDk7SmAzqGYzmEw3XZ3IYTDXOrqnbgm80JbxMHe7PeB3Rc2KYXYqb9HTSoqtfPZC3FyJWmJZKcexMcnHZNM04F0wq231A3wSsaXwp2akmBxjfXKdOL1xxCkZ+79AEDZLo4yT02Ai1AyN59CpWwCQILgZn1bhPVOaYusJ0kES9n4kT4cB1U6cc1C1RR5OllGUNdgNnrikMCGDS3l/hYhKKcbCaw8z0eZySAMe/UBtkm9YGOuO3+mlauyLPO7AE7r+6Hf6x+goMbIBnEvJ4oA8Tbe3okVFql/J3/6By53pjWndBXytm1vkZ02Tf3U+bYRGo1hWlDYR9d1Vwi4StLwUX8dLWnTqsrbr6+vrhchHtd2mjxW+5moQnVRihYbGcRTnfiPXGtZD+fuJr5dns/LnCLw3KuT9AGAuXvn5ci5RMoyFQF3Xp0+UCW2JBDe7NWmkliflJWCANjp99EMO/J/crkS8r2y4vi5qx8A8Mbc8NunQ4pTBsq8Va0AjHqAy9LcO88HDHWEy8LzPPJfN0MKwIWMzXHy4xf+CkO1t2s7SX0asrQyIouj/tbbvB6yaMQ9237qa75qGvPMvEq2fG/WBGENYjyyVfX2uAtYrZOxt72G+fJPosDyNmwXUf6zYVuHGI/7P/QegvzRPxz/7S+yX6vIMVP5SZMlAAAAAElFTkSuQmCC"); }
.fam.has-icon.fam-llama { background-image: url("data:image/x-icon;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAEAAQAMBEQACEQEDEQH/xAAZAAEBAQEBAQAAAAAAAAAAAAAABgQFBwL/xAAyEAABAwMCAwYDCQEAAAAAAAABAAIDBAURBhIHIVETMUFhcYEykcEWIiMzQnKCobEU/8QAGgEBAAMAAwAAAAAAAAAAAAAAAAMEBQECBv/EACoRAAICAQMDBAEEAwAAAAAAAAABAgMEBRExEiFBEzJRYfAUocHRFSJx/9oADAMBAAIRAxEAPwD3FAEAQBAEAQBAEAQBAEAQBAEAQBAEAQHA1Tqy36bjaKndLUyDLII+8jqT4BXMTCsyX/r2XyVsjKhR7uThWfibbqyqbBcKV9EHHDZTJvYP3HAx6q3fo9sI9UH1FarUoSe0lsUGoNT0dl7OItfU1cv5dPDzcR1PQKpi4VmRu12iuWybJzK6Nly34RhtOtaeqrm0Nyo5rdUvOGNm7ifAZIBGfRT36ZKEPUrkpx+iGjUozn0WR6X9lUsw0ggCA+ZHtjjc95w1oyT0CbN9kcN7Lc8w0VRfanU9ffrmztIongxRvGRuPwj+LR8yCvQZ83h48ceHL5/Psx8OP6m6Vs+EUvEW22ypsE1RWhsc8I/Ala3727wb5g+I9/BUdLtujeow4fJa1CFXouU+VwTHCuppTdaiCtDnXDswKd8hz9wDm0Z7jjHstDWIz9JdPt8/9KWmdHqNy9xX68tEdysU82wf9FK0yxuxzwObh7j+8LN03IdOQl4fZlzUcdW0t+V3NOjLk+66epaiZ26ZoMch6ubyz7jB91Hn0KjIlFceCXBud1EZPk7aplsIDFe2vfZq9sWd7qaQNx12lS0NK2LfG6Ir03VJL4ZI8KpoI7JWRmRoe2cvfk4w3a3B9ORWrrcZevF7dtv5ZmaROPpSTfky1cx1tqiOkgybRRHdI4dz+p9+4eWSpIR/x+K5y98v2Ipy/XZKhH2RPniNZ5rdW0+pbSOzkic0TbR8JHJrvT9J9l00y+NkZY1vD4/P3J86l1tXw8clRRX+iu2mZq/e1jRC7t2E843Y5tP068lQsxbKchV7ee32W45NdtDnv47nM4WNe3T0xdna6pcW+m1v1yretNPJW3x/ZV0dNUPf5LJZBqhAEBEXLhzR1NY+akq300bzkxdmHAeTeYwPmtmnWbIQUZx3+zHt0iE59UZbFLYrNSWOiFNRtOCcve7m556lZuTk2ZE+uZo4+PDHh0wN08MVRC+GdjXxSNLXscMhwPeFDGTi01yTSipLZ8ENPwypHVRfT3CaKAnPZFgcR5B2f9BWzDW7VHZxTfyZM9Ig5bqXYs7ZQQWyhio6Rm2GIYAPMnqT5lZNtsrZuc+WadVUaoKEeEalGSBAEAQBAEAQBAEAQBAEAQBAEAQBAf/Z"); }
.fam.has-icon.fam-magistral { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEVHcEzdBAb/ggPfBAT/hQP/lwLbAwjIABrLARf/rgHFABz/hAPGABzEAB37UA//rQH6UA/7Tw/7ggDEAB37UA//ggThBQD/rwH6TQ//gwPgAAD/ngLQAhTiBQB30kzeAAAAEnRSTlMA2XFnXaBUc5lzhNjrpnPc29q2zZkpAAAAvElEQVRYhe2SwQ6CMBBEgVYoBUUjIEX5/99U0mkPa1YNJgbJPi6d2c1rDySJIGwOXYKlC+UFcIId5o0I1iy4Aq11Nn9h8DjPja4w5wRZR4g3++ic84dqsaD7ThARwQuBI0QB6TnBYSC0HloPJ07QfshRBCsWFKOnDwXymCMb5JQT9CAUIUcB8s8FExFMG36Bmjz8C7BABbnxpDeAbBSwZKFGthDYM0O4Yc/MaxGsSJAXDMmbBfX8MwrCv3IHTWBri0Dy7JIAAAAASUVORK5CYII="); }
.fam.has-icon.fam-mimo { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAdVBMVEX/////aQD/YwD/YAD/WwD/VwD/q4f/r5D/5tj/ZgD/pYL/7OL/x7L/ezf/hlD///3/28r/0r3/zbb/4dL/t5j/j1j/9e3/eCn/pHv/jFL/xav/hEP/wqX/sY7/+PP/h0j/nnT/cRz/mGz/ez//TwD/lGD/bwqIb/lyAAAB5klEQVRYhe2W23KCMBCGyWZjSdGC4eAJqrbV93/EBklUcEPCdHrRqf8NTMJ+ZA+Z3Sh66qnfVJrE2VKp+Xyu1DKPq0nGcVEyFIjcCoXgq7V6D/t1wQRI9iAJXGwyv/0W+aPxFSJ2Pl9KdJt3iOWo/WLk90ZiO2K/Aa+9JrgDUXvOb8RTh30aZs9g7QA0/gAYJxwFERKAzoeCtM8DPdC5XNEeBJ+ACbKc9qZ+JdxL2qpul+07kpm09rvZ602H8ij4dfnDHBKoILwLs9kMNtJ5S4AX/ZrYbw4E4Lo5e9iq0ABi843cEACbBAIQvcAAQKVhye8A1efbReU6jzrDHoAxAqDuAYmQneDrcn1xAAACUPcBut4QEYy7gxgwJADFAMC3WZbNoDvtUQ4AxIUsoA8QiX7qDPJ2c/E3APyHgO0kAJEFNQUgCUCGEwBnApBPAMgFAejdRh/gRADS4QkqAmC/eSUA0dleFH0H2oDi3VPellvxmgKciJ7uEOYUoA7tK3QZ3KLolyxJQLQK9QEVDVChrYmqw4uOYUdA54gRB0WBLEObiACChLFpr/ESJIzPaUqM92hc+KbN6uRGSA5jI5pV0jDBoT+s6g6j28TekX+CoZqP3VmiEWerzbrIXMPZiNJO0w2f+m/6BnXMGjElZVGJAAAAAElFTkSuQmCC"); }
.fam.has-icon.fam-minimax { background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPk1pbmltYXg8L3RpdGxlPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0ibG9iZS1pY29ucy1taW5pbWF4LV9SXzBfIiB4MT0iMCUiIHgyPSIxMDAuMTgyJSIgeTE9IjUwLjA1NyUiIHkyPSI1MC4wNTclIj48c3RvcCBvZmZzZXQ9IjAlIiBzdG9wLWNvbG9yPSIjRTIxNjdFIj48L3N0b3A+PHN0b3Agb2Zmc2V0PSIxMDAlIiBzdG9wLWNvbG9yPSIjRkU2MDNDIj48L3N0b3A+PC9saW5lYXJHcmFkaWVudD48L2RlZnM+PHBhdGggZD0iTTE2LjI3OCAyYzEuMTU2IDAgMi4wOTMuOTI3IDIuMDkzIDIuMDd2MTIuNTAxYS43NC43NCAwIDAwLjc0NC43MDkuNzQuNzQgMCAwMC43NDMtLjcwOVY5LjA5OWEyLjA2IDIuMDYgMCAwMTIuMDcxLTIuMDQ5QTIuMDYgMi4wNiAwIDAxMjQgOS4xdjYuNTYxYS42NDkuNjQ5IDAgMDEtLjY1Mi42NDUuNjQ5LjY0OSAwIDAxLS42NTMtLjY0NVY5LjFhLjc2Mi43NjIgMCAwMC0uNzY2LS43NTguNzYyLjc2MiAwIDAwLS43NjYuNzU4djcuNDcyYTIuMDM3IDIuMDM3IDAgMDEtMi4wNDggMi4wMjYgMi4wMzcgMi4wMzcgMCAwMS0yLjA0OC0yLjAyNnYtMTIuNWEuNzg1Ljc4NSAwIDAwLS43ODgtLjc1My43ODUuNzg1IDAgMDAtLjc4OS43NTJsLS4wMDEgMTUuOTA0QTIuMDM3IDIuMDM3IDAgMDExMy40NDEgMjJhMi4wMzcgMi4wMzcgMCAwMS0yLjA0OC0yLjAyNlYxOC4wNGMwLS4zNTYuMjkyLS42NDUuNjUyLS42NDUuMzYgMCAuNjUyLjI4OS42NTIuNjQ1djEuOTM0YzAgLjI2My4xNDIuNTA2LjM3Mi42MzguMjMuMTMxLjUxNC4xMzEuNzQ0IDBhLjczNC43MzQgMCAwMC4zNzItLjYzOFY0LjA3YzAtMS4xNDMuOTM3LTIuMDcgMi4wOTMtMi4wN3ptLTUuNjc0IDBjMS4xNTYgMCAyLjA5My45MjcgMi4wOTMgMi4wN3YxMS41MjNhLjY0OC42NDggMCAwMS0uNjUyLjY0NS42NDguNjQ4IDAgMDEtLjY1Mi0uNjQ1VjQuMDdhLjc4NS43ODUgMCAwMC0uNzg5LS43OC43ODUuNzg1IDAgMDAtLjc4OS43OHYxNC4wMTNhMi4wNiAyLjA2IDAgMDEtMi4wNyAyLjA0OCAyLjA2IDIuMDYgMCAwMS0yLjA3MS0yLjA0OFY5LjFhLjc2Mi43NjIgMCAwMC0uNzY2LS43NTguNzYyLjc2MiAwIDAwLS43NjYuNzU4djMuOGEyLjA2IDIuMDYgMCAwMS0yLjA3MSAyLjA0OUEyLjA2IDIuMDYgMCAwMTAgMTIuOXYtMS4zNzhjMC0uMzU3LjI5Mi0uNjQ2LjY1Mi0uNjQ2LjM2IDAgLjY1My4yOS42NTMuNjQ2VjEyLjljMCAuNDE4LjM0My43NTcuNzY2Ljc1N3MuNzY2LS4zMzkuNzY2LS43NTdWOS4wOTlhMi4wNiAyLjA2IDAgMDEyLjA3LTIuMDQ4IDIuMDYgMi4wNiAwIDAxMi4wNzEgMi4wNDh2OC45ODRjMCAuNDE5LjM0My43NTguNzY3Ljc1OC40MjMgMCAuNzY2LS4zMzkuNzY2LS43NThWNC4wN2MwLTEuMTQzLjkzNy0yLjA3IDIuMDkzLTIuMDd6IiBmaWxsPSJ1cmwoI2xvYmUtaWNvbnMtbWluaW1heC1fUl8wXykiIGZpbGwtcnVsZT0ibm9uemVybyI+PC9wYXRoPjwvc3ZnPg=="); }
.fam.has-icon.fam-mistral { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAWlBMVEVHcEzdBAb/ggPfBAT/hQP/lwLbAwjIABrLARf/rgHFABz/hAPGABzEAB37UA//rQH6UA/7Tw/7ggDEAB37UA//ggThBQD/rwH6TQ//gwPgAAD/ngLQAhTiBQB30kzeAAAAEnRSTlMA2XFnXaBUc5lzhNjrpnPc29q2zZkpAAAAvElEQVRYhe2SwQ6CMBBEgVYoBUUjIEX5/99U0mkPa1YNJgbJPi6d2c1rDySJIGwOXYKlC+UFcIId5o0I1iy4Aq11Nn9h8DjPja4w5wRZR4g3++ic84dqsaD7ThARwQuBI0QB6TnBYSC0HloPJ07QfshRBCsWFKOnDwXymCMb5JQT9CAUIUcB8s8FExFMG36Bmjz8C7BABbnxpDeAbBSwZKFGthDYM0O4Yc/MaxGsSJAXDMmbBfX8MwrCv3IHTWBri0Dy7JIAAAAASUVORK5CYII="); }
.fam.has-icon.fam-muse { background-image: url("data:image/x-icon;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDRsUFRAWIB0iIiAdHx8kKDQsJCYxJx8fLT0tMTU3Ojo6Iys/RD84QzQ5OjcBCgoKDQwNGg8PGjclHyU3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3Nzc3N//AABEIAEAAQAMBEQACEQEDEQH/xAAZAAEBAQEBAQAAAAAAAAAAAAAABgQFBwL/xAAyEAABAwMCAwYDCQEAAAAAAAABAAIDBAURBhIHIVETMUFhcYEykcEWIiMzQnKCobEU/8QAGgEBAAMAAwAAAAAAAAAAAAAAAAMEBQECBv/EACoRAAICAQMDBAEEAwAAAAAAAAABAgMEBRExEiFBEzJRYfAUocHRFSJx/9oADAMBAAIRAxEAPwD3FAEAQBAEAQBAEAQBAEAQBAEAQBAEAQHA1Tqy36bjaKndLUyDLII+8jqT4BXMTCsyX/r2XyVsjKhR7uThWfibbqyqbBcKV9EHHDZTJvYP3HAx6q3fo9sI9UH1FarUoSe0lsUGoNT0dl7OItfU1cv5dPDzcR1PQKpi4VmRu12iuWybJzK6Nly34RhtOtaeqrm0Nyo5rdUvOGNm7ifAZIBGfRT36ZKEPUrkpx+iGjUozn0WR6X9lUsw0ggCA+ZHtjjc95w1oyT0CbN9kcN7Lc8w0VRfanU9ffrmztIongxRvGRuPwj+LR8yCvQZ83h48ceHL5/Psx8OP6m6Vs+EUvEW22ypsE1RWhsc8I/Ala3727wb5g+I9/BUdLtujeow4fJa1CFXouU+VwTHCuppTdaiCtDnXDswKd8hz9wDm0Z7jjHstDWIz9JdPt8/9KWmdHqNy9xX68tEdysU82wf9FK0yxuxzwObh7j+8LN03IdOQl4fZlzUcdW0t+V3NOjLk+66epaiZ26ZoMch6ubyz7jB91Hn0KjIlFceCXBud1EZPk7aplsIDFe2vfZq9sWd7qaQNx12lS0NK2LfG6Ir03VJL4ZI8KpoI7JWRmRoe2cvfk4w3a3B9ORWrrcZevF7dtv5ZmaROPpSTfky1cx1tqiOkgybRRHdI4dz+p9+4eWSpIR/x+K5y98v2Ipy/XZKhH2RPniNZ5rdW0+pbSOzkic0TbR8JHJrvT9J9l00y+NkZY1vD4/P3J86l1tXw8clRRX+iu2mZq/e1jRC7t2E843Y5tP068lQsxbKchV7ee32W45NdtDnv47nM4WNe3T0xdna6pcW+m1v1yretNPJW3x/ZV0dNUPf5LJZBqhAEBEXLhzR1NY+akq300bzkxdmHAeTeYwPmtmnWbIQUZx3+zHt0iE59UZbFLYrNSWOiFNRtOCcve7m556lZuTk2ZE+uZo4+PDHh0wN08MVRC+GdjXxSNLXscMhwPeFDGTi01yTSipLZ8ENPwypHVRfT3CaKAnPZFgcR5B2f9BWzDW7VHZxTfyZM9Ig5bqXYs7ZQQWyhio6Rm2GIYAPMnqT5lZNtsrZuc+WadVUaoKEeEalGSBAEAQBAEAQBAEAQBAEAQBAEAQBAf/Z"); }
.fam.has-icon.fam-nano-banana { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAABmFBMVEVHcEzxpiEvvG2l0VCudKQdtXmDy2TrU1lciO3kVmMzh/82ltnfkkHofUQ0kO0euW9BjPpBhvnywxs6qqf5RUT0Yz8zh/8xhv+a1Fn1SEpMwWwUuWgxhv85mN33vBj2R0ijvla7a5kOumL3pRwWtnTyryIzhv/uY07b0TFCwWfxxx5Mob2JwmfxaUDC1UPtbEnPYoBtyWXvXFI5oc+DgdT4RkW91UUxhv8yhv80h/42ivo5jfY5h/46ke9AiPxHivdRifI7l+DRZHzwTVE8mtc8lOgUuWj4uxb3R0ZqhuM4ocM7nc1CpLtivH7Dao12x2tZt4qjeLCXfbwzp7EosI5QspbdW21OrKO5zUKBg8/uxB9uwXRJqLC4b5mLf8d3hNngxyovq6GRz1zNzDZAsZNNleTrtiKUwlqdq2/qkTJgjeQwtX/QeHa7gYyljJ9gw29emtG1lnZtrJPQuDVHun7gaGboaFfZgFxNn8mov06NoZLeqDLTmUlporNvkdRMwG+FkL6DvGq/ola6tkeOlqx7tHp2mb/IjmhHIydbAAAAN3RSTlMA/v7+/P7+/v7+2RIS/lQvykMt9y1S8oHMgU2BKvSB3PRI9NvaQrDE2tro7/ewVdTWsNOvsPKvk5yoeQAAAu1JREFUWIXNlflT2kAYhlcUtRprq+KBjkxHrceMvVsRFFAwjVpBKyq1l1ZCUwtiRBFvi9e/3W+zSwihULKZ6fT9/XnyfnsFof89bW0meUEwZ+gShC5TAocgOMzwnCAIfs6EACbw15mZ4bXg99fdY+dtCr/6iFngEDC/+oyVbyMFpoOsFRyUD9aw8TbCTwc/L7FVUPmapfcs/KiG//LKOG/T8h++PjTKc4X87GyjQUGdjq+vN8a/SB8cFPK+B0b4QT3v8/m8BgyD6fRBPJ7Q8l6vx1Ox4Wk6fRiPBxM63uNpqAjnmpoOgU8kdgi/rfKeifYK9sLWpAgwf32p5SeU3P8bP6rwd3JiZwf4c5VX6HHI4/Kf/wE5Pb2TZcxfnp8X8eNOZ+kSA32Ez8qyfHx9eQv8tpjjKY3T8OdzPdBXBTk5Oc1mZen4+Pr2dndX4d0eilPeOTZWrOB6q6oon8pmJRCcnWFenMzzKo7T3qHZkJbevrc4sVjsJJW6upIkaW8PC0RR9LpBkKcprqSho4fyhMZ8LAWCI0m6wYJMJiDOTLrdLldOMKZPj0awDtnYwAWOvv8CwdqnTEac0giKaFUAI4ysE35jaytylBO8ywRAMFlSoI5AFnGE8lAABAuLWDAfyFVw6g0Fi0i3cQj4rUikGgQfFxZXwDCfr1C4BCVOQssQFYSoYC5fQbuKJXCcJxEQVH+rDekruDQbWf4+vSkQaCtQQ/nLhEuAoISh/E1SwxVVyBsqeVAgnUUVFIPLVdmTphiIYKUV1nF+Kmcw8Cx3FlYgBkM/hk4iiK4tqwZDPEK1oVByYTEabV2eI4YZYzziakGwH41uLlOD0Z8rsoeSyf28oYL91+c5FSiGl8Z5hJIXF/s/w2HFwMIjOxYQA8MAOMMXFiwIb7ay8ajZYiGGZkYBGrZYrFZruJ+VR3ZFYLUzC5CF53mrlZ1H3cDz3SYEjdCAN3yItennefYlxIEZzEwAR4HnmQ8BNZjk/0F+A/QHUwmIl9HnAAAAAElFTkSuQmCC"); }
.fam.has-icon.fam-nemotron { background-image: url("data:image/x-icon;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wCEAAkGBwgHBgkIBwgKCgkLDRYPDQwMDScUFRAWIB0pHyUdHx8oKDQsJC0pJionJzUhJzU1Li4uHSU/RDMtNyg5LisBCgoKDQwOGRAPGDAmHyU2LTU4OC8rLS0tNS0tLS0tKy01LystLS01NS0tKy0tLS0tLS0tLSstNzc3NysrKysrK//AABEIADAAMAMBEQACEQEDEQH/xAAbAAABBQEBAAAAAAAAAAAAAAAEAAMFBgcCAf/EADAQAAEDAwEFBgUFAAAAAAAAAAECAwQABREhBhIUMUETIlFTYZEXMkJScSOBobHR/8QAGgEAAgMBAQAAAAAAAAAAAAAAAAIBAwQFBv/EACoRAAICAQIEBAcBAAAAAAAAAAABAgMRBCESIjFSBRMUQRUjMjNRYbEk/9oADAMBAAIRAxEAPwDcaAFQAPKkpjgZ1J9aovvVMeJohvAyJ+eTZrJ8Sh2sXzEe8afLNT8Rh2sPMR1xh+w03r4/gONDz8hthOXFAVqtuhUszeBm0upUbzt5EivGPCQqU+Ppb1A/esnq52faQvFnoVy4Xabdn2jdnjbY4GU7q9VGqbHNfc3/AEhXn3CYsaU2ntbVei+B0Uve/ikzpns+VhykxbtoHUOJj3ZoNLOiXU/Kr/KiyiUFnqgcSwBxBGQoYNZXZFe4mTPdqblPmNJabeLZWsJcPgKoUpWanh1DFy3LmBZDIsEEphNJXIOO+rXOetbNVZONqpW0f6PJtPB01aZKVMzbw726lJyhJHdFNqf8MYzjvkJcm4f2Vv4dMqIsxpCVYUgHSjUarTW0cUluyZSi4itNybu05+KtsKhIR33T0V6U/hrshU/NfL+wrzjcfYuKIY4fid4A9zeOuK4erlGdrlWtimby9gnbKyrYUqSwkls/MB0r0PiGi8z5kPqRfZDO6INt4XGGGSocS2MJz9Y8KzR4NZWoT2mhdprD6gk28TFNMQFR1FbfInw/NRdTdbBVW7Y9wabWGAuNypGkt1LDPVKTqaphpdPRzTlliqMY9R0XDcbTBtLJUeQSn+yaeXnax8MViJLzPb2Jy27HJUwqbfJAS4oaZON38V0qtJTRDEixRUVuag+yh9stuJBB8a6BYUK/7GOpdVIti9xWc7vSsV+iha+JbMSUEyrXGPdUrbauX6TKTq4OdZba5Vx+e8xEax9QPwluBy6++76cqzq3Rw3SyRmCDo12agI3bdEbaP3qGTUT8TkliuOAdn4BZlxlzVZkvKX6Z0rn2X2WPmZW231Nur2BrFQBC7R2Fm9RexX3cHORSWVxsWJIhrJVfhw15y/es/oqO0jgQvhw15y/ej0VPaHAj34cNecv3o9FR2hwI//Z"); }
.fam.has-icon.fam-nova { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAdVBMVEUjLz7///8cKTkhLT0WJTYTIzQOIDIZJzcAFywAEyoAByQAECj19vcAGS7v8PHW2Nvm5+hTW2cIHDDf4eOipqySl51tdHxdZG6xtLkxO0gAAB56gIgpNUSBho2rrrNmbXa6vcFLU16JjpXOz9I8RlPDxckAAAMqqCy5AAACfUlEQVRYhe1V2Y7bMAwUdfuIJcvytb6P9P8/sZQTFCg29r4WhechAkhxRI7GCiE3bty48b+CCp0kkaSECKlCgEt+xKXAH4c5py7rl3KztvALF6WvcCvt/BDitV8Fz0fMNdMFA9tTOJAtiYEsIaxNIV0oiQwUX9U72bPzBnKYh7weAZ7xCrAzDABMKvD4OIOiyuvSXBAQqp2g6muGNMlTWIUsAUslrwCWBak0pcJd1AcKIYTuABJewCzdBh6Mlh6s3gEa5tR1OeP5WpZdCRA5LOKtBQZZj4J499gA7Fj34orAzfBGpGqAtgbzy0ItASpO2y0kisGd12Or8Kzq4YkErC2gG2D8aqCcwBJGaJSPBVJ0/HQAYmGLuYpQgyh0M8/Q6QHmEebHIZAUdQbbqREYyaDRjOk5EPAJigxavqTZBhPHasoYw4YMPZ/BgmlZj4NAjrtxsRFTFo2Flpj80jOWW5jPZRRYmpkUthSegkgUrXFEoyKbZArnsiZosF90EI0Zblvj0uAu3hUFGl9Nx0LUoWC6LacaHj20+94Lpmg4hRL2WshxpiD7vrfq4vwARul3r70jDJNcSHFKwS+bC5CkHvxan9hZ+C6+fC1IP75s6uXHtKqgmJw4/1rY3gzT1BVnBEQs6IOu1R9UeIHGj7qKPQxns6oePWibvJf8Owc6cV8LsMkTXXbaZFLZ8MXNHYuclByvkx7KO61zbzA1txq2K7H5o8xez+LW+G7KA6rVz8URNLmWHeTXUst+NfAJ6VYrRagpL5+UMAfetrfp39WZGZbwT8H6+qf6QKGczAf/fPWdmqas9uhtQPaDlf+AcqmT+ADq+eFWbty4ceOfw2/KDSaCQgTeSAAAAABJRU5ErkJggg=="); }
.fam.has-icon.fam-phi { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAG1BMVEVHcEz/uQB/ugAApO/yUCLyUCIApO9/ugD/uQAiNQNqAAAABXRSTlMAf4CAgMY5tpAAAABASURBVFiF7cy5DQAhAMRAH3//FcM1sBESiaeAoUcNyowwMDAwMDAwuBy0jDNEvFcz+DJG9AcrMjAwMDAwMLgcbA4XXcky94g6AAAAAElFTkSuQmCC"); }
.fam.has-icon.fam-qwen { background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjIwMCIgdmlld0JveD0iMjQuNTk5IDEzLjY5MiAxNTMuMTY2IDE1My4xNjYiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxwYXRoIGQ9Ik0xNzQuODIgMTA4Ljc1TDE1NS4zOCA3NUwxNjUuNjQgNTcuNzVDMTY2LjQ2IDU2LjMxIDE2Ni40NiA1NC41MyAxNjUuNjQgNTMuMDlMMTU1LjM4IDM1Ljg0QzE1NC44NiAzNC45MSAxNTMuODcgMzQuMzMgMTUyLjc4IDM0LjMzSDExNC44OEwxMDYuMTQgMTkuMDNDMTA1LjYyIDE4LjEgMTA0LjYzIDE3LjUyIDEwMy41NCAxNy41Mkg4My4zQzgyLjIxIDE3LjUyIDgxLjIyIDE4LjEgODAuNyAxOS4wM0w2MS4yNiA1Mi43N0g0MS4wMkMzOS45MyA1Mi43NyAzOC45NCA1My4zNSAzOC40MiA1NC4yOEwyOC4xNiA3MS41M0MyNy4zNCA3Mi45NyAyNy4zNCA3NC43NSAyOC4xNiA3Ni4xOUw0NS41MiAxMDcuNUwzNi43OCAxMjIuOEMzNS45NiAxMjQuMjQgMzUuOTYgMTI2LjAyIDM2Ljc4IDEyNy40Nkw0Ny4wNCAxNDQuNzFDNDcuNTYgMTQ1LjY0IDQ4LjU1IDE0Ni4yMiA0OS42NCAxNDYuMjJIODcuNTRMOTYuMjggMTYxLjUyQzk2LjggMTYyLjQ1IDk3Ljc5IDE2My4wMyA5OC44OCAxNjMuMDNIMTE5LjEyQzEyMC4yMSAxNjMuMDMgMTIxLjIgMTYyLjQ1IDEyMS43MiAxNjEuNTJMMTQxLjE2IDEyNy43OEgxNTguNTJDMTU5LjYxIDEyNy43OCAxNjAuNiAxMjcuMiAxNjEuMTIgMTI2LjI3TDE3MS4zOCAxMDkuMDJDMTcyLjIgMTA3LjU4IDE3Mi4yIDEwNS44IDE3MS4zOCAxMDQuMzZMMTc0LjgyIDEwOC43NVoiIGZpbGw9InVybCgjcGFpbnQwX3JhZGlhbCkiLz4KPHBhdGggZD0iTTExOS4xMiAxNjMuMDNIOTguODhMODcuNTQgMTQ0LjcxSDQ5LjY0TDYxLjI2IDEyNi4zOUg4MC43TDM4LjQyIDU1LjI5SDYxLjI2TDgzLjMgMTkuMDNMOTMuNTYgMzcuMzVMODMuMyA1NS4yOUgxNjEuNThMMTUxLjMyIDcyLjU0TDE3MC43NiAxMDYuMjhIMTUxLjMyTDE0MS4xNiA4OC4zNEwxMDEuMTggMTYzLjAzSDExOS4xMloiIGZpbGw9IndoaXRlIi8+CjxwYXRoIGQ9Ik0xMjcuODYgNzkuODNINzYuMTRMMTAxLjE4IDEyMi4xMUwxMjcuODYgNzkuODNaIiBmaWxsPSJ1cmwoI3BhaW50MV9yYWRpYWwpIi8+CjxkZWZzPgo8cmFkaWFsR3JhZGllbnQgaWQ9InBhaW50MF9yYWRpYWwiIGN4PSIwIiBjeT0iMCIgcj0iMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiIGdyYWRpZW50VHJhbnNmb3JtPSJ0cmFuc2xhdGUoMTAwIDEwMCkgcm90YXRlKDkwKSBzY2FsZSgxMDApIj4KPHN0b3Agc3RvcC1jb2xvcj0iIzY2NUNFRSIvPgo8c3RvcCBvZmZzZXQ9IjEiIHN0b3AtY29sb3I9IiMzMzJFOTEiLz4KPC9yYWRpYWxHcmFkaWVudD4KPHJhZGlhbEdyYWRpZW50IGlkPSJwYWludDFfcmFkaWFsIiBjeD0iMCIgY3k9IjAiIHI9IjEiIGdyYWRpZW50VW5pdHM9InVzZXJTcGFjZU9uVXNlIiBncmFkaWVudFRyYW5zZm9ybT0idHJhbnNsYXRlKDEwMCAxMDApIHJvdGF0ZSg5MCkgc2NhbGUoMTAwKSI+CjxzdG9wIHN0b3AtY29sb3I9IiM2NjVDRUUiLz4KPHN0b3Agb2Zmc2V0PSIxIiBzdG9wLWNvbG9yPSIjMzMyRTkxIi8+CjwvcmFkaWFsR3JhZGllbnQ+CjwvZGVmcz4KPC9zdmc+"); }
.fam.has-icon.fam-seed { background-image: url("data:image/svg+xml;base64,PHN2ZyBoZWlnaHQ9IjFlbSIgc3R5bGU9ImZsZXg6bm9uZTtsaW5lLWhlaWdodDoxIiB2aWV3Qm94PSIwIDAgMjQgMjQiIHdpZHRoPSIxZW0iIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHRpdGxlPkRvdWJhbzwvdGl0bGU+PHBhdGggZD0iTTUuMzEgMTUuNzU2Yy4xNzItMy43NSAxLjg4My01Ljk5OSAyLjU0OS02LjczOS0zLjI2IDIuMDU4LTUuNDI1IDUuNjU4LTYuMzU4IDguMzA4djEuMTJDMS41MDEgMjEuNTEzIDQuMjI2IDI0IDcuNTkgMjRhNi41OSA2LjU5IDAgMDAyLjItLjM3NWMuMzUzLS4xMi43LS4yNDggMS4wMzktLjM3OC45MTMtLjg5OSAxLjY1LTEuOTEgMi4yNDMtMi45OTItNC44NzcgMi40MzEtNy45NzQuMDcyLTcuNzYzLTQuNWwuMDAyLjAwMXoiIGZpbGw9IiMxRTM3RkMiPjwvcGF0aD48cGF0aCBkPSJNMjIuNTcgMTAuMjgzYy0xLjIxMi0uOTAxLTQuMTA5LTIuNDA0LTcuMzk3LTIuOC4yOTUgMy43OTIuMDkzIDguNzY2LTIuMSAxMi43NzNhMTIuNzgyIDEyLjc4MiAwIDAxLTIuMjQ0IDIuOTkyYzMuNzY0LTEuNDQ4IDYuNzQ2LTMuNDU3IDguNTk2LTUuMjE5IDIuODItMi42ODMgMy4zNTMtNS4xNzggMy4zNjEtNi42NmEyLjczNyAyLjczNyAwIDAwLS4yMTYtMS4wODR2LS4wMDJ6IiBmaWxsPSIjMzdFMUJFIj48L3BhdGg+PHBhdGggZD0iTTE0LjMwMyAxLjg2N0MxMi45NTUuNyAxMS4yNDggMCA5LjM5IDAgNy41MzIgMCA1Ljg4My42NzcgNC41NDUgMS44MDcgMi43OTEgMy4yOSAxLjYyNyA1LjU1NyAxLjUgOC4xMjV2OS4yMDFjLjkzMi0yLjY1IDMuMDk3LTYuMjUgNi4zNTctOC4zMDcuNS0uMzE4IDEuMDI1LS41OTUgMS41NjktLjgyOSAxLjg4My0uODAxIDMuODc4LS45MzIgNS43NDYtLjcwNi0uMjIyLTIuODMtLjcxOC01LjAwMi0uODctNS42MTdoLjAwMXoiIGZpbGw9IiNBNTY5RkYiPjwvcGF0aD48cGF0aCBkPSJNMTcuMzA1IDQuOTYxYTE5OS40NyAxOTkuNDcgMCAwMS0xLjA4LTEuMDk0Yy0uMjAyLS4yMTMtLjM5OC0uNDE5LS41ODYtLjYyMmwtMS4zMzMtMS4zNzhjLjE1MS42MTUuNjQ4IDIuNzg2Ljg2OSA1LjYxNyAzLjI4OC4zOTUgNi4xODUgMS44OTggNy4zOTYgMi44LTEuMzA2LTEuMjc1LTMuNDc1LTMuNDg3LTUuMjY2LTUuMzIzeiIgZmlsbD0iIzFFMzdGQyI+PC9wYXRoPjwvc3ZnPg=="); }
.fam.has-icon.fam-seedream { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAeFBMVEVHcEwUdP8Vdf8WeP834+IWef8WeP8Xfv424eMWeP834+M34+IwzOkXev8Vdv8uxOsWef834+I55+M45OQmmfY34+NW6fgbiPsin/c34uIvx+sWeP834uI35OI46OEUdP8TcP8ptvAuxusflfkkpPUz1ecahfwXfv5dhe/UAAAAG3RSTlMAdjDkxsyznHOKUYqaF0aoX+kwGQmnAaGOk7PFW4AGAAACVklEQVRYhe2U3WKiMBCFAQVBlAoCazchwdra93/D5mcwg5CGyOXuXIaZD3I4Z4JgQcXHJV32iki4DhCSZB0gIWQdgBCySoSjAJzWAE4CsFsD2AnAZg1gIwCrVJTzpHh9vlCA7HVApgDx64BYAVaIoOdJ9Op8BAA/Kx3N+0IA+OUpMcZJAOAnwsa0D/Ok9phvjWbHB8DHSsI7ww46PQA+ecpAs7NOki6fPMVaszOtdJK8VSR6B6U0NRr6WCkC4zS0iRBg+WoOQbOSliECLM9TojWrKWUxAiwXAdr3AvDJEUCu5j11z4N3ipzS7ooBQpa2oWcnALwTbimlXz0CSG+UdO8EaO/wmAkAw18grCR0aZwA7R1+U4AbJtRSl9I13+rm/ioBYxGK4F2ctQ5AAYCPTgI+sAhZIHVxiZABgMrqOgyIA3mWOwDgnTtTBHZHd+CVPNo6AND7CQBsJf5XXus3K23bYQtzJcGTCPyqDivrfCUEgvj0XxQKA9SvFSG3VSoEGrYwg3n2jVTk6tRupa0QCFpvDwAWAb7LChDP6tFtn60Ex5Y8tWfRfuHwqgEwypP+N53NSqn54H64wVOe7r+K0EjfYLk1AOdJ+9OWp/Lx0wYbTUTQCbHkqTa2GWw0sRLR5HkR0A7sKapuaqX5PL2b+94ZAozypNWdz5OQgE0lmFjJnifzz3skwfI8VUZwkySfPOXol7PR/ChP6lk3ZyWx7tjoLTYRqEUEIwG/PgFmrDSTpzTP8z+idll2ORwOb7oOsi6ZrJ2uVNV0vnWte9PYLu79X/9M/QA4b40y+rJWKAAAAABJRU5ErkJggg=="); }
.fam.has-icon.fam-sonar { background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAASFBMVEUAAAAAAAD9/fqXl5UAAAAAAAD///8HBwcAAAAAAADy8vCnp6X4+PXU1NKLi4pBQUDDw8Hk5OGenpwmJiWRkZB2dnRbW1qxsa/SbbTeAAAACnRSTlME////0jT//vOEODX2gQAAAoJJREFUWIWll9u2qyAMRYV2R6t4v/3/n54EBAPWgoc8dDQIUwjJQoqiKD7vqhSPrazen4Lsr3o+2Fr1h4CM8UjA+eeMF+JTvPMA77wV0Br+I/7cyiJoWHrfVWrx+veeixYCGli5+wJ4cX+FJgrwRrwubhwgYbgDDPgwASBhnL8B5pGepcxAgtqugE3pRwkx2PFN0IWADhvHPSUGOJbWuvuAXcemSwSIBQBaDmixYRHpANHXAHVvAdZ7AKAtA8wpDVglHFv7BECdYcK1LBPwtnSAmbiU+DvaAnkG0JmHxjJz+QVQoI1GWFPSmGtwT9UXQM07uu4BwLbX3wFtYKMZP4btd4BzXsZmAuAyxj54oO4Avrxh9Ry74IuMKNMAlAcL/nSLq4xHAKoem4nAJSIRgNUjN1sLG+5DvT0BoPiY6jmqEZNSntIUB1D4zJxtOZOcuYyMAmjNrfl7KlJLgeiTAFyYmSaSTJn9jAA87eaq3FhR/gmYmaIGANJVCVMEQK9heecfLKuZQgTw62gzepAB6CIA/J0ur+TnOQIwBrfVKIdhGCUHUEbyKsAwjtjpVlCMZJ0AymBpctoB5K0iWU08AXSckrmjVh+Qt5rYk80siJTR+o3SCQrGYJ91xy8AY2cQSUda5DVUBYsDxM4FBzAVoXfhTO4HgOOEN3mw2/JKB9C0acePRJqOAk8FnBVlM7EzspgG6HplBJEBtCyqPg0wKHDJc9YCndVqSAFILuKsmPS64l9pE6VO61yvGtuU78Qp90t18lcZ6EGTEoOOu+HXehcH+AdxCBBrDBBcYC4AMfuuCK88vluW8/z7TlRGLl3lZU6BVfnXvuyLZ/bVN//ynXn9/wfurDA/lO1fuwAAAABJRU5ErkJggg=="); }

/* ==========================================================================
   Public pages: living sky, nav, footer, sections, reveals, kinetic type
   ========================================================================== */
html { scroll-padding-top: 96px; background: var(--bg-abyss); }
/* LND-19 · zero layout shift on a cold load: until the web fonts arrive (display=swap), text
   is set in local faces resized to the web fonts' advance widths, ascent and descent (measured
   with canvas TextMetrics against the built pages), so the swap moves nothing. Each stack puts
   the matched fallback straight after its web font; the rest of the stack is tokens.css's. */
@font-face { font-family: "Shrikhand Fallback"; src: local("Georgia Bold"), local("Georgia-Bold"); font-weight: 400; size-adjust: 103.53%; ascent-override: 99.49%; descent-override: 41.53%; line-gap-override: 0%; }
@font-face { font-family: "Atkinson Next Fallback"; src: local("Arial"), local("ArialMT"); font-weight: 400; size-adjust: 97.3%; ascent-override: 100.72%; descent-override: 32.89%; line-gap-override: 0%; }
@font-face { font-family: "Atkinson Next Fallback"; src: local("Arial Bold"), local("Arial-BoldMT"); font-weight: 600; size-adjust: 97.76%; ascent-override: 100.24%; descent-override: 32.73%; line-gap-override: 0%; }
@font-face { font-family: "Atkinson Next Fallback"; src: local("Arial Bold"), local("Arial-BoldMT"); font-weight: 700; size-adjust: 98.37%; ascent-override: 99.62%; descent-override: 32.53%; line-gap-override: 0%; }
@font-face { font-family: "Atkinson Next Fallback"; src: local("Arial Bold"), local("Arial-BoldMT"); font-weight: 800 900; size-adjust: 103.9%; ascent-override: 94.32%; descent-override: 30.8%; line-gap-override: 0%; }
@font-face { font-family: "Atkinson Mono Fallback"; src: local("Courier New"), local("CourierNewPSMT"); font-weight: 400; size-adjust: 105.32%; ascent-override: 93.05%; descent-override: 30.38%; line-gap-override: 0%; }
@font-face { font-family: "Atkinson Mono Fallback"; src: local("Courier New Bold"), local("CourierNewPS-BoldMT"); font-weight: 600 900; size-adjust: 105.32%; ascent-override: 93.05%; descent-override: 30.38%; line-gap-override: 0%; }
:root {
  --font-display: "Shrikhand", "Shrikhand Fallback", "Atkinson Hyperlegible Next", Georgia, serif;
  --font-text: "Atkinson Hyperlegible Next", "Atkinson Next Fallback", "Segoe UI", system-ui, -apple-system, sans-serif;
  --font-mono: "Atkinson Hyperlegible Mono", "Atkinson Mono Fallback", ui-monospace, "Cascadia Mono", Consolas, monospace;
}
html.lenis, html.lenis body { height: auto; }
.lenis.lenis-smooth { scroll-behavior: auto !important; }
.lenis.lenis-stopped { overflow: hidden; }
body.public { background: transparent; }

/* ---- the sky: one fixed world whose light evolves as you scroll ---- */
.sky { position: fixed; inset: 0; z-index: -2; pointer-events: none;
  --sky-top: #070423; --sky-mid: #1B1358; --sky-low: #3B2A86; --sky-glow: rgb(232 190 35 / .2); --mx: 60%; --my: 30%;
  background:
    radial-gradient(70% 55% at 50% 108%, var(--sky-glow), transparent 70%),
    linear-gradient(180deg, var(--sky-top) 0%, var(--sky-mid) 58%, var(--sky-low) 100%);
}
.sky::before { content: ""; position: absolute; inset: 0; background: var(--grain); opacity: .05; mix-blend-mode: overlay; }
.sky::after { content: ""; position: absolute; inset: 0; background: radial-gradient(520px circle at var(--mx) var(--my), rgb(232 190 35 / .075), transparent 70%); transition: opacity .6s; }
@media (hover: none) { .sky::after { opacity: 0; } }
.dust { position: fixed; inset: 0; z-index: -1; width: 100%; height: 100%; pointer-events: none; }

/* pause control for ambient motion (GLB-11, LND-18): an icon button docked in the nav bar, so it
   never sits over content at any width. The icon swaps pause/play; its label and tooltip say which. */
.motion-toggle { color: var(--text-2); }
.motion-toggle:hover { color: var(--text); }
/* phones: the compact lockup (GLB-3) leaves the nav room for the control */
@media (max-width: 480px) { .nav-bar > .lockup .wordmark { display: none; } }
@media (max-width: 360px) { .nav .nav-bar { gap: 8px; padding-left: 10px; } .nav .nav-actions { gap: 6px; } }
.nav-bar > .lockup { flex-shrink: 0; } /* the logo never squeezes to make room */
/* paused, looping decoration holds still too. base.css pauses [data-ambient] elements, but a
   pseudo-element's animation is out of that rule's reach, so the placeholder loops are named here */
html.still .ph::before, html.still .ph::after, html.still .ph-art .ic { animation-play-state: paused; }

/* ---- navigation ---- */
.nav { position: fixed; inset: 0 0 auto; z-index: var(--z-nav); padding: 14px var(--gutter) 0; pointer-events: none; container-type: inline-size; }
.nav-bar { pointer-events: auto; margin-inline: auto; max-width: 1360px; display: flex; align-items: center; gap: 18px; min-height: 64px; padding: 0 10px 0 16px;
  border-radius: 22px; border: 1px solid transparent;
  --dock: max(0px, (min(1360px, 100cqw) - 1180px) / 2); }
/* LND-19 · docking on scroll moves nothing in layout: the bar keeps its wide 64px box, the glass
   fades in on ::before at the docked size (1180px wide, 58px tall), and the two ends slide in
   by transform. --dock is how far each end travels (half of the wide bar less 1180px). */
.nav-bar::before { content: ""; position: absolute; inset: -1px calc(var(--dock) - 1px) 5px; z-index: -1; border-radius: inherit; border: 1px solid var(--line-2);
  background: color-mix(in oklch, var(--bg-abyss) 74%, transparent); box-shadow: var(--e2);
  backdrop-filter: blur(18px) saturate(160%); -webkit-backdrop-filter: blur(18px) saturate(160%); opacity: 0; transition: opacity .4s; pointer-events: none; }
.nav.scrolled .nav-bar::before { opacity: 1; }
.nav-bar > .lockup, .nav-bar > nav, .nav-bar > .nav-actions, .nav-bar > .motion-toggle { transition: transform .5s var(--ease-out); }
.nav.scrolled .nav-bar > nav { transform: translateY(-3px); }
.nav.scrolled .nav-bar > .lockup { transform: translate(var(--dock), -3px); }
.nav.scrolled .nav-bar > .nav-actions, .nav.scrolled .nav-bar > .motion-toggle { transform: translate(calc(-1 * var(--dock)), -3px); }
.nav-bar > nav { flex: 1; display: flex; justify-content: center; min-width: 0; }
.nav .links { display: flex; align-items: center; gap: 2px; position: relative; list-style: none; padding: 0; }
.nav .links a { display: inline-flex; align-items: center; min-height: 44px; padding: 0 12px; border-radius: 12px; color: var(--text-2); text-decoration: none; font-weight: 700; font-size: .9375rem; transition: color var(--dur-quick); }
.nav .links a:hover, .nav .links a[aria-current="true"] { color: var(--text); }
.nav-ink { position: absolute; left: 0; bottom: 4px; height: 3px; width: 0; border-radius: 3px; background: var(--gold); box-shadow: var(--glow-gold); opacity: 0;
  transition: transform .45s var(--spring-snappy), width .45s var(--spring-snappy), opacity .3s; pointer-events: none; }
.nav-actions { display: flex; align-items: center; gap: 8px; }
.nav-progress { position: absolute; left: calc(22px + var(--dock)); right: calc(22px + var(--dock)); bottom: 5px; height: 2px; border-radius: 2px; overflow: hidden; opacity: 0; transition: opacity .4s; }
.nav.scrolled .nav-progress { opacity: 1; }
.nav-progress i { display: block; height: 100%; width: 100%; transform-origin: left; transform: scaleX(var(--p, 0)); background: linear-gradient(90deg, var(--accent), var(--gold)); }
.nav-bar { position: relative; }
.menu-btn { display: none; }
@media (max-width: 1180px) {
  .nav .links, .nav-actions .hide-sm { display: none; }
  .menu-btn { display: inline-flex; }
  .nav-actions { margin-left: auto; }
}
/* the slim nav (404, policy and auth pages) has no drawer, so its links stay visible all the way
   down; four links and the pause control (GLB-11) share the bar, tightened in steps on phones.
   auth.css restates its own values for the sign-in and invite pages. */
@media (max-width: 1180px) {
  .nav-slim .links { display: flex; }
  .nav-slim .nav-bar { gap: 10px; padding-right: 6px; }
  .nav-slim .links a { padding: 0 9px; font-size: .9rem; }
}
@media (max-width: 540px) { .nav-slim .lockup .wordmark { display: none; } }
@media (max-width: 480px) {
  .nav-slim .links a { padding: 0 6px; font-size: .82rem; }
  .nav-slim .nav-bar { padding-left: 10px; }
}
@media (max-width: 400px) {
  .nav-slim .nav-bar { gap: 6px; }
  .nav-slim .links a { padding: 0 4px; }
}
@media (max-width: 356px) {
  .nav-slim .nav-bar { padding-left: 6px; padding-right: 4px; gap: 4px; }
  .nav-slim .links { gap: 0; }
  .nav-slim .links a { padding: 0 3px; font-size: .75rem; }
}
dialog.menu-sheet { inset: 0; width: 100vw; height: 100dvh; max-width: none; max-height: none; margin: 0; padding: 0; border: 0; color: var(--text);
  background: radial-gradient(90% 60% at 80% 0%, #2a1f7c 0%, var(--bg) 55%, var(--bg-abyss) 100%); }
dialog.menu-sheet[open] { display: flex; flex-direction: column; animation: menu-in var(--dur-spring-soft) var(--spring-soft); }
@keyframes menu-in { from { opacity: 0; transform: translateY(-14px) scale(.98); } }
.menu-sheet .top { display: flex; align-items: center; justify-content: space-between; padding: 14px var(--gutter); min-height: 78px; }
.menu-sheet nav { flex: 1; overflow: auto; padding: 8px var(--gutter) 24px; }
.menu-sheet nav ul { list-style: none; padding: 0; display: grid; gap: 2px; }
.menu-sheet nav a { display: flex; align-items: center; justify-content: space-between; min-height: 58px; font: 400 clamp(1.7rem, 7vw, 2.4rem)/1 var(--font-display); color: var(--text); text-decoration: none; border-bottom: 1px solid var(--line); font-kerning: none; }
.menu-sheet nav a .ic { color: var(--gold); width: 22px; height: 22px; }
.menu-sheet .cta { display: grid; gap: 10px; padding: 16px var(--gutter) max(24px, env(safe-area-inset-bottom)); border-top: 1px solid var(--line); background: color-mix(in oklch, var(--bg-abyss) 60%, transparent); }

/* ---- sections ---- */
main { position: relative; z-index: var(--z-content); }
.sec { position: relative; padding-block: var(--section); }
.sec-head { display: grid; gap: 18px; max-width: 880px; margin-bottom: clamp(40px, 6vw, 72px); }
.sec-head.center { margin-inline: auto; text-align: center; justify-items: center; }
.sec-head h2 { font-family: var(--font-display); font-weight: 400; font-size: var(--fs-d1); line-height: 1.02; letter-spacing: var(--track-display); font-kerning: none; }
.sec-head h2 .gold { color: var(--gold); -webkit-text-stroke: .06em var(--ink); paint-order: stroke fill; text-shadow: .06em .06em 0 var(--ink); }
.sec-head h2 .cyan { color: var(--accent-text); }
.sec-head .lead { max-width: 64ch; }
/* an inline link in a sentence is exempt from target-size rules, but a little padding
   makes it comfortable on a phone without touching the line box */
.lead a, .sec-head p a, .sv-sub a, .fine a { padding-block: 4px; }

/* ---- reveals ---- */
[data-reveal] { opacity: 0; transform: translateY(26px); transition: opacity .8s var(--ease-out), transform .9s var(--ease-out); transition-delay: calc(var(--d, 0) * 1ms); }
[data-reveal].in { opacity: 1; transform: none; }
[data-reveal="scale"] { transform: translateY(18px) scale(.96); }
.no-js [data-reveal], html.still [data-reveal] { opacity: 1; transform: none; }
/* The word reveal needs a clip box. `overflow: hidden` gives an inline-block its bottom margin
   edge as baseline, so the only way to widen the box is a padding + negative margin pair -- and
   between two inline-blocks that pair is NOT layout-neutral: each side gives back .08em less than
   it takes, so a space loses 2 x .08em. At 78.72px that turned the font's own 14.81px word gap
   into 2.22px and headings read as "fromidea". word-spacing pays the debt back, and because it is
   in em it stays exact at every size. Keep the two numbers in step. */
.split { word-spacing: .16em; }
.split .w { display: inline-block; overflow: hidden; vertical-align: top;
  /* Shrikhand paints well outside its line box: measured on the landing at 78.72px, the ink ran
     15.3px above and 10.2px below it, so `overflow: hidden` (which the word reveal needs) was
     slicing the tops off the capitals and the tails off y, p and g. */
  padding: .26em .08em .25em; margin: -.26em -.08em -.25em; }
/* A letter reveal fades in (opacity 0 -> 1) and never slides, so it needs no clip box -- and the
   clip it was inheriting was slicing the text-stroke and drop shadow on "Make a wish." Neither
   does it need the padding above, so it also gives back the word-spacing that padding costs. */
.split .w:has(> .ch) { overflow: visible; padding: 0; margin: 0; }
.split:has(> .w > .ch) { word-spacing: normal; }
.split .wi { display: inline-block;
  /* 105% clears the word's own height but not the clip padding, which left the tops of the
     capitals showing before the reveal; the .52em covers .26em + .25em of it. */
  transform: translateY(calc(105% + .52em)) rotate(4deg);
  transition: transform .9s var(--ease-out); transition-delay: calc(var(--i) * 45ms + var(--d, 0) * 1ms); }
.split .ch { display: inline-block; transform: translateY(.5em) scale(.4) rotate(-12deg); opacity: 0; transition: transform var(--dur-spring-bouncy) var(--spring-bouncy), opacity .2s; transition-delay: calc(var(--i) * var(--stagger-letter) + var(--d, 0) * 1ms); }
[data-kinetic].in .split .wi, [data-kinetic].in .split .ch { transform: none; opacity: 1; }
html.still [data-kinetic] .split .wi, html.still [data-kinetic] .split .ch { transform: none; opacity: 1; transition: none; }

/* ---- footer (GLB-5) ---- */
.site-footer { position: relative; z-index: 1; padding: 56px 0 calc(84px + env(safe-area-inset-bottom)); border-top: 1px solid var(--line); background: linear-gradient(180deg, transparent, color-mix(in oklch, var(--bg-abyss) 80%, transparent)); }
.site-footer .wrap { display: grid; gap: 28px; grid-template-columns: 1fr auto; align-items: start; }
.site-footer .tag { color: var(--text-3); font-size: .9375rem; margin-top: 12px; max-width: 42ch; }
.site-footer ul { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 4px 6px; justify-content: flex-end; }
.site-footer ul a { display: inline-flex; align-items: center; gap: 7px; min-height: 44px; padding: 0 12px; border-radius: 12px; color: var(--text-2); text-decoration: none; font-weight: 700; }
.site-footer ul a:hover { color: var(--text); background: color-mix(in oklch, var(--fg) 7%, transparent); }
.site-footer .legal { grid-column: 1 / -1; color: var(--text-3); font-size: .875rem; padding-top: 20px; border-top: 1px solid var(--line); }
@media (max-width: 760px) { .site-footer .wrap { grid-template-columns: 1fr; } .site-footer ul { justify-content: flex-start; } }

/* ---- shared public bits ---- */
.pill-row { display: flex; flex-wrap: wrap; gap: 8px 18px; }
.proof { display: inline-flex; align-items: center; gap: 7px; color: var(--text-2); font-weight: 600; font-size: .9375rem; }
.proof .ic { color: var(--success-text); }
.sticker-tag { display: inline-flex; align-items: center; gap: 7px; padding: 7px 12px; border-radius: 12px; background: var(--gold); color: var(--on-gold); border: 2px solid var(--ink); box-shadow: var(--sticker-shadow-sm); font: 800 .8125rem/1 var(--font-text); }
.glass-panel { background: var(--glass); border: 1px solid var(--line); border-radius: var(--r-xl); box-shadow: var(--e2); backdrop-filter: blur(18px) saturate(150%); -webkit-backdrop-filter: blur(18px) saturate(150%); }

/* ==========================================================================
   Landing page — "/" and "/pricing"
   ========================================================================== */
/* A full-bleed backdrop covers its whole section once the real capture lands, and a section
   can be several screens tall — so a frame drawn at the section's own size has its edges off
   screen and reads as a stray line of text. The placeholder instead draws a proper box: a
   visible rectangle at the file's real aspect ratio, sized to fit on screen, showing what
   will be shot and at what shape. It sticks with the reader down tall pinned sections. */
.ph-bleed { position: absolute; inset: 0; border-radius: 0; background: none; z-index: -1; pointer-events: none; overflow: clip visible; }
.ph-bleed:has(.ph-frame) { z-index: 3; }   /* only while the box is showing */
.ph-bleed::before, .ph-bleed::after { display: none; }
/* A bleed backdrop covers its whole section with ONE copy of its art (`cover`), the playtest's
   included, though on a desktop, where it pins, that section is five to nine screens tall: the
   owner asked for one copy big enough to cover the entire section. There covering it magnifies the
   art 3 to 6.4 times (a phone's shorter section, or reduced motion's, less than 2), and the art
   fills the section (an earlier cover of a trimmed, shrunk copy left it in the middle half,
   with empty bands above and below). It used to look soft at that size,
   worse than a photo viewer at the same zoom, and the fix for that is in the file rather than
   here: the playtest draws renditions cut from the lossless generation and enlarged once with
   Lanczos (see RENDITIONS in src/tools/finish_backdrops.py and renditions() in js/core.js). An
   earlier attempt repeated the art down the section at its own size instead; the owner rejected
   that as the same picture duplicated over and over. */
.ph-bleed > picture, .ph-bleed > img {
  position: absolute; inset: 0;
  background-position: center top;
  background-size: cover;
  background-repeat: no-repeat;
  opacity: .5;
  mask-image: linear-gradient(180deg, transparent, #000 16%, #000 84%, transparent);
}
/* the artwork is drawn as the <picture>'s background, one copy at `cover`; where there is an
   <img> (the hero's and the closing's) it is only there to load the file and report errors */
.ph-bleed.loaded > picture img { display: none; }
.ph-bleed.loaded > img { display: none; }
/* The LND-17 spec cards (aria-hidden notes naming the file each slot stands in for, sized off
   screen) are gone (owner, 2026-10-27). Hidden from people but text, they were the
   "placeholders" an AI assistant reported on the live landing: its fetcher reads the raw HTML
   and ignores CSS and aria-hidden. Every slot has its file now; the specs live in
   ASSET_REQUESTS.md, and qa/bot-read.mjs fails a page whose text names one. */

/* the wash over the region the capture will cover. The host sits at z-index:-1 so real art
   drops behind the page content, but the placeholder box has to be legible, so it lifts
   itself above that content while the capture is missing. */
.ph-bleed .ph-frame { position: absolute; inset: 0; z-index: 3; display: flex; justify-content: center;
  background: radial-gradient(120% 90% at 30% 20%, color-mix(in oklch, var(--seed-bg-royal) 26%, transparent), transparent 74%);
  mask-image: linear-gradient(180deg, transparent, #000 10%, #000 86%, transparent); }
/* the box itself: a real rectangle at the file's aspect ratio, fully on screen */
.ph-bleed .ph-ratio { position: sticky; top: calc(50vh - var(--ph-h, 150px) / 2);
  align-self: flex-start; margin-top: max(24px, 14vh);
  width: min(var(--ph-w, 420px), calc(100% - 2 * var(--gutter))); aspect-ratio: var(--ar, 16 / 9); height: auto;
  display: grid; place-content: center; justify-items: center; gap: 6px; padding: 14px; text-align: center; overflow: hidden;
  border: 1.5px solid color-mix(in oklch, var(--seed-gold) 42%, transparent); border-radius: var(--r-md);
  background: color-mix(in oklch, var(--bg-abyss) 94%, transparent); backdrop-filter: blur(6px);
  box-shadow: inset 0 0 0 1px color-mix(in oklch, var(--seed-gold) 10%, transparent), var(--e3); }
/* corner ticks, so the rectangle's edges read even over busy art */
.ph-bleed .ph-ratio::before, .ph-bleed .ph-ratio::after { content: ""; position: absolute; width: 18px; height: 18px; border: 2px solid var(--gold); }
.ph-bleed .ph-ratio::before { left: -1px; top: -1px; border-right: 0; border-bottom: 0; border-radius: var(--r-md) 0 0 0; }
.ph-bleed .ph-ratio::after { right: -1px; bottom: -1px; border-left: 0; border-top: 0; border-radius: 0 0 var(--r-md) 0; }
.ph-bleed .ph-ratio .ic { width: 26px; height: 26px; color: var(--gold-text); --ic-stroke: 1.6; }
.ph-bleed .ph-ratio b { font: 700 .75rem/1.2 var(--font-mono); color: var(--gold-text); }
.ph-bleed .ph-ratio span { font: 600 .625rem/1.4 var(--font-mono); color: var(--text-3); max-width: 32ch; }
.ph-bleed.loaded .ph-frame { display: none; }
html.clean .ph-frame { display: none; }
.ph-bleed .ph-label { display: none; }   /* the box states the spec already */
/* each backdrop's own box size, so the rectangle suits the section it sits in */
/* the hero's art and copy fill it corner to corner, so the spec box sits low-left, under
   the copy column and clear of both the nav and the product window below */
/* The hero backdrop is packed corner to corner, so its box overlaps something wherever it
   goes. It keeps its true 16:9 rectangle regardless — a placeholder that lies about its
   shape is worse than one that overlaps — and sits low-left over the product window, which
   is itself a mock. */
.hero-art .ph-frame { align-items: flex-end; justify-content: flex-start; padding: 0 clamp(16px, 4vw, 56px) clamp(24px, 4vh, 56px); }
.hero-art .ph-ratio { --ph-w: 300px; --ph-h: 167px; position: static; align-self: flex-end; margin-top: 0; }
.pt-atmos .ph-frame { position: sticky; top: 0; inset-inline: 0; height: 100svh; align-items: center; }
.pt-atmos .ph-ratio { --ph-w: 380px; --ph-h: 238px; position: static; margin-top: 0; }
.dawn-art .ph-frame { justify-content: flex-start; padding-left: clamp(16px, 4vw, 56px); }
.dawn-art .ph-ratio { --ph-w: 340px; --ph-h: 165px; }
@media (max-width: 720px) { .ph-bleed .ph-ratio { --ph-w: 300px; } .ph-bleed .ph-ratio span { display: none; } }

/* ---------------------------------------------------------------- HERO */
.hero { position: relative; min-height: 100svh; padding: clamp(96px, 12vh, 132px) 0 0; isolation: isolate; }
.hero-grid { display: grid; grid-template-columns: minmax(0, 1.22fr) minmax(0, .78fr); grid-template-areas: "head stage" "body stage"; column-gap: clamp(24px, 4vw, 64px); align-items: end; }
.hero-head { grid-area: head; align-self: end; }
.hero-body { grid-area: body; align-self: start; display: grid; gap: 20px; margin-top: 20px; }
.hero-stage { grid-area: stage; position: relative; aspect-ratio: 1 / 1.12; width: 118%; max-width: 640px; justify-self: center; align-self: center; margin-left: -8%; }
.hero-title { display: grid; gap: .1em; margin-top: 18px; }
.hero-title .t1 { font-size: clamp(3.1rem, 1.1rem + 5.9vw, 7.4rem); line-height: .92; letter-spacing: -.01em; padding-bottom: .06em; white-space: nowrap; }
.hero-title .t2 { font: 800 clamp(1.75rem, .9rem + 2.9vw, 3.75rem)/1.04 var(--font-text); letter-spacing: -.025em; color: var(--text); }
.hero-title .t2 em { font-style: normal; color: var(--accent-text); text-shadow: var(--glow-accent); }
/* 58ch in Atkinson Hyperlegible Next, written in em: a ch is the font's own "0", so in the
   fallback face 58ch is 17% narrower, the lead takes an extra line, and the whole hero re-centres
   when the web font lands (LND-19). In em the box is the same in both faces. */
.hero .lead { max-width: 37.6em; }
.lamp-glow { position: absolute; left: 8%; right: 8%; top: 8%; bottom: 14%; border-radius: 50%; background: radial-gradient(closest-side, rgb(232 190 35 / .34), rgb(232 190 35 / .1) 55%, transparent 75%); filter: blur(6px); animation: breathe 6s var(--ease-in-out) infinite; }
@keyframes breathe { 50% { transform: scale(1.08); opacity: .8; } }
.hero-stage .island { position: absolute; left: -10%; right: -10%; bottom: -4%; width: 120%; height: 60%; animation: island-float 7s var(--ease-in-out) infinite; }
@keyframes island-float { 50% { transform: translateY(-9px); } }
.hero-genie { position: absolute; left: 13%; top: -3%; width: 74%; filter: drop-shadow(0 18px 30px rgb(3 1 20 / .55)) drop-shadow(0 0 40px rgb(3 163 222 / .28)); }
.hero-genie .rg-spark { width: 18px; height: 18px; }
.stage-caption { position: absolute; left: 50%; bottom: -8px; translate: -50% 0; font: 700 .8125rem var(--font-mono); color: var(--gold-text); white-space: nowrap; min-height: 1em; text-shadow: 0 0 12px rgb(232 190 35 / .5); }
.wish-box { position: relative; display: flex; align-items: flex-end; gap: 10px; padding: 10px 10px 10px 14px; border-radius: 22px;
  background: linear-gradient(180deg, color-mix(in oklch, var(--panel-2) 92%, transparent), color-mix(in oklch, var(--panel) 92%, transparent));
  border: 1.5px solid var(--line-2); box-shadow: var(--rim), 0 22px 60px -26px #000, 0 0 50px -18px rgb(232 190 35 / .45);
  transition: border-color var(--dur-base), box-shadow var(--dur-base); }
.wish-box:focus-within { border-color: color-mix(in oklch, var(--gold) 70%, transparent); box-shadow: var(--rim), 0 22px 60px -26px #000, 0 0 0 5px rgb(232 190 35 / .16), 0 0 60px -12px rgb(232 190 35 / .6); }
.wish-ic { color: var(--gold-text); width: 24px; height: 24px; margin-bottom: 11px; flex: none; }
.wish textarea { flex: 1; min-height: 46px; max-height: 136px; padding: 12px 4px; resize: none; border: 0; background: transparent; color: var(--text); font-size: 1.0625rem; line-height: 1.45; outline: none; overflow-y: auto; }
.wish textarea::placeholder { color: transparent; }
.wish-ghost { position: absolute; left: 52px; right: 150px; top: 22px; color: var(--text-3); font-size: 1.0625rem; line-height: 1.45; pointer-events: none; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; hanging-punctuation: none; }
.wish-ghost::after { content: ""; display: inline-block; width: 2px; height: 1.1em; margin-left: 2px; vertical-align: -3px; background: var(--gold); animation: caret 1s steps(1) infinite; }
@keyframes caret { 50% { opacity: 0; } }
.wish.has-text .wish-ghost, .wish.focused .wish-ghost { opacity: 0; }
.wish.has-text textarea::placeholder, .wish.focused textarea::placeholder { color: var(--text-3); }
.grant-btn { min-height: 50px; flex: none; }
.wish-help { font-size: .8125rem; color: var(--text-3); margin-top: 8px; padding-left: 4px; }
.wish.granted .wish-box { border-color: var(--gold); }
.hero-ctas { display: flex; flex-wrap: wrap; gap: 12px; }
.proofs { gap: 8px 22px; }
.glimpse-wrap { perspective: 1600px; margin-top: clamp(40px, 7vh, 80px); padding-bottom: 20px; }
.glimpse { --tilt: 1; transform: rotateX(calc(var(--tilt) * 24deg)) scale(calc(1 - var(--tilt) * .08)); transform-origin: 50% 0; transition: transform .2s linear; min-height: 330px; }
.gl-win { border-radius: 22px; overflow: hidden; border: 1px solid var(--line-2); background: linear-gradient(180deg, color-mix(in oklch, var(--panel-2) 96%, transparent), color-mix(in oklch, var(--bg-abyss) 94%, transparent)); box-shadow: var(--e3), 0 0 90px -30px rgb(3 163 222 / .55); }
.gl-bar { display: flex; align-items: center; gap: 14px; padding: 10px 16px; border-bottom: 1px solid var(--line); font-size: .8125rem; color: var(--text-3); }
.gl-bar .dots { display: flex; gap: 6px; } .gl-bar .dots i { width: 10px; height: 10px; border-radius: 50%; background: color-mix(in oklch, var(--fg) 16%, transparent); }
.gl-title { font-weight: 800; color: var(--text-2); }
.gl-link { margin-left: auto; display: inline-flex; gap: 8px; align-items: center; padding: 5px 10px; border-radius: 99px; background: var(--success-tint); color: var(--success-text); font-weight: 700; }
.gl-body { display: grid; grid-template-columns: 220px 1fr; }
.gl-side { border-right: 1px solid var(--line); padding: 14px; display: grid; align-content: start; gap: 6px; font-size: .8125rem; color: var(--text-3); }
.gl-side b { font: 600 .625rem var(--font-mono); letter-spacing: .12em; text-transform: uppercase; margin-top: 8px; }
.gl-chat { padding: 7px 9px; border-radius: 9px; color: var(--text-2); }
.gl-chat.on { background: var(--accent-tint); box-shadow: inset 3px 0 0 var(--accent); color: var(--text); }
.gl-main { padding: 18px 22px; display: grid; gap: 12px; align-content: start; height: 330px; overflow: hidden; }
.gl-you { justify-self: end; max-width: 520px; padding: 10px 14px; border-radius: 16px 16px 5px 16px; background: color-mix(in oklch, var(--seed-bg-royal) 90%, #fff 4%); font-size: .875rem; color: var(--text); }
.gl-log { border: 1px solid var(--line); border-radius: 14px; padding: 10px 12px; background: color-mix(in oklch, var(--bg-abyss) 40%, transparent); }
.gl-log-h { display: flex; gap: 8px; align-items: center; font-size: .8125rem; color: var(--text-2); }
.gl-log-h .spinner { width: 14px; height: 14px; }
.gl-count { margin-left: auto; font-size: .75rem; color: var(--text-3); }
/* LND-19 · the step log never moves anything: the window's main column is a fixed box whose
   middle row (the log) takes the free height, so the prompt and the plan meter keep their places
   and the meter always shows; inside, the live list keeps its newest row at the bottom of the view
   by transform (hero.js), and older rows fade out under the log's header */
.gl-main { grid-template-columns: minmax(0, 1fr); grid-template-rows: auto minmax(0, 1fr) auto; }
.gl-log { display: flex; flex-direction: column; min-height: 0; }
.gl-steps-view { position: relative; flex: 1; min-height: 0; margin-top: 8px; overflow: hidden; }
.gl-steps-view.scrolled { -webkit-mask-image: linear-gradient(transparent, #000 14px); mask-image: linear-gradient(transparent, #000 14px); }
.gl-steps-view > .gl-steps { position: absolute; left: 0; right: 0; top: 0; }
.gl-steps { list-style: none; padding: 0; display: grid; gap: 2px; }
.gl-steps li { display: flex; gap: 9px; align-items: center; font-size: .8125rem; color: var(--text-2); padding: 5px 0; border-top: 1px solid color-mix(in oklch, var(--fg) 6%, transparent); animation: step-in .5s var(--ease-out); }
/* a long Roblox path (ServerScriptService.DamageHandler) breaks after a dot, or anywhere as a last
   resort, inside its row on a phone instead of widening the column past the window */
.gl-steps li > span:nth-child(2) { min-width: 0; overflow-wrap: anywhere; }
.gl-steps li .stamp { width: 20px; height: 20px; border-radius: 6px; }
.gl-steps li .stamp .ic { width: 12px; height: 12px; }
.gl-steps li span.t { font-family: var(--font-mono); font-size: .6875rem; color: var(--text-3); margin-left: auto; }
@keyframes step-in { from { opacity: 0; transform: translateY(8px); } }
.gl-plan { display: flex; align-items: center; gap: 12px; padding: 8px 12px; border-radius: 12px; border: 1px solid rgb(232 190 35 / .3); background: var(--panel); font-size: .75rem; color: var(--text-2); }
.gl-plan .meter { flex: 1; height: 6px; }
.gl-pct { min-width: 4ch; text-align: right; } /* "0%" to "100%" in one box, so the figure never nudges the meter (LND-19) */

/* ---------------------------------------------------------------- HOW */
.moments-wrap { position: relative; }
.trail { position: absolute; left: 4%; right: 4%; top: 6px; width: 92%; height: 120px; overflow: visible; pointer-events: none; }
.trail path { fill: none; stroke: color-mix(in oklch, var(--fg) 14%, transparent); stroke-width: 2; stroke-dasharray: 2 10; stroke-linecap: round; vector-effect: non-scaling-stroke; }
.trail path.lit { stroke: var(--gold); stroke-width: 3; stroke-dasharray: var(--len, 1400); stroke-dashoffset: calc(var(--len, 1400) * (1 - var(--p, 0))); filter: drop-shadow(0 0 6px rgb(232 190 35 / .7)); }
.moments { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(16px, 2.4vw, 32px); position: relative; }
.moment { position: relative; display: grid; gap: 12px; align-content: start; padding: 72px 24px 24px; border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); backdrop-filter: blur(14px); }
.moment .num { position: absolute; left: 22px; top: -22px; width: 64px; height: 64px; border-radius: 20px; display: grid; place-items: center; font: 400 2.1rem/1 var(--font-display); color: var(--on-gold); background: var(--gold); border: 2.5px solid var(--ink); box-shadow: var(--sticker-shadow); transform: rotate(-6deg); font-kerning: none; }
.moment:nth-child(2) .num { transform: rotate(4deg); background: var(--accent); }
.moment:nth-child(3) .num { transform: rotate(-3deg); background: var(--success); }
.moment h3 { font-size: var(--fs-h3); }
.moment p { color: var(--text-2); }
.mini { position: relative; margin-top: 8px; height: 150px; border-radius: 16px; background: color-mix(in oklch, var(--bg-abyss) 55%, transparent); border: 1px solid var(--line); overflow: hidden; display: grid; place-items: center; }
.mini-pair .code { display: flex; gap: 6px; }
.mini-pair .code i { width: 30px; height: 40px; border-radius: 9px; display: grid; place-items: center; font: 700 1.1rem var(--font-mono); font-style: normal; background: var(--panel-2); border: 1.5px solid var(--line-2); color: var(--text); }
.mini-pair .code i.on { border-color: var(--accent-text); box-shadow: 0 0 0 3px rgb(3 163 222 / .2); }
.mini-pair .paired { position: absolute; right: 12px; bottom: 12px; display: inline-flex; gap: 6px; align-items: center; font-size: .75rem; font-weight: 800; color: var(--success-text); opacity: 0; transition: opacity .3s; }
.mini-pair .paired.on { opacity: 1; }
.mini-pair .bridge { position: absolute; left: 12px; bottom: 12px; font-size: .6875rem; color: var(--text-3); }
.mini-wish .bubble { max-width: 86%; padding: 12px 14px; border-radius: 16px 16px 16px 5px; background: var(--seed-bg-royal); font-size: .9375rem; color: var(--text); min-height: 46px; }
.mini-wish .bubble::after { content: ""; display: inline-block; width: 2px; height: 1em; margin-left: 2px; vertical-align: -2px; background: var(--gold); animation: caret 1s steps(1) infinite; }
.mini-build canvas { width: 100%; height: 100%; }
.app-shot figcaption { color: var(--text-3); font-size: .9rem; }

/* ---------------------------------------------------------------- PLAYTEST */
.playtest { isolation: isolate; }
.pt-pin { position: relative; height: 560vh; }
.pt-sticky { position: sticky; top: 0; height: 100svh; display: grid; align-items: center; padding: 84px 0 24px; }
.pt-grid { display: grid; grid-template-columns: minmax(0, 1.55fr) minmax(330px, .85fr); gap: clamp(16px, 2vw, 28px); height: min(calc(100svh - 120px), 780px); }
.pt-world { position: relative; border-radius: var(--r-xl); overflow: hidden; border: 1px solid var(--line-2); background: radial-gradient(90% 80% at 50% 30%, #1b2d63 0%, #0d1438 55%, #070a24 100%); box-shadow: var(--e3), inset 0 0 0 1px rgb(255 255 255 / .03); }
.pt-canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.pt-hud { position: absolute; inset: 0; pointer-events: none; }
.hud-coins { position: absolute; left: 16px; top: 16px; display: inline-flex; gap: 8px; align-items: center; padding: 8px 12px 8px 8px; border-radius: 14px; background: rgb(1 1 1 / .55); border: 2px solid var(--ink); font: 800 1.05rem var(--font-mono); color: var(--gold-text); backdrop-filter: blur(6px); }
.hud-coins .coin { width: 24px; height: 24px; border-radius: 50%; background: radial-gradient(circle at 35% 30%, #fff5c4, var(--gold) 45%, var(--gold-deep)); border: 2px solid var(--ink); }
.hud-coins.drop { animation: coin-drop .6s var(--ease-out); }
@keyframes coin-drop { 30% { transform: scale(1.12); color: var(--danger-text); } }
.hud-bag { position: absolute; left: 50%; bottom: 14px; translate: -50% 0; display: flex; gap: 6px; padding: 6px; border-radius: 14px; background: rgb(1 1 1 / .5); border: 2px solid var(--ink); }
.hud-bag i { width: 46px; height: 46px; border-radius: 10px; background: rgb(255 255 255 / .07); border: 1.5px solid rgb(255 255 255 / .14); display: grid; place-items: center; font-style: normal; color: var(--text-3); font: 700 .625rem var(--font-mono); position: relative; }
.hud-bag i b { position: absolute; left: 4px; top: 2px; font-size: .5625rem; color: var(--text-3); }
.hud-bag i.has { background: rgb(232 190 35 / .18); border-color: var(--gold); }
.hud-bag i.has .ic { width: 26px; height: 26px; color: var(--sticker); }
.hud-bag i.eq { box-shadow: 0 0 0 2px var(--gold), 0 0 16px rgb(232 190 35 / .6); }
.hud-bag i.pop { animation: stamp-in var(--dur-spring-bouncy) var(--spring-bouncy); }
.hud-prompt { position: absolute; display: grid; justify-items: center; gap: 4px; translate: -50% -100%; transition: opacity .25s, transform .25s var(--spring-snappy); }
.hud-prompt .key { width: 34px; height: 34px; border-radius: 9px; display: grid; place-items: center; font: 800 1rem var(--font-mono); background: var(--sticker); color: var(--ink); border: 2px solid var(--ink); box-shadow: 0 3px 0 var(--ink); }
.hud-prompt .key.down { transform: translateY(3px); box-shadow: 0 0 0 var(--ink); background: var(--gold); }
.hud-prompt span { font: 700 .6875rem var(--font-text); color: #fff; padding: 3px 8px; border-radius: 7px; background: rgb(1 1 1 / .6); white-space: nowrap; }
.hud-shop { position: absolute; left: 50%; top: 50%; translate: -50% -50%; width: min(300px, 72%); padding: 14px; border-radius: 18px; background: #1a1446f2; border: 2.5px solid var(--ink); box-shadow: 6px 6px 0 var(--ink); transition: opacity .25s, transform .35s var(--spring-snappy); }
.hud-shop h4 { font: 400 1.35rem var(--font-display); color: var(--gold); -webkit-text-stroke: .06em var(--ink); paint-order: stroke fill; margin-bottom: 10px; font-kerning: none; }
.hud-shop .item { display: flex; align-items: center; gap: 10px; padding: 8px; border-radius: 12px; background: rgb(255 255 255 / .06); border: 1.5px solid rgb(255 255 255 / .12); color: #fff; font-weight: 800; font-size: .9rem; }
.hud-shop .item .ic { width: 28px; height: 28px; color: var(--sticker); }
.hud-shop .item .price { margin-left: auto; display: inline-flex; gap: 5px; align-items: center; font-family: var(--font-mono); color: var(--gold-text); }
.hud-shop .item.click { background: rgb(232 190 35 / .25); border-color: var(--gold); transform: scale(.97); }
.hud-shop .cursor { position: absolute; width: 22px; height: 22px; color: #fff; filter: drop-shadow(0 2px 0 #000); transition: left .5s var(--ease-out), top .5s var(--ease-out); }
/* the shake rides the same translate as the centring, driven by a value JS derives from
   progress — so it is identical every time the same scroll position is drawn */
.hud-hp { position: absolute; width: 96px; translate: calc(-50% + var(--shake, 0) * 1px) -100%; display: grid; gap: 3px; justify-items: center; }
.hud-hp .bar { width: 100%; height: 10px; border-radius: 6px; background: #3b0d14; border: 2px solid var(--ink); overflow: hidden; }
.hud-hp .bar i { display: block; height: 100%; width: calc(var(--hp, 100) * 1%); background: linear-gradient(90deg, #22D147, #5CDC6F); transition: width .5s var(--ease-out); }
.hud-hp span { font: 800 .6875rem var(--font-mono); color: #fff; text-shadow: 0 1px 0 #000; }
/* Scrubbed (desktop): no time-based HUD effects at all. The values are already exact, and a
   transition would leave the bar mid-animation on a revisit. Played (phone): keep them. */
.pt-scrub .hud-hp .bar i,
.pt-scrub .hud-banner,
.pt-scrub .hud-prompt,
.pt-scrub .hud-shop,
.pt-scrub .hud-coins,
.pt-scrub .hud-bag,
.pt-scrub .hud-shop .cursor,
.pt-scrub .hud-shop .item { transition: none !important; }
.hud-dmg { position: absolute; font: 400 1.4rem var(--font-display); color: var(--gold); -webkit-text-stroke: .08em var(--ink); paint-order: stroke fill; translate: -50% -100%; animation: dmg 1s var(--ease-out) forwards; font-kerning: none; }
@keyframes dmg { from { opacity: 0; transform: translateY(10px) scale(.6); } 20% { opacity: 1; transform: translateY(-6px) scale(1.1); } to { opacity: 0; transform: translateY(-34px); } }
.hud-banner { position: absolute; left: 50%; top: 18px; translate: -50% 0; display: inline-flex; align-items: center; gap: 10px; padding: 10px 14px; border-radius: 14px; font-weight: 800; font-size: .9rem; border: 2.5px solid var(--ink); box-shadow: 4px 4px 0 var(--ink); white-space: nowrap; transition: opacity .3s, transform .4s var(--spring-bouncy); }
.hud-banner.fail { background: var(--danger-text); color: var(--ink); }
.hud-banner.pass { background: var(--success); color: var(--ink); }
.hud-banner.fix { background: var(--gold); color: var(--ink); }
.hidden-hud { opacity: 0 !important; transform: scale(.9) !important; }
.pt-caption { position: absolute; left: 16px; bottom: 76px; max-width: calc(100% - 32px); display: inline-flex; gap: 10px; align-items: center; padding: 8px 12px; border-radius: 12px; background: rgb(6 3 32 / .72); border: 1px solid var(--line-2); font-weight: 700; font-size: .875rem; backdrop-filter: blur(8px); }
.pt-caption .n { font: 700 .75rem var(--font-mono); color: var(--gold-text); }
.pt-controls { position: absolute; right: 14px; top: 14px; display: none; align-items: center; gap: 8px; }
.pt-progress { width: 90px; height: 6px; border-radius: 6px; background: rgb(255 255 255 / .12); overflow: hidden; }
.pt-progress i { display: block; height: 100%; width: calc(var(--p, 0) * 100%); background: var(--gold); }
.pt-side { display: grid; grid-template-rows: auto 1fr auto auto; gap: 12px; min-height: 0; padding: 16px; border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); backdrop-filter: blur(14px); overflow: hidden; }
.pt-side-head { display: flex; gap: 12px; align-items: center; }
.pt-genie { width: 64px; flex: none; }
.pt-side h3 { font-size: 1.125rem; }
.pt-verdict { font-size: .8125rem; color: var(--text-3); }
.pt-verdict.fail { color: var(--danger-text); } .pt-verdict.pass { color: var(--success-text); }
.pt-checks { list-style: none; padding: 0; display: grid; gap: 1px; overflow: auto; min-height: 0; align-content: start; }
.pt-checks li { display: flex; gap: 10px; align-items: center; padding: 6px 8px; border-radius: 10px; font-size: .84375rem; color: var(--text-3); transition: color .3s, background .3s; }
.pt-checks li.now { background: color-mix(in oklch, var(--fg) 7%, transparent); color: var(--text); }
.pt-checks li.done { color: var(--text-2); }
.pt-checks li .stamp { width: 22px; height: 22px; border-radius: 7px; }
.pt-checks li .stamp .ic { width: 13px; height: 13px; }
.pt-checks b.mono { font-size: .78rem; color: var(--gold-text); }
.pt-checks li.bad b.mono { color: var(--danger-text); }
.pt-diff { border-radius: 14px; border: 1px solid var(--line); background: #080520; overflow: hidden; transition: opacity .4s, transform .5s var(--spring-snappy), max-height .5s var(--ease-out); max-height: 190px; }
.pt-diff.off { opacity: .35; }
.diff-title { display: flex; gap: 8px; align-items: center; padding: 8px 10px; font: 700 .72rem var(--font-mono); color: var(--text-2); border-bottom: 1px solid var(--line); }
.diff-title span { margin-left: auto; } .diff-title .add { color: var(--success-text); } .diff-title .del { color: var(--danger-text); }
.diff { margin: 0; padding: 8px 0; font-size: .72rem; line-height: 1.6; overflow-x: auto; }
.diff span { display: block; padding: 0 10px; white-space: pre; }
.d-add { background: rgb(34 209 71 / .12); color: #9ff0ad; } .d-del { background: rgb(255 123 130 / .12); color: #ffb3b7; text-decoration: line-through; text-decoration-color: rgb(255 123 130 / .6); }
.pt-tools .eyebrow { margin-bottom: 8px; color: var(--text-3); }
.pt-tools ul { gap: 6px; list-style: none; padding: 0; }
.tchip { font: 700 .72rem var(--font-text); padding: 5px 9px; border-radius: 99px; border: 1px solid var(--line-2); color: var(--text-3); transition: all .3s var(--ease-out); }
.tchip.on { color: var(--ink); background: var(--gold); border-color: var(--ink); box-shadow: 2px 2px 0 var(--ink); }
.pt-storyboard { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 14px; margin-top: 24px; }
.pt-storyboard figure { display: grid; gap: 8px; }
.pt-storyboard img { border-radius: 14px; border: 1px solid var(--line); aspect-ratio: 16/10; width: 100%; object-fit: cover; }
.pt-storyboard figcaption { font-size: .8125rem; color: var(--text-2); }
.pt-storyboard figcaption b { color: var(--gold-text); font-family: var(--font-mono); margin-right: 6px; }

.pt-auto .pt-pin { height: auto; }
.pt-auto .pt-sticky { position: relative; height: auto; padding: 0; }
.pt-auto .pt-grid { height: min(80svh, 740px); }
.pt-auto .pt-controls { display: flex; }
@media (prefers-reduced-motion: reduce) { .pt-controls [data-pt="play"] { display: none; } }

/* ---------------------------------------------------------------- CAPABILITIES */
.caps-grid { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: clamp(28px, 5vw, 80px); align-items: start; }
.caps-head { position: sticky; top: 120px; margin-bottom: 0; }
.cap-list { list-style: none; padding: 0; display: grid; }
.cap-list li { display: grid; grid-template-columns: 52px 1fr; gap: 18px; padding: 22px 0; border-top: 1px solid var(--line); }
.cap-list li:last-child { border-bottom: 1px solid var(--line); }
.cap-list .ic { width: 44px; height: 44px; padding: 10px; border-radius: 14px; color: var(--gold-text); background: var(--gold-tint); border: 1px solid rgb(232 190 35 / .28); --ic-stroke: 1.7; transition: transform var(--dur-spring-bouncy) var(--spring-bouncy); }
.cap-list li:hover .ic { transform: rotate(-8deg) scale(1.08); }
.cap-list h3 { font-size: 1.1875rem; margin-bottom: 4px; }
.cap-list p { color: var(--text-2); }
.arsenal { margin-top: clamp(64px, 9vw, 120px); padding: clamp(22px, 3vw, 40px); border-radius: var(--r-xl); background: linear-gradient(160deg, color-mix(in oklch, var(--panel-2) 88%, transparent), color-mix(in oklch, var(--bg-abyss) 80%, transparent)); border: 1px solid var(--line); box-shadow: var(--e2); }
.ars-head { display: grid; grid-template-columns: auto 1fr; gap: 12px 40px; align-items: end; margin-bottom: 22px; }
.ars-title { font-size: var(--fs-d2); color: var(--gold); -webkit-text-stroke: .06em var(--ink); paint-order: stroke fill; text-shadow: .06em .06em 0 var(--ink); }
.ars-head .lead { font-size: 1rem; }
.chips { display: flex; flex-wrap: wrap; gap: 8px; }
.ars-chips { margin-bottom: 22px; }
.ars-groups { columns: 3 300px; column-gap: 18px; }
.ars-group { break-inside: avoid; margin-bottom: 18px; padding: 14px; border-radius: 18px; background: color-mix(in oklch, var(--bg-abyss) 45%, transparent); border: 1px solid var(--line); transition: opacity .35s, transform .35s var(--ease-out); }
.ars-group.dim { display: none; }
.ars-group h4 { display: flex; align-items: center; gap: 8px; font-size: .9375rem; margin-bottom: 8px; }
.ars-group h4 .count { font: 700 .75rem var(--font-mono); color: var(--text-3); }
.gnote { display: flex; gap: 8px; font-size: .8125rem; color: var(--warn-text); background: var(--warn-tint); padding: 8px 10px; border-radius: 10px; margin-bottom: 8px; }
.ars-group ul { list-style: none; padding: 0; display: grid; gap: 2px; }
.tool-btn { width: 100%; display: flex; align-items: center; gap: 8px; min-height: 40px; padding: 6px 8px; border-radius: 10px; text-align: left; font-weight: 700; font-size: .875rem; color: var(--text-2); }
.tool-btn:hover, .tool-btn[aria-expanded="true"] { background: color-mix(in oklch, var(--fg) 7%, transparent); color: var(--text); }
.tool-btn .chev { margin-left: auto; width: 16px; height: 16px; color: var(--text-3); transition: transform var(--dur-base) var(--ease-out); }
.tool-btn[aria-expanded="true"] .chev { transform: rotate(180deg); }
.tlock { display: inline-flex; color: var(--warn-text); }
.tlock .ic { width: 15px; height: 15px; }
.tdesc { display: none; padding: 2px 8px 10px; font-size: .8125rem; color: var(--text-3); }
.tool-btn[aria-expanded="true"] + .tdesc { display: block; animation: step-in .35s var(--ease-out); }
.sparks { margin-top: clamp(40px, 6vw, 72px); display: grid; gap: 16px; }
.sparks h3 { font-size: 1.25rem; }
.spark-list { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 10px; }
.spark { min-height: 44px; font-weight: 800; }
.spark:hover { background: var(--gold); color: var(--ink); border-color: var(--ink); box-shadow: var(--sticker-shadow-sm); transform: translate(-1px, -1px) rotate(-2deg); }

/* ---------------------------------------------------------------- CONTROL */
.control-grid { display: grid; grid-template-columns: minmax(0, .85fr) minmax(0, 1.15fr); gap: clamp(28px, 5vw, 72px); align-items: center; }
.control .sec-head { margin-bottom: 0; }
.ctl-list { list-style: none; padding: 0; display: grid; gap: 10px; margin-top: 6px; }
.ctl-list li { font-size: .9375rem; color: var(--text-3); padding-left: 18px; position: relative; }
.ctl-list li::before { content: ""; position: absolute; left: 0; top: .55em; width: 7px; height: 7px; border-radius: 2px; background: var(--gold); transform: rotate(45deg); }
.ctl-list b { color: var(--text); margin-right: 6px; }
.ctl-demo { min-height: 520px; }
.dm { display: grid; grid-template-columns: 1.25fr .9fr; gap: 12px; }
@media (max-width: 640px) { .dm { grid-template-columns: 1fr !important; } .dm-log { grid-row: auto; } .ctl-demo { min-height: 0; } }
.dm-card { border-radius: 18px; background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); padding: 14px; backdrop-filter: blur(14px); }
.dm-card h4 { display: flex; align-items: center; gap: 8px; font-size: .8125rem; color: var(--text-2); margin-bottom: 8px; }
.dm-card h4 .mono { margin-left: auto; color: var(--text-3); font-size: .72rem; font-weight: 600; }
.dm-log { grid-row: span 2; height: 334px; overflow: hidden; }
.dm-thought { height: 92px; overflow: hidden; }
.dm-step { display: flex; gap: 9px; align-items: flex-start; padding: 7px 0; border-top: 1px solid color-mix(in oklch, var(--fg) 7%, transparent); font-size: .8125rem; color: var(--text-2); animation: step-in .45s var(--ease-out); }
.dm-step .stamp { width: 20px; height: 20px; border-radius: 6px; margin-top: 1px; }
.dm-step .stamp .ic { width: 12px; height: 12px; }
.dm-step small { display: block; color: var(--text-3); font-family: var(--font-mono); font-size: .6875rem; margin-top: 2px; }
.dm-thought { font-size: .8125rem; color: var(--text-3); font-style: italic; border-left: 2px solid rgb(3 163 222 / .5); padding-left: 10px; min-height: 58px; }
.dm-plan li { display: flex; gap: 8px; align-items: center; font-size: .8125rem; padding: 4px 0; color: var(--text-3); }
.dm-plan li.done { color: var(--text-2); } .dm-plan li.now { color: var(--text); }
.dm-plan { list-style: none; padding: 0; }
.dm-row { display: flex; align-items: center; justify-content: space-between; gap: 10px; font-size: .8125rem; color: var(--text-2); padding: 5px 0; }
.dm-models { display: grid; gap: 4px; }
.dm-model { display: flex; align-items: center; gap: 8px; padding: 6px 8px; border-radius: 10px; font-size: .8125rem; }
.dm-model.on { background: var(--accent-tint); box-shadow: inset 0 0 0 1px var(--line-accent); }
.dm-model .mult { margin-left: auto; }
.dm-ctx { display: flex; align-items: center; gap: 12px; }
.dm-ctx .ring { width: 46px; height: 46px; }
.app-shot, .ide-shot { margin-top: clamp(40px, 6vw, 72px); display: grid; gap: 12px; }

/* ---------------------------------------------------------------- SAVINGS */
.sv-claim { display: grid; justify-items: center; text-align: center; gap: 14px; }
.sv-claim h2 { display: grid; justify-items: center; line-height: .9; }
.sv-up, .sv-more { font: 800 clamp(1.6rem, 1rem + 2.6vw, 3.4rem)/1 var(--font-text); letter-spacing: -.02em; color: var(--text); }
.sv-up { color: var(--text-2); }
.sv-big { font-size: clamp(8rem, 3rem + 22vw, 22rem); line-height: .82; letter-spacing: -.03em; }
.sv-sub { font-size: var(--fs-lead); color: var(--text-2); max-width: 44ch; }
.sv-sub b { color: var(--text); }
/* 4px plus the space before it in the markup, which keeps "models." and "How we estimate this" two
   words for a reader of the text (owner, 2026-10-27) */
.fn-ref { display: inline-flex; margin-left: 4px; padding-block: 4px; font-size: .8125rem; font-weight: 700; }
.sv-race { margin: clamp(48px, 7vw, 88px) auto 0; max-width: 980px; padding: clamp(18px, 3vw, 34px); border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); display: grid; gap: 18px; }
.sv-race-cap { display: flex; gap: 8px; align-items: center; font-size: .8125rem; color: var(--text-3); }
.lane { display: grid; gap: 8px; }
.lane-head { display: flex; justify-content: space-between; gap: 12px; font-weight: 700; font-size: .9375rem; }
.lane-meter { height: 16px; border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink); }
.lane-meter > i { transition: none; }
.lane[data-lane="list"] .lane-v { color: var(--danger-text); } .lane[data-lane="rg"] .lane-v { color: var(--gold-text); }
.sv-task { display: flex; align-items: center; gap: 12px; font-size: .78rem; color: var(--text-3); }
.sv-task-bar { flex: 1; height: 4px; border-radius: 4px; background: rgb(255 255 255 / .08); overflow: hidden; }
.sv-task-bar i { display: block; height: 100%; width: calc(var(--t, 0) * 100%); background: var(--accent); }
.levers { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: clamp(14px, 2vw, 24px); margin-top: clamp(48px, 7vw, 88px); }
.lever { display: grid; gap: 12px; align-content: start; padding: 18px; border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); }
.lever h3 { font-size: 1.1875rem; display: flex; align-items: center; gap: 10px; }
.lever-n { width: 30px; height: 30px; flex: none; border-radius: 10px; display: grid; place-items: center; background: var(--gold); color: var(--ink); border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink); font: 400 1rem var(--font-display); font-kerning: none; }
/* the step number is drawn from data-n (owner, 2026-10-27): as text, a page read as text ran it into
   the heading ("1Discounted model rates"); the <ol> already numbers the levers for a screen reader */
.lever-n::before { content: attr(data-n); }
.lever p { color: var(--text-2); font-size: .9375rem; }
.lever-art { position: relative; height: 210px; border-radius: 16px; background: #070521; border: 1px solid var(--line); overflow: hidden; font-family: var(--font-mono); }
.tag-list { position: absolute; left: 50%; top: 50%; translate: -50% -50%; display: grid; gap: 14px; justify-items: center; }
.ptag { position: relative; white-space: nowrap; display: inline-flex; align-items: center; gap: 8px; padding: 10px 18px 10px 26px; border-radius: 8px 14px 14px 8px; font: 800 .875rem var(--font-text); border: 2px solid var(--ink); box-shadow: 3px 3px 0 var(--ink); }
.ptag::before { content: ""; position: absolute; left: 9px; top: 50%; width: 8px; height: 8px; margin-top: -4px; border-radius: 50%; background: #070521; border: 2px solid var(--ink); }
.ptag.list { background: #d6d7ea; color: var(--ink); }
.ptag.list .strike { position: absolute; left: 20px; right: 10px; top: 50%; height: 3px; background: var(--danger); transform-origin: left; transform: scaleX(var(--s, 0)); border-radius: 3px; }
.ptag.rg { background: var(--gold); color: var(--ink); transform: translateY(calc((1 - var(--s, 0)) * 24px)) rotate(calc((1 - var(--s, 0)) * -8deg)); opacity: var(--s, 0); }
.ptag .bars { display: inline-flex; gap: 3px; align-items: flex-end; height: 16px; }
.ptag .bars i { width: 5px; border-radius: 2px; background: currentColor; }
.code-min { position: absolute; inset: 10px; display: grid; grid-template-columns: 1fr 1fr; gap: 8px; font-size: .625rem; line-height: 1.55; }
.code-min pre { margin: 0; padding: 8px; border-radius: 10px; background: rgb(255 255 255 / .03); border: 1px solid var(--line); overflow: hidden; white-space: pre; color: #cfd2ef; position: relative; }
.code-min .ln { color: var(--text-4); margin-right: 8px; }
.code-min .ws { color: rgb(255 123 130 / .6); background: rgb(255 123 130 / .12); }
.code-min .hit { background: rgb(232 190 35 / .25); outline: 1px solid rgb(232 190 35 / .6); border-radius: 3px; }
.code-min svg { position: absolute; inset: 0; width: 100%; height: 100%; pointer-events: none; overflow: visible; }
.code-min svg path { fill: none; stroke: var(--gold); stroke-width: 1.2; stroke-dasharray: 3 3; opacity: .7; }
.code-min .pct { position: absolute; right: 10px; bottom: 8px; font: 800 .75rem var(--font-mono); color: var(--success-text); background: #070521; padding: 2px 6px; border-radius: 6px; }
.json-fold { position: absolute; inset: 10px; display: grid; place-items: center; overflow: hidden; }
.json-fold pre { margin: 0; font-size: .625rem; line-height: 1.45; color: #cfd2ef; transition: none; white-space: pre; }
.json-fold .k { color: #6BC4EB; } .json-fold .s { color: #F5E3A3; } .json-fold .n { color: #5CDC6F; }
.json-fold .meter-mini { position: absolute; left: 10px; right: 10px; bottom: 8px; display: flex; gap: 8px; align-items: center; font-size: .6875rem; color: var(--text-3); }
.json-fold .meter-mini .meter { flex: 1; height: 6px; }
.sv-facts { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; margin-top: 24px; }
.sv-facts li { display: flex; gap: 14px; align-items: center; padding: 16px 18px; border-radius: 18px; border: 1px dashed var(--line-2); }
.sv-facts .ic { width: 28px; height: 28px; color: var(--gold-text); }
.sv-facts p { color: var(--text-2); }
.sv-facts b { color: var(--text); }
.footnote { margin-top: 28px; display: flex; gap: 10px; font-size: .8125rem; color: var(--text-3); max-width: 90ch; scroll-margin-top: 140px; }
.fn-mark { color: var(--gold-text); font-weight: 800; }
.footnote:target { color: var(--text-2); }

/* ---------------------------------------------------------------- MODELS */
/* every family mark is our own monogram (§6.6); a family the catalog adds later gets this neutral tile */
.fam { display: inline-grid; place-items: center; min-width: 38px; height: 38px; padding: 0 6px; border-radius: 12px; font: 800 .8125rem/1 var(--font-mono); color: var(--ink); border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink); flex: none; letter-spacing: -.02em; background: oklch(0.86 0.015 250); }
.fam-sm { min-width: 24px; height: 24px; border-radius: 7px; font-size: .625rem; box-shadow: none; border-width: 1.5px; padding: 0 3px; }
/* a logo carries its own colours: no tint plate, no border, no shadow behind it */
.fam.has-icon { padding: 0; background-color: transparent; border-color: transparent; box-shadow: none; background-size: 82% 82%; background-repeat: no-repeat; background-position: center; }
.fam.has-icon img { display: block; width: 100%; height: 100%; object-fit: contain; }
/* GPT, Grok, Nova and Sonar carry no colour of their own, so they are inverted on the dark
   schemes only — a bare filter would erase them on the seven light themes */
:root:not([data-scheme="light"]) .fam.has-icon.dark-mark,
:root:not([data-scheme="light"]) .fam.has-icon img.dark-mark { filter: invert(1) brightness(1.9); }
.fam-auto { background: var(--gold); }
.fam-claude { background: oklch(0.8 0.11 45); }
.fam-gpt { background: oklch(0.84 0.12 155); }
.fam-gemini { background: oklch(0.8 0.1 250); }
.fam-deepseek { background: oklch(0.78 0.11 225); }
.fam-grok { background: oklch(0.86 0.02 280); }
.fam-qwen { background: oklch(0.78 0.12 295); }
.fam-kimi { background: oklch(0.85 0.12 95); }
.fam-glm { background: oklch(0.8 0.1 190); }
.fam-minimax { background: oklch(0.78 0.13 15); }
.fam-composer { background: oklch(0.82 0.09 125); }
.families { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 12px; }
.fcard { display: grid; gap: 10px; align-content: start; padding: 16px; border-radius: 18px; background: var(--glass); border: 1px solid var(--line); transition: transform var(--dur-spring-bouncy) var(--spring-bouncy), border-color .2s; }
.fcard:hover { transform: translateY(-4px) rotate(-.6deg); border-color: var(--line-accent); }
.fcard h3 { font-size: 1.0625rem; }
.fcard .fam { justify-self: start; }
.fcard p { font-size: .8125rem; color: var(--text-3); line-height: 1.45; }
.autos { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin-top: 18px; }
.auto-card { padding: 20px 22px; border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); display: grid; gap: 8px; }
.auto-card h3 { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; font-size: 1.1875rem; }
.auto-card p:last-child { color: var(--text-2); }
.auto-card.cheap { border-color: rgb(34 209 71 / .45); box-shadow: 0 0 0 1px rgb(34 209 71 / .15), 0 0 50px -20px rgb(34 209 71 / .5); }
.mscale { display: grid; grid-template-columns: minmax(0, .9fr) minmax(0, 1.1fr); gap: clamp(20px, 4vw, 56px); align-items: center; margin-top: clamp(40px, 6vw, 72px); }
.mscale-copy { display: grid; gap: 12px; }
.mscale-copy h3 { font-size: var(--fs-h3); }
.mscale-copy p { color: var(--text-2); }
.tiers { list-style: none; padding: 0; display: flex; flex-wrap: wrap; gap: 8px 16px; font-size: .8125rem; color: var(--text-3); }
.tiers li { display: flex; gap: 8px; align-items: center; }
.mscale-track { position: relative; height: 230px; }
.track-line { position: absolute; left: 4%; right: 8%; top: 112px; height: 10px; border-radius: 10px; background: linear-gradient(90deg, #22D147 0%, #5CDC6F 45%, #D6D7EA 76%, #E8BE23 100%); border: 2px solid var(--ink); box-shadow: 2px 2px 0 var(--ink); }
.tick { position: absolute; top: 106px; translate: -50% 0; display: grid; justify-items: center; }
.tick::before { content: ""; width: 3px; height: 22px; border-radius: 2px; background: var(--ink); border: 1px solid rgb(255 255 255 / .5); }
.tick .lab { position: absolute; top: -8px; translate: var(--nudge, 0px) -100%; white-space: nowrap; font-size: .75rem; font-weight: 700; color: var(--text-2); display: grid; justify-items: center; gap: 4px; }
.tick.below .lab { top: 36px; translate: var(--nudge, 0px) 0; }
.tick .lab .mult { height: 20px; font-size: .6875rem; }
/* the catalog's names are short, but the live list can bring a long one to an end of the track */
.tick .lab > span:not(.mult) { max-width: 16ch; overflow: hidden; text-overflow: ellipsis; hanging-punctuation: none; }
.scale-axis { position: absolute; left: 0; right: 0; top: 200px; font: 600 .6875rem var(--font-mono); color: var(--text-3); }
.scale-axis span { position: absolute; translate: -50% 0; }
/* the track's labels are drawn from data-t (render.py multiplier_scale): as text they repeated the
   .mscale-list examples, which carry the words (owner, 2026-10-27) */
.mscale-track [data-t]::before { content: attr(data-t); }
.mscale-list { display: none; list-style: none; padding: 0; gap: 10px; }
.mscale-list li { display: grid; grid-template-columns: 64px 1fr; gap: 10px; align-items: center; font-size: .875rem; color: var(--text-2); }
.mscale-list .bar { grid-column: 2; height: 8px; border-radius: 6px; border: 1.5px solid var(--ink); }
@media (max-width: 760px) { .mscale-track { display: none; } .mscale-list { display: grid; } }
.routes { display: grid; grid-template-columns: 280px 1fr; gap: 28px; align-items: center; margin-top: clamp(40px, 6vw, 72px); padding: 22px; border-radius: var(--r-xl); border: 1px solid var(--line); background: color-mix(in oklch, var(--bg-abyss) 45%, transparent); }
.routes h3 { font-size: var(--fs-h3); display: flex; gap: 10px; align-items: center; flex-wrap: wrap; margin-bottom: 8px; }
.routes p { color: var(--text-2); }
.routes-art { height: 150px; position: relative; }
.routes-art svg { width: 100%; height: 100%; overflow: visible; }
.routes-art .r-path { fill: none; stroke: color-mix(in oklch, var(--fg) 22%, transparent); stroke-width: 2.5; stroke-dasharray: 5 6; }
.routes-art .r-path.live { stroke: var(--accent-text); stroke-dasharray: none; filter: drop-shadow(0 0 5px rgb(3 163 222 / .8)); }
.routes-art .r-path.down { stroke: var(--danger-text); stroke-dasharray: 3 7; }
.routes-art .node { fill: var(--panel-3); stroke: var(--ink); stroke-width: 2; }
.routes-art .pkt { fill: var(--gold); stroke: var(--ink); stroke-width: 1.5; }
.routes-art text { font: 700 11px var(--font-text); fill: var(--text-2); }
.browser { margin-top: clamp(40px, 6vw, 72px); padding: clamp(16px, 2.4vw, 28px); border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); display: grid; gap: 16px; }
.browser-head { display: flex; gap: 16px; align-items: center; justify-content: space-between; flex-wrap: wrap; }
.browser-head h3 { font-size: var(--fs-h3); }
.browser-title { display: grid; gap: 4px; min-width: 0; }
.browser-note { font-size: .8125rem; line-height: 1.5; color: var(--text-3); max-width: 62ch; }
.browser-search { width: min(360px, 100%); }
/* rows of chips keep their own height (never stretched to fill the box) */
.fam-chips { align-content: flex-start; align-items: flex-start; }
.fam-chips .chip { min-height: 40px; padding-left: 7px; }
.mlist { list-style: none; padding: 4px; margin: 0; display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); align-content: start; gap: 4px 14px; max-height: 560px; overflow: auto; overscroll-behavior: contain; border-radius: 14px; }
/* a row never grows past its column (a long name ellipsizes), and holds its own screen-reader
   text, which is positioned and would otherwise widen the page from the section */
.mrow { position: relative; min-width: 0; display: flex; align-items: center; gap: 10px; min-height: 52px; padding: 6px 10px; border-radius: 12px; border: 1px solid transparent; }
.mrow:hover { background: color-mix(in oklch, var(--fg) 5%, transparent); border-color: var(--line); }
.mrow .fam { min-width: 32px; height: 30px; font-size: .6875rem; border-radius: 9px; }
.mname { font-weight: 700; font-size: .9375rem; min-width: 0; overflow: hidden; text-overflow: ellipsis; hanging-punctuation: none; white-space: nowrap; }
.mbadges { display: flex; gap: 5px; margin-left: auto; flex-wrap: wrap; justify-content: flex-end; }
.mrow .mult { flex: none; min-width: 58px; justify-content: center; }
.mrow[hidden] { display: none; }
.mlist-empty { color: var(--text-3); text-align: center; padding: 20px; }
.byok { display: flex; gap: 14px; align-items: flex-start; margin-top: 18px; padding: 16px 18px; border-radius: 18px; border: 1px dashed var(--line-2); color: var(--text-2); }
.byok .ic { width: 26px; height: 26px; color: var(--gold-text); flex: none; }
.byok b { color: var(--text); }

/* ---------------------------------------------------------------- IDE */
.ide-grid { display: grid; grid-template-columns: minmax(0, .8fr) minmax(0, 1.2fr); gap: clamp(28px, 5vw, 64px); align-items: center; }
.ide .sec-head { margin-bottom: 0; }
.ide-points { list-style: none; padding: 0; display: grid; gap: 10px; }
.ide-points li { display: flex; flex-wrap: wrap; gap: 4px 10px; align-items: flex-start; min-width: 0; color: var(--text-2); }
.ide-points .ic { color: var(--gold-text); margin-top: 2px; }
/* file names are one long token; let them break instead of widening the page on phones */
.ide-points code { font-size: .8125rem; color: var(--accent-text); overflow-wrap: anywhere; }
.ide-mock { min-height: 460px; }

/* ---------------------------------------------------------------- WHAT YOU NEED (under "How it works") */
.needs { margin-top: clamp(40px, 6vw, 64px); padding: clamp(18px, 2.4vw, 26px); border-radius: var(--r-xl); border: 1px dashed var(--line-2); background: color-mix(in oklch, var(--bg-abyss) 40%, transparent); }
.needs h3 { font-size: 1.1875rem; margin-bottom: 14px; }
.needs-list { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px 32px; }
.needs-list li { flex-wrap: nowrap; }
.needs-list .ic { flex: none; }
.needs-list li span { min-width: 0; }

/* ---------------------------------------------------------------- BLENDER */
/* the IDE section's two columns: the copy, then an illustration drawn from the icon treatment
   the capability list uses (no capture of the pipeline exists to show instead) */
.blender-grid { display: grid; grid-template-columns: minmax(0, 1.05fr) minmax(0, .95fr); gap: clamp(28px, 5vw, 64px); align-items: center; }
.blender .sec-head .lead { max-width: 68ch; }
.bl-copy { display: grid; gap: 14px; align-content: start; }
.bl-list { gap: 14px; margin-top: 0; }
.bl-list li { color: var(--text-2); }
.blender .limits { color: var(--text-3); font-size: .875rem; }
.bl-flow { display: grid; gap: 0; justify-items: stretch; max-width: 460px; width: 100%; justify-self: center; }
.bl-card { padding: 20px; border-radius: var(--r-xl); background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); backdrop-filter: blur(14px); }
.bl-tag { display: inline-flex; align-items: center; gap: 8px; font: 700 .6875rem var(--font-mono); letter-spacing: .12em; text-transform: uppercase; color: var(--text-3); margin-bottom: 14px; }
.bl-tag .ic { width: 16px; height: 16px; color: var(--accent-text); }
.bl-steps { list-style: none; padding: 0; display: grid; gap: 10px; }
.bl-steps li { display: grid; grid-template-columns: 44px 1fr; gap: 14px; align-items: center; font-weight: 700; color: var(--text); }
.bl-steps .ic { width: 44px; height: 44px; padding: 10px; border-radius: 14px; color: var(--gold-text); background: var(--gold-tint); border: 1px solid rgb(232 190 35 / .28); --ic-stroke: 1.7; transition: transform var(--dur-spring-bouncy) var(--spring-bouncy); }
.bl-steps li:hover .ic { transform: rotate(-8deg) scale(1.08); }
.bl-pipe { display: grid; justify-items: center; padding: 4px 0; }
.bl-line { width: 2px; height: 22px; background: repeating-linear-gradient(to bottom, var(--gold) 0 4px, transparent 4px 8px); opacity: .8; }
.bl-via { display: inline-flex; align-items: center; gap: 8px; padding: 6px 12px; border-radius: 999px; font: 700 .75rem var(--font-mono); color: var(--text-2); background: color-mix(in oklch, var(--bg-abyss) 70%, transparent); border: 1px solid var(--line-2); }
.bl-via .ic { width: 15px; height: 15px; color: var(--gold-text); }
.bl-to { border-color: rgb(232 190 35 / .35); box-shadow: var(--e2), 0 0 48px -18px rgb(232 190 35 / .5); }
.bl-to .bl-tag { color: var(--text-2); }
.bl-out { gap: 8px; }
.bl-out li { padding: 6px 12px; border-radius: 999px; font-size: .8125rem; font-weight: 700; color: var(--gold-text); background: var(--gold-tint); border: 1px solid rgb(232 190 35 / .28); }
.idew { border-radius: 20px; overflow: hidden; min-width: 0; border: 1px solid var(--line-2); background: #0a0826; box-shadow: var(--e3), 0 0 80px -30px rgb(34 209 71 / .35); display: grid; grid-template-rows: auto 1fr auto; height: 480px; }
.idew-top { display: flex; align-items: center; gap: 10px; padding: 9px 12px; border-bottom: 1px solid var(--line); font-size: .75rem; color: var(--text-3); }
.idew-top b { color: var(--text-2); }
.idew-sync { margin-left: auto; display: inline-flex; gap: 6px; align-items: center; color: var(--success-text); font-weight: 700; }
.idew-sync .status-dot { width: 7px; height: 7px; }
.idew-sync { white-space: nowrap; min-width: 11.5em; } /* as wide as its longest text, so its start never moves */
/* LND-19: on phones the sync label takes its own row, so its three texts (synced / unsaved /
   saved) never re-wrap the bar and move the window body below it */
@media (max-width: 480px) { .idew-top { flex-wrap: wrap; row-gap: 2px; } .idew-sync { margin-left: 0; flex-basis: 100%; } }
.idew-body { display: grid; grid-template-columns: 210px minmax(0, 1fr) 190px; min-height: 0; min-width: 0; }
.idew-tree { border-right: 1px solid var(--line); padding: 8px 6px; font-size: .75rem; overflow: hidden; }
.idew-tree .n { display: flex; align-items: center; gap: 6px; padding: 3px 6px; border-radius: 6px; color: var(--text-2); white-space: nowrap; }
.idew-tree .n .ic { width: 15px; height: 15px; --ic-stroke: 1.3; }
.idew-tree .n.on { background: var(--accent-tint); color: var(--text); }
.idew-tree .n.flash { animation: flash-row 1.2s var(--ease-out); }
@keyframes flash-row { 0% { background: rgb(34 209 71 / .35); } }
.idew-code { min-width: 0; display: grid; grid-template-rows: auto 1fr; }
/* like a real editor: the tab strip scrolls instead of cutting a tab in half */
.idew-tabs { display: flex; gap: 2px; padding: 6px 6px 0; border-bottom: 1px solid var(--line); font-size: .6875rem; overflow: auto hidden; scrollbar-width: none; }
.idew-tabs::-webkit-scrollbar { display: none; }
.idew-tabs span { padding: 6px 10px; border-radius: 8px 8px 0 0; color: var(--text-3); white-space: nowrap; display: inline-flex; gap: 6px; align-items: center; }
.idew-tabs span.on { background: #120f3a; color: var(--text); }
.idew-tabs .dirty { width: 7px; height: 7px; border-radius: 50%; background: var(--gold); }
/* the code lines keep their line breaks, so the pane scrolls sideways rather than the page */
.idew-src { margin: 0; padding: 10px 0; font-size: .6875rem; line-height: 1.65; overflow: auto hidden; overscroll-behavior-x: contain; background: #120f3a; }
.idew-src .l { display: block; width: max-content; min-width: 100%; padding: 0 12px; white-space: pre; }
.idew-src .l i { font-style: normal; color: var(--text-4); display: inline-block; width: 22px; }
.idew-src .l.edit { background: rgb(232 190 35 / .1); box-shadow: inset 2px 0 0 var(--gold); }
.kw { color: #ff8fd0; } .fn { color: #6BC4EB; } .str { color: #F5E3A3; } .num { color: #5CDC6F; } .com { color: #8C8EB5; font-style: italic; } .bi { color: #B9A2F2; } .op { color: #D6D7EA; }
.idew-props { border-left: 1px solid var(--line); padding: 10px; font-size: .6875rem; display: grid; align-content: start; gap: 6px; }
.idew-props b { font: 600 .625rem var(--font-mono); letter-spacing: .1em; text-transform: uppercase; color: var(--text-3); }
.idew-props .pr { display: flex; justify-content: space-between; gap: 6px; color: var(--text-2); }
.idew-props .pr span:last-child { color: var(--text); font-family: var(--font-mono); }
.idew-foot { display: flex; gap: 8px; align-items: center; padding: 8px 12px; border-top: 1px solid var(--line); font-size: .6875rem; color: var(--text-3); flex-wrap: wrap; }
.idew-foot .x { padding: 4px 8px; border-radius: 8px; border: 1px solid var(--line-2); color: var(--text-2); font-family: var(--font-mono); }
.idew-foot .conflict { margin-left: auto; color: var(--warn-text); display: inline-flex; gap: 6px; align-items: center; opacity: 0; transition: opacity .3s; }
.idew-foot .conflict.on { opacity: 1; }

/* ---------------------------------------------------------------- MAKE IT YOURS */
.theme-strip { list-style: none; padding: 0; display: grid; grid-template-columns: repeat(6, minmax(0, 1fr)); gap: 12px; }
.tp { position: relative; aspect-ratio: 3 / 4; border-radius: 20px; overflow: hidden; border: 1px solid var(--line-2); box-shadow: var(--e2); transition: transform var(--dur-spring-bouncy) var(--spring-bouncy); }
.tp:hover { transform: translateY(-6px) rotate(-1deg); }
.tp canvas { position: absolute; inset: 0; width: 100%; height: 100%; }
.tp span { position: absolute; left: 10px; bottom: 10px; right: 10px; padding: 7px 10px; border-radius: 10px; font-weight: 800; font-size: .8125rem; background: rgb(6 3 32 / .72); border: 1px solid rgb(255 255 255 / .12); backdrop-filter: blur(6px); }
.mascots { display: grid; grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); gap: clamp(20px, 4vw, 48px); margin-top: clamp(40px, 6vw, 72px); align-items: center; }
.pose-set { display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px; padding: 18px; border-radius: var(--r-xl); background: radial-gradient(90% 70% at 50% 80%, rgb(232 190 35 / .18), transparent 70%), var(--glass); border: 1px solid var(--line); }
.pose-set figure { display: grid; justify-items: center; gap: 6px; }
.pose-set img { width: 100%; aspect-ratio: 1; object-fit: contain; filter: drop-shadow(0 10px 18px rgb(0 0 0 / .45)); transition: transform var(--dur-spring-bouncy) var(--spring-bouncy); }
.pose-set figure:hover img { transform: translateY(-8px) scale(1.04); }
.pose-set figcaption { font: 700 .75rem var(--font-mono); color: var(--text-3); letter-spacing: .08em; text-transform: uppercase; }
.mascot-copy { display: grid; gap: 12px; }
.mascot-copy h3 { font-size: var(--fs-h3); }
.mascot-copy p { color: var(--text-2); }
.limits b { color: var(--gold-text); }
.mascot-shot { grid-column: 1 / -1; max-width: 760px; width: 100%; justify-self: center; }

/* ---------------------------------------------------------------- PRICING */
.plans-wrap { position: relative; width: min(100% - 2 * var(--gutter), 1480px); margin-inline: auto; }
.plans { list-style: none; padding: 26px 0 8px; margin: 0; display: grid; grid-template-columns: repeat(5, minmax(0, 1fr)); gap: 14px; align-items: stretch; }
.plan { position: relative; display: grid; grid-template-rows: auto 1fr auto; gap: 16px; padding: 22px 18px 18px; border-radius: 24px; background: var(--glass); border: 1px solid var(--line); box-shadow: var(--e2); backdrop-filter: blur(14px); transition: transform var(--dur-spring-bouncy) var(--spring-bouncy), border-color .25s, box-shadow .25s; }
.plan:hover { transform: translateY(-6px); border-color: var(--line-accent); }
.plan h3 { font: 400 1.75rem/1 var(--font-display); letter-spacing: var(--track-display); font-kerning: none; }
.price { display: flex; align-items: baseline; gap: 6px; margin-top: 10px; }
.price .amt { font: 800 2.6rem/1 var(--font-text); letter-spacing: -.03em; font-variant-numeric: tabular-nums; }
.price .per { color: var(--text-3); font-weight: 700; font-size: .9rem; }
.pdesc { color: var(--text-3); font-size: .875rem; margin-top: 8px; min-height: 2.9em; }
.feats { list-style: none; padding: 0; display: grid; gap: 9px; align-content: start; font-size: .875rem; }
.feats li { display: grid; grid-template-columns: 18px 1fr; gap: 8px; color: var(--text-2); line-height: 1.4; }
.feats li .ic { width: 17px; height: 17px; color: var(--success-text); margin-top: 1px; --ic-stroke: 2.4; }
.feats li:first-child { color: var(--text); font-weight: 800; }
/* keep "250K tokens / 5 hours" and "2M / month" whole when the line allows it; still wraps inside when it can't */
.feats .nb { display: inline-block; }
.feats li.no { color: var(--text-3); }
.feats li.no .ic { color: var(--danger-text); }
.plan-cta { display: grid; gap: 8px; }
.plan-msg { font-size: .8125rem; line-height: 1.4; min-height: 0; }
.plan-msg:empty { display: none; }
.plan-msg.err { color: var(--danger-text); } .plan-msg.ok { color: var(--success-text); }
/* Manage billing on the subscriber's own plan card, and "Update payment method" after a declined
   charge: secondary buttons whose labels may wrap on a narrow card rather than spill out of it */
.plan-portal { display: grid; gap: 6px; }
.plan-portal .btn, .plan-cta .plan-fix { white-space: normal; text-align: center; line-height: 1.2; padding-block: 6px; }
.plan-portal-hint { font-size: .75rem; line-height: 1.4; color: var(--text-3); text-align: center; }
.plan.featured { border: 2px solid var(--gold); box-shadow: var(--e3), 0 0 0 5px rgb(232 190 35 / .12), 0 0 80px -20px rgb(232 190 35 / .55); background: linear-gradient(180deg, rgb(232 190 35 / .1), transparent 40%), var(--glass); transform: translateY(-10px); }
.plan.featured:hover { transform: translateY(-14px); }
.plan-badge { position: absolute; top: -13px; left: 50%; translate: -50% 0; transform: rotate(-3deg); font-size: .75rem; height: 28px; padding: 0 12px; }
.plan .yours { position: absolute; top: 14px; right: 14px; }
.plan.current { border-color: var(--success); }
.plans-dots { display: none; justify-content: center; gap: 8px; margin-top: 8px; }
/* the dot is small, the control is not: a 34px target with the dot drawn inside it */
.plans-dots button { width: 34px; height: 34px; display: grid; place-items: center; background: none; }
.plans-dots button::after { content: ""; width: 10px; height: 10px; border-radius: 50%; background: var(--line-2); transition: width var(--dur-quick), background var(--dur-quick); }
.plans-dots button[aria-current="true"]::after { background: var(--gold); width: 26px; border-radius: 6px; }
.tokens-explainer { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 28px; align-items: center; margin-top: clamp(40px, 6vw, 64px); padding: clamp(18px, 3vw, 30px); border-radius: var(--r-xl); border: 1px solid var(--line); background: color-mix(in oklch, var(--bg-abyss) 40%, transparent); }
.tokens-explainer h3 { font-size: var(--fs-h3); margin-bottom: 10px; }
.tokens-explainer p { color: var(--text-2); margin-top: 8px; }
.stretch { display: grid; gap: 14px; }
.stretch .row { display: grid; gap: 6px; font-size: .8125rem; color: var(--text-2); }
.stretch .row div { display: flex; gap: 3px; flex-wrap: wrap; }
.stretch .row i { width: 12px; height: 18px; border-radius: 3px; background: var(--gold); border: 1.5px solid var(--ink); }
.stretch .row.cheap i { background: var(--success); width: 8px; height: 14px; }
.compare { margin-top: 18px; border-radius: var(--r-lg); border: 1px solid var(--line); background: var(--glass); }
.compare summary { display: flex; align-items: center; gap: 10px; min-height: 56px; padding: 0 18px; cursor: pointer; font-weight: 800; list-style: none; }
.compare summary::-webkit-details-marker { display: none; }
.compare summary .chev { margin-left: auto; transition: transform var(--dur-base) var(--ease-out); }
.compare[open] summary .chev { transform: rotate(180deg); }
.compare .table-wrap { margin: 0 14px 14px; }
.compare-note { padding: 0 18px 18px; font-size: .875rem; }
.referral { display: flex; align-items: center; justify-content: center; gap: 10px; margin-top: 26px; color: var(--text-2); text-align: center; flex-wrap: wrap; }
.referral .ic { color: var(--gold-text); width: 22px; height: 22px; }
.referral b { color: var(--gold-text); }

/* ---------------------------------------------------------------- FAQ */
.faq-grid { display: grid; grid-template-columns: minmax(0, .75fr) minmax(0, 1.25fr); gap: clamp(28px, 5vw, 80px); align-items: start; }
.faq .sec-head { position: sticky; top: 120px; }
.faq-list { display: grid; gap: 10px; }
.faq-list details { border-radius: 18px; border: 1px solid var(--line); background: var(--glass); transition: border-color .25s, background .25s; }
.faq-list details[open] { border-color: var(--line-accent); background: color-mix(in oklch, var(--panel-2) 88%, transparent); }
.faq-list summary { display: flex; align-items: center; gap: 14px; min-height: 60px; padding: 14px 18px; font-weight: 800; font-size: 1.0625rem; cursor: pointer; list-style: none; }
.faq-list summary::-webkit-details-marker { display: none; }
.faq-list summary::after { content: ""; flex: none; margin-left: auto; width: 26px; height: 26px; border-radius: 9px; border: 1.5px solid var(--line-2); background:
  linear-gradient(var(--gold-text), var(--gold-text)) center / 12px 2px no-repeat, linear-gradient(var(--gold-text), var(--gold-text)) center / 2px 12px no-repeat; transition: transform var(--dur-spring-snappy) var(--spring-snappy); }
.faq-list details[open] summary::after { transform: rotate(135deg); }
.faq-list details > div { padding: 0 18px 18px; color: var(--text-2); }
.faq-list code { font-size: .8125rem; color: var(--accent-text); }
@supports (interpolate-size: allow-keywords) {
  .faq-list details { interpolate-size: allow-keywords; }
  .faq-list details::details-content { height: 0; overflow: clip; transition: height .45s var(--ease-out), content-visibility .45s allow-discrete; }
  .faq-list details[open]::details-content { height: auto; }
}

/* ---------------------------------------------------------------- CLOSING */
.closing { position: relative; overflow: hidden; padding-bottom: clamp(100px, 14vw, 180px); }
.closing-inner { display: grid; justify-items: center; text-align: center; gap: 20px; }
.closing-genie { width: min(340px, 70vw); filter: drop-shadow(0 0 60px rgb(232 190 35 / .45)); }
.closing h2 { font-size: var(--fs-d1); line-height: 1; }
.closing h2 .sticker-type { display: block; }
.closing .lead { max-width: 60ch; }
.closing-ctas { display: flex; flex-wrap: wrap; gap: 14px; justify-content: center; margin-top: 6px; }

/* ---------------------------------------------------------------- RESPONSIVE */
@media (max-width: 1180px) {
  .plans-wrap { width: 100%; }
  .plans { display: flex; gap: 14px; overflow-x: auto; scroll-snap-type: x mandatory; padding: 28px var(--gutter) 18px; scroll-padding-inline: var(--gutter); scrollbar-width: none; }
  /* base.css's ol[role="list"] reset (0,1,1) outranked the padding above, so the scroller clipped
     the "Most Popular" sticker and the end cards touched the screen edge: restate it, more specific */
  .plans-wrap .plans { padding: 28px var(--gutter) 18px; }
  .plans::-webkit-scrollbar { display: none; }
  .plan { flex: 0 0 min(330px, 82vw); scroll-snap-align: center; }
  .plan.featured { transform: none; }
  .plans-dots { display: flex; }
  .families { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .theme-strip { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .idew-body { grid-template-columns: 180px minmax(0, 1fr); }
  .idew-props { display: none; }
}
@media (max-width: 980px) {
  .hero-grid { grid-template-columns: 1fr; grid-template-areas: "head" "stage" "body"; }
  .hero-stage { width: 100%; max-width: 460px; aspect-ratio: 1 / .98; margin: 8px auto 0; }
  .hero-title .t1 { white-space: normal; }
  .hero-body { margin-top: 10px; }
  .moments { grid-template-columns: 1fr; gap: 40px; }
  .trail { display: none; }
  .pt-pin { height: auto; }
  .pt-sticky { position: relative; height: auto; padding: 0; }
  .pt-grid { grid-template-columns: 1fr; height: auto; }
  .pt-world { height: min(64svh, 560px); min-height: 380px; }
  .pt-controls { display: flex; }
  .pt-side { grid-template-rows: none; }
  /* minmax(0,1fr) so a column can shrink past its content instead of widening the page */
  .caps-grid, .control-grid, .faq-grid, .ide-grid, .blender-grid, .mscale, .mascots, .tokens-explainer, .needs-list { grid-template-columns: minmax(0, 1fr); }
  .caps-head, .faq .sec-head { position: static; }
  .levers { grid-template-columns: 1fr; }
  .families { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .mlist { grid-template-columns: minmax(0, 1fr); }
  .routes { grid-template-columns: 1fr; }
  .ars-head { grid-template-columns: 1fr; }
  .gl-body { grid-template-columns: 1fr; }
  .gl-side { display: none; }
  .glimpse { --tilt: 0 !important; }
}
@media (max-width: 640px) {
  .hero { padding-top: 96px; }
  .hero-ctas .btn { flex: 1 1 100%; }
  .wish-box { flex-wrap: wrap; padding: 10px; }
  .wish-ic { display: none; }
  .wish-ghost { left: 14px; right: 14px; top: 22px; white-space: normal; display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; }
  .wish textarea { flex-basis: 100%; min-height: 64px; padding: 12px 4px; }
  .grant-btn { flex: 1; }
  .sv-facts, .autos { grid-template-columns: 1fr; }
  .theme-strip { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; margin-inline: calc(-1 * var(--gutter)); padding: 4px var(--gutter) 10px; scrollbar-width: none; }
  .theme-strip::-webkit-scrollbar { display: none; }
  .tp { flex: 0 0 46%; scroll-snap-align: start; }
  .pose-set { gap: 4px; padding: 10px; }
  .mrow { flex-wrap: wrap; border-bottom: 1px solid var(--line); border-radius: 0; row-gap: 4px; }
  .mbadges { margin-left: 42px; justify-content: flex-start; order: 3; flex-basis: calc(100% - 42px); }
  .mbadges:empty { display: none; }
  .mrow .mult { margin-left: auto; }
  .idew-body { grid-template-columns: 1fr; }
  .idew-tree { display: none; }
  .hud-shop { width: 78%; }
  .pt-caption { bottom: 70px; font-size: .8125rem; }
  .closing-ctas .btn { flex: 1 1 100%; }
}
@media (prefers-reduced-motion: reduce) {
  .glimpse { --tilt: 0 !important; }
  .lamp-glow { animation: none; }
}
/* the pause control (GLB-11) holds the landing's own loops too: the typing carets stay solid and
   the demo spinners freeze where they are */
html.still .wish-ghost::after, html.still .mini-wish .bubble::after { animation: none; }
html.still .gl-log-h .spinner, html.still .dm-log .spinner { animation-play-state: paused; }
html.still .glimpse { --tilt: 0 !important; } /* a still page shows the window flat, as reduced motion does */
/* 1181-1420px: nine links, the pause control (GLB-11) and three actions share one bar. A link
   never breaks onto two lines ("How it / works"), and below 1420px the bar's Discord button gives
   up its room to the links: Discord stays in the hero, the closing section and the footer */
.nav .links a { white-space: nowrap; }
@media (min-width: 1181px) and (max-width: 1420px) {
  .nav-actions a.hide-sm[href^="https://discord"] { display: none; }
}
@media (min-width: 1181px) and (max-width: 1300px) {
  .nav .links a { padding: 0 9px; }
  .nav-bar { gap: 12px; }
}
@media (min-width: 1181px) and (max-width: 1240px) {
  .nav .links a { padding: 0 6px; }
  .nav-actions { gap: 4px; }
}

