/* Хаб · система «Field» для приложения · v2 / 13.11
   Принцип: оболочка тёмно-зелёная и спокойная, холст — бумага; всё здоровое молчит,
   цвет, слова и вес получает только то, что требует действия. */

@font-face{font-family:"Golos Text";src:url(fonts/golos-cyr.woff2) format("woff2");font-weight:400 900;font-display:swap;unicode-range:U+0301,U+0400-045F,U+0490-0491,U+04B0-04B1,U+2116}
@font-face{font-family:"Golos Text";src:url(fonts/golos-lat.woff2) format("woff2");font-weight:400 900;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-cyr.woff2) format("woff2");font-weight:200 900;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-lat.woff2) format("woff2");font-weight:200 900;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}

/* ---------- токены ---------- */
:root{
  --lime:#c8f03a; --lime-2:#b4dc22; --forest:#17372c; --paper:#f3f5eb;

  --canvas:var(--paper);
  --surface:#ffffff;
  --surface-2:#f8f9f2;
  --surface-3:#eef1e4;
  --text:#17372c;
  --text-2:#4c5f54;
  --text-3:#7d8c82;
  --line:rgba(23,55,44,.11);
  --line-2:rgba(23,55,44,.2);
  --focus:#17372c;

  --ok:#3f7a4a;
  --warn:#a76a0b; --warn-bg:#fbf0d9; --warn-line:rgba(167,106,11,.32);
  --down:#c23a24; --down-bg:#fdebe6; --down-line:rgba(194,58,36,.34);
  --bar:rgba(23,55,44,.2); --bar-today:rgba(23,55,44,.42);

  --side:#17372c; --side-2:#1f4537; --side-text:#d6e2d0; --side-muted:#8fab9b; --side-line:rgba(214,226,208,.1);

  --h-money:#3f7a4a; --h-ship:#9a6b22; --h-mkt:#a5513f; --h-sup:#2e6f74; --h-arkan:#5d7a12; --h-create:#4f6478; --h-sys:#56605a; --h-app:#8a5a7a;

  --font:"Golos Text",system-ui,sans-serif;
  --display:"Unbounded","Golos Text",system-ui,sans-serif;

  --r-tile:12px; --r-ctl:8px; --r-sm:6px;
  --shadow-hard:3px 3px 0 var(--forest);
  --shadow-pop:0 1px 0 rgba(23,55,44,.04),0 18px 48px -12px rgba(16,40,30,.28);
  --ease:cubic-bezier(.2,.7,.2,1);
  --t-fast:120ms; --t-mid:140ms;
  --side-w:236px; --top-h:56px;
  color-scheme:light;
}
:root[data-theme="dark"]{
  --canvas:#0f2019;
  --surface:#152a21;
  --surface-2:#183027;
  --surface-3:#1d382c;
  --text:#e9efe2;
  --text-2:#b0c2b5;
  --text-3:#7f978a;
  --line:rgba(225,238,220,.09);
  --line-2:rgba(225,238,220,.17);
  --focus:#c8f03a;
  --ok:#8fc49a;
  --warn:#e8ad4c; --warn-bg:rgba(232,173,76,.12); --warn-line:rgba(232,173,76,.36);
  --down:#ff7a62; --down-bg:rgba(255,122,98,.11); --down-line:rgba(255,122,98,.42);
  --bar:rgba(225,238,220,.2); --bar-today:rgba(225,238,220,.45);
  --side:#0a1812; --side-2:#14291f; --side-text:#d6e2d0; --side-muted:#7f9b8c; --side-line:rgba(214,226,208,.08);
  --h-money:#8fc49a; --h-ship:#d9a95a; --h-mkt:#e59a85; --h-sup:#7cbcc0; --h-arkan:#b9d968; --h-create:#a3b7cc; --h-sys:#a7b2ab; --h-app:#d4a6c4;
  --shadow-hard:3px 3px 0 #c8f03a;
  --shadow-pop:0 18px 48px -12px rgba(0,0,0,.6);
  color-scheme:dark;
}

/* ---------- база ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--canvas);color:var(--text);font:400 14px/1.45 var(--font);-webkit-font-smoothing:antialiased;font-feature-settings:"tnum" 1;font-variant-numeric:tabular-nums}
a{color:inherit;text-decoration:none}
button,input{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0;padding:0}
svg{display:block;flex:none}
h1,h2,h3,p{margin:0}
.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum" 1}
.display{font-family:var(--display);letter-spacing:-.02em}
:focus-visible{outline:2px solid var(--focus);outline-offset:2px;border-radius:var(--r-sm)}
.no-trans *,.no-trans *::before,.no-trans *::after{transition:none!important}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
.muted{color:var(--text-2)} .faint{color:var(--text-3)}

/* ---------- оболочка ---------- */
.app{display:grid;grid-template-columns:var(--side-w) minmax(0,1fr);min-height:100vh}
.side{position:sticky;top:0;height:100vh;background:var(--side);color:var(--side-text);display:flex;flex-direction:column;padding:14px 12px 12px;gap:4px;overflow-y:auto}
.brand{display:flex;align-items:center;gap:10px;padding:4px 8px 14px}
.brand-mark{width:30px;height:30px;border-radius:8px;background:var(--lime);display:grid;place-items:center;color:#17372c}
.brand b{font:600 15px/1 var(--display);letter-spacing:-.01em;color:#fff}
.brand small{display:block;font-size:11.5px;color:var(--side-muted);margin-top:4px;letter-spacing:.01em}
.side-search{display:flex;align-items:center;gap:8px;height:34px;padding:0 8px 0 10px;border-radius:var(--r-ctl);background:var(--side-2);color:var(--side-muted);font-size:13px;margin:0 0 10px;width:100%;text-align:left;transition:background var(--t-fast)}
.side-search:hover{background:#285444}
:root[data-theme="dark"] .side-search:hover{background:#1c3629}
.side-search>span:not(.kbd){flex:1;white-space:nowrap}
.kbd{display:inline-flex;align-items:center;gap:2px;height:20px;padding:0 6px;border-radius:5px;font:500 11.5px/1 var(--font);border:1px solid currentColor;opacity:.75}
.side-sec{font-size:11.5px;color:var(--side-muted);padding:14px 10px 6px;display:flex;justify-content:space-between}
.nav a,.nav button{display:flex;align-items:center;gap:10px;height:34px;padding:0 10px;border-radius:var(--r-ctl);color:var(--side-text);font-size:13.5px;font-weight:500;width:100%;transition:background var(--t-fast),color var(--t-fast)}
.nav a:hover,.nav button:hover{background:var(--side-2)}
.nav a[aria-current="page"]{background:var(--lime);color:#17372c}
.nav a[aria-current="page"] svg{color:#17372c}
.nav svg{color:var(--side-muted)}
.nav .count{margin-left:auto;font-size:12px;color:var(--side-muted)}
.nav a[aria-current="page"] .count{color:#17372c}
.nav .alert-dot{margin-left:auto;width:7px;height:7px;border-radius:50%;background:#ff7a62}
.side-pin{display:flex;align-items:center;gap:10px;height:32px;padding:0 10px;border-radius:var(--r-ctl);font-size:13px;color:var(--side-text)}
.side-pin:hover{background:var(--side-2)}
.side-pin .mini{width:20px;height:20px;border-radius:5px;display:grid;place-items:center;background:var(--side-2);color:var(--side-text)}
.side-pin .mini svg{width:14px;height:14px}
.side-foot{margin-top:auto;border-top:1px solid var(--side-line);padding:12px 10px 2px;font-size:12.5px}
.side-foot b{display:block;font-weight:600;color:#fff;font-size:13px}
.side-foot span{color:var(--side-muted)}

.main{min-width:0;display:flex;flex-direction:column}
.top{position:sticky;top:0;z-index:20;height:var(--top-h);display:flex;align-items:center;gap:12px;padding:0 24px;background:color-mix(in srgb,var(--canvas) 94%,transparent);border-bottom:1px solid var(--line)}
.crumbs{display:flex;align-items:center;gap:8px;font-size:13.5px;color:var(--text-2);white-space:nowrap}
.crumbs b{color:var(--text);font-weight:600}
.top-search{margin-left:auto;display:flex;align-items:center;gap:8px;width:300px;height:34px;padding:0 6px 0 10px;border:1px solid var(--line-2);border-radius:var(--r-ctl);background:var(--surface);color:var(--text-3);font-size:13px;text-align:left;transition:border-color var(--t-fast)}
.top-search:hover{border-color:var(--text-3)}
.top-search>span:not(.kbd){flex:1;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.demo{font-size:11.5px;color:var(--text-3);border:1px dashed var(--line-2);border-radius:99px;padding:3px 9px;white-space:nowrap}
.icon-btn{width:34px;height:34px;border-radius:var(--r-ctl);display:grid;place-items:center;color:var(--text-2);border:1px solid transparent;transition:background var(--t-fast),color var(--t-fast)}
.icon-btn:hover{background:var(--surface-3);color:var(--text)}
.top .mobile-only{display:none}
.content{padding:24px 28px 56px;width:100%;max-width:1440px}

.bottom-nav{display:none}


/* ---------- типографика экрана ---------- */
.page-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.page-head .date{font-size:13px;color:var(--text-2);margin-bottom:6px}
.h1{font:600 24px/1.15 var(--display);letter-spacing:-.025em}
.h1 em{font-style:normal;color:var(--down)}
.h1 i{font-style:normal;color:var(--warn)}
.h2{font:600 14px/1.3 var(--font);display:flex;align-items:center;gap:8px}
.h2 .count{color:var(--text-3);font-weight:500}
.sec-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 0 10px;min-height:28px}
.sec-head .note{font-size:12.5px;color:var(--text-3)}
.sec-head .note.bad{color:var(--down);font-weight:500}
.sec-head .note.warn{color:var(--warn);font-weight:500}

/* ---------- кнопки, поле, сегмент ---------- */
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:32px;padding:0 12px;border-radius:var(--r-ctl);font-size:13px;font-weight:600;white-space:nowrap;border:1px solid var(--line-2);background:var(--surface);color:var(--text);transition:background var(--t-fast),border-color var(--t-fast),transform 80ms}
.btn:hover{border-color:var(--text-3);background:var(--surface-2)}
.btn:active{transform:translateY(1px)}
.btn.primary{background:var(--lime);border-color:#17372c;color:#17372c;box-shadow:2px 2px 0 #17372c}
.btn.primary:hover{background:var(--lime-2)}
.btn.primary:active{box-shadow:0 0 0 #17372c;transform:translate(2px,2px)}
:root[data-theme="dark"] .btn.primary{border-color:var(--lime);box-shadow:none}
.btn.ghost{border-color:transparent;background:transparent;color:var(--text-2)}
.btn.ghost:hover{background:var(--surface-3);color:var(--text)}
.btn.danger{color:var(--down);border-color:var(--down-line)}
.btn.danger:hover{background:var(--down-bg)}
.btn.sm{height:28px;padding:0 10px;font-size:12.5px}
.btn[disabled]{opacity:.45;pointer-events:none}
.btn svg{width:15px;height:15px}

.field{display:flex;align-items:center;gap:8px;height:36px;padding:0 10px;border:1px solid var(--line-2);border-radius:var(--r-ctl);background:var(--surface);color:var(--text-3);transition:border-color var(--t-fast),box-shadow var(--t-fast)}
.field input{flex:1;min-width:0;border:0;outline:0;background:transparent;color:var(--text);font-size:14px}
.field input::placeholder{color:var(--text-3)}
.field:focus-within{border-color:var(--text);box-shadow:0 0 0 3px color-mix(in srgb,var(--lime) 55%,transparent)}
.field.error{border-color:var(--down)}
.field-hint{font-size:12px;color:var(--text-3);margin-top:6px}
.field-hint.error{color:var(--down)}

.seg{display:inline-flex;padding:2px;border-radius:var(--r-ctl);background:var(--surface-3);border:1px solid var(--line)}
.seg button{height:26px;padding:0 10px;border-radius:6px;font-size:12.5px;font-weight:500;color:var(--text-2);transition:background var(--t-fast),color var(--t-fast);white-space:nowrap}
.seg button:hover{color:var(--text)}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--text);box-shadow:0 0 0 1px var(--line-2)}
.seg .n{color:var(--text-3);margin-left:4px}

/* ---------- плашка состояния ---------- */
.badge{display:inline-flex;align-items:center;gap:6px;height:22px;padding:0 8px;border-radius:6px;font-size:12px;font-weight:600;white-space:nowrap}
.badge::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.badge.down{background:var(--down-bg);color:var(--down);box-shadow:inset 0 0 0 1px var(--down-line)}
.badge.warn{background:var(--warn-bg);color:var(--warn);box-shadow:inset 0 0 0 1px var(--warn-line)}
.badge.soon{background:var(--surface-3);color:var(--text-2);font-weight:500}
.badge.soon::before{display:none}
.badge.live{background:var(--lime);color:#17372c}
.badge.live::before{background:#17372c}
.quiet{font-size:12px;color:var(--text-3);white-space:nowrap}
.quiet.ok::before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--ok);margin:0 6px 1px 0;vertical-align:middle;opacity:.8}

/* ---------- знак сервиса ---------- */
.glyph{--gh:var(--h-sys);width:36px;height:36px;border-radius:9px;display:grid;place-items:center;flex:none;color:var(--gh);background:color-mix(in srgb,var(--gh) 13%,var(--surface));box-shadow:inset 0 0 0 1px color-mix(in srgb,var(--gh) 18%,transparent)}
.glyph svg{width:22px;height:22px}
.glyph.sm{width:28px;height:28px;border-radius:7px}
.glyph.sm svg{width:17px;height:17px}
.glyph.lg{width:44px;height:44px;border-radius:11px}
.glyph.lg svg{width:26px;height:26px}
.g-money{--gh:var(--h-money)} .g-ship{--gh:var(--h-ship)} .g-mkt{--gh:var(--h-mkt)} .g-sup{--gh:var(--h-sup)} .g-arkan{--gh:var(--h-arkan)} .g-create{--gh:var(--h-create)} .g-sys{--gh:var(--h-sys)} .g-app{--gh:var(--h-app)}

/* ---------- полоса доступности ---------- */
.uptime{display:flex;align-items:center;gap:10px;min-width:0}
.bars{flex:1;display:grid;grid-template-columns:repeat(30,1fr);gap:2px;height:18px;min-width:0}
.bars i{border-radius:1.5px;background:var(--bar)}
.bars i.w{background:color-mix(in srgb,var(--warn) 45%,var(--bar))}
.bars i.w.now{background:var(--warn)}
.bars i.d{background:var(--down)}
.bars i.t{background:var(--bar-today)}
.bars i.n{background:transparent;box-shadow:inset 0 0 0 1px var(--line-2);opacity:.6}
.uptime .pct{font-size:12px;color:var(--text-3);min-width:46px;text-align:right}

/* ---------- плитка сервиса ---------- */
.tile{position:relative;display:flex;flex-direction:column;gap:12px;padding:14px 14px 12px;border-radius:var(--r-tile);background:var(--surface);border:1px solid var(--line);transition:transform var(--t-fast) var(--ease),border-color var(--t-fast),box-shadow var(--t-fast);min-width:0;cursor:pointer;outline-offset:3px}
.tile:hover,.tile:focus-visible{transform:translateY(-2px);border-color:var(--line-2);box-shadow:0 6px 16px -10px rgba(16,40,30,.35)}
.tile.pressed{transform:translateY(0) scale(.985);border-color:var(--text)}
.tile-top{display:flex;gap:12px;align-items:flex-start;min-width:0}
.tile-id{flex:1;min-width:0}
.tile-name{font-weight:600;font-size:14.5px;line-height:1.25;display:flex;align-items:center;gap:6px;white-space:nowrap;overflow:hidden}
.tile-name .ext{color:var(--text-3)}
.tile-slot{position:relative;height:18px;margin-top:3px}
.tile-desc,.tile-links{position:absolute;inset:0;font-size:12.5px;line-height:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;transition:opacity var(--t-fast),transform var(--t-fast)}
.tile-desc{color:var(--text-2)}
.tile-links{display:flex;gap:12px;opacity:0;transform:translateY(3px)}
.tile-links a{color:var(--text);font-weight:600;border-bottom:1px solid var(--line-2)}
.tile-links a:hover{border-color:var(--text)}
.tile:hover .tile-desc,.tile:focus-within .tile-desc{opacity:0}
.tile:hover .tile-links,.tile:focus-within .tile-links{opacity:1;transform:none}
.tile-kpi{flex:none;display:flex;align-items:baseline;gap:6px;white-space:nowrap}
.tile-kpi b{font:600 17px/1 var(--display);letter-spacing:-.02em}
.tile-kpi span{font-size:12px;color:var(--text-2)}
.tile-open{position:absolute;right:12px;top:12px;opacity:0;transition:opacity var(--t-fast)}
.tile:hover .tile-open,.tile:focus-within .tile-open{opacity:1}
.tile-foot{display:flex;flex-direction:column;gap:8px;margin-top:auto}
.ext-line{height:14px;background:repeating-linear-gradient(90deg,var(--line-2) 0 4px,transparent 4px 8px) center/100% 1px no-repeat}
.tile-line{display:flex;align-items:center;gap:8px;min-height:22px}
.tile-line .tile-kpi,.tile-line>.pct:first-child{margin-right:auto}
.tile-line>.pct:first-child{margin-right:0}
.tile-line>.quiet{margin-right:auto}
.tile-line .pct{font-size:12px;color:var(--text-3)}
.tile-line .badge{margin-left:auto}
.tile-foot .bars{flex:none;height:14px}
.tile-ext{flex:1;font-size:12px;color:var(--text-3);display:flex;align-items:center;gap:6px;height:22px}
.tile-ext::before{content:"";flex:1;order:2;height:1px;background:repeating-linear-gradient(90deg,var(--line-2) 0 3px,transparent 3px 6px)}
.tile-ext span{order:1}
.tile.is-down{border-color:var(--down-line);background:linear-gradient(var(--down-bg),var(--down-bg)),var(--surface)}
.tile.is-warn{border-color:var(--warn-line)}
.tile.is-nodata .tile-name{color:var(--text-2)}
.tile.is-nodata .glyph{filter:saturate(.2);opacity:.8}

/* компактная плитка (B, C) */
.chip{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:10px;background:var(--surface);border:1px solid var(--line);min-width:0;transition:border-color var(--t-fast),transform var(--t-fast)}
.chip:hover{border-color:var(--line-2);transform:translateY(-1px)}
.chip .t{min-width:0;flex:1}
.chip .t b{display:block;font-weight:600;font-size:13px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chip .t span{display:block;font-size:12px;color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chip.is-down{border-color:var(--down-line);background:linear-gradient(var(--down-bg),var(--down-bg)),var(--surface)}
.chip.is-down .t span{color:var(--down);font-weight:600}
.chip.is-warn{border-color:var(--warn-line)}
.chip.is-warn .t span{color:var(--warn);font-weight:600}

/* док знаков (B) */
.dock{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:4px}
.dock a{min-width:0;position:relative;display:flex;flex-direction:column;align-items:center;gap:6px;padding:8px 2px 6px;border-radius:10px;font-size:11.5px;color:var(--text-2);text-align:center;line-height:1.15;transition:background var(--t-fast)}
.dock a:hover{background:var(--surface-3);color:var(--text)}
.dock a span{max-width:100%;overflow:hidden;font-size:10.5px;line-height:1.2;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:2.4em}
.dock a .flag{position:absolute;top:6px;right:14px;width:10px;height:10px;border-radius:50%;border:2px solid var(--surface)}
.dock a .flag.down{background:var(--down)} .dock a .flag.warn{background:var(--warn)}
.dock a .flag.ext{background:var(--surface);border:0;width:auto;height:auto;color:var(--text-3);top:4px;right:10px}

/* ---------- показатель с мини-графиком ---------- */
.metric{position:relative;padding:14px 16px 12px;border-radius:var(--r-tile);background:var(--surface);border:1px solid var(--line);display:grid;grid-template-columns:1fr auto;grid-template-rows:auto auto auto;column-gap:12px;min-width:0}
.metric .lbl{grid-column:1/-1;font-size:13px;color:var(--text-2);display:flex;align-items:center;gap:6px;white-space:nowrap}
.metric .val{font:600 28px/1.1 var(--display);letter-spacing:-.03em;margin-top:8px;align-self:end}
.metric .sub{grid-column:1;font-size:12.5px;color:var(--text-3);margin-top:4px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.metric .sub b{color:var(--text);font-weight:600}
.metric .spark{grid-column:2;grid-row:2/4;align-self:end;width:104px;height:38px;color:var(--text)}
.metric .delta{font-size:12px;font-weight:600;padding:1px 6px;border-radius:5px;background:var(--surface-3);color:var(--text-2)}
.metric .delta.up{background:color-mix(in srgb,var(--lime) 55%,var(--surface));color:#17372c}
:root[data-theme="dark"] .metric .delta.up{background:rgba(200,240,58,.16);color:var(--lime)}
.metric.is-down{border-color:var(--forest);box-shadow:var(--shadow-hard);background:var(--surface)}
:root[data-theme="dark"] .metric.is-down{border-color:var(--lime)}
.metric.is-down .val{color:var(--down)}
.metric a.more{grid-column:1/-1;margin-top:8px;font-size:12.5px;font-weight:600;color:var(--text);display:flex;gap:6px;align-items:center}
.spark path.line{fill:none;stroke:currentColor;stroke-width:1.6;stroke-linejoin:round;stroke-linecap:round}
.spark path.area{fill:color-mix(in srgb,var(--lime) 30%,transparent);stroke:none}
:root[data-theme="dark"] .spark path.area{fill:rgba(200,240,58,.1)}
.spark circle.tip{fill:var(--lime);stroke:#17372c;stroke-width:1.5}
:root[data-theme="dark"] .spark circle.tip{stroke:var(--lime)}

@keyframes draw{to{stroke-dashoffset:0}}
@keyframes fade{to{opacity:1}}

/* ---------- строка события ---------- */
.events{display:flex;flex-direction:column}
.event{display:grid;grid-template-columns:42px 12px 1fr;gap:8px;padding:9px 0;border-top:1px solid var(--line);font-size:13px;align-items:start}
.event:first-child{border-top:0}
.event time{font-size:12px;color:var(--text-3);padding-top:1px}
.event .mk{width:8px;height:8px;margin-top:5px;border-radius:2px;background:var(--bar-today)}
.event .mk.down{background:var(--down);border-radius:50%}
.event .mk.warn{background:var(--warn);border-radius:50%}
.event .mk.ship{background:var(--lime);box-shadow:0 0 0 1px #17372c}
.event .mk.past{background:var(--down);border-radius:50%;opacity:.45}
.event .mk.ok{background:transparent;box-shadow:inset 0 0 0 1.5px var(--text-3)}
.event b{font-weight:600}
.event p{color:var(--text-2);line-height:1.4}
.event p small{display:block;color:var(--text-3);font-size:12px;margin-top:1px}
.event a{border-bottom:1px solid var(--line-2)}

/* ---------- карточка-контейнер ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-tile);padding:14px 16px}
.card.flat{background:transparent}

/* ---------- таблица ---------- */
.table{width:100%;border-collapse:separate;border-spacing:0;font-size:13.5px;background:var(--surface);border:1px solid var(--line);border-radius:var(--r-tile);overflow:hidden}
.table th{font-size:12px;font-weight:500;color:var(--text-3);text-align:left;padding:0 14px;height:36px;background:var(--surface-2);border-bottom:1px solid var(--line);white-space:nowrap}
.table td{padding:0 14px;height:44px;border-bottom:1px solid var(--line);white-space:nowrap}
.table tr:last-child td{border-bottom:0}
.table tbody tr{transition:background var(--t-fast)}
.table tbody tr:hover{background:var(--surface-2)}
.table .r{text-align:right}
.table .person b{font-weight:600}
.table .person span{color:var(--text-3);margin-left:6px;font-size:12.5px}
.dotlabel{display:inline-flex;align-items:center;gap:6px;font-size:12.5px;color:var(--text-2)}
.dotlabel::before{content:"";width:6px;height:6px;border-radius:50%;background:var(--ok)}
.dotlabel.off::before{background:transparent;box-shadow:inset 0 0 0 1.5px var(--text-3)}
.dotlabel.off{color:var(--text-3)}
.svc-stack{display:inline-flex;gap:3px}
.svc-stack .glyph{width:22px;height:22px;border-radius:5px}
.svc-stack .glyph svg{width:14px;height:14px}

/* ---------- пустое состояние ---------- */
.empty{display:flex;flex-direction:column;align-items:center;text-align:center;gap:6px;padding:28px 20px;border:1px dashed var(--line-2);border-radius:var(--r-tile);color:var(--text-2)}
.empty .pict{width:44px;height:44px;border-radius:11px;display:grid;place-items:center;background:var(--surface-3);color:var(--text-3);margin-bottom:6px}
.empty b{color:var(--text);font-weight:600}
.empty p{font-size:13px;max-width:280px}
.empty .btn{margin-top:8px}

/* ---------- тост ---------- */
.toasts{position:fixed;right:20px;bottom:20px;z-index:90;display:flex;flex-direction:column;gap:8px;pointer-events:none}
.toast{pointer-events:auto;display:flex;align-items:center;gap:10px;min-width:280px;max-width:380px;padding:10px 12px 10px 12px;border-radius:10px;background:#17372c;color:#eef3e6;font-size:13px;box-shadow:var(--shadow-pop);animation:toast-in 160ms var(--ease)}
:root[data-theme="dark"] .toast{background:#e9efe2;color:#17372c}
.toast .ic{width:20px;height:20px;border-radius:6px;background:var(--lime);color:#17372c;display:grid;place-items:center;flex:none}
.toast .ic.bad{background:#ff7a62}
.toast b{font-weight:600}
.toast button{margin-left:auto;font-weight:600;color:var(--lime);font-size:12.5px;padding:4px 6px;border-radius:6px}
:root[data-theme="dark"] .toast button{color:#17372c;text-decoration:underline}
@keyframes toast-in{from{opacity:0;transform:translateY(6px)}}
.toast.static{animation:none;position:static}

/* ---------- ⌘K ---------- */
.k-scrim{position:fixed;inset:0;z-index:80;background:rgba(10,24,18,.42);opacity:0;transition:opacity var(--t-mid) var(--ease);display:flex;justify-content:center;align-items:flex-start;padding:12vh 16px 16px}
.k-scrim.open{opacity:1}
.k{width:min(640px,100%);background:var(--surface);border-radius:14px;border:1px solid var(--line-2);box-shadow:var(--shadow-pop);overflow:hidden;transform:scale(.98);transition:transform var(--t-mid) var(--ease);display:flex;flex-direction:column;max-height:min(560px,76vh)}
.k-scrim.open .k{transform:scale(1)}
.k-in{display:flex;align-items:center;gap:10px;padding:0 14px;height:54px;border-bottom:1px solid var(--line)}
.k-in svg{color:var(--text-3)}
.k-in input{flex:1;min-width:0;border:0;outline:0;background:transparent;font-size:15.5px;color:var(--text)}
.k-in input::placeholder{color:var(--text-3)}
.k-in .kbd{color:var(--text-3)}
.k-list{overflow-y:auto;padding:6px}
.k-grp{font-size:12px;color:var(--text-3);padding:10px 10px 4px}
.k-item{display:flex;align-items:center;gap:10px;height:44px;padding:0 10px;border-radius:9px;cursor:pointer;position:relative}
.k-item .glyph{width:28px;height:28px;border-radius:7px}
.k-item .glyph svg{width:17px;height:17px}
.k-item .tx{flex:1;min-width:0;display:flex;align-items:baseline;gap:8px;white-space:nowrap;overflow:hidden}
.k-item .tx b{font-weight:600;font-size:13.5px}
.k-item .tx span{font-size:12.5px;color:var(--text-3);overflow:hidden;text-overflow:ellipsis}
.k-item .tx mark{background:color-mix(in srgb,var(--lime) 60%,transparent);color:inherit;border-radius:2px}
.k-item .go{font-size:12px;color:var(--text-3);opacity:0}
.k-item[aria-selected="true"] .go{opacity:1}
.k-foot{display:flex;gap:16px;padding:8px 14px;border-top:1px solid var(--line);font-size:12px;color:var(--text-3);background:var(--surface-2)}
.k-foot .kbd{height:18px;font-size:11px;margin-right:4px}
.k-empty{padding:28px 16px;text-align:center;color:var(--text-2);font-size:13px}

/* ---------- движение ---------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation:none!important;transition:none!important}
  .spark.draw path.line{stroke-dashoffset:0}
}

/* ---------- телефон ---------- */
@media (max-width:860px){
  .app{grid-template-columns:minmax(0,1fr)}
  .side{display:none}
  .top{padding:0 16px;gap:8px}
  .top-search,.top .crumbs .sep,.top .crumbs .muted-crumb{display:none}
  .top .mobile-only{display:grid}
  .top .crumbs b{font:600 15px var(--display)}
  .demo{margin-left:auto}
  .content{padding:16px 16px 96px}
  .h1{font-size:19px}
  .bottom-nav{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;z-index:30;background:var(--side);padding:6px 8px calc(6px + env(safe-area-inset-bottom));border-top:1px solid var(--side-line)}
  .bottom-nav a,.bottom-nav button{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:11px;color:var(--side-muted);padding:6px 0;border-radius:8px;position:relative}
  .bottom-nav a[aria-current="page"]{color:#fff}
  .bottom-nav a[aria-current="page"] svg{color:var(--lime)}
  .bottom-nav .search{background:var(--lime);color:#17372c;width:48px;height:40px;justify-self:center;border-radius:10px;padding:0;justify-content:center;margin-top:2px}
  .bottom-nav .dot{position:absolute;top:4px;right:calc(50% - 14px);width:7px;height:7px;border-radius:50%;background:#ff7a62}
  .toasts{left:16px;right:16px;bottom:76px}
  .toast{min-width:0;max-width:none}
  .k-scrim{padding:10px}
  .k{max-height:calc(100vh - 20px)}
  .k-foot{display:none}
}

/* ---------- строка дела (лента B) ---------- */
.tasks{display:flex;flex-direction:column;gap:8px}
.task{display:grid;grid-template-columns:36px 76px minmax(0,1fr) auto;align-items:center;gap:14px;padding:12px 14px;border-radius:var(--r-tile);background:var(--surface);border:1px solid var(--line);transition:border-color var(--t-fast),transform var(--t-fast) var(--ease)}
.task:hover{border-color:var(--line-2);transform:translateY(-1px)}
.task.pressed{transform:scale(.99);border-color:var(--text)}
.task .n{font:600 22px/1 var(--display);letter-spacing:-.03em;text-align:right;white-space:nowrap}
.task .n small{font:500 12px var(--font);color:var(--text-3);letter-spacing:0;margin-left:2px}
.task .body{min-width:0}
.task .ttl{font-weight:600;font-size:14.5px;line-height:1.3}
.task .where{font-size:12.5px;color:var(--text-2);margin-top:3px;display:flex;align-items:center;gap:6px;flex-wrap:wrap}
.task .where .path{display:inline-flex;align-items:center;gap:4px;color:var(--text)}
.task .where .path svg{color:var(--text-3)}
.task .where .due{color:var(--text-3)}
.task .where .due.soon{color:var(--warn);font-weight:600}
.task .hint{margin-top:8px;font-size:13px;color:var(--text-2);max-width:62ch}
.task .acts{display:flex;gap:6px;align-items:center}
.task.is-down{border-color:var(--forest);box-shadow:var(--shadow-hard);background:linear-gradient(var(--down-bg),var(--down-bg)),var(--surface);align-items:start}
:root[data-theme="dark"] .task.is-down{border-color:var(--lime)}
.task.is-down .n{color:var(--down)}
.task.is-warn .n{color:var(--warn)}
.task.done{background:transparent;border-style:dashed;padding:9px 14px;grid-template-columns:20px minmax(0,1fr) auto}
.task.done .ttl{font-weight:500;font-size:13.5px;color:var(--text-2)}
.task.done .ck{color:var(--ok)}
.task.done:hover{transform:none}

/* ---------- поток и узел (C) ---------- */
.flow{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:14px 16px 16px}
.flow-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:14px}
.flow-head .h2{font-size:14.5px}
.flow-track{display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:28px}
.node{position:relative;display:flex;flex-direction:column;gap:10px;padding:12px;border-radius:11px;background:var(--surface-2);border:1px solid var(--line);min-width:0}
.node:not(:last-child)::after{content:"";position:absolute;top:30px;right:-29px;width:28px;height:2px;background:var(--line-2)}
.node:not(:last-child)::before{content:"";position:absolute;top:26px;right:-28px;width:6px;height:6px;border-top:2px solid var(--line-2);border-right:2px solid var(--line-2);transform:rotate(45deg);z-index:1}
.node.to-bad::after{background:repeating-linear-gradient(90deg,var(--down) 0 4px,transparent 4px 7px)}
.node.to-bad::before{border-color:var(--down)}
.node-step{display:flex;align-items:center;justify-content:space-between;gap:8px;font-size:12px;color:var(--text-3);font-weight:500;min-height:22px}
.node-step b{color:var(--text);font-weight:600;font-size:13px}
.node-count{display:flex;align-items:baseline;gap:6px;min-width:0}
.node-count b{font:600 24px/1 var(--display);letter-spacing:-.03em}
.node-count span{font-size:12.5px;color:var(--text-2);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.node-svcs{display:flex;flex-direction:column;gap:2px;margin:0 -6px -6px}
.node-svc{display:flex;align-items:center;gap:8px;height:32px;padding:0 6px;border-radius:7px;font-size:12.5px;min-width:0;transition:background var(--t-fast)}
.node-svc:hover{background:var(--surface-3)}
.node-svc .glyph{width:22px;height:22px;border-radius:6px}
.node-svc .glyph svg{width:14px;height:14px}
.node-svc b{font-weight:600;white-space:nowrap}
.node-svc span{color:var(--text-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
.node-svc.bad b{color:var(--down)} .node-svc.amber b{color:var(--warn)}
.node-svc .st{margin-left:auto;width:7px;height:7px;border-radius:50%;flex:none}
.node-svc.bad .st{background:var(--down)} .node-svc.amber .st{background:var(--warn)}
.node.is-down{background:var(--surface);border-color:var(--forest);box-shadow:var(--shadow-hard)}
:root[data-theme="dark"] .node.is-down{border-color:var(--lime)}
.node.is-warn{background:var(--surface);border-color:var(--warn-line)}
.node.pressed{border-color:var(--text)}

@media (max-width:860px){
  .task{grid-template-columns:32px minmax(0,1fr) auto;gap:10px;padding:12px}
  .task .glyph{width:32px;height:32px}
  .task .n{grid-column:3;grid-row:1;font-size:18px}
  .task .body{grid-column:2;grid-row:1}
  .task .acts{grid-column:1/-1;grid-row:2;justify-content:flex-start}
  .task .acts:empty{display:none}
  .task.done{grid-template-columns:20px minmax(0,1fr)}
  .task.done .faint{display:none}
  .flow-track{grid-auto-flow:row;gap:22px}
  .node:not(:last-child)::after{top:auto;right:auto;left:28px;bottom:-21px;width:2px;height:20px}
  .node:not(:last-child)::before{top:auto;right:auto;left:25px;bottom:-21px;transform:rotate(135deg)}
  .node.to-bad::after{background:repeating-linear-gradient(180deg,var(--down) 0 4px,transparent 4px 7px)}
}

/* =========================================================
   ДВИЖЕНИЕ · только transform и opacity; зациклен только пульс сбоя
   ========================================================= */
:root{
  --d-1:120ms; --d-2:180ms; --d-3:260ms; --d-4:400ms;
  --out:cubic-bezier(.16,1,.3,1);          /* быстрый выход: появления */
  --spring:cubic-bezier(.34,1.45,.64,1);    /* пружина: нажатия, палитра, индикатор */
  --stagger:24ms;
}

/* загрузка: скелетоны 360 мс → каскад (сдвиг 8 px + проявление) */
.is-loading :is(.tile,.metric,.task,.node,.incident,.chip){background:var(--surface)!important;border-color:var(--line)!important;box-shadow:none!important;
  background-image:linear-gradient(var(--surface-3),var(--surface-3)),linear-gradient(var(--surface-3),var(--surface-3)),linear-gradient(var(--surface-3),var(--surface-3))!important;
  background-size:36px 36px,42% 10px,64% 8px!important;background-position:14px 14px,62px 17px,62px 35px!important;background-repeat:no-repeat!important}
.is-loading :is(.tile,.metric,.task,.node,.incident,.chip)>*{opacity:0}
.is-loading .events,.is-loading .dock,.is-loading .mini-m{opacity:0}
.ready .cascade>*{animation:rise var(--d-3) var(--out) both;animation-delay:calc(var(--i,0) * var(--stagger))}
.ready :is(.tile,.metric,.task,.node,.incident,.chip)>*{animation:fade var(--d-2) var(--out) both}
.ready .events,.ready .dock,.ready .mini-m{animation:fade var(--d-3) var(--out) both}
.static .cascade>*,.static :is(.tile,.metric,.task,.node,.incident,.chip)>*,.static .events,.static .dock,.static .mini-m,.static .bars i,.static .spark *{animation:none!important}
.static .spark path.line{stroke-dashoffset:0!important}
@keyframes rise{from{opacity:0;transform:translateY(8px)}}
@keyframes fade{from{opacity:0}}

/* мини-графики дорисовываются слева направо; полосы набегают столбик за столбиком */
.spark.draw path.line{stroke-dasharray:var(--len,400);stroke-dashoffset:var(--len,400)}
.ready .spark.draw path.line{animation:draw var(--d-4) var(--out) forwards;animation-delay:calc(var(--i,0) * var(--stagger) + 120ms)}
.spark.draw path.area,.spark.draw circle{opacity:0}
.ready .spark.draw path.area,.ready .spark.draw circle{animation:fadein var(--d-2) forwards;animation-delay:calc(var(--i,0) * var(--stagger) + 420ms)}
@keyframes draw{to{stroke-dashoffset:0}}
@keyframes fadein{to{opacity:1}}
.bars i{transform-origin:50% 100%}
.ready .bars i{animation:bar var(--d-3) var(--out) both;animation-delay:calc(var(--i,0) * var(--stagger) + var(--b,0) * 9ms + 80ms)}
@keyframes bar{from{transform:scaleY(.15);opacity:0}}

/* наведение и нажатие */
.glyph svg{transition:transform var(--d-3) var(--spring)}
:is(.tile,.chip,.task,.incident,.node-svc,.dock a,.k-item[aria-selected="true"]):hover .glyph svg,.tile:focus-visible .glyph svg,.k-item[aria-selected="true"] .glyph svg{transform:rotate(-8deg) translateY(-.5px)}
.tile{transition:transform var(--d-2) var(--out),border-color var(--d-1),box-shadow var(--d-2),opacity var(--d-2)}
.tile-desc,.tile-links,.tile-open{transition-duration:var(--d-1)}
.btn,.icon-btn,.side-search,.seg button,.bottom-nav .search,.demo-switch{transition:transform var(--d-2) var(--spring),background var(--d-1),border-color var(--d-1),color var(--d-1),box-shadow var(--d-1)}
.btn:active,.icon-btn:active,.side-search:active,.seg button:active,.bottom-nav .search:active,.demo-switch:active{transform:scale(.97);transition-duration:60ms}
.btn.primary:active{transform:scale(.97);box-shadow:1px 1px 0 #17372c}

/* активный пункт: один лаймовый индикатор переезжает */
.nav-main{position:relative}
.nav-main a{position:relative;z-index:1}
.nav-main a[aria-current="page"]{background:transparent}
.nav-ind{position:absolute;left:0;right:0;top:0;height:34px;border-radius:var(--r-ctl);background:var(--lime);transition:transform var(--d-3) var(--spring);z-index:0;pointer-events:none}
.nav a{transition:background var(--d-1),color var(--d-2)}
.bn-ind{display:none}

/* смена раздела: короткий сдвиг 6 px */
.content{transition:opacity var(--d-1) var(--out),transform var(--d-1) var(--out)}
.content.swap-out{opacity:0;transform:translateY(6px)}
.content.swap-in{opacity:0;transform:translateY(-6px);transition:none}
.tiles-all{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:10px}

/* ⌘K: затемнение + выезд 0.98→1 пружиной; закрытие быстрее */
.k-scrim{transition:opacity var(--d-2) var(--out)}
.k{transition:transform var(--d-3) var(--spring),opacity var(--d-2) var(--out);opacity:0}
.k-scrim.open .k{opacity:1}
.k-scrim.closing{transition-duration:90ms}
.k-scrim.closing .k{transition:transform 90ms ease-in,opacity 90ms ease-in;transform:scale(.985)}
.k-list{position:relative}
.k-item{z-index:1}
.k-hl{position:absolute;left:6px;right:6px;top:0;height:44px;border-radius:9px;background:var(--surface-3);transition:transform var(--d-1) var(--out);pointer-events:none}
.k-hl::before{content:"";position:absolute;left:0;top:10px;bottom:10px;width:3px;border-radius:2px;background:var(--lime);box-shadow:0 0 0 1px rgba(23,55,44,.25)}
.k-grab{display:none}

/* пульс — только у сбоя */
.badge.down{position:relative}
.badge.down::after,.event .mk.down::after,.dock .flag.down::after,.alert-dot::after,.node-svc.bad .st::after,.ds-dot::after{content:"";position:absolute;border-radius:50%;border:1.5px solid currentColor;animation:pulse 1.8s var(--out) infinite;pointer-events:none}
.badge.down::after{left:8px;top:50%;width:6px;height:6px;margin-top:-3px;box-sizing:border-box}
.event .mk.down,.dock .flag.down,.alert-dot,.node-svc.bad .st{position:relative}
.event .mk.down{color:var(--down)} .dock .flag.down{color:var(--down);position:absolute} .alert-dot{color:#ff7a62;position:relative} .node-svc.bad .st{color:var(--down)}
.event .mk.down::after,.alert-dot::after,.node-svc.bad .st::after{inset:-1px}
.dock .flag.down::after{inset:-3px}
@keyframes pulse{0%{transform:scale(1);opacity:.75}70%,100%{transform:scale(2.6);opacity:0}}

/* новое событие въезжает сверху */
.event.fresh{animation:drop var(--d-3) var(--out) both;animation-delay:120ms}
@keyframes drop{from{opacity:0;transform:translateY(-10px)}}
::view-transition-group(*){animation-duration:var(--d-3);animation-timing-function:var(--out)}
::view-transition-old(root),::view-transition-new(root){animation-duration:var(--d-3)}

/* тост: выезд + полоса времени */
.toast{position:relative;overflow:hidden;animation:toast-in var(--d-3) var(--spring)}
.toast.out{opacity:0;transform:translateY(6px);transition:opacity 140ms,transform 140ms}
.toast-bar{position:absolute;left:0;right:0;bottom:0;height:2px;background:var(--lime);transform-origin:0 50%;animation:shrink linear forwards}
:root[data-theme="dark"] .toast-bar{background:#17372c}
@keyframes shrink{to{transform:scaleX(0)}}
@keyframes toast-in{from{opacity:0;transform:translateY(10px) scale(.98)}}

/* переход в сервис */
.progress{position:fixed;left:0;top:0;width:100%;height:3px;background:var(--lime);z-index:100;transform:scaleX(0);transform-origin:0 50%;opacity:0;box-shadow:0 1px 0 rgba(23,55,44,.25)}
.progress.run{opacity:1;transform:scaleX(.8);transition:transform 900ms var(--out)}
.progress.run.done{transform:scaleX(1);opacity:0;transition:transform var(--d-2) var(--out),opacity var(--d-2) 120ms}
.content.leaving :is(.tile,.metric,.task,.node,.incident,.chip,.card,.flow,.sec-head,.page-head):not(.going){opacity:.35;transition:opacity var(--d-2) var(--out)}
.content.leaving .flow:has(.going){opacity:1}
.going{position:relative;z-index:5;transform:scale(1.03)!important;border-color:var(--text)!important;box-shadow:0 18px 40px -16px rgba(16,40,30,.45)!important;transition:transform var(--d-3) var(--spring),box-shadow var(--d-3)!important}
.opening{position:fixed;inset:0 0 0 var(--side-w);z-index:60;background:var(--canvas);display:grid;place-items:center;opacity:0;transition:opacity var(--d-2) var(--out)}
.opening.show{opacity:1}
.op-in{display:flex;flex-direction:column;align-items:center;gap:10px;transform:translateY(6px);transition:transform var(--d-3) var(--out)}
.opening.show .op-in{transform:none}
.op-in .glyph{width:56px;height:56px;border-radius:14px}
.op-in .glyph svg{width:30px;height:30px}
.op-in b{font:600 18px var(--display);letter-spacing:-.02em;margin-top:6px}
.op-in span{font-size:13px;color:var(--text-2)}

/* демо-переключатель (только в черновике) */
.demo-switch{position:fixed;left:12px;width:calc(var(--side-w) - 24px);justify-content:center;bottom:72px;z-index:40;display:inline-flex;align-items:center;gap:8px;height:34px;padding:0 12px;border-radius:99px;background:var(--surface);border:1px dashed var(--line-2);font-size:12.5px;font-weight:600;color:var(--text);box-shadow:0 6px 18px -10px rgba(16,40,30,.4)}
.demo-switch:hover{border-style:solid}
.ds-dot{position:relative;width:8px;height:8px;border-radius:50%;background:var(--down);color:var(--down)}
.ds-dot::after{inset:-1px}
.demo-switch.is-ok .ds-dot{background:var(--ok)}
.demo-switch.is-ok .ds-dot::after{display:none}

@media (max-width:860px){
  .opening{inset:0}
  .demo-switch{left:auto;width:auto;right:12px;bottom:76px;height:32px;font-size:12px}
  .bn-ind{display:block;position:absolute;top:0;left:0;width:28px;height:3px;border-radius:0 0 3px 3px;background:var(--lime);transition:transform var(--d-3) var(--spring)}
  .bottom-nav{position:fixed}
  /* палитра — лист снизу */
  .k-scrim{align-items:flex-end;padding:0}
  .k{width:100%;max-height:88vh;border-radius:16px 16px 0 0;transform:translateY(100%);opacity:1;transition:transform var(--d-3) var(--out)}
  .k-scrim.open .k{transform:none}
  .k-scrim.closing .k{transform:translateY(100%);transition:transform 160ms ease-in}
  .k-grab{display:block;width:36px;height:4px;border-radius:2px;background:var(--line-2);margin:8px auto 0}
}

@media (prefers-reduced-motion:reduce){
  *,*::before,*::after,::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation:none!important;transition:none!important}
  .spark.draw path.line{stroke-dashoffset:0}
  .spark.draw path.area,.spark.draw circle{opacity:1}
}

/* =========================================================
   РАУНД 2 · рабочие экраны (класс .r2 на <html>, архив A/B/C не меняется)
   ========================================================= */
:root.r2:not([data-theme="dark"]){--bar:rgba(23,55,44,.3);--bar-today:rgba(23,55,44,.58)}
.r2 .metric .sub{white-space:normal;line-height:1.35}
.r2 .metric{grid-template-rows:auto auto 1fr auto}
.ext-links{display:flex;gap:6px;flex-wrap:wrap}
.ext-links .btn{height:26px;padding:0 9px;font-size:12px}
.ext-links .btn svg{width:12px;height:12px;color:var(--text-3)}
.tile.is-unknown .bars{opacity:.5}
.tag-ro{font-size:11px;font-weight:500;color:var(--text-2);background:var(--surface-3);border-radius:5px;padding:1px 6px;margin-left:2px}
.badge.stale{background:var(--surface-3);color:var(--text-2);box-shadow:inset 0 0 0 1px var(--line-2)}
.badge.stale::before{background:var(--text-3)}
.metric.is-stale .val{color:var(--text-3)}
button.demo{cursor:pointer;display:inline-flex;align-items:center;gap:4px;font:inherit;font-size:11.5px;color:var(--text-3);background:transparent;transition:border-color var(--d-1),color var(--d-1),transform var(--d-2) var(--spring)}
button.demo:hover{border-style:solid;color:var(--text)}
button.demo:active{transform:scale(.97)}
button.demo.is-nomon{color:var(--text-2);border-style:solid}
.demo-pop{position:fixed;z-index:85;width:240px;padding:6px;background:var(--surface);border:1px solid var(--line-2);border-radius:12px;box-shadow:var(--shadow-pop);opacity:0;transform:translateY(-4px) scale(.98);transform-origin:100% 0;transition:opacity var(--d-2) var(--out),transform var(--d-2) var(--spring)}
.demo-pop.open{opacity:1;transform:none}
.demo-pop .dp-h{font-size:12px;color:var(--text-3);padding:6px 8px 4px}
.demo-pop .dp-f{font-size:11.5px;color:var(--text-3);padding:6px 8px 4px;border-top:1px solid var(--line);margin-top:4px}
.demo-pop button{display:flex;align-items:center;gap:10px;width:100%;height:36px;padding:0 8px;border-radius:8px;font-size:13.5px;text-align:left;transition:background var(--d-1)}
.demo-pop button:hover{background:var(--surface-3)}
.demo-pop button i{width:14px;height:14px;border-radius:50%;box-shadow:inset 0 0 0 1.5px var(--line-2);flex:none;transition:box-shadow var(--d-2) var(--spring)}
.demo-pop button[aria-checked="true"] i{box-shadow:inset 0 0 0 4.5px var(--text);background:var(--lime)}
.banner{display:flex;align-items:center;gap:12px;padding:12px 14px;border-radius:var(--r-tile);background:var(--surface-2);border:1px dashed var(--line-2);margin-bottom:20px;font-size:13.5px;color:var(--text-2)}
.banner b{color:var(--text);font-weight:600}
.banner .btn{margin-left:auto}

/* боковая панель и окно подтверждения */
.scrim{position:fixed;inset:0;z-index:70;background:rgba(10,24,18,.42);opacity:0;transition:opacity var(--d-2) var(--out)}
.scrim.open{opacity:1}
.drawer{position:fixed;top:0;right:0;bottom:0;z-index:75;width:min(440px,100%);background:var(--surface);border-left:1px solid var(--line-2);box-shadow:var(--shadow-pop);display:flex;flex-direction:column;transform:translateX(100%);transition:transform var(--d-3) var(--out)}
.drawer.open{transform:none}
.drawer.closing{transition-duration:var(--d-2);transition-timing-function:ease-in}
.drawer header{display:flex;align-items:center;justify-content:space-between;padding:16px 18px;border-bottom:1px solid var(--line)}
.drawer header b{font:600 17px var(--display);letter-spacing:-.02em}
.drawer .body{padding:18px;display:flex;flex-direction:column;gap:18px;overflow-y:auto;flex:1}
.drawer footer{display:flex;gap:8px;justify-content:flex-end;padding:14px 18px;border-top:1px solid var(--line)}
.f-lbl{display:block;font-size:12.5px;font-weight:600;margin-bottom:6px}
.roles{display:flex;flex-direction:column;gap:6px}
.roles label{display:flex;align-items:flex-start;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;cursor:pointer;transition:border-color var(--d-1),background var(--d-1)}
.roles label:hover{border-color:var(--line-2)}
.roles input{accent-color:#17372c;margin-top:3px}
.roles label:has(input:checked){border-color:var(--text);background:var(--surface-2)}
.roles b{display:block;font-size:13.5px;font-weight:600}
.roles span{display:block;font-size:12.5px;color:var(--text-3)}
.reveal{overflow:hidden;opacity:0;transform:translateY(-4px);transition:opacity var(--d-2) var(--out),transform var(--d-2) var(--out)}
.reveal.on{opacity:1;transform:none}
.reveal[hidden]{display:none}
.modal-scrim{position:fixed;inset:0;z-index:78;background:rgba(10,24,18,.42);display:grid;place-items:center;padding:16px;opacity:0;transition:opacity var(--d-2) var(--out)}
.modal-scrim.open{opacity:1}
.modal{width:min(420px,100%);background:var(--surface);border:1px solid var(--line-2);border-radius:14px;box-shadow:var(--shadow-pop);padding:18px;transform:scale(.98);opacity:0;transition:transform var(--d-3) var(--spring),opacity var(--d-2) var(--out)}
.modal-scrim.open .modal{transform:none;opacity:1}
.modal h3{font:600 17px var(--display);letter-spacing:-.02em;margin-bottom:8px}
.modal p{font-size:13.5px;color:var(--text-2)}
.modal .acts{display:flex;justify-content:flex-end;gap:8px;margin-top:18px}
.btn.danger.solid{background:var(--down);color:#fff;border-color:var(--down)}
.btn.danger.solid:hover{background:color-mix(in srgb,var(--down) 88%,#000)}

/* матрица ролей */
.matrix td,.matrix th{padding:0 10px}
.matrix th.role{text-align:center;min-width:104px}
.matrix th.role small{display:block;font-size:11px;color:var(--text-3);font-weight:400;margin-top:1px}
.matrix td.c{text-align:center}
.matrix .svc{display:flex;align-items:center;gap:8px;font-weight:500}
.matrix .svc .glyph{width:22px;height:22px;border-radius:6px}
.matrix .svc .glyph svg{width:14px;height:14px}
.lvl{display:inline-flex;align-items:center;justify-content:center;min-width:76px;height:24px;padding:0 8px;border-radius:6px;font-size:12px;font-weight:500;color:var(--text-3);transition:background var(--d-1),color var(--d-1),transform var(--d-2) var(--spring)}
.lvl:hover{background:var(--surface-3);color:var(--text)}
.lvl:active{transform:scale(.97)}
.lvl.view{color:var(--text-2);box-shadow:inset 0 0 0 1px var(--line-2)}
.lvl.work{color:var(--text);background:var(--surface-3);font-weight:600}
.lvl.admin{color:#fff;background:#17372c;font-weight:600}
:root[data-theme="dark"] .lvl.admin{background:var(--lime);color:#17372c}
.lvl.flash{animation:flash var(--d-4) var(--out)}
@keyframes flash{from{transform:scale(1.08)}}
.lock{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-3)}
.matrix tr.locked td{background:var(--surface-2)}
.twofa{font-size:12.5px;color:var(--text-2)}
.twofa.miss{color:var(--warn);font-weight:600}
.result-ok{color:var(--text-2)} .result-bad{color:var(--down);font-weight:600}
.row-off td{color:var(--text-3)}
.row-off .person b{color:var(--text-3)}
.table tr.fresh-row{animation:drop var(--d-3) var(--out)}

/* страница сервиса */
.svc-head{display:flex;align-items:flex-start;gap:18px;margin-bottom:22px;flex-wrap:wrap}
.svc-head .glyph{width:64px;height:64px;border-radius:16px}
.svc-head .glyph svg{width:34px;height:34px}
.svc-head .t{flex:1;min-width:220px}
.svc-head h1{font:600 28px/1.1 var(--display);letter-spacing:-.03em}
.svc-head p{color:var(--text-2);margin-top:6px}
.svc-head .st{display:flex;gap:10px;align-items:center;margin-top:10px;font-size:13px;color:var(--text-2);flex-wrap:wrap}
.svc-head .acts{display:flex;gap:8px;flex-wrap:wrap}
.quick{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:22px}
.quick a{display:inline-flex;align-items:center;gap:8px;height:36px;padding:0 12px;border-radius:9px;background:var(--surface);border:1px solid var(--line);font-size:13px;font-weight:600;transition:border-color var(--d-1),transform var(--d-2) var(--spring)}
.quick a:hover{border-color:var(--line-2);transform:translateY(-1px)}
.quick a svg{color:var(--text-3)}
.big-up{position:relative}
.big-up .bars{height:48px;gap:4px}
.big-up .bars i{border-radius:3px;cursor:default;transition:opacity var(--d-1)}
.big-up .bars:hover i{opacity:.55}
.big-up .bars i:hover{opacity:1}
.big-up .axis{display:flex;justify-content:space-between;font-size:11.5px;color:var(--text-3);margin-top:6px}
.day-tip{position:absolute;top:-8px;z-index:5;transform:translate(-50%,-100%);background:#17372c;color:#eef3e6;font-size:12px;padding:6px 9px;border-radius:7px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity var(--d-1)}
.day-tip.on{opacity:1}
:root[data-theme="dark"] .day-tip{background:#e9efe2;color:#17372c}
.help ol{margin:0;padding-left:18px;display:flex;flex-direction:column;gap:8px;font-size:13.5px;color:var(--text-2)}
.help ol b{color:var(--text)}
.who{display:flex;flex-direction:column}
.who div{display:flex;justify-content:space-between;gap:8px;padding:9px 0;border-top:1px solid var(--line);font-size:13px}
.who div:first-child{border-top:0}
.who span{color:var(--text-3)}

/* страница событий */
.day-h{display:flex;align-items:baseline;gap:10px;margin:22px 0 8px;font-weight:600;font-size:13.5px}
.day-h:first-child{margin-top:0}
.day-h span{font-weight:400;color:var(--text-3);font-size:12.5px}
.ev-list{background:var(--surface);border:1px solid var(--line);border-radius:var(--r-tile);padding:2px 16px}
.ev-list .event{grid-template-columns:48px 12px 1fr auto;padding:11px 0}
.ev-list .event .svc-link{display:inline-flex;align-items:center;gap:6px;font-size:12px;color:var(--text-2);height:24px;padding:0 8px 0 4px;border-radius:6px;border:1px solid var(--line)}
.ev-list .event .svc-link:hover{border-color:var(--line-2);color:var(--text)}
.ev-list .event .svc-link .glyph{width:18px;height:18px;border-radius:5px}
.ev-list .event .svc-link .glyph svg{width:12px;height:12px}

@media (max-width:860px){
  .matrix-wrap{overflow-x:auto;margin:0 -16px;padding:0 16px}
  .ev-list .event{grid-template-columns:42px 12px 1fr}
  .ev-list .event .svc-link{grid-column:3;justify-self:start}
  .svc-head h1{font-size:22px}
  .svc-head .glyph{width:52px;height:52px}
  .big-up .bars{gap:2px;height:40px}
  .banner{flex-wrap:wrap}
  .banner .btn{margin-left:0}
}
@media (prefers-reduced-motion:reduce){.drawer,.modal,.demo-pop,.reveal{transition:none!important}}
@media (max-width:860px){
  .r2 .metric .lbl{white-space:normal;flex-wrap:wrap}
  .banner>svg{display:none}
}

/* ---------- живая версия v1: вход, выход, выключенные кнопки ---------- */
.btn[disabled]{opacity:.55;cursor:not-allowed;box-shadow:none;transform:none}
.side-out{display:block;margin-top:8px;font:inherit;font-size:12px;color:var(--side-muted);background:transparent;border:1px solid var(--side-line);border-radius:6px;padding:3px 10px;cursor:pointer}
.side-out:hover{color:#fff;border-color:var(--side-muted)}
.boot-err{max-width:420px;margin:15vh auto;padding:24px;text-align:center;color:var(--text-2)}
.boot-err b{display:block;font:600 18px var(--display);color:var(--text);margin-bottom:8px}
@media (max-width:860px){.top .mobile-only{margin-left:auto}}

.login{min-height:100vh;min-height:100dvh;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.1fr);background:var(--canvas)}
.login-side{background:var(--side);display:grid;place-items:center;padding:40px}
.login-mark{width:112px;height:112px;border-radius:26px;background:var(--lime);color:#17372c;display:grid;place-items:center;box-shadow:6px 6px 0 rgba(0,0,0,.25)}
.login-mark svg{width:52px;height:52px}
.login-main{display:grid;place-items:center;padding:32px 16px}
.login-card{width:100%;max-width:400px;display:flex;flex-direction:column;gap:18px}
.login-card h1{font:600 24px/1.2 var(--display);letter-spacing:-.02em}
.login-card .field{height:44px}
.login-card .btn.primary{height:44px;font-size:14px;width:100%}
.login-step{display:flex;flex-direction:column;gap:18px}
.login-step[hidden]{display:none}
.code-boxes{display:grid;grid-template-columns:repeat(8,minmax(0,1fr));gap:6px}
.code-boxes input{height:52px;min-width:0;text-align:center;font:600 22px var(--display);border:1px solid var(--line-2);border-radius:var(--r-ctl);background:var(--surface);color:var(--text);outline:0;transition:border-color var(--t-fast),box-shadow var(--t-fast)}
.code-boxes input:focus{border-color:var(--text);box-shadow:0 0 0 3px color-mix(in srgb,var(--lime) 55%,transparent)}
.code-boxes.error input{border-color:var(--down)}
.login-msg{font-size:13px;color:var(--text-2);min-height:18px}
.login-msg.error{color:var(--down)}
.login-row{display:flex;justify-content:center;align-items:center;gap:12px;font-size:13px;color:var(--text-3)}
.login-row button{font:inherit;background:none;border:0;color:var(--text);text-decoration:underline;text-underline-offset:3px;cursor:pointer;padding:0}
.login-row button[disabled]{color:var(--text-3);text-decoration:none;cursor:default}
.login-theme{position:fixed;top:14px;right:14px}
@media (max-width:860px){
  .login{grid-template-columns:minmax(0,1fr);grid-template-rows:auto 1fr}
  .login-side{padding:14px 16px;place-items:center start}
  .login-mark{width:40px;height:40px;border-radius:10px;box-shadow:none}
  .login-mark svg{width:20px;height:20px}
  .login-main{place-items:start center;padding:32px 16px}
  .code-boxes{gap:4px}.code-boxes input{height:46px;font-size:18px}
}
}
.event p{overflow-wrap:anywhere;min-width:0}
.card .sum{display:flex;justify-content:space-between;font-size:12.5px;color:var(--text-2);padding:8px 0;border-top:1px solid var(--line)}
.card .sum:first-of-type{border-top:0}
.card .sum b{font-weight:600;color:var(--text)}
