/* Кабинет appagent. Токены сайта appagent.ru (тёмная тема) + светлая тема.
   Тема: html[data-theme="dark|light"]; без атрибута — по prefers-color-scheme.
   Блоки переменных читает тест контраста (tests/web/ui/contrast.test.ts): светлые значения
   в @media и в [data-theme="light"] должны совпадать. */

@font-face{font-family:'Geist';src:url('fonts/Geist-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}
@font-face{font-family:'Geist Mono';src:url('fonts/GeistMono-Variable.woff2') format('woff2');font-weight:100 900;font-style:normal;font-display:swap}

/* ---------- токены ---------- */
:root{
  color-scheme:dark;
  --bg:#08090C; --bg-2:#0E1015; --panel:#12141A; --panel-2:#1A1D25;
  --ink:#F2F4F7; --ink-2:#A9AFBA; --ink-3:#8A91A0;
  --acc:#FF7A3D; --acc-hover:#FF8F5C; --on-acc:#08090C; --acc-soft:rgba(255,122,61,.14);
  --ok:#6BE8A4; --warn:#F2C14E; --danger:#FF8478;
  --line:rgba(243,242,239,.1); --line-2:rgba(243,242,239,.2); --field-line:#737B8B;
  --shadow:0 18px 50px -24px rgba(0,0,0,.7);
}
@media (prefers-color-scheme: light){
  :root:not([data-theme]){
    color-scheme:light;
    --bg:#F6F7F9; --bg-2:#ECEEF2; --panel:#FFFFFF; --panel-2:#F0F2F5;
    --ink:#12141A; --ink-2:#444B59; --ink-3:#596070;
    --acc:#C2410C; --acc-hover:#9A3412; --on-acc:#FFFFFF; --acc-soft:rgba(194,65,12,.1);
    --ok:#0A7040; --warn:#8A5300; --danger:#B42318;
    --line:rgba(18,20,26,.1); --line-2:rgba(18,20,26,.2); --field-line:#737B8B;
    --shadow:0 18px 50px -28px rgba(18,20,26,.25);
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#08090C; --bg-2:#0E1015; --panel:#12141A; --panel-2:#1A1D25;
  --ink:#F2F4F7; --ink-2:#A9AFBA; --ink-3:#8A91A0;
  --acc:#FF7A3D; --acc-hover:#FF8F5C; --on-acc:#08090C; --acc-soft:rgba(255,122,61,.14);
  --ok:#6BE8A4; --warn:#F2C14E; --danger:#FF8478;
  --line:rgba(243,242,239,.1); --line-2:rgba(243,242,239,.2); --field-line:#737B8B;
  --shadow:0 18px 50px -24px rgba(0,0,0,.7);
}
:root[data-theme="light"]{
  color-scheme:light;
  --bg:#F6F7F9; --bg-2:#ECEEF2; --panel:#FFFFFF; --panel-2:#F0F2F5;
  --ink:#12141A; --ink-2:#444B59; --ink-3:#596070;
  --acc:#C2410C; --acc-hover:#9A3412; --on-acc:#FFFFFF; --acc-soft:rgba(194,65,12,.1);
  --ok:#0A7040; --warn:#8A5300; --danger:#B42318;
  --line:rgba(18,20,26,.1); --line-2:rgba(18,20,26,.2); --field-line:#737B8B;
  --shadow:0 18px 50px -28px rgba(18,20,26,.25);
}
:root{
  --ft:'Geist',system-ui,-apple-system,'Segoe UI',Roboto,sans-serif;
  --fm:'Geist Mono',ui-monospace,SFMono-Regular,Menlo,monospace;
  --gutter:clamp(16px,3.2vw,48px);
  --r-card:20px; --r-field:14px; --r-pill:99px;
  --side:248px; --bar:72px; --bottom:64px;
  --ease:cubic-bezier(.16,1,.3,1);
}

/* ---------- база ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;background:var(--bg)}
body{margin:0;background:var(--bg);color:var(--ink);font:400 16px/1.55 var(--ft);-webkit-font-smoothing:antialiased;min-height:100vh;min-height:100dvh;overflow-wrap:anywhere}
img,svg{display:block;max-width:100%}
a{color:var(--acc);text-underline-offset:3px}
a:hover{color:var(--acc-hover)}
h1,h2,h3,h4,p,ol,ul,dl,dd,figure,pre{margin:0}
ul,ol{padding:0;list-style:none}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--acc);outline-offset:3px;border-radius:6px}
::selection{background:var(--acc);color:var(--on-acc)}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.skip{position:fixed;left:16px;top:-80px;z-index:100;background:var(--ink);color:var(--bg);padding:12px 18px;border-radius:var(--r-pill);text-decoration:none;min-height:44px;display:inline-flex;align-items:center}
.skip:focus{top:12px;color:var(--bg)}
main:focus{outline:none}

/* ---------- каркас: сайдбар на широком экране ---------- */
.shell{display:grid;grid-template-columns:var(--side) minmax(0,1fr);grid-template-rows:var(--bar) 1fr;grid-template-areas:"brand toolbar" "nav main";min-height:100vh;min-height:100dvh}
.brand{grid-area:brand;display:flex;align-items:center;gap:12px;padding:0 20px;background:var(--panel);border-right:1px solid var(--line);border-bottom:1px solid var(--line);color:var(--ink);text-decoration:none;min-height:44px}
.brand:hover{color:var(--ink)}
.brand__logo{border-radius:9px;flex:none}
.brand__name{font:500 18px/1 var(--ft);letter-spacing:-.02em}
.brand__sub{font:500 12px/1 var(--fm);letter-spacing:.06em;text-transform:uppercase;color:var(--ink-2)}
.toolbar{grid-area:toolbar;display:flex;align-items:center;justify-content:flex-end;gap:12px;padding:0 var(--gutter);border-bottom:1px solid var(--line);min-width:0}
.toolbar__user{font:400 14px/1 var(--fm);color:var(--ink-2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;min-width:0}
.toolbar__logout{margin:0}
/* вкладки сервисов: «Проекты» (пульт) | «Кабинет» (текущий) */
.topnav{display:inline-flex;align-items:center;gap:4px;padding:3px;margin-right:auto;flex:none;border:1px solid var(--line-2);border-radius:var(--r-pill);background:var(--bg-2)}
.topnav__link.btn{--h:38px;padding:0 14px;border-color:transparent;color:var(--ink-2)}
.topnav__link.btn:hover{border-color:transparent;background:var(--panel-2);color:var(--ink)}
.topnav__link.btn:focus-visible{outline:2px solid var(--acc);outline-offset:2px}
.topnav__link.is-active,.topnav__link.is-active:hover{background:var(--panel);border-color:var(--line-2);color:var(--ink);box-shadow:inset 0 -2px 0 var(--acc)}
.guest__top{flex-wrap:wrap}
.nav{grid-area:nav;background:var(--panel);border-right:1px solid var(--line)}
.nav__list{position:sticky;top:0;display:grid;gap:4px;padding:16px 12px}
.nav__link{display:flex;align-items:center;gap:12px;min-height:46px;padding:0 14px;border-radius:var(--r-field);color:var(--ink-2);text-decoration:none;font:500 15px/1 var(--ft);transition:background .2s var(--ease),color .2s var(--ease)}
.nav__link:hover{background:var(--panel-2);color:var(--ink)}
.nav__link[aria-current="page"]{background:var(--acc-soft);color:var(--ink);box-shadow:inset 3px 0 0 var(--acc)}
.nav__link[aria-current="page"] .ico{color:var(--acc)}
.ico{flex:none}
.main{grid-area:main;padding:clamp(24px,4vw,56px) var(--gutter) 72px;width:100%;max-width:1160px;min-width:0}

/* ---------- гостевой экран ---------- */
.guest{min-height:100vh;min-height:100dvh;display:grid;grid-template-rows:auto 1fr auto;justify-items:center;padding:0 var(--gutter)}
.guest__top{width:100%;max-width:440px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:24px 0 8px}
.guest__top .brand{background:none;border:0;padding:0}
.guest__main{width:100%;max-width:440px;align-self:center;padding:16px 0 32px}
.guest__foot{font:400 13px/1 var(--fm);color:var(--ink-3);padding:16px 0 28px}

/* ---------- кнопки ---------- */
.btn{--h:48px;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:var(--h);padding:0 24px;border-radius:var(--r-pill);font:500 15px/1 var(--ft);text-decoration:none;border:1px solid transparent;cursor:pointer;white-space:nowrap;background:none;transition:background .2s var(--ease),border-color .2s var(--ease),color .2s var(--ease)}
.btn--primary{background:var(--acc);color:var(--on-acc)}
.btn--primary:hover{background:var(--acc-hover);color:var(--on-acc)}
.btn--ghost{border-color:var(--field-line);color:var(--ink);background:transparent}
.btn--ghost:hover{border-color:var(--ink);background:var(--panel-2);color:var(--ink)}
.btn--danger{border-color:var(--danger);color:var(--danger);background:transparent}
.btn--danger:hover{background:var(--danger);color:var(--bg)}
.btn--sm{--h:44px;padding:0 16px;font-size:14px}
.btn--icon{width:44px;padding:0;flex:none}
.btn--block{width:100%}
.btn[disabled],.btn[aria-disabled="true"]{opacity:.55;cursor:not-allowed}
.theme-toggle{display:none}
.js .theme-toggle{display:inline-flex}

/* ---------- заголовки страницы ---------- */
.page-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:16px 24px;margin-bottom:32px}
.page-head__text{min-width:0;flex:1 1 320px}
.page-head__actions{display:flex;flex-wrap:wrap;gap:12px}
.page-title{font:400 clamp(28px,3.4vw,44px)/1.08 var(--ft);letter-spacing:-.035em}
.page-lead{margin-top:10px;color:var(--ink-2);max-width:60ch}
.flashes{display:grid;gap:12px;margin-bottom:24px}

/* ---------- карточки, сетки, статистика ---------- */
.card{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:clamp(20px,2.4vw,28px);display:grid;gap:16px;align-content:start;min-width:0}
.card--accent{border-color:var(--acc)}
.card--danger{border-color:var(--danger)}
.card__title{font:500 18px/1.25 var(--ft);letter-spacing:-.015em}
.card__body{display:grid;gap:14px;min-width:0}
.card__footer{display:flex;flex-wrap:wrap;gap:12px;padding-top:4px}
.grid{display:grid;gap:16px;margin-bottom:16px}
.grid--2{grid-template-columns:repeat(2,minmax(0,1fr))}
.grid--3{grid-template-columns:repeat(3,minmax(0,1fr))}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:16px;margin-bottom:24px}
.stat{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:20px 22px;display:grid;gap:6px;min-width:0}
.stat__in{display:grid;gap:6px}
.stat__label{font:500 12px/1.3 var(--fm);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2)}
.stat__value{font:400 clamp(26px,3vw,34px)/1.1 var(--ft);letter-spacing:-.03em}
.stat__hint{font-size:14px;color:var(--ink-2)}

/* ---------- бейджи, флеши ---------- */
.badge{display:inline-flex;align-items:center;gap:8px;min-height:28px;padding:0 12px;border-radius:var(--r-pill);background:var(--panel-2);border:1px solid var(--line-2);font:500 13px/1 var(--fm);color:var(--ink-2);white-space:nowrap}
.badge::before{content:'';width:7px;height:7px;border-radius:50%;background:currentColor;flex:none}
.badge--ok{color:var(--ok)} .badge--warn{color:var(--warn)} .badge--danger{color:var(--danger)} .badge--acc{color:var(--acc)}
.flash{padding:14px 18px;border-radius:var(--r-field);background:var(--panel);border:1px solid var(--line-2);border-left-width:4px;color:var(--ink)}
.flash--ok{border-left-color:var(--ok)} .flash--warn{border-left-color:var(--warn)} .flash--error{border-left-color:var(--danger)} .flash--info{border-left-color:var(--acc)}

/* ---------- формы ---------- */
.form{display:grid;gap:18px}
.field{display:grid;gap:8px}
.field__label{font:500 14px/1.3 var(--ft)}
.field__req{color:var(--danger)}
.input{width:100%;min-height:48px;padding:12px 16px;background:var(--bg);color:var(--ink);border:1px solid var(--field-line);border-radius:var(--r-field);font:400 16px/1.4 var(--ft);transition:border-color .2s var(--ease)}
textarea.input{resize:vertical;min-height:112px}
select.input{appearance:auto}
.input::placeholder{color:var(--ink-3)}
.input:hover{border-color:var(--ink-2)}
.input:focus-visible{outline:2px solid var(--acc);outline-offset:2px;border-color:var(--acc)}
.input[readonly]{background:var(--panel-2)}
.input[disabled]{opacity:.6}
.field__hint{font-size:14px;color:var(--ink-2)}
.field__error{font-size:14px;color:var(--danger)}
.field--error .input{border-color:var(--danger)}
.check{display:grid;grid-template-columns:auto 1fr;column-gap:12px;row-gap:4px;align-items:center}
.check__box{width:22px;height:22px;margin:0;accent-color:var(--acc)}
.check__label{min-height:44px;display:flex;align-items:center;cursor:pointer}
.check .field__hint{grid-column:2}

/* ---------- таблица ---------- */
.t-wrap{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);overflow:hidden;margin-bottom:16px}
.t{width:100%;border-collapse:collapse}
.t__th{font:500 12px/1.3 var(--fm);letter-spacing:.05em;text-transform:uppercase;color:var(--ink-2);text-align:left;padding:14px 20px;border-bottom:1px solid var(--line-2);white-space:nowrap}
.t__td{padding:16px 20px;border-bottom:1px solid var(--line);vertical-align:middle}
.t__row:last-child .t__td{border-bottom:0}
.is-right{text-align:right}

/* ---------- пустое состояние, код, список определений, пагинация ---------- */
.empty{background:var(--panel);border:1px dashed var(--line-2);border-radius:var(--r-card);padding:clamp(28px,5vw,56px) 24px;text-align:center;display:grid;gap:10px;justify-items:center}
.empty__title{font:500 18px/1.3 var(--ft)}
.empty__text{color:var(--ink-2);max-width:46ch}
.empty__action{margin-top:8px}
.code{display:grid;gap:8px;min-width:0}
.code__label{font:500 13px/1.3 var(--fm);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
.code__row{display:flex;gap:12px;align-items:stretch;min-width:0}
.code__pre{flex:1 1 auto;min-width:0;background:var(--bg);border:1px solid var(--field-line);border-radius:var(--r-field);padding:12px 16px;font:400 14px/1.6 var(--fm);overflow-x:auto;white-space:pre;display:flex;align-items:center}
.code__copy{flex:none;align-self:center}
.dl{display:grid;gap:0}
.dl__row{display:grid;grid-template-columns:minmax(120px,220px) minmax(0,1fr);gap:4px 24px;padding:12px 0;border-bottom:1px solid var(--line)}
.dl__row:last-child{border-bottom:0}
.dl__term{color:var(--ink-2);font-size:14px}
.dl__desc{min-width:0}
.pager{margin-top:24px}
.pager__list{display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pager__item{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px;padding:0 14px;border-radius:var(--r-pill);border:1px solid var(--line-2);color:var(--ink);text-decoration:none;font:500 14px/1 var(--ft)}
a.pager__item:hover{border-color:var(--ink);background:var(--panel-2);color:var(--ink)}
.pager__item.is-current{background:var(--acc);border-color:var(--acc);color:var(--on-acc)}
.pager__item.is-disabled{color:var(--ink-3);border-style:dashed}
.pager__gap{color:var(--ink-3);padding:0 4px}

/* ---------- адаптив ---------- */
@media (max-width: 899px){
  .shell{grid-template-columns:auto minmax(0,1fr);grid-template-rows:56px 1fr;grid-template-areas:"brand toolbar" "main main";padding-bottom:calc(var(--bottom) + env(safe-area-inset-bottom,0px))}
  .brand{padding:0 var(--gutter);border-right:0}
  .brand__sub{display:none}
  .toolbar{border-bottom:1px solid var(--line);background:var(--panel)}
  .toolbar__user{display:none}
  .toolbar__logout-text{display:none}
  .toolbar__logout .btn{width:44px;padding:0}
  .toolbar{gap:8px}
  .topnav__link.btn{--h:36px;padding:0 10px;font-size:13px}
  .nav{position:fixed;left:0;right:0;bottom:0;z-index:20;border-right:0;border-top:1px solid var(--line-2);padding-bottom:env(safe-area-inset-bottom,0px)}
  .nav__list{position:static;display:flex;gap:2px;padding:4px 6px;overflow-x:auto;overscroll-behavior-x:contain;scroll-snap-type:x proximity;scrollbar-width:none}
  .nav__list::-webkit-scrollbar{display:none}
  .nav__item{flex:1 0 88px;scroll-snap-align:start}
  .nav__text{overflow-wrap:normal;word-break:normal}
  .nav__link{flex-direction:column;justify-content:center;gap:4px;min-height:56px;padding:6px 4px;font-size:12px;text-align:center;box-shadow:none}
  .nav__link[aria-current="page"]{box-shadow:inset 0 3px 0 var(--acc);border-radius:0 0 var(--r-field) var(--r-field)}
  .main{padding-top:24px;padding-bottom:32px}
  .page-head{margin-bottom:24px}
  .page-head__actions .btn{flex:1 1 auto}
  .grid--2,.grid--3{grid-template-columns:minmax(0,1fr)}
}
@media (max-width: 759px){
  /* таблица -> карточки */
  .t-wrap{background:none;border:0;border-radius:0;overflow:visible}
  .t,.t tbody,.t__row,.t__td{display:block}
  .t thead{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
  .t__row{background:var(--panel);border:1px solid var(--line);border-radius:var(--r-card);padding:8px 18px;margin-bottom:12px}
  .t__td{display:grid;grid-template-columns:minmax(96px,38%) minmax(0,1fr);gap:12px;align-items:center;padding:10px 0;border-bottom:1px solid var(--line);text-align:left}
  .t__td.is-right{text-align:left}
  .t__row .t__td:last-child{border-bottom:0}
  .t__td::before{content:attr(data-label);font:500 12px/1.3 var(--fm);letter-spacing:.04em;text-transform:uppercase;color:var(--ink-2)}
  .dl__row{grid-template-columns:minmax(0,1fr)}
  .code__row{flex-direction:column}
  .code__copy{align-self:stretch}
  .card__footer .btn,.empty__action .btn{width:100%}
}
@media (max-width: 420px){
  .btn:not(.btn--icon){padding:0 18px}
  .toolbar__logout .btn{padding:0}
  .topnav__link.btn{padding:0 10px}
  .shell .brand__name{display:none}
  .stats{grid-template-columns:minmax(0,1fr)}
}

/* ---------- движение ---------- */
@media (prefers-reduced-motion: reduce){
  *,*::before,*::after{transition:none !important;animation:none !important;scroll-behavior:auto !important}
}
