/* Шрифти лежать у /fonts */
@font-face{font-family:"JetBrains Mono";src:url(/fonts/JetBrainsMono-Regular.ttf) format("truetype");font-weight:400;font-display:swap}
@font-face{font-family:"JetBrains Mono";src:url(/fonts/JetBrainsMono-Bold.ttf) format("truetype");font-weight:700;font-display:swap}
@font-face{font-family:"Onest";src:url(/fonts/onest-cyrillic-400.woff2) format("woff2");font-weight:400;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Onest";src:url(/fonts/onest-latin-400.woff2) format("woff2");font-weight:400;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Onest";src:url(/fonts/onest-cyrillic-500.woff2) format("woff2");font-weight:500;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Onest";src:url(/fonts/onest-latin-500.woff2) format("woff2");font-weight:500;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Onest";src:url(/fonts/onest-cyrillic-600.woff2) format("woff2");font-weight:600 800;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Onest";src:url(/fonts/onest-latin-600.woff2) format("woff2");font-weight:600 800;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Unbounded";src:url(/fonts/unbounded-cyrillic-600.woff2) format("woff2");font-weight:600;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Unbounded";src:url(/fonts/unbounded-latin-600.woff2) format("woff2");font-weight:600;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"Unbounded";src:url(/fonts/unbounded-cyrillic-700.woff2) format("woff2");font-weight:700 800;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Unbounded";src:url(/fonts/unbounded-latin-700.woff2) format("woff2");font-weight:700 800;font-display:swap;unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
@font-face{font-family:"JetBrains Mono";src:url(/fonts/JetBrainsMono-Regular.ttf);font-weight:400}
@font-face{font-family:"JetBrains Mono";src:url(/fonts/JetBrainsMono-Bold.ttf);font-weight:700}

/* ===== AI Hub UI — єдина дизайн-система. Еталон: /ui.html. ТЗ: /root/projects/server/SPEC.md =====
   Правило: колір, відступ, шрифт і заокруглення беремо лише з токенів нижче. */

/* ---------- Токени: світла тема ---------- */
:root{
  color-scheme:light;
  /* поверхні */
  --bg:#f2f2f7; --bg2:#ffffff; --bg3:#e5e5ea;
  --fill:rgba(120,120,128,.12); --fill2:rgba(120,120,128,.2);
  /* текст */
  --text:#000; --text2:rgba(60,60,67,.6); --text3:rgba(60,60,67,.3); --sep:rgba(60,60,67,.18);
  /* стан */
  --accent:#007aff; --on-accent:#fff; --green:#34c759; --red:#ff3b30; --orange:#ff9500;
  --accent-tint:rgba(0,122,255,.12); --green-tint:rgba(52,199,89,.14); --red-tint:rgba(255,59,48,.12); --orange-tint:rgba(255,149,0,.14);
  /* AI */
  --gray:#8e8e93; --claude:#d4622a; --gemini:#2f6fe4; --codex:#0f8a6c; --deepseek:#4d6bfe;
  /* скло й тіні */
  --glass:rgba(255,255,255,.72); --glass-brd:rgba(255,255,255,.75);
  --sh-1:0 2px 8px rgba(0,0,0,.12); --sh-2:0 8px 32px rgba(0,0,0,.14),0 1px 2px rgba(0,0,0,.06);
  /* шрифти */
  --font:"Onest",-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,sans-serif;
  --font-display:"Unbounded","Onest",sans-serif;
  --font-mono:"JetBrains Mono",ui-monospace,Menlo,monospace;
  /* шкала шрифту */
  --t-cap:12px; --t-sub:14px; --t-body:16px; --t-head:17px; --t-title:22px; --t-large:30px;
  /* шкала відступів */
  --s1:4px; --s2:8px; --s3:12px; --s4:16px; --s5:24px; --s6:32px;
  /* заокруглення */
  --r-sm:8px; --r-md:12px; --r-lg:22px; --r-pill:999px;
  /* розміри */
  --tap:44px; --ctl:44px; --ctl-sm:32px; --row-h:52px; --icon:30px; --page-max:720px;
  --safe-t:env(safe-area-inset-top); --safe-b:env(safe-area-inset-bottom);
  --ease:cubic-bezier(.2,.8,.2,1);
}

/* ---------- Токени: темна тема (авто і примусова) ---------- */
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:#1e1f23; --bg2:#2b2c31; --bg3:#3a3b41;
    --fill:rgba(140,140,150,.22); --fill2:rgba(140,140,150,.34);
    --text:#e6e6eb; --text2:rgba(235,235,245,.6); --text3:rgba(235,235,245,.3); --sep:rgba(84,84,88,.6);
    --accent:#0a84ff; --green:#30d158; --red:#ff453a; --orange:#ff9f0a;
    --accent-tint:rgba(10,132,255,.2); --green-tint:rgba(48,209,88,.18); --red-tint:rgba(255,69,58,.18); --orange-tint:rgba(255,159,10,.18);
    --claude:#f08a4b; --gemini:#6aa1ff; --codex:#3fc79f; --deepseek:#7b93ff;
    --glass:rgba(43,44,49,.72); --glass-brd:rgba(255,255,255,.12);
    --sh-1:0 2px 8px rgba(0,0,0,.4); --sh-2:0 8px 28px rgba(0,0,0,.45);
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#1e1f23; --bg2:#2b2c31; --bg3:#3a3b41;
  --fill:rgba(140,140,150,.22); --fill2:rgba(140,140,150,.34);
  --text:#e6e6eb; --text2:rgba(235,235,245,.6); --text3:rgba(235,235,245,.3); --sep:rgba(84,84,88,.6);
  --accent:#0a84ff; --green:#30d158; --red:#ff453a; --orange:#ff9f0a;
  --accent-tint:rgba(10,132,255,.2); --green-tint:rgba(48,209,88,.18); --red-tint:rgba(255,69,58,.18); --orange-tint:rgba(255,159,10,.18);
  --claude:#f08a4b; --gemini:#6aa1ff; --codex:#3fc79f; --deepseek:#7b93ff;
  --glass:rgba(43,44,49,.72); --glass-brd:rgba(255,255,255,.12);
  --sh-1:0 2px 8px rgba(0,0,0,.4); --sh-2:0 8px 28px rgba(0,0,0,.45);
}

/* ---------- База (лише для сторінок на u-…; старий index.html має свою) ---------- */
.u-app{margin:0;background:var(--bg);color:var(--text);font:400 var(--t-body)/1.4 var(--font);-webkit-font-smoothing:antialiased;-webkit-tap-highlight-color:transparent}
.u-app :where(*,*::before,*::after){box-sizing:border-box}
/* :where() — нульова специфічність, компоненти завжди сильніші */
.u-app :where(button){font:inherit;color:inherit;background:none;border:0;padding:0;cursor:pointer}
.u-app :where(:focus-visible){outline:2px solid var(--accent);outline-offset:2px;border-radius:var(--r-sm)}
.u-page{max-width:var(--page-max);margin:0 auto;padding:0 var(--s4) calc(var(--s6) + var(--safe-b))}
.u-mono{font-family:var(--font-mono);font-size:var(--t-sub)}
.u-muted{color:var(--text2)}
.u-sprite{position:absolute;overflow:hidden}

/* ---------- 1. Шапка ---------- */
.u-navbar{position:sticky;top:0;z-index:10;display:grid;grid-template-columns:1fr auto 1fr;align-items:center;gap:var(--s2);min-height:var(--tap);padding:calc(var(--s2) + var(--safe-t)) var(--s3) var(--s2);background:var(--glass);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);border-bottom:.5px solid var(--sep)}
.u-navbar-t{font-size:var(--t-head);font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.u-navbar-l{justify-self:start}.u-navbar-r{justify-self:end;display:flex;gap:var(--s1)}
.u-back{display:inline-flex;text-decoration:none;align-items:center;gap:2px;min-height:var(--tap);color:var(--accent);font-size:var(--t-head)}
.u-back svg{width:12px;height:20px}
.u-icon-btn{display:grid;place-items:center;width:var(--tap);height:var(--tap);border-radius:var(--r-pill);color:var(--accent)}
.u-icon-btn:active{background:var(--fill)}
.u-icon-btn svg{width:22px;height:22px}

/* ---------- 2. Великий заголовок ---------- */
.u-large{margin:var(--s4) 0 var(--s4);font:700 var(--t-large)/1.15 var(--font-display);letter-spacing:-.01em}
.u-large small{display:block;margin-top:var(--s1);font:400 var(--t-sub)/1.4 var(--font);color:var(--text2);letter-spacing:0}

/* ---------- 3. Секція ---------- */
.u-section{margin:0 0 var(--s5)}
.u-section-h{display:flex;align-items:baseline;justify-content:space-between;gap:var(--s3);margin:0 var(--s4) var(--s2);font-size:var(--t-sub);font-weight:500;color:var(--text2)}
.u-section-h a,.u-section-h button{color:var(--accent);font-weight:500}
.u-stack{display:grid;gap:var(--s3)}
.u-foot{margin:var(--s2) var(--s4) 0;font-size:var(--t-cap);line-height:1.45;color:var(--text2)}

/* ---------- 4. Група і рядок ---------- */
.u-group{background:var(--bg2);border-radius:var(--r-lg);overflow:hidden}
.u-row{position:relative;display:flex;align-items:center;gap:var(--s3);width:100%;min-height:var(--row-h);padding:var(--s2) var(--s4);text-align:left;color:var(--text)}
button.u-row:active,a.u-row:active{background:var(--fill)}
a.u-row{text-decoration:none}
.u-row + .u-row::before{content:"";position:absolute;top:0;right:0;left:var(--s4);border-top:.5px solid var(--sep)}
.u-row:has(.u-ic) + .u-row::before{left:calc(var(--s4) + var(--icon) + var(--s3))}
.u-ic{flex:none;display:grid;place-items:center;width:var(--icon);height:var(--icon);border-radius:var(--r-sm);color:#fff;background:var(--accent)}
.u-ic svg{width:18px;height:18px}
.u-ic.green{background:var(--green)}.u-ic.red{background:var(--red)}.u-ic.orange{background:var(--orange)}.u-ic.gray{background:var(--gray)}
.u-ic.claude{background:var(--claude)}.u-ic.codex{background:var(--codex)}.u-ic.deepseek{background:var(--deepseek)}.u-ic.gemini{background:var(--gemini)}
.u-row-main{flex:1;min-width:0}
.u-row-t{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.u-row-s{display:block;margin-top:2px;font-size:var(--t-sub);color:var(--text2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.u-row-v{flex:none;color:var(--text2);font-variant-numeric:tabular-nums}
.u-chev{flex:none;width:8px;height:14px;color:var(--text3)}
.u-row.danger .u-row-t{color:var(--red)}

/* ---------- 5. Картка ---------- */
.u-cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr));gap:var(--s3)}
.u-card{background:var(--bg2);border-radius:var(--r-lg);padding:var(--s4)}
.u-card-l{font-size:var(--t-sub);color:var(--text2)}
.u-card-n{margin-top:var(--s1);font:700 var(--t-title)/1.2 var(--font-display);font-variant-numeric:tabular-nums}
.u-card-d{margin-top:var(--s1);font-size:var(--t-cap);color:var(--text2)}
.u-card-d.up{color:var(--green)}.u-card-d.down{color:var(--red)}
.u-bar{height:6px;margin-top:var(--s3);border-radius:var(--r-pill);background:var(--fill);overflow:hidden}
.u-bar > i{display:block;height:100%;border-radius:inherit;background:var(--accent)}

/* ---------- 6. Кнопки ---------- */
.u-btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--s2);min-height:var(--ctl);padding:0 var(--s4);border-radius:var(--r-md);font-size:var(--t-body);font-weight:600;white-space:nowrap;transition:opacity .15s,transform .15s var(--ease)}
.u-btn:active{transform:scale(.97);opacity:.8}
.u-btn:disabled{opacity:.35;pointer-events:none}
.u-btn.primary{background:var(--accent);color:var(--on-accent)}
.u-btn.tinted{background:var(--accent-tint);color:var(--accent)}
.u-btn.plain{color:var(--accent);padding:0 var(--s2)}
.u-btn.danger{background:var(--red-tint);color:var(--red)}
.u-btn.sm{min-height:var(--ctl-sm);padding:0 var(--s3);border-radius:var(--r-sm);font-size:var(--t-sub)}
.u-btn.wide{width:100%}
.u-btns{display:flex;flex-wrap:wrap;gap:var(--s2)}

/* ---------- 7. Сегменти ---------- */
.u-seg{display:flex;gap:2px;padding:2px;margin:0;background:var(--fill);border-radius:var(--r-md)}
.u-seg button{flex:1;min-height:calc(var(--ctl) - 4px);padding:0 var(--s2);border-radius:10px;font-size:var(--t-body);font-weight:500;white-space:nowrap}
.u-seg button[aria-selected="true"]{background:var(--bg2);box-shadow:var(--sh-1);font-weight:600}
:root[data-theme="dark"] .u-seg button[aria-selected="true"]{background:var(--bg3)}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]) .u-seg button[aria-selected="true"]{background:var(--bg3)}}

/* ---------- 8. Перемикач ---------- */
.u-switch{position:relative;flex:none;width:51px;height:31px;margin:0;appearance:none;-webkit-appearance:none;border-radius:var(--r-pill);background:var(--fill2);cursor:pointer;transition:background .2s}
.u-switch::after{content:"";position:absolute;top:2px;left:2px;width:27px;height:27px;border-radius:50%;background:#fff;box-shadow:0 2px 6px rgba(0,0,0,.2);transition:transform .25s var(--ease)}
.u-switch:checked{background:var(--green)}
.u-switch:checked::after{transform:translateX(20px)}

/* ---------- 9. Поле і пошук ---------- */
.u-field{display:block;width:100%;min-height:var(--ctl);padding:0 var(--s3);border:0;border-radius:var(--r-md);background:var(--fill);color:var(--text);font:inherit;outline:none}
.u-field::placeholder{color:var(--text2)}
.u-field:focus{box-shadow:0 0 0 2px var(--accent)}
textarea.u-field{min-height:96px;padding:var(--s3);resize:vertical;line-height:1.45}
.u-search{position:relative}
.u-search svg{position:absolute;left:var(--s3);top:50%;width:18px;height:18px;transform:translateY(-50%);color:var(--text2);pointer-events:none}
.u-search .u-field{padding-left:38px}
.u-label{display:block;margin:0 var(--s4) var(--s1);font-size:var(--t-sub);color:var(--text2)}

/* ---------- 10. Бейдж ---------- */
.u-badge{display:inline-flex;align-items:center;gap:6px;padding:2px var(--s2);border-radius:var(--r-pill);font-size:var(--t-cap);font-weight:600;line-height:1.5;background:var(--fill);color:var(--text2)}
.u-badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.u-badge.ok{background:var(--green-tint);color:var(--green)}
.u-badge.warn{background:var(--orange-tint);color:var(--orange)}
.u-badge.bad{background:var(--red-tint);color:var(--red)}
.u-badge.info{background:var(--accent-tint);color:var(--accent)}

/* ---------- 11. Порожній стан ---------- */
.u-empty{display:flex;flex-direction:column;align-items:center;gap:var(--s2);padding:var(--s6) var(--s4);text-align:center;color:var(--text2)}
.u-empty svg{width:40px;height:40px;color:var(--text3)}
.u-empty b{font-size:var(--t-head);color:var(--text)}
.u-empty p{margin:0 0 var(--s2);max-width:32ch;font-size:var(--t-sub)}

/* ---------- 12. Тост ---------- */
.u-toast{position:fixed;left:50%;bottom:calc(var(--s5) + var(--safe-b));z-index:50;display:flex;align-items:center;gap:var(--s2);max-width:calc(100% - var(--s6));padding:var(--s3) var(--s4);border-radius:var(--r-pill);background:var(--glass);border:.5px solid var(--glass-brd);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px);box-shadow:var(--sh-2);font-size:var(--t-sub);font-weight:500;transform:translate(-50%,calc(100% + var(--s6)));visibility:hidden;transition:transform .35s var(--ease),visibility 0s .35s}
.u-toast.on{transform:translate(-50%,0);visibility:visible;transition:transform .35s var(--ease)}
.u-toast svg{width:18px;height:18px;color:var(--green)}

/* ---------- 13. Лист знизу ---------- */
.u-sheet-bg{position:fixed;inset:0;z-index:40;background:rgba(0,0,0,.35);opacity:0;pointer-events:none;transition:opacity .25s}
.u-sheet-bg.on{opacity:1;pointer-events:auto}
.u-sheet{position:fixed;left:0;right:0;bottom:0;z-index:41;max-width:var(--page-max);margin:0 auto;padding:var(--s2) var(--s4) calc(var(--s4) + var(--safe-b));background:var(--bg);border-radius:var(--r-lg) var(--r-lg) 0 0;box-shadow:var(--sh-2);transform:translateY(105%);visibility:hidden;transition:transform .35s var(--ease),visibility 0s .35s}
.u-sheet.on{transform:none;visibility:visible;transition:transform .35s var(--ease)}
.u-sheet-grab{width:36px;height:5px;margin:0 auto var(--s3);border-radius:var(--r-pill);background:var(--fill2)}
.u-sheet-t{margin:0 0 var(--s3);text-align:center;font-size:var(--t-sub);color:var(--text2)}
.u-sheet .u-group + .u-group{margin-top:var(--s2)}
.u-sheet .u-row{justify-content:center;font-size:var(--t-head)}
.u-sheet .u-row.accent{color:var(--accent);font-weight:600}

/* ---------- 14. Нижнє меню (лише телефон) ---------- */
.u-tabbar{position:fixed;left:0;right:0;bottom:0;z-index:20;display:flex;padding:var(--s1) var(--s2) calc(var(--s1) + var(--safe-b));background:var(--glass);border-top:.5px solid var(--sep);-webkit-backdrop-filter:saturate(180%) blur(20px);backdrop-filter:saturate(180%) blur(20px)}
.u-tabbar button{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;min-height:var(--tap);padding-top:var(--s1);font-size:10px;font-weight:500;color:var(--text2)}
.u-tabbar button svg{width:24px;height:24px}
.u-tabbar button[aria-current="page"]{color:var(--accent)}
@media (min-width:900px){.u-tabbar{display:none}}

@media (prefers-reduced-motion:reduce){.u-app *{transition:none!important;animation:none!important}}
