/* Public read-only dashboard. Builds on base.css tokens. */
.dash{background:radial-gradient(ellipse 60% 40% at 80% -5%,rgba(109,40,217,.18),rgba(4,7,19,0) 70%),radial-gradient(ellipse 50% 35% at 0% 0%,rgba(229,23,99,.08),rgba(4,7,19,0) 70%),var(--bg);background-attachment:fixed}
.ro-chip{display:inline-flex;align-items:center;gap:7px;height:30px;padding:0 12px;border-radius:999px;border:1px solid var(--line-2);font:600 11px/1 var(--mono);letter-spacing:.12em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap}
.ro-chip .icon{width:14px;height:14px}
.fresh{margin-left:auto;display:inline-flex;align-items:center;gap:9px;font:500 12px/1 var(--mono);letter-spacing:.04em;color:#a8f7cf;white-space:nowrap}
.fresh.stale{color:#ffd08a}
.fresh.stale .dot{background:var(--warn);animation:none}
.fresh-age{color:var(--muted)}
.back .icon{width:16px;height:16px}
.back .label-short{display:none}

.dash-main{padding-top:104px;padding-bottom:40px}
.dash-head{display:flex;justify-content:space-between;align-items:flex-end;gap:24px;flex-wrap:wrap;margin-bottom:26px}
.dash-head h1{font:800 clamp(30px,3.6vw,46px)/1.08 var(--head);letter-spacing:-.035em;margin-top:14px}
.dash-head .accent{color:var(--pink)}
.dash-sub{margin-top:10px;color:var(--muted);font-size:15px}
.dash-sub .sep{margin:0 10px;color:var(--dim)}
.dash-legend{display:flex;flex-wrap:wrap;gap:10px 18px}
.dash-legend .status{font-size:11px}
.dash-legend .dot{width:7px;height:7px}
.stale-banner{display:flex;align-items:center;gap:12px;margin-bottom:18px;padding:12px 16px;border-radius:14px;background:rgba(255,181,71,.08);border:1px solid rgba(255,181,71,.3);color:#ffd08a;font-size:14px}
.stale-banner .icon{width:18px;height:18px}
.dim-data .kpis,.dim-data .dgrid{opacity:.62;transition:opacity .3s}

/* KPI row */
.kpis{display:grid;grid-template-columns:1.2fr repeat(4,1fr);gap:14px}
.kpi{position:relative;padding:18px 20px 16px;border-radius:18px;background:linear-gradient(180deg,rgba(255,255,255,.05),rgba(255,255,255,.015));border:1px solid rgba(160,175,255,.14);overflow:hidden;min-width:0}
.kpi header{display:flex;align-items:center;justify-content:space-between;gap:10px;font-size:13px;color:var(--ink-2)}
.kpi header em{font:500 10px/1 var(--mono);font-style:normal;letter-spacing:.1em;text-transform:uppercase;color:var(--dim)}
.kpi header .icon{width:17px;height:17px;color:var(--muted)}
.kv{margin-top:14px;display:flex;align-items:baseline;gap:6px;white-space:nowrap}
.kv b{font:700 34px/1 var(--font);letter-spacing:-.025em;color:#fff}
.kv small{font-size:15px;color:var(--muted);font-weight:500}
.kpi-hero .kv b{font-size:52px}
.kd{margin-top:8px;font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.kbar{display:flex;gap:3px;margin-top:12px}
.kbar i{flex:1;height:5px;border-radius:3px;background:var(--ok)}
.kbar i.warn{background:var(--warn)}.kbar i.bad{background:var(--bad)}.kbar i.neutral{background:rgba(143,152,187,.4)}
.kspark{position:absolute;left:0;right:0;bottom:0;width:100%;height:36px;opacity:.9}
.kpi.has-spark{padding-bottom:42px}

/* grid & panels */
.dgrid{display:grid;grid-template-columns:repeat(12,minmax(0,1fr));gap:14px;margin-top:14px}
.panel{padding:20px 22px 22px;border-radius:20px;background:linear-gradient(180deg,rgba(255,255,255,.045),rgba(255,255,255,.012));border:1px solid rgba(160,175,255,.13);min-width:0}
.span-4{grid-column:span 4}.span-5{grid-column:span 5}.span-7{grid-column:span 7}.span-8{grid-column:span 8}.span-12{grid-column:span 12}
.ph{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:18px}
.ph h2{font:700 17px/1.25 var(--head);letter-spacing:-.01em}
.ph p{margin-top:4px;font-size:13px;color:var(--muted)}
.ph-icon{color:var(--sky)}
.ph-tools{display:flex;align-items:center;gap:8px}
.pill{display:inline-flex;align-items:center;height:26px;padding:0 10px;border-radius:7px;border:1px solid var(--line-2);font:600 10.5px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--ink-2);white-space:nowrap}
.tbtn{display:inline-flex;align-items:center;gap:6px;height:28px;padding:0 10px;border-radius:7px;border:1px solid var(--line-2);background:transparent;font:600 11px/1 var(--font);color:var(--ink-2)}
.tbtn .icon{width:14px;height:14px}
.tbtn[aria-pressed=true]{background:rgba(255,255,255,.08);color:#fff}

/* cluster map */
.map{display:grid;grid-template-columns:200px 1fr;gap:18px;align-items:center}
.map-hub{display:flex;flex-direction:column;align-items:center;gap:12px;text-align:center;padding:18px 10px;border-radius:16px;background:linear-gradient(170deg,rgba(255,79,154,.14),rgba(109,40,217,.08) 60%,rgba(10,14,34,.6));border:1px solid rgba(255,110,170,.42);box-shadow:0 0 50px -10px rgba(229,23,99,.3)}
.mh-disc{width:56px;height:56px;border-radius:50%;background:#fff;display:grid;place-items:center;box-shadow:0 0 24px 4px rgba(255,79,154,.3)}
.map-hub b{display:block;font:700 14px/1.2 var(--head)}
.map-hub span{display:block;margin-top:4px;font-size:11px;color:#ffd0e5}
.map-nodes{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px;position:relative}
.mnode{position:relative;padding:12px 12px 10px;border-radius:13px;background:#0b1124;border:1px solid #1c263c;min-width:0;transition:border-color .2s,background .2s}
.mnode::before{content:"";position:absolute;left:-1px;top:12px;bottom:12px;width:2px;border-radius:2px;background:var(--ok)}
.mnode.warn::before{background:var(--warn)}.mnode.bad::before{background:var(--bad)}.mnode.neutral::before{background:rgba(143,152,187,.45)}
.mnode:hover{border-color:#34415b;background:#0f1730}
.mnode-top{display:flex;align-items:center;gap:8px}
.mnode-top .icon{width:16px;height:16px;color:var(--pink-l)}
.mnode.x86 .mnode-top .icon{color:var(--sky)}
.mnode-top b{font:700 13.5px/1.2 var(--head);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mnode-top em{margin-left:auto;font:500 9.5px/1 var(--mono);font-style:normal;letter-spacing:.08em;text-transform:uppercase;color:var(--dim)}
.mnode .status{margin-top:9px;font-size:10px}
.mnode .status .dot{width:6px;height:6px;box-shadow:none}
.mnode-meta{display:flex;justify-content:space-between;gap:8px;margin-top:8px;font:500 11px/1 var(--mono);color:var(--muted)}
.mnode-meta span{white-space:nowrap}

/* chain status */
.cs-k{font:600 10.5px/1 var(--mono);letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.cs-head{margin-top:10px;font:700 40px/1 var(--font);letter-spacing:-.03em}
.cs-age{margin-top:8px;font-size:13px;color:var(--muted)}
#cs-ref{margin-top:14px}
.badge{display:inline-flex;align-items:center;gap:7px;padding:6px 10px;border-radius:8px;font:500 12px/1.2 var(--font)}
.badge.ok{background:rgba(62,224,143,.1);border:1px solid rgba(62,224,143,.3);color:#a8f7cf}
.badge.warn{background:rgba(255,181,71,.1);border:1px solid rgba(255,181,71,.3);color:#ffd08a}
.badge.neutral{background:rgba(143,152,187,.1);border:1px solid rgba(143,152,187,.3);color:var(--ink-2)}
.badge .dot{width:6px;height:6px;box-shadow:none}
.cs-list{margin:18px 0 0;display:grid;gap:0}
.cs-list > div{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-top:1px solid var(--line);font-size:13.5px}
.cs-list dt{color:var(--muted)}
.cs-list dd{margin:0;color:var(--ink);text-align:right}

/* charts */
.chart{position:relative;height:210px}
.chart-sm{height:120px}
.chart svg{display:block;width:100%;height:100%;overflow:visible}
.chart-k{margin:14px 0 6px;font-size:12px;color:var(--muted)}
.chart .empty{position:absolute;left:48px;right:0;top:40%;text-align:center;font:500 12px/1.4 var(--mono);color:var(--dim);pointer-events:none}
.axis text{font:500 10.5px var(--mono);fill:var(--dim)}
.grid-line{stroke:rgba(150,165,255,.1);stroke-width:1}
.base-line{stroke:rgba(150,165,255,.26);stroke-width:1}
.cross{stroke:rgba(220,228,255,.5);stroke-width:1}
.table-wrap{overflow-x:auto;-webkit-overflow-scrolling:touch}
.dtable{width:100%;border-collapse:collapse;font-size:13px}
.dtable th{position:sticky;top:0;background:#0d1328;text-align:right;padding:8px 10px;font:600 10.5px/1 var(--mono);letter-spacing:.08em;text-transform:uppercase;color:var(--muted);border-bottom:1px solid var(--line-2)}
.dtable th:first-child,.dtable td:first-child{text-align:left}
.dtable td{padding:7px 10px;text-align:right;border-bottom:1px solid var(--line);font-variant-numeric:tabular-nums;color:var(--ink-2)}
#traffic-table{max-height:360px;overflow:auto}

/* distribution */
.dist{display:grid;gap:12px}
.drow{display:grid;grid-template-columns:1fr auto;gap:6px 10px;align-items:center;cursor:default;padding:2px 0}
.drow .dn{display:flex;align-items:center;gap:8px;font-size:13px;color:var(--ink-2);min-width:0}
.drow .dn span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.drow .dn .dot{width:6px;height:6px;box-shadow:none}
.drow .dv{font:500 11.5px/1 var(--mono);color:var(--muted);font-variant-numeric:tabular-nums;white-space:nowrap}
.drow .dbar{grid-column:1 / -1;height:8px;border-radius:0 4px 4px 0;background:rgba(150,165,255,.08);overflow:hidden}
.drow .dbar i{display:block;height:100%;border-radius:0 4px 4px 0;background:var(--sky);transition:width .6s var(--ease)}
.drow:hover .dbar i,.drow:focus-visible .dbar i{background:#7ad6ff}
.dist-empty{font-size:13px;color:var(--muted)}

/* fleet table */
.fleet-summary{display:grid;grid-template-columns:repeat(6,1fr);gap:10px;margin-bottom:18px}
.fs{padding:12px 14px;border-radius:13px;background:#0b1124;border:1px solid #1c263c;min-width:0}
.fs span{display:block;font-size:11.5px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.fs b{display:block;margin-top:8px;font:700 20px/1 var(--font);letter-spacing:-.01em;white-space:nowrap}
.fs b small{font-size:.62em;color:var(--muted);font-weight:500;margin-left:3px}
.ftable{width:100%;min-width:1060px;border-collapse:collapse;font-size:13px}
.ftable th{text-align:left;padding:0 8px 10px;font:600 10px/1.2 var(--mono);letter-spacing:.1em;text-transform:uppercase;color:var(--dim);border-bottom:1px solid var(--line-2);white-space:nowrap}
.ftable td{padding:12px 8px;border-bottom:1px solid var(--line);vertical-align:middle;color:var(--ink-2);white-space:nowrap}
.ftable tbody tr:hover td{background:rgba(255,255,255,.02)}
.ft-node{display:flex;align-items:center;gap:10px}
.ft-node .ic{width:30px;height:30px;border-radius:9px;display:grid;place-items:center;background:rgba(255,255,255,.05);color:var(--pink-l);flex:none}
.ft-node .ic.x86{color:var(--sky)}
.ft-node .ic .icon{width:16px;height:16px}
.ft-node b{display:block;font:700 13.5px/1.2 var(--head);color:#fff}
.ft-node small{display:block;margin-top:3px;font-size:11px;color:var(--dim);max-width:180px;overflow:hidden;text-overflow:ellipsis}
.ft-issue{display:block;margin-top:5px;font-size:11px;color:var(--muted);max-width:170px;overflow:hidden;text-overflow:ellipsis}
.meter{display:grid;grid-template-columns:38px 58px;align-items:center;gap:8px}
.sub{display:block;margin-top:6px;font:500 11px/1.2 var(--mono);color:var(--dim)}
.meter b{font:600 13px/1 var(--font);color:#fff;font-variant-numeric:tabular-nums;text-align:right}
.meter i{display:block;height:6px;border-radius:3px;background:rgba(60,196,255,.14);overflow:hidden}
.meter i::after{content:"";display:block;height:100%;width:var(--w,0%);border-radius:0 3px 3px 0;background:var(--sky)}
.meter.warn i::after{background:var(--warn)}.meter.bad i::after{background:var(--bad)}
.spark{display:flex;align-items:center;gap:10px}
.spark svg{width:92px;height:30px;overflow:visible;flex:none}
.spark b{font:600 13px/1 var(--font);color:#fff;font-variant-numeric:tabular-nums;min-width:62px}
.spark b.warn{color:#ffd08a}.spark b.bad{color:#ff9aa4}
.net{font:500 12px/1.5 var(--mono);color:var(--ink-2)}
.net span{color:var(--dim)}
.clients{display:flex;gap:6px}
.cl{display:inline-flex;align-items:center;gap:6px;height:24px;padding:0 8px;border-radius:7px;font:600 10.5px/1 var(--mono);letter-spacing:.06em;border:1px solid rgba(62,224,143,.3);background:rgba(62,224,143,.08);color:#a8f7cf}
.cl.bad{border-color:rgba(255,92,108,.35);background:rgba(255,92,108,.08);color:#ff9aa4}
.cl.neutral{border-color:var(--line-2);background:transparent;color:var(--muted)}
.cl .dot{width:5px;height:5px;box-shadow:none}
.peers{display:block;margin-top:5px;font-size:11px;color:var(--dim)}

/* events */
.events{list-style:none;margin:0;padding:0;max-height:360px;overflow:auto}
.events li{display:grid;grid-template-columns:76px 110px 1fr;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--line);font-size:13px}
.events li:first-child{border-top:0}
.events time{font:500 11.5px/1 var(--mono);color:var(--dim)}
.events b{font-weight:600;color:#fff;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.events .msg{display:flex;align-items:center;gap:8px;color:var(--ink-2)}
.events .msg .dot{width:6px;height:6px;box-shadow:none}
.events .none{color:var(--muted);display:block;padding:10px 0}
.about ul{list-style:none;margin:0 0 20px;padding:0;display:grid;gap:12px}
.about li{font-size:13.5px;line-height:1.55;color:var(--ink-2);padding-left:14px;border-left:2px solid rgba(255,128,184,.35)}
.about li b{color:#fff;font-weight:600}
.dash-foot{padding:34px 0 30px;margin-top:20px}
.dash-foot-top{display:flex;align-items:center;justify-content:space-between;gap:16px;flex-wrap:wrap;font-size:13px;color:var(--muted)}
.dash-foot-top .socials{margin-top:0}
.dash-foot .footer-fine{margin-top:22px}
.dash-foot .footer-fine a{color:var(--muted)}
.dash-foot .footer-fine a:hover{color:var(--ink)}

@media (max-width:1180px){
  .kpis{grid-template-columns:repeat(3,1fr)}
  .kpi-hero{grid-column:span 1}
  .span-8,.span-4,.span-7,.span-5{grid-column:span 12}
  .fleet-summary{grid-template-columns:repeat(3,1fr)}
}
@media (max-width:760px){
  .ro-chip{display:none}
  .kpi header em{display:none}
  .dash-head .eyebrow{letter-spacing:.14em;font-size:12px}
  .back .label-long{display:none}
  .back .label-short{display:inline}
  .back{padding:0 12px}
  .fresh{font-size:11px}
  .dash-main{padding-top:84px}
  .kpis{grid-template-columns:1fr 1fr}
  .kpi-hero{grid-column:span 2}
  .kv b{font-size:28px}
  .kpi-hero .kv b{font-size:44px}
  .panel{padding:16px 14px 18px;border-radius:16px}
  .map{grid-template-columns:1fr}
  .map-hub{flex-direction:row;text-align:left;padding:12px 14px}
  .mh-disc{width:44px;height:44px}
  .map-nodes{grid-template-columns:1fr 1fr}
  .fleet-summary{grid-template-columns:1fr 1fr}
  .events li{grid-template-columns:64px 1fr;row-gap:4px}
  .events .msg{grid-column:1 / -1}
  .chart{height:180px}
  .dash-sub .sep{margin:0 6px}
}
@media (max-width:480px){
  .fresh-age{display:none}
  .brand span{display:none}
}
