:root{
  color-scheme:light;
  --bg:#F2F4F7; --surface:#FFFFFF; --surface2:#F7F9FB; --surface3:#EEF2F6;
  --ink:#14202C; --ink2:#55657A; --ink3:#8595A8; --line:#DFE5EC; --line2:#EDF1F5;
  --accent:#2a78d6; --accent-ink:#1c5cab; --accent-soft:#E4EEFB;
  --good:#0ca30c; --warn:#fab219; --serious:#ec835a; --crit:#d03b3b;
  --good-ink:#0a7a0a; --warn-ink:#8a5a00; --serious-ink:#9c3f1c; --crit-ink:#a52a2a;
  --good-soft:#E3F5E3; --warn-soft:#FFF3D6; --serious-soft:#FDE6DC; --crit-soft:#FBE3E3;
  --series1:#2a78d6; --series2:#eb6834; --grid:#EDF1F5;
  --shadow:0 1px 2px rgba(20,32,44,.06),0 8px 24px -12px rgba(20,32,44,.18);
  --sans:"Onest",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;
  --mono:"IBM Plex Mono",ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;
  --r:12px; --r-sm:8px;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --bg:#0E1319; --surface:#161C24; --surface2:#1C232C; --surface3:#222B36;
    --ink:#E7ECF1; --ink2:#9AA8B6; --ink3:#6C7A88; --line:#26303B; --line2:#1F2831;
    --accent:#3987e5; --accent-ink:#86b6ef; --accent-soft:#1B2B44;
    --good-ink:#6fd66f; --warn-ink:#f5c451; --serious-ink:#f5a382; --crit-ink:#f08a8a;
    --good-soft:#143A14; --warn-soft:#3A2E10; --serious-soft:#3E2418; --crit-soft:#3E1A1A;
    --series1:#3987e5; --series2:#d95926; --grid:#1F2831;
    --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px -12px rgba(0,0,0,.6);
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --bg:#0E1319; --surface:#161C24; --surface2:#1C232C; --surface3:#222B36;
  --ink:#E7ECF1; --ink2:#9AA8B6; --ink3:#6C7A88; --line:#26303B; --line2:#1F2831;
  --accent:#3987e5; --accent-ink:#86b6ef; --accent-soft:#1B2B44;
  --good-ink:#6fd66f; --warn-ink:#f5c451; --serious-ink:#f5a382; --crit-ink:#f08a8a;
  --good-soft:#143A14; --warn-soft:#3A2E10; --serious-soft:#3E2418; --crit-soft:#3E1A1A;
  --series1:#3987e5; --series2:#d95926; --grid:#1F2831;
  --shadow:0 1px 2px rgba(0,0,0,.4),0 8px 24px -12px rgba(0,0,0,.6);
}
*{box-sizing:border-box}
html,body{margin:0;padding:0}
body{background:var(--bg);color:var(--ink);font:14px/1.45 var(--sans);-webkit-font-smoothing:antialiased;min-height:100vh}
button,input,select{font:inherit;color:inherit}
button{cursor:pointer;background:none;border:0;padding:0}
button:disabled{opacity:.6;cursor:default}
a{color:var(--accent-ink)}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px;border-radius:6px}
h1,h2,h3{margin:0;font-weight:600;text-wrap:balance;letter-spacing:-.01em}
h2{font-size:15px}
.mono{font-family:var(--mono);font-variant-numeric:tabular-nums}
.num{font-family:var(--mono);font-variant-numeric:tabular-nums}
.muted{color:var(--ink2)}
.faint{color:var(--ink3)}
.fs12{font-size:12px}
.fw500{font-weight:500}
.fw600{font-weight:600}
.ml-auto{margin-left:auto}
.mt4{margin-top:4px}
.mb10{margin-bottom:10px}
.eyebrow{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink3);font-weight:600}
[hidden]{display:none!important}
@media (prefers-reduced-motion:reduce){*{transition:none!important;animation:none!important}}

/* ---------- login ---------- */
.login-body{background:var(--bg)}
.login{min-height:100vh;display:grid;place-items:center;padding:24px;background:
  radial-gradient(1200px 600px at 20% -10%, var(--accent-soft) 0%, transparent 60%), var(--bg)}
.login-card{width:min(420px,100%);background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:28px}
.brand{display:flex;align-items:center;gap:12px;margin-bottom:22px}
.brand.tight{margin:0}
.brand-mark{width:38px;height:38px;border-radius:10px;background:var(--ink);color:var(--surface);display:grid;place-items:center;font-family:var(--mono);font-weight:600;font-size:15px}
.brand-name{font-weight:700;font-size:17px;letter-spacing:-.02em}
.brand-sub{font-size:12px;color:var(--ink2);font-family:var(--mono)}
.field{display:flex;flex-direction:column;gap:6px;margin-bottom:14px}
.field label{font-size:12px;font-weight:600;color:var(--ink2)}
.input{height:42px;border:1px solid var(--line);border-radius:10px;background:var(--surface2);padding:0 12px;width:100%;color:var(--ink)}
.input:focus{outline:2px solid var(--accent);outline-offset:0;border-color:transparent}
.input.w110{width:110px;height:34px}
.input.w84{width:84px;height:34px}
.btn{height:40px;padding:0 16px;border-radius:10px;font-weight:600;display:inline-flex;align-items:center;justify-content:center;gap:8px;border:1px solid var(--line);background:var(--surface);color:var(--ink);white-space:nowrap}
.btn:hover{background:var(--surface2)}
.btn.primary{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.btn.primary:hover{opacity:.92}
.btn.sm{height:32px;padding:0 12px;font-size:13px;border-radius:8px}
.btn.danger{color:var(--crit-ink);border-color:var(--crit-soft);background:var(--crit-soft)}
.btn.block{width:100%}
.otp{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin:6px 0 16px}
.otp input{height:52px;width:100%;min-width:0;padding:0;text-align:center;font-family:var(--mono);font-size:22px;font-weight:600;border:1px solid var(--line);border-radius:10px;background:var(--surface2);color:var(--ink)}
.otp input:focus{outline:2px solid var(--accent);outline-offset:0;border-color:transparent}
.login-foot{margin-top:18px;padding-top:14px;border-top:1px solid var(--line2);font-size:12px;color:var(--ink3);display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap}
.linkbtn{color:var(--accent-ink);font-weight:500}
.step-note{font-size:13px;color:var(--ink2);margin:0 0 14px}
.form-err{margin:-4px 0 12px;font-size:13px;color:var(--crit-ink);background:var(--crit-soft);padding:8px 10px;border-radius:8px}
.totp-icon{width:44px;height:44px;border-radius:12px;background:var(--accent-soft);color:var(--accent-ink);display:grid;place-items:center;margin-bottom:12px}
.login-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:10px}

/* ---------- shell ---------- */
.shell{display:grid;grid-template-columns:232px 1fr;grid-template-rows:56px 1fr;min-height:100vh}
.rail{grid-row:1/3;background:var(--surface);border-right:1px solid var(--line);display:flex;flex-direction:column;padding:14px 12px;gap:4px;position:sticky;top:0;height:100vh}
.rail .brand{margin:4px 6px 18px}
.navbtn{display:flex;align-items:center;gap:10px;padding:9px 10px;border-radius:9px;color:var(--ink2);font-weight:500;width:100%;text-align:left}
.navbtn svg{width:18px;height:18px;flex:none;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.navbtn:hover{background:var(--surface2);color:var(--ink)}
.navbtn[aria-current="page"]{background:var(--accent-soft);color:var(--accent-ink)}
.navbtn .cnt{margin-left:auto;font-family:var(--mono);font-size:11px;color:var(--ink3);font-style:normal}
.rail-foot{margin-top:auto;padding:10px 6px 0;border-top:1px solid var(--line2);font-size:12px;color:var(--ink3);line-height:1.6}
.top{grid-column:2;position:sticky;top:0;z-index:5;background:color-mix(in srgb,var(--bg) 85%,transparent);backdrop-filter:blur(10px);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:12px;padding:0 20px}
.top .title{font-weight:600;font-size:15px}
.top .stale{font-size:12px;color:var(--crit-ink);background:var(--crit-soft);padding:3px 8px;border-radius:999px}
.seg{display:inline-flex;background:var(--surface3);border-radius:9px;padding:3px;gap:2px}
.seg.ml{margin-left:auto}
.seg button{height:28px;padding:0 10px;border-radius:7px;font-size:12px;font-weight:600;color:var(--ink2);display:inline-flex;align-items:center;gap:6px}
.seg button[aria-pressed="true"]{background:var(--surface);color:var(--ink);box-shadow:0 1px 2px rgba(0,0,0,.08)}
.seg svg{width:14px;height:14px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.iconbtn{width:34px;height:34px;border-radius:9px;border:1px solid var(--line);background:var(--surface);display:grid;place-items:center;color:var(--ink2)}
.iconbtn svg{width:16px;height:16px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.main{grid-column:2;padding:20px;max-width:1320px;width:100%;min-width:0}
.page{display:none;flex-direction:column;gap:16px}
.page.active{display:flex}
.page-head{display:flex;align-items:baseline;gap:12px;flex-wrap:wrap}
.page-head h1{font-size:22px;font-weight:700;letter-spacing:-.02em}
.page-head .sub{color:var(--ink2)}
.page-head .actions{margin-left:auto;display:flex;gap:8px;flex-wrap:wrap}

/* ---------- verdict band ---------- */
.verdict{display:grid;grid-template-columns:auto 1fr auto;gap:14px;align-items:center;border:1px solid var(--line);border-radius:var(--r);padding:14px 16px;background:var(--surface);font-family:var(--mono);font-size:13px;position:relative;overflow:hidden}
.verdict::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--good)}
.verdict.warn::before{background:var(--warn)}
.verdict.crit::before{background:var(--crit)}
.verdict.neutral::before{background:var(--ink3)}
.verdict .dot{width:12px;height:12px;border-radius:50%;background:var(--good);box-shadow:0 0 0 4px var(--good-soft)}
.verdict.warn .dot{background:var(--warn);box-shadow:0 0 0 4px var(--warn-soft)}
.verdict.crit .dot{background:var(--crit);box-shadow:0 0 0 4px var(--crit-soft)}
.verdict.neutral .dot{background:var(--ink3);box-shadow:0 0 0 4px var(--surface3)}
.verdict .v-main{font-weight:600}
.verdict .v-sub{color:var(--ink2);font-size:12px;margin-top:2px;white-space:pre-wrap}
.verdict .v-right{color:var(--ink3);font-size:12px;text-align:right}

/* ---------- tiles ---------- */
.tiles{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}
.tile{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 14px 10px;display:flex;flex-direction:column;gap:6px;min-height:118px;position:relative}
.tile.short{min-height:96px}
.tile .t-label{font-size:12px;color:var(--ink2);font-weight:500;display:flex;justify-content:space-between;align-items:center;gap:8px}
.tile .t-val{font-family:var(--mono);font-size:26px;font-weight:600;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums}
.tile .t-val small{font-size:13px;font-weight:500;color:var(--ink2);margin-left:4px}
.tile .t-sub{font-size:12px;color:var(--ink3);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.tile .spark{margin-top:auto;height:34px;width:100%}
.pill{display:inline-flex;align-items:center;gap:5px;height:20px;padding:0 7px;border-radius:999px;font-size:11px;font-weight:600;line-height:1;white-space:nowrap}
.pill::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor}
.pill.good{background:var(--good-soft);color:var(--good-ink)}
.pill.warn{background:var(--warn-soft);color:var(--warn-ink)}
.pill.serious{background:var(--serious-soft);color:var(--serious-ink)}
.pill.crit{background:var(--crit-soft);color:var(--crit-ink)}
.pill.neutral{background:var(--surface3);color:var(--ink2)}
.pill.accent{background:var(--accent-soft);color:var(--accent-ink)}
.pill.noicon::before{display:none}

/* ---------- cards & tables ---------- */
.card{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.card-head{display:flex;align-items:center;gap:10px;padding:12px 16px;border-bottom:1px solid var(--line2)}
.card-head .right{margin-left:auto;display:flex;gap:8px;align-items:center;color:var(--ink3);font-size:12px}
.card-body{padding:14px 16px}
.card-body.pad{padding:16px}
.grid2{display:grid;grid-template-columns:1.4fr 1fr;gap:12px}
.grid2.even{grid-template-columns:1fr 1fr}
.tbl-wrap{overflow-x:auto}
table{border-collapse:collapse;width:100%;font-size:13px}
th{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);font-weight:600;text-align:left;padding:9px 12px;border-bottom:1px solid var(--line2);white-space:nowrap}
td{padding:9px 12px;border-bottom:1px solid var(--line2);vertical-align:middle;white-space:nowrap}
td.wrap{white-space:normal}
tr:last-child td{border-bottom:0}
tbody tr:hover td{background:var(--surface2)}
td.num,th.num{text-align:right;font-family:var(--mono);font-variant-numeric:tabular-nums}
td.ell{max-width:280px;overflow:hidden;text-overflow:ellipsis}
tr.clickable{cursor:pointer}
.empty{padding:24px 16px;color:var(--ink3);font-size:13px;text-align:center}
.bar{height:6px;border-radius:3px;background:var(--surface3);overflow:hidden;min-width:80px}
.bar.w70{width:70px;min-width:70px}
.bar i{display:block;height:100%;width:0;background:var(--series1);border-radius:3px}
.bar i.warn{background:var(--warn)}.bar i.crit{background:var(--crit)}
.memcell{display:flex;align-items:center;gap:10px}
.memcell .num{min-width:118px;text-align:right}
.memcell .num.mw36{min-width:36px}
.chips{display:flex;gap:6px;flex-wrap:wrap}
.chip{height:28px;padding:0 11px;border-radius:999px;border:1px solid var(--line);background:var(--surface);font-size:12px;font-weight:500;color:var(--ink2);display:inline-flex;align-items:center;gap:6px}
.chip[aria-pressed="true"]{background:var(--ink);color:var(--surface);border-color:var(--ink)}
.chip .cnt{font-family:var(--mono);font-size:11px;opacity:.7}

/* ---------- events ---------- */
.events{display:flex;flex-direction:column;max-height:420px;overflow:auto}
.ev{display:grid;grid-template-columns:52px 10px 1fr;gap:10px;padding:9px 16px;border-bottom:1px solid var(--line2);align-items:start}
.ev:last-child{border-bottom:0}
.ev time{font-family:var(--mono);font-size:12px;color:var(--ink3);padding-top:2px}
.ev .d{width:8px;height:8px;border-radius:50%;margin-top:6px;background:var(--ink3)}
.ev .d.good{background:var(--good)}.ev .d.warn{background:var(--warn)}.ev .d.crit{background:var(--crit)}.ev .d.info{background:var(--series1)}
.ev .t{font-weight:500;overflow-wrap:anywhere}
.ev .s{font-size:12px;color:var(--ink2);font-family:var(--mono)}

/* ---------- charts ---------- */
.chart{width:100%;height:200px;display:block}
.chart .grid line{stroke:var(--grid)}
.chart .axis text{fill:var(--ink3);font-family:var(--mono);font-size:10px}
.chart .area{fill:var(--series1);opacity:.14}
.chart .line{fill:none;stroke:var(--series1);stroke-width:2}
.chart .end{fill:var(--series1);stroke:var(--surface);stroke-width:2}
.chart .xh{stroke:var(--ink3);stroke-dasharray:3 3;opacity:0}
.chart .hp{fill:var(--series1);stroke:var(--surface);stroke-width:2;opacity:0}
.chart .th{stroke:var(--warn);stroke-dasharray:4 4}
.chart-wrap{position:relative}
.tip{position:absolute;pointer-events:none;background:var(--ink);color:var(--surface);font-family:var(--mono);font-size:11px;padding:6px 8px;border-radius:7px;opacity:0;transform:translate(-50%,-115%);white-space:nowrap;transition:opacity .12s;left:0;top:0}
.spark path.a{fill:var(--series1);opacity:.14}
.spark path.l{fill:none;stroke:var(--series1);stroke-width:1.5}
.spark circle{fill:var(--series1);stroke:var(--surface);stroke-width:1.5}
.spark.warn path.l{stroke:var(--warn)}.spark.warn path.a{fill:var(--warn)}.spark.warn circle{fill:var(--warn)}
.legend{display:flex;gap:14px;font-size:12px;color:var(--ink2);flex-wrap:wrap}
.legend span{display:inline-flex;align-items:center;gap:6px}
.legend i{width:10px;height:10px;border-radius:3px;background:var(--series1);display:inline-block}

/* ---------- drawer ---------- */
.drawer{position:fixed;top:0;right:0;bottom:0;width:min(520px,100%);background:var(--surface);border-left:1px solid var(--line);box-shadow:var(--shadow);z-index:20;transform:translateX(100%);transition:transform .2s ease;display:flex;flex-direction:column}
.drawer.open{transform:none}
.drawer-head{display:flex;align-items:center;gap:10px;padding:14px 16px;border-bottom:1px solid var(--line2)}
.drawer-body{padding:16px;overflow:auto;display:flex;flex-direction:column;gap:14px}
.kv{display:grid;grid-template-columns:130px 1fr;gap:6px 12px;font-size:13px;margin:0}
.kv dt{color:var(--ink3)}.kv dd{margin:0;font-family:var(--mono);font-size:12px;word-break:break-all}
.scrim{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:19;opacity:0;pointer-events:none;transition:opacity .2s}
.scrim.open{opacity:1;pointer-events:auto}

/* ---------- settings / lists ---------- */
.rows{display:flex;flex-direction:column}
.row{display:grid;grid-template-columns:1fr auto;gap:14px;align-items:center;padding:12px 16px;border-bottom:1px solid var(--line2)}
.row:last-child{border-bottom:0}
.row .l{font-weight:500}
.row .d{font-size:12px;color:var(--ink2);margin-top:2px}
.check{display:grid;grid-template-columns:22px 1fr;gap:10px;padding:10px 16px;border-bottom:1px solid var(--line2);align-items:start}
.check:last-child{border-bottom:0}
.check .ic{width:20px;height:20px;border-radius:6px;display:grid;place-items:center}
.check .ic svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:3;stroke-linecap:round;stroke-linejoin:round}
.check .ic.good{background:var(--good-soft);color:var(--good-ink)}.check .ic.warn{background:var(--warn-soft);color:var(--warn-ink)}.check .ic.crit{background:var(--crit-soft);color:var(--crit-ink)}.check .ic.neutral{background:var(--surface3);color:var(--ink3)}
.check .t{font-weight:500}.check .s{font-size:12px;color:var(--ink2);font-family:var(--mono);overflow-wrap:anywhere}
.notice{display:flex;gap:10px;align-items:flex-start;padding:12px 14px;border-radius:10px;background:var(--accent-soft);color:var(--accent-ink);font-size:13px}
.notice svg{width:16px;height:16px;flex:none;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;margin-top:1px}
.notice.warn{background:var(--warn-soft);color:var(--warn-ink)}
.notice.inset{margin:0 16px 16px}
.botcard{display:flex;align-items:center;gap:14px;padding:16px;flex-wrap:wrap}
.botav{width:48px;height:48px;border-radius:14px;background:linear-gradient(135deg,#2AABEE,#229ED9);display:grid;place-items:center;color:#fff;flex:none}
.botav svg{width:24px;height:24px;fill:currentColor}
.list{margin:0;padding:0 16px 14px 32px;font-size:13px;color:var(--ink2)}
.list li{margin:4px 0}
.code{font-family:var(--mono);font-size:12px;background:var(--surface2);padding:2px 6px;border-radius:5px}

/* ---------- mobile ---------- */
.tabbar{display:none}
.toast{position:fixed;left:50%;bottom:24px;transform:translateX(-50%) translateY(20px);background:var(--ink);color:var(--surface);padding:10px 14px;border-radius:10px;font-size:13px;font-weight:500;opacity:0;transition:.2s;z-index:30;pointer-events:none;box-shadow:var(--shadow)}
.toast.show{opacity:1;transform:translateX(-50%)}
@media (max-width:1100px){
  .shell{grid-template-columns:68px 1fr}
  .rail{padding:14px 10px}
  .rail .brand-name,.rail .brand-sub,.navbtn span,.rail-foot,.navbtn .cnt{display:none}
  .navbtn{justify-content:center;padding:10px}
  .grid2{grid-template-columns:1fr}
  .tiles{grid-template-columns:repeat(3,minmax(0,1fr))}
}
@media (max-width:760px){
  .shell{grid-template-columns:1fr;grid-template-rows:52px 1fr}
  .rail{display:none}
  .top,.main{grid-column:1}
  .top{padding:0 14px}
  .top .title{font-size:14px}
  .main{padding:14px 14px 92px}
  .tabbar{display:grid;grid-template-columns:repeat(5,1fr);position:fixed;left:0;right:0;bottom:0;background:var(--surface);border-top:1px solid var(--line);padding:6px 6px calc(6px + env(safe-area-inset-bottom));z-index:15}
  .tabbar button{display:flex;flex-direction:column;align-items:center;gap:3px;font-size:10px;font-weight:600;color:var(--ink3);padding:6px 2px;border-radius:8px}
  .tabbar button svg{width:20px;height:20px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
  .tabbar button[aria-current="page"]{color:var(--accent-ink)}
  .verdict{grid-template-columns:auto 1fr;font-size:12px}
  .verdict .v-right{grid-column:2;text-align:left}
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr))}
  .tile .t-val{font-size:22px}
  .page-head h1{font-size:19px}
  .row{grid-template-columns:1fr;gap:8px}
  .kv{grid-template-columns:1fr}
  .seg button span{display:none}
  .seg button{padding:0 8px}
  .seg.ml{margin-left:0}
  .top .seg.lang{margin-left:auto}
}

/* ---------- enrolment, codes, modal ---------- */
.qrbox{display:flex;gap:16px;align-items:center;margin:4px 0 14px;flex-wrap:wrap}
.qrbox img{width:150px;height:150px;border-radius:10px;background:#fff;padding:6px;border:1px solid var(--line);flex:none}
.qrkey{display:flex;flex-direction:column;gap:6px;min-width:0}
.qrkey code{font-family:var(--mono);font-size:13px;word-break:break-all;background:var(--surface2);padding:8px 10px;border-radius:8px;line-height:1.5}
.codes{display:grid;grid-template-columns:repeat(2,1fr);gap:6px;font-family:var(--mono);font-size:14px;margin:6px 0 12px}
.codes span{padding:8px 10px;background:var(--surface2);border-radius:6px;text-align:center;letter-spacing:.04em;user-select:all}
.form-err.warn{color:var(--warn-ink);background:var(--warn-soft)}
.modal-scrim{position:fixed;inset:0;background:rgba(0,0,0,.45);z-index:40;display:grid;place-items:center;padding:16px}
.modal{width:min(460px,100%);background:var(--surface);border:1px solid var(--line);border-radius:16px;box-shadow:var(--shadow);padding:22px;max-height:calc(100vh - 32px);overflow:auto}
.modal-head{display:flex;align-items:center;gap:10px;margin-bottom:12px}
.modal-head h2{font-size:16px}
.modal .step-note{margin-bottom:12px}
.modal .btnrow{display:flex;gap:8px;justify-content:flex-end;margin-top:6px;flex-wrap:wrap}
.modal .otp{margin-top:2px}
.rowbtns{display:flex;gap:6px;flex-wrap:wrap}

/* ---------- logs ---------- */
.logs{display:grid;grid-template-columns:240px 1fr;gap:12px;min-height:560px}
.srcs{padding:8px;max-height:calc(100vh - 160px);overflow:auto;align-self:start}
.srcs .g{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);font-weight:600;padding:10px 8px 4px}
.src{display:flex;align-items:center;gap:8px;padding:6px 8px;border-radius:7px;font-family:var(--mono);font-size:12px;width:100%;text-align:left;color:var(--ink2)}
.src:hover{background:var(--surface2);color:var(--ink)}
.src[aria-pressed="true"]{background:var(--accent-soft);color:var(--accent-ink)}
.src .cnt{margin-left:auto;color:var(--ink3);font-size:11px;flex:none}
.src.off{opacity:.55}
.logbar{display:flex;gap:8px;align-items:center;padding:10px 12px;border-bottom:1px solid var(--line2);flex-wrap:wrap}
.logbar .search{margin:0;width:min(360px,100%)}
.toggle{display:inline-flex;align-items:center;gap:8px;font-size:13px;font-weight:500;color:var(--ink2)}
.sw{width:34px;height:20px;border-radius:999px;background:var(--surface3);position:relative;border:1px solid var(--line);flex:none;transition:background .15s}
.sw::after{content:"";position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:var(--surface);box-shadow:0 1px 2px rgba(0,0,0,.25);transition:transform .15s}
.sw[aria-checked="true"]{background:var(--accent);border-color:var(--accent)}
.sw[aria-checked="true"]::after{transform:translateX(14px)}
.stream{font-family:var(--mono);font-size:12px;line-height:1.55;padding:8px 0;overflow:auto;height:min(70vh,640px);background:var(--surface2)}
.ln{display:grid;grid-template-columns:130px 46px 1fr;gap:10px;padding:1px 12px;white-space:pre-wrap;word-break:break-word}
.ln:hover{background:var(--surface3)}
.ln .ts{color:var(--ink3)}
.ln .lv{font-weight:600}
.lv.INFO{color:var(--accent-ink)}.lv.WARN{color:var(--warn-ink)}.lv.ERR{color:var(--crit-ink)}.lv.OK{color:var(--good-ink)}.lv.DBG{color:var(--ink3)}
.ln mark{background:var(--warn-soft);color:inherit;border-radius:3px}
.ln .st{display:inline-block;min-width:26px;font-weight:600}
.ln .st.s2{color:var(--good-ink)}.ln .st.s3{color:var(--ink2)}.ln .st.s4{color:var(--warn-ink)}.ln .st.s5{color:var(--crit-ink)}

/* ---------- bars & hbars ---------- */
.bars{width:100%;height:150px;display:block}
.bars rect{fill:var(--series1)}
.bars rect.hi{fill:var(--crit)}
.bars rect.err{fill:var(--crit)}
.bars rect:hover{opacity:.75}
.bars .axis text{fill:var(--ink3);font-family:var(--mono);font-size:10px}
.bars .grid line{stroke:var(--grid)}
.hbars{display:flex;flex-direction:column;gap:8px}
.hb{display:grid;grid-template-columns:200px 1fr 64px;gap:10px;align-items:center;font-size:13px}
.hb .name{font-family:var(--mono);font-size:12px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.hb .track{height:10px;background:var(--surface3);border-radius:4px;overflow:hidden;display:flex;gap:2px}
.hb .track i{display:block;height:100%;width:0;background:var(--series1);border-radius:4px}
.hb .track i.err{background:var(--crit)}
.hb .v{text-align:right;font-family:var(--mono);font-size:12px;color:var(--ink2)}
.legend i.err{background:var(--crit)}
@media (max-width:760px){
  .logs{grid-template-columns:1fr;min-height:0}
  .srcs{display:flex;overflow-x:auto;gap:4px;padding:8px;max-height:none}
  .srcs .g{display:none}
  .src{width:auto;white-space:nowrap}
  .ln{grid-template-columns:1fr;gap:2px}
  .ln .ts{font-size:11px}
  .hb{grid-template-columns:120px 1fr 56px}
  .stream{height:60vh}
}

/* ---------- telegram ---------- */
.cmds{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:8px;padding:12px 16px}
.cmd{border:1px solid var(--line);border-radius:9px;padding:10px 12px;display:flex;flex-direction:column;gap:4px}
.cmd b{font-family:var(--mono);font-weight:600;font-size:13px}
.cmd span{font-size:12px;color:var(--ink2)}
.rowbtns{display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.list.steps{padding-left:30px}
.card-body.pad .list{padding-left:18px;padding-bottom:0;margin-top:10px}

/* ---------- phone & Telegram Mini App ---------- */
.sheet-scrim{position:fixed;inset:0;background:rgba(0,0,0,.35);z-index:16;display:flex;align-items:flex-end;justify-content:center}
.sheet{width:100%;background:var(--surface);border-radius:16px 16px 0 0;border-top:1px solid var(--line);padding:10px 10px calc(72px + env(safe-area-inset-bottom));display:grid;grid-template-columns:repeat(2,1fr);gap:6px;box-shadow:var(--shadow)}
.sheet-item{display:flex;align-items:center;gap:10px;padding:12px 12px;border-radius:10px;font-weight:500;color:var(--ink2);background:var(--surface2)}
.sheet-item svg{width:18px;height:18px;stroke:currentColor;fill:none;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.sheet-item[aria-current="page"]{background:var(--accent-soft);color:var(--accent-ink)}
@media (min-width:761px){.sheet-scrim{display:none}}
@media (max-width:760px){
  .hide-m{display:none!important}
  .shell{min-height:100dvh}
  .top{gap:8px;padding-top:env(safe-area-inset-top)}
  .top .title{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}
  .top .stale{display:none}
  .main{padding:12px 12px calc(84px + env(safe-area-inset-bottom))}
  .page{gap:12px}
  .card-head{padding:10px 12px;flex-wrap:wrap}
  .card-body{padding:12px}
  .tbl-wrap{-webkit-overflow-scrolling:touch}
  th,td{padding:9px 10px}
  td.ell{max-width:160px}
  .memcell .num{min-width:96px}
  .bar{min-width:56px}
  .tile{padding:12px 12px 8px;min-height:104px}
  .drawer{width:100%}
  .drawer-body{padding:12px}
  .modal{padding:18px;border-radius:14px}
  .events{max-height:none}
  .ev{grid-template-columns:44px 10px 1fr;padding:8px 12px}
  .rows .row{padding:10px 12px}
  .stream{height:calc(100dvh - 300px);min-height:280px}
  .verdict{padding:12px}
  .grid2{gap:10px}
  .navbtn{min-height:44px}
  .tabbar button{min-height:48px}
}
html.tg .top{position:sticky}
html.tg .rail{display:none}
html.tg .shell{grid-template-columns:1fr}
html.tg .top,html.tg .main{grid-column:1}
html.tg .tabbar{display:grid}
html.tg .sheet-scrim[hidden]{display:none}
html.tg .top .search{display:none}
html.tg .main{padding-bottom:calc(84px + env(safe-area-inset-bottom));max-width:100%}

/* ---------- passkeys ---------- */
.or{display:flex;align-items:center;gap:10px;margin:14px 0 10px;color:var(--ink3);font-size:12px}
.or::before,.or::after{content:"";flex:1;height:1px;background:var(--line2)}
.btn svg{flex:none}

/* ===== phone (<=760px): rebuilt layout ===== */
.top .menu{display:none}
.sheet-row{display:none}
@media (max-width:760px){
  .top{padding:0 10px 0 14px;gap:8px}
  .top .title{font-size:16px;font-weight:700}
  .top .seg,.top #logout{display:none!important}
  .top .menu{display:grid;margin-left:auto}
  .top .stale{display:inline-block;padding:2px 7px;font-size:11px;white-space:nowrap}
  .main{padding:10px 10px calc(88px + env(safe-area-inset-bottom))}
  .page{gap:10px}
  .page-head{flex-direction:column;align-items:flex-start;gap:2px}
  .page-head h1{font-size:20px}
  .page-head .sub{font-size:13px}
  .page-head .actions{margin-left:0;margin-top:4px}
  .card{border-radius:12px}
  .card-head{padding:10px 12px;gap:8px}
  .card-head h2{font-size:14px}
  .card-head .right{font-size:11px;flex-wrap:wrap;justify-content:flex-end}
  .card-body{padding:12px}
  .verdict{grid-template-columns:auto 1fr;gap:10px;padding:12px;font-size:12px}
  .verdict .v-sub{display:none}
  .verdict .v-right{grid-column:2;text-align:left;font-size:11px}
  .tiles{grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}
  .tile{padding:10px 10px 8px;min-height:96px;gap:4px}
  .tile.short{min-height:84px}
  .tile .t-label{font-size:11px}
  .tile .t-val{font-size:22px}
  .tile .t-sub{font-size:11px;white-space:normal;overflow:visible}
  .tile .spark{height:26px}
  .chart{height:170px}
  .events{max-height:none}
  .ev{grid-template-columns:42px 8px 1fr;padding:8px 12px;gap:8px}
  .ev .t{font-size:13px}
  .tbl-wrap{overflow:visible}
  table.stack thead{display:none}
  table.stack,table.stack tbody,table.stack tr,table.stack td{display:block;white-space:normal}
  table.stack tr{padding:8px 12px 9px;border-bottom:1px solid var(--line2)}
  table.stack tr:last-child{border-bottom:0}
  table.stack tbody tr:hover td{background:transparent}
  table.stack td{padding:2px 0;border:0;display:flex;justify-content:space-between;align-items:center;gap:12px;text-align:right;font-size:13px}
  table.stack td::before{content:attr(data-l);font-size:10px;letter-spacing:.06em;text-transform:uppercase;color:var(--ink3);font-weight:600;text-align:left;flex:none}
  table.stack td:first-child{font-weight:600;font-size:14px;justify-content:flex-start;text-align:left;padding-bottom:4px;word-break:break-all}
  table.stack td:first-child::before{display:none}
  table.stack td.ell{max-width:none;overflow:visible;text-overflow:clip}
  table.stack td.empty{display:block;text-align:center}
  table.stack td.hide-m{display:none}
  table.stack td .memcell{justify-content:flex-end}
  table.stack td.wrap{word-break:break-word}
  .memcell .num{min-width:0}
  .bar{min-width:64px;width:64px}
  .chip{height:32px}
  .input{font-size:16px;height:44px}
  .input.w84,.input.w110{height:38px;font-size:15px}
  .btn{min-height:42px}
  .btn.sm{min-height:36px;height:36px}
  .login-card{padding:22px 18px}
  .drawer{width:100%;top:auto;bottom:0;height:min(88dvh,100%);border-left:0;border-top:1px solid var(--line);border-radius:16px 16px 0 0;transform:translateY(100%)}
  .drawer.open{transform:none}
  .modal-scrim{align-items:flex-end;padding:0}
  .modal{width:100%;max-height:92dvh;border-radius:16px 16px 0 0;padding:18px 16px calc(18px + env(safe-area-inset-bottom))}
  .logs{grid-template-columns:1fr}
  .stream{height:calc(100dvh - 330px);min-height:260px}
  .logbar{padding:8px 10px}
  .logbar .search{width:100%}
  .logbar .toggle{margin-left:0}
  .hb{grid-template-columns:110px 1fr 52px}
  .rows .row{padding:10px 12px;grid-template-columns:1fr;gap:8px}
  .row .rowbtns{width:100%;justify-content:flex-start}
  .kv{grid-template-columns:110px 1fr}
  .tabbar button{font-size:11px}
  .tabbar button svg{width:22px;height:22px}
  .sheet-row{display:flex;grid-column:1/-1;gap:8px;align-items:center;justify-content:space-between;padding:4px 4px;font-size:13px;color:var(--ink2)}
  .sheet-item{grid-column:auto}
  #sheetLogout{grid-column:1/-1}
  .cmds{grid-template-columns:1fr}
  .qrbox{flex-direction:column;align-items:flex-start}
  .miniapp{grid-template-columns:1fr}
  .codes{font-size:13px}
}
@media (max-width:760px){
  .grid2,.grid2.even,.grid3{grid-template-columns:1fr}
  .page-head h1{display:none}
  .page-head .sub{font-size:14px;color:var(--ink2)}
  .page-head .actions{margin-top:0}
  table.stack td .pill{margin-left:auto}
}

.drawer:not(.open){visibility:hidden}
.drawer.open{visibility:visible}

.notice .grow{flex:1}
.notice .rowbtns{flex:none}
@media (max-width:760px){.notice{flex-wrap:wrap}.notice .rowbtns{width:100%;justify-content:flex-end}}

/* ---- actions: buttons, lock, status bar, PIN ---- */
.btn.icon{width:32px;padding:0;border-radius:8px}
.btn.icon svg,.btn svg.i{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.btn[data-akind="container_start"] svg{fill:currentColor;stroke:none}
.btn[data-akind="container_stop"] svg{fill:currentColor;stroke:none}
.actbtns{display:inline-flex;gap:6px;align-items:center}
.actbtns .btn:not(.icon) svg{width:15px;height:15px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
td.actcell{white-space:nowrap}
.pill.lock{gap:5px}
.pill.lock svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.dactions{display:flex;gap:8px;flex-wrap:wrap}
.dactions .actbtns{flex-wrap:wrap}
.dactions .btn{height:40px}
.actbar{position:sticky;top:8px;z-index:12;display:flex;align-items:center;gap:12px;padding:10px 12px 10px 14px;margin:0 0 14px;border-radius:12px;border:1px solid var(--line);background:var(--surface);color:var(--ink);box-shadow:0 8px 24px rgba(0,0,0,.08);font-size:13px;font-weight:500}
.actbar .grow{flex:1;min-width:0}
.actbar.busy{border-color:var(--accent-soft);background:var(--accent-soft);color:var(--accent-ink)}
.actbar.warn{border-color:var(--warn-soft);background:var(--warn-soft);color:var(--warn-ink)}
.actbar.good{border-color:var(--good-soft);background:var(--good-soft);color:var(--good-ink)}
.actbar.crit{border-color:var(--crit-soft);background:var(--crit-soft);color:var(--crit-ink)}
.actbar .iconbtn{width:28px;height:28px;border:0;background:transparent;color:inherit}
.actbar .btn{background:var(--surface);color:var(--ink)}
.spin{width:14px;height:14px;flex:none;border-radius:50%;border:2px solid currentColor;border-right-color:transparent;animation:spin .8s linear infinite;opacity:.8}
.actbar:not(.busy):not(.warn) .spin{display:none}
@keyframes spin{to{transform:rotate(360deg)}}
.pinput{font-family:var(--mono);font-size:22px;letter-spacing:.35em;text-align:center}
.btnrow.center{justify-content:center}
.step-note.center{text-align:center;margin:10px 0}
@media (max-width:760px){
  .actbar{top:6px;margin:0 0 10px}
  table.stack td.actcell{padding-top:8px}
  table.stack td.actcell::before{content:none}
  .dactions .btn{flex:1}
}

/* ---- billing: API balances and token spend ----
   Vendor colours are the categorical slots in fixed order (blue, orange, aqua,
   yellow, magenta, green) and follow the vendor, never its rank: the stacking
   order on the chart is the same order, which is what the palette was
   validated for (adjacent pairs, light and dark). */
:root{--v-deepseek:#2a78d6;--v-anthropic:#eb6834;--v-openai:#1baf7a;--v-openrouter:#eda100;--v-gemini:#e87ba4;--v-groq:#008300}
@media (prefers-color-scheme: dark){:root:not([data-theme="light"]){--v-deepseek:#3987e5;--v-anthropic:#d95926;--v-openai:#199e70;--v-openrouter:#c98500;--v-gemini:#d55181;--v-groq:#008300}}
:root[data-theme="dark"]{--v-deepseek:#3987e5;--v-anthropic:#d95926;--v-openai:#199e70;--v-openrouter:#c98500;--v-gemini:#d55181;--v-groq:#008300}
i.vb-deepseek,.vb-deepseek{background:var(--v-deepseek)}i.vb-anthropic,.vb-anthropic{background:var(--v-anthropic)}i.vb-openai,.vb-openai{background:var(--v-openai)}
i.vb-openrouter,.vb-openrouter{background:var(--v-openrouter)}i.vb-gemini,.vb-gemini{background:var(--v-gemini)}i.vb-groq,.vb-groq{background:var(--v-groq)}
.vf-deepseek{fill:var(--v-deepseek)}.vf-anthropic{fill:var(--v-anthropic)}.vf-openai{fill:var(--v-openai)}.vf-openrouter{fill:var(--v-openrouter)}.vf-gemini{fill:var(--v-gemini)}.vf-groq{fill:var(--v-groq)}
.vdot{width:10px;height:10px;border-radius:3px;flex:none;display:inline-block}

.wallets-card .card-head .right .btn{color:var(--ink)}
.wallet-hero{display:flex;align-items:flex-end;gap:10px 28px;flex-wrap:wrap;padding:18px 16px 6px}
.wallet-hero .big{font-family:var(--mono);font-size:36px;font-weight:600;letter-spacing:-.03em;line-height:1;font-variant-numeric:tabular-nums}
.wallet-hero .big-l{font-size:12px;color:var(--ink3);margin-top:6px}
.wallet-hero .facts{display:flex;gap:6px 22px;flex-wrap:wrap;color:var(--ink2);font-size:13px;padding-bottom:3px}
.wallet-hero .facts b{color:var(--ink);font-family:var(--mono);font-weight:600;font-variant-numeric:tabular-nums}
.wallet-hero .first{display:inline-flex;align-items:center;gap:8px}
.wallets{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;padding:12px 16px 16px}
.wallet{border:1px solid var(--line);border-radius:10px;background:var(--surface2);padding:12px 12px 10px 15px;display:flex;flex-direction:column;gap:7px;min-width:0;position:relative;overflow:hidden}
.wallet::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px}
.wallet.w-deepseek::before{background:var(--v-deepseek)}.wallet.w-anthropic::before{background:var(--v-anthropic)}.wallet.w-openai::before{background:var(--v-openai)}
.wallet.w-openrouter::before{background:var(--v-openrouter)}.wallet.w-gemini::before{background:var(--v-gemini)}.wallet.w-groq::before{background:var(--v-groq)}
.w-head{display:flex;align-items:center;gap:8px;min-width:0}
.w-name{font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.w-head .pill{margin-left:auto}
.w-val{font-family:var(--mono);font-size:25px;font-weight:600;letter-spacing:-.02em;line-height:1.1;font-variant-numeric:tabular-nums;white-space:nowrap}
.w-val.dim{color:var(--ink3)}
.w-val small{font-size:12px;color:var(--ink2);font-weight:500;margin-left:6px;letter-spacing:0}
.w-meter{height:4px;border-radius:2px;background:var(--surface3);overflow:hidden}
.w-meter i{display:block;height:100%;width:0;border-radius:2px;background:var(--good)}
.w-meter.off{visibility:hidden}
.w-meter i.warn{background:var(--warn)}.w-meter i.crit{background:var(--crit)}
.w-sub{font-size:12px;color:var(--ink2);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.w-sub.err{color:var(--crit-ink)}
.w-foot{display:flex;gap:4px;align-items:center;margin:0 0 0 -6px}
.w-foot a,.w-foot button{font-size:12px;font-weight:600;color:var(--accent-ink);text-decoration:none;display:inline-flex;align-items:center;gap:4px;height:26px;padding:0 6px;border-radius:6px}
.w-foot a:hover,.w-foot button:hover{background:var(--accent-soft)}
.w-foot svg,a.ext svg{width:12px;height:12px;stroke:currentColor;fill:none;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
a.ext{display:inline-flex;align-items:center;gap:4px;text-decoration:none;font-weight:600}
.wallets .empty{grid-column:1/-1}

.chart.stack{height:230px}
.chart.stack .hl{fill:var(--ink);opacity:0}
.chart.stack .hl.on{opacity:.06}
.chart.stack .base{stroke:var(--line)}
.chart.stack .today{opacity:.72}
.chart.stack .none{fill:var(--ink3);font-family:var(--sans);font-size:13px}
.tip.multi{white-space:normal;text-align:left;min-width:180px;line-height:1.55;transform:translate(-50%,calc(-100% - 12px));font-size:11px}
.tip .tt{font-weight:600;margin-bottom:3px;opacity:.75}
.tip .tr{display:flex;align-items:center;gap:7px}
.tip .tr i{width:8px;height:8px;border-radius:2px;flex:none}
.tip .tr b{margin-left:auto;padding-left:14px;font-weight:600}
.tip .tr.sum{border-top:1px solid rgba(127,127,127,.35);margin-top:3px;padding-top:3px}
.vcell{display:inline-flex;align-items:center;gap:8px;font-weight:500}
td .sub2{display:block;font-size:11px;color:var(--ink3);font-family:var(--sans);margin-top:1px}
tr.sum td{font-weight:600;background:var(--surface2)}
tr.subtotal td{font-weight:600;color:var(--ink2)}
td.linkcell{white-space:nowrap}
td.linkcell a,td.linkcell button{font-size:12px;font-weight:600;color:var(--accent-ink);padding:4px 6px;border-radius:6px}
td.linkcell button:hover,td.linkcell a:hover{background:var(--accent-soft)}
@media (max-width:1100px){.wallets{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:760px){
  .wallet-hero{padding:14px 12px 4px;gap:8px 18px}
  .wallet-hero .big{font-size:30px}
  .wallets{gap:8px;padding:10px 12px 12px}
  .wallet{padding:10px 10px 8px 13px;gap:6px}
  .w-val{font-size:19px}
  .w-head{flex-wrap:wrap;gap:4px 8px}
  .w-head .pill{margin-left:0}
  .w-name{flex-basis:100%}
  .w-sub{white-space:normal;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;line-height:1.35}
  .w-foot a span.lbl{display:none}
  .chart.stack{height:200px}
  table.stack td.linkcell::before{content:none}
}

/* ---------- updates ---------- */
.upd-top{display:flex;align-items:flex-start;gap:16px;padding:18px 16px 6px;flex-wrap:wrap}
.upd-state{min-width:0;flex:1 1 320px}
.upd-big{font-size:30px;font-weight:700;letter-spacing:-.03em;line-height:1.05;margin-top:4px}
.upd-big.on{color:var(--accent-ink)}
.upd-big.off{color:var(--ink3)}
.upd-state .d{color:var(--ink2);font-size:13px;margin-top:8px;max-width:680px;text-wrap:pretty}
.upd-top .toggle{margin-left:auto;padding-top:4px}
.upd-flow{list-style:none;margin:0;padding:12px 16px 16px;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));column-gap:20px}
.upd-flow li{min-width:0;position:relative;padding:9px 10px 9px 12px;border:1px solid var(--line);background:var(--surface2);border-radius:10px;display:flex;flex-direction:column;gap:2px}
.upd-flow li+li::before{content:"";position:absolute;left:-20px;top:50%;width:20px;height:2px;background:var(--line)}
.upd-flow li+li::after{content:"";position:absolute;left:-7px;top:calc(50% - 4px);border:5px solid transparent;border-left-color:var(--ink3);border-right:0}
.upd-flow b{font-family:var(--mono);font-size:13px;font-weight:600}
.upd-flow span{font-size:11.5px;color:var(--ink2);line-height:1.35}
.upd-flow li.gate{border-style:dashed;background:var(--surface)}
.upd-flow li.app{background:var(--accent-soft);border-color:transparent}
.upd-flow li.app b{color:var(--accent-ink)}
.upd-flow.off li.app{background:var(--surface3)}
.upd-flow.off li.app b{color:var(--ink3)}
.upd-last{padding:10px 16px;border-top:1px solid var(--line2);font-size:13px;color:var(--ink2);display:flex;gap:6px 14px;flex-wrap:wrap;align-items:center}
.upd-last b{color:var(--ink);font-weight:600}
.upd-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
.upd{background:var(--surface);border:1px solid var(--line);border-radius:var(--r);padding:14px 14px 12px 18px;display:flex;flex-direction:column;gap:8px;position:relative;overflow:hidden;min-width:0}
.upd::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--line)}
.upd.s-good::before{background:var(--good)}.upd.s-accent::before{background:var(--accent)}.upd.s-warn::before{background:var(--warn)}
.upd.s-serious::before{background:var(--serious)}.upd.s-crit::before{background:var(--crit)}.upd.s-neutral::before{background:var(--ink3)}
.upd.busy{box-shadow:inset 0 0 0 2px var(--accent)}
.upd-h{display:flex;align-items:center;gap:8px;min-width:0}
.upd-h .nm{font-weight:600;font-size:15px}
.upd-h .right{margin-left:auto;display:flex;align-items:center;gap:8px}
.upd-h .toggle{font-size:12px}
.upd-v{display:flex;align-items:baseline;gap:4px 10px;font-family:var(--mono);font-variant-numeric:tabular-nums;flex-wrap:wrap;min-width:0}
.upd-v .cur,.upd-v .new{font-size:24px;font-weight:600;letter-spacing:-.02em;line-height:1.1}
.upd-v .arr{color:var(--ink3);font-size:18px}
.upd-v .new.k-patch{color:var(--accent-ink)}.upd-v .new.k-minor{color:var(--serious-ink)}.upd-v .new.k-major{color:var(--crit-ink)}
.upd-v .tag{font-size:12px;color:var(--ink3);flex-basis:100%}
.upd-sub{font-size:12px;color:var(--ink2);display:flex;gap:6px;flex-wrap:wrap;align-items:center}
.upd-note{font-size:12px;color:var(--ink3);text-wrap:pretty}
.upd-err{font-size:12px;color:var(--crit-ink);word-break:break-word}
.upd-act{display:flex;gap:6px;flex-wrap:wrap;margin-top:auto;padding-top:4px;align-items:center}
.upd-act .links{margin-left:auto;display:flex;gap:12px;font-size:12px}
.upd-act .btn.warnish{color:var(--serious-ink);border-color:var(--serious-soft);background:var(--serious-soft)}
.upd-run .card-body{display:flex;flex-direction:column;gap:14px}
.upd-run .run-h{display:flex;align-items:baseline;gap:6px 12px;flex-wrap:wrap}
.upd-run .run-h b{font-size:16px}
.upd-run .run-h .mono{font-size:15px}
.upd-run .run-h .btn{margin-left:auto}
.upd-steps{list-style:none;margin:0;padding:0;display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:8px}
.upd-steps li{display:flex;flex-direction:column;gap:6px;font-size:11.5px;color:var(--ink3)}
.upd-steps li i{height:6px;border-radius:999px;background:var(--surface3)}
.upd-steps li.done{color:var(--ink2)}.upd-steps li.done i{background:var(--good)}
.upd-steps li.now{color:var(--accent-ink);font-weight:600}.upd-steps li.now i{background:var(--accent);animation:updPulse 1.2s ease-in-out infinite}
.upd-steps li.bad{color:var(--warn-ink);font-weight:600}.upd-steps li.bad i{background:var(--warn);animation:updPulse 1.2s ease-in-out infinite}
@keyframes updPulse{50%{opacity:.35}}
#updTbl td.wrap{white-space:normal;min-width:200px}
#updTbl td.wrap .muted{display:block;margin-top:3px}
.runlog{font-family:var(--mono);font-size:11.5px;line-height:1.5;background:var(--surface2);border-radius:8px;padding:10px 12px;max-height:62vh;overflow:auto;white-space:pre-wrap;word-break:break-word;margin:0}
.runlog b{color:var(--accent-ink)}
.runlog b.res{color:var(--good-ink)}
.runlog b.res.bad{color:var(--crit-ink)}
.modal.wide{width:min(880px,100%)}
@media (max-width:1100px){.upd-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:900px){
  .upd-flow{grid-template-columns:1fr;row-gap:14px;padding:10px 12px 14px}
  .upd-flow li+li::before{left:22px;top:-14px;width:2px;height:14px}
  .upd-flow li+li::after{left:18px;top:-6px;border:5px solid transparent;border-top-color:var(--ink3);border-bottom:0}
}
@media (max-width:760px){
  .upd-grid{grid-template-columns:1fr}
  .upd-big{font-size:24px}
  .upd-steps{grid-template-columns:repeat(4,minmax(0,1fr))}
  .upd-run .run-h .btn{margin-left:0}
}
