:root{--ink:#eaf0e8;--muted:#94a29a;--line:#273833;--panel:#10221e;--bg:#071312;--mint:#b9f25d;--aqua:#73e5c3;--orange:#ffb36a}*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font-family:Inter,ui-sans-serif,system-ui,sans-serif}a{color:inherit;text-decoration:none}button{font:inherit;cursor:pointer}.shell{max-width:1440px;margin:auto;padding:0 58px}.topbar{height:92px;display:flex;align-items:center;border-bottom:1px solid rgba(137,180,155,.15);gap:60px}.brand{font-weight:800;letter-spacing:-.7px;display:flex;align-items:center;gap:10px}.brand-mark{display:grid;place-items:center;background:var(--mint);color:#102118;width:30px;height:30px;border-radius:9px 9px 9px 2px;font-size:22px;font-weight:800;font-style:italic}.nav{display:flex;gap:34px;color:#aab9b0;font-size:13px}.nav a:hover,.footer-links a:hover{color:var(--mint)}.menu{display:none;background:none;color:var(--ink);border:0;font-size:20px}.kicker{font:500 11px 'DM Mono',monospace;text-transform:uppercase;letter-spacing:1.6px;color:var(--aqua)}.status-strip{display:flex;align-items:center;gap:17px;background:var(--panel);border:1px solid #213b31;border-radius:10px;padding:20px 25px;margin-bottom:82px}.status-icon{width:29px;height:29px;border-radius:50%;display:grid;place-items:center;background:#204c38;color:var(--mint);font-weight:800}.status-strip strong,.status-strip span{display:block;font-size:13px}.status-strip span{color:var(--muted);font-size:11px;margin-top:3px}.strip-right{margin-left:auto;color:var(--mint);font:500 14px 'DM Mono',monospace}.strip-right small{color:#718079;margin-left:8px;font-size:10px}.section-head{display:flex;justify-content:space-between;align-items:end;margin-bottom:28px}.section-head h2{font-size:29px;letter-spacing:-1.5px;margin:10px 0 0}.section-controls{display:flex;align-items:center;gap:24px}.legend{display:flex;gap:17px;color:#85938b;font:10px 'DM Mono',monospace}.legend span{display:flex;align-items:center;gap:6px}.dot{width:6px;height:6px;border-radius:50%;display:inline-block}.operational{background:var(--aqua)}.degraded{background:var(--orange)}.filter-btn{display:inline-flex;align-items:center;gap:6px;background:#152a24;border:1px solid var(--line);color:var(--ink);padding:9px 12px;border-radius:5px;font-size:11px}.service-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px}.service-card{background:#0c1c19;border:1px solid #1b332b;border-radius:8px;padding:21px;min-height:153px;transition:.2s}.service-card:hover{border-color:#466653;transform:translateY(-2px)}.service-top{display:flex;justify-content:space-between;align-items:start}.service-icon{width:33px;height:33px;border-radius:9px;background:#1b352a;color:var(--mint);display:grid;place-items:center;font-weight:700}.service-status{font:10px 'DM Mono',monospace;color:var(--aqua)}.service-card h3{font-size:15px;margin:18px 0 7px}.service-card p{color:#7f9087;font-size:11px;margin:0}.service-bottom{display:flex;align-items:end;justify-content:space-between;margin-top:19px}.service-uptime{color:#d8e7d7;font:11px 'DM Mono',monospace}.sparkline{height:24px;width:78px}.sparkline polyline{fill:none;stroke:var(--aqua);stroke-width:1.6}.lower-grid{display:grid;grid-template-columns:1.08fr .92fr;gap:76px;margin:112px 0 100px}.compact{align-items:center}.incident-list{border-top:1px solid var(--line)}.incident{display:flex;align-items:start;gap:15px;padding:20px 0;border-bottom:1px solid var(--line)}.incident-check{border:1px solid #3c8068;color:var(--aqua);border-radius:50%;width:21px;height:21px;text-align:center;font-size:12px;flex:none}.incident strong{font-size:13px}.incident p{font-size:11px;color:#788b81;margin:7px 0 0}.incident time{margin-left:auto;color:#697970;font:10px 'DM Mono',monospace;white-space:nowrap}.year{color:#718079;font:10px 'DM Mono',monospace}.bars{height:114px;display:flex;align-items:end;justify-content:space-between;gap:7px;border-bottom:1px solid var(--line);padding:10px 0 9px}.bar{background:#65cda5;border-radius:2px 2px 0 0;flex:1;min-height:4px;position:relative}.bar:hover{background:var(--mint)}.bar-labels{display:flex;justify-content:space-between;color:#66776e;font:9px 'DM Mono',monospace;padding-top:10px}.uptime-foot{margin-top:30px;display:flex;align-items:baseline;gap:10px}.uptime-foot strong{font-size:25px;color:var(--mint);letter-spacing:-1px}.uptime-foot span{color:#728178;font-size:11px}footer{border-top:1px solid var(--line);height:110px;display:flex;align-items:center;color:#66776e;font-size:10px;gap:24px}.footer-brand{color:var(--ink);font-size:12px}.footer-brand .brand-mark{width:22px;height:22px;font-size:15px}.footer-links{margin-left:auto;display:flex;gap:22px}.modal-backdrop{position:fixed;inset:0;background:rgba(1,8,7,.78);backdrop-filter:blur(8px);display:none;place-items:center;padding:20px;z-index:5}.modal-backdrop.open{display:grid}.modal{position:relative;background:#10221e;border:1px solid #345044;box-shadow:0 18px 70px #0008;border-radius:12px;padding:40px;width:min(100%,450px)}.close{position:absolute;right:18px;top:14px;border:0;background:none;color:#a1b1a7;font-size:25px}.modal h2{font-size:32px;letter-spacing:-1.5px;margin:12px 0}.modal-copy{font-size:12px;line-height:1.7;color:#91a198;margin-bottom:26px}.primary{background:var(--mint);border:0;border-radius:6px;color:#102118;padding:13px 16px;font-weight:800}.full{width:100%;margin-top:15px}.primary span{float:right}.demo-note{text-align:center;color:#6f8379;font:10px 'DM Mono',monospace;margin:22px 0 0}.detail-modal{width:min(100%,620px)}.detail-kicker{display:flex;align-items:center;gap:10px;color:var(--aqua);font:10px 'DM Mono',monospace;text-transform:uppercase}.detail-modal h2{margin-top:18px}.detail-meta{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:28px 0}.metric{background:#0a1815;border:1px solid var(--line);border-radius:6px;padding:14px}.metric span{display:block;color:#72877c;font:9px 'DM Mono',monospace;text-transform:uppercase}.metric strong{display:block;color:var(--mint);font:18px 'DM Mono',monospace;margin-top:8px}.detail-note{font-size:11px;color:#91a198;line-height:1.6}.toast{position:fixed;bottom:25px;right:25px;background:var(--mint);color:#0a1c13;border-radius:6px;padding:13px 17px;font-size:12px;font-weight:700;transform:translateY(100px);transition:.3s;z-index:9}.toast.show{transform:translateY(0)}
@media(max-width:800px){.shell{padding:0 20px}.topbar{height:72px;gap:20px;position:relative;flex-wrap:wrap}.nav{display:none}.nav.open{display:flex;flex-direction:column;gap:0;width:100%;order:3;border-top:1px solid var(--line);margin-bottom:14px}.nav.open a{padding:14px 2px;border-bottom:1px solid var(--line);font-size:14px}.topbar:has(.nav.open){height:auto;padding-bottom:4px}.menu{display:block}.status-strip{margin-bottom:60px}.strip-right{display:none}.section-head{display:block}.section-controls{margin-top:25px;justify-content:space-between}.legend{gap:9px}.service-grid{grid-template-columns:1fr}.lower-grid{grid-template-columns:1fr;gap:58px;margin-top:80px}.uptime{padding-bottom:20px}footer{height:130px;flex-wrap:wrap;padding:25px 0}.footer-links{margin-left:0;width:100%}.detail-meta{grid-template-columns:1fr 1fr}}

/* UrbanSky Ops visual system: layered navy surfaces,cyan primary,monospace telemetry. */
:root{--ink:#fff;--muted:#8b90a0;--line:#2a2e3d;--panel:#1a1d27;--bg:#0f1117;--mint:#00bcee;--aqua:#34d399;--orange:#fbbf24}
body{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}
.brand-mark{background:var(--mint);color:#fff;border-radius:4px;font-style:normal}.nav{color:var(--muted)}.kicker{color:#74c0fc}.status-strip,.service-card,.modal{background:var(--panel);border-color:var(--line);border-radius:4px}.status-icon{background:#134e38;color:var(--aqua)}.strip-right,.service-uptime,.uptime-foot strong{color:var(--mint)}.service-icon{background:#232735;color:#74c0fc;border-radius:4px}.service-status{color:var(--aqua)}.service-card:hover{border-color:#0090b8}.sparkline polyline{stroke:var(--mint)}.incident-check{border-color:#176044;color:var(--aqua)}.bar{background:#00a3c8}.bar:hover{background:var(--mint)}.modal-backdrop{background:rgba(0,0,0,.7)}.modal{box-shadow:0 18px 70px #0008}.primary{background:var(--mint);border-radius:4px;color:#fff}.text-action{color:var(--mint)}
.summary-panel{background:var(--panel);border:1px solid #3d465d;border-radius:4px;margin-top:-58px;margin-bottom:82px;padding:21px 24px}.insight-heading{display:flex;justify-content:space-between;align-items:center;border-bottom:1px solid var(--line);padding-bottom:16px}.insight-heading .kicker{margin:0}.insight-heading>span,.insight-grid span,.insight-grid small,.insight-actions{font:10px 'DM Mono',monospace;color:#8b90a0}.insight-heading strong{color:var(--aqua);font-weight:400}.insight-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:0}.insight-grid>div{padding:20px 20px 18px 0;border-right:1px solid var(--line);margin-right:20px}.insight-grid>div:last-child{border:0}.insight-grid span,.insight-grid small{display:block}.insight-grid strong{display:block;font:20px 'DM Mono',monospace;color:var(--ink);margin:9px 0 5px}.insight-grid small.good{color:var(--aqua)}.insight-actions{border-top:1px solid var(--line);padding-top:15px}.insight-actions .text-action{border:0;background:transparent;font:10px 'DM Mono',monospace;margin-left:19px}
@media(max-width:800px){.insight-grid{grid-template-columns:1fr 1fr}.insight-grid>div:nth-child(2){border-right:0}.insight-heading{align-items:flex-start;gap:10px;flex-direction:column}.summary-panel{margin-bottom:60px}}
.service-link{display:inline-block;margin-top:20px;color:var(--mint);font:11px 'DM Mono',monospace}.health-source{color:#697b92;font:9px 'DM Mono',monospace;margin-top:17px;overflow-wrap:anywhere}.health-source code{color:#8b90a0}
.empty-chart{color:#68758a;font:10px 'DM Mono',monospace;padding:42px 0;text-align:center;width:100%}.bar-labels span:first-child:last-child{width:100%}
.unknown{background:#fbbf24}.down{background:#f87171}.service-status:has(.unknown){color:#fbbf24}.service-status:has(.down){color:#f87171}

.probe-history{border-top:1px solid var(--line);margin:10px 0 18px}.probe-history>div{display:flex;align-items:center;gap:9px;border-bottom:1px solid var(--line);padding:9px 0;color:#82909f;font:10px 'DM Mono',monospace}.probe-history>div strong{margin-left:auto;color:var(--ink);font-weight:400}.detail-history-empty{color:#718096;font:10px 'DM Mono',monospace;padding:12px 0}.probe-history .down{background:#f87171}.probe-history .unknown{background:#fbbf24}

/* Live-status surfaces: overall state,archive bars,derived incidents,detail chart. */
.status-icon.operational{background:#134e38;color:var(--aqua)}.status-icon.degraded{background:#4a3413;color:var(--orange)}.status-icon.unknown{background:#232735;color:var(--muted)}
.strip-right{display:flex;flex-direction:column;align-items:flex-end;gap:5px;text-align:right}.strip-updated{color:var(--mint);font:500 12px 'DM Mono',monospace;margin:0;white-space:nowrap}.strip-updated small{color:#68758a;margin-left:6px}
.filter-btn:disabled{opacity:.45;cursor:default}
.bar{max-width:40px;transition:background .2s}.bar.good{background:#34d399}.bar.warn{background:#fbbf24}.bar.bad{background:#f87171}.bar.empty{background:#2a2e3d}.bar:hover{background:var(--mint)}
.uptime-foot strong{font:25px 'DM Mono',monospace}
.incident.ongoing strong{color:#fca5a5}.incident-check.ongoing{border-color:#7f1d1d;color:#f87171}.incident-check.lapsed{border-color:#3d465d;color:var(--muted)}.incident.lapsed strong{color:#c3c9d6}
.chart-head{display:flex;justify-content:space-between;color:#72877c;font:9px 'DM Mono',monospace;text-transform:uppercase;margin:26px 0 8px}
.detail-chart{display:block;width:100%;height:auto;overflow:visible}
.chart-grid{stroke:var(--line);stroke-width:1}
.chart-area{fill:rgba(0,188,238,.12)}
.chart-line{fill:none;stroke:var(--mint);stroke-width:2;stroke-linejoin:round}
.detail-chart .point{fill:var(--mint)}.detail-chart .point.operational{fill:var(--aqua)}.detail-chart .point.unknown{fill:#fbbf24}.detail-chart .point.down{fill:#f87171}
.check-strip{display:flex;gap:3px;margin:9px 0 6px}.check-strip .check{flex:1;height:8px;border-radius:2px;background:#2a2e3d}.check-strip .check.operational{background:var(--aqua)}.check-strip .check.unknown{background:#fbbf24}.check-strip .check.down{background:#f87171}
.chart-axis{display:flex;justify-content:space-between;color:#68758a;font:9px 'DM Mono',monospace;margin-bottom:18px}
.detail-error{background:#2a1618;border:1px solid #7f1d1d;border-radius:4px;color:#fca5a5;font:10px 'DM Mono',monospace;padding:10px 12px;margin:0 0 18px;overflow-wrap:anywhere}
.probe-history>div em{font-style:normal;color:#68758a;overflow-wrap:anywhere}
.probe-history>div strong{margin-left:auto;padding-left:10px}
.service-card:focus-visible,.filter-btn:focus-visible,.close:focus-visible,.text-action:focus-visible{outline:2px solid var(--mint);outline-offset:2px}
.strip-stale{color:var(--orange);font:10px 'DM Mono',monospace;max-width:340px;line-height:1.5;margin:0}.strip-stale:empty{display:none}
.status-strip.stale{border-color:#5a4212}
.service-status:has(.degraded){color:var(--orange)}
@media(max-width:800px){.status-strip{flex-wrap:wrap;gap:12px}.status-strip>div:nth-child(2){flex:1 1 200px}.strip-right{width:100%;align-items:flex-start;text-align:left;border-top:1px solid var(--line);padding-top:10px}.strip-stale{max-width:100%}}
.service-host{display:block;margin-top:7px;color:#5f7086;font:10px 'DM Mono',monospace;overflow-wrap:anywhere}
.service-card:hover .service-host{color:#8b9bb2}
.service-groups{display:flex;flex-direction:column;gap:36px}
.group-head{display:flex;align-items:baseline;gap:14px;margin-bottom:14px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.group-head h3{margin:0;font-size:13px;letter-spacing:-.2px}
.group-head span{margin-left:auto;color:#68758a;font:10px 'DM Mono',monospace}
.service-search{width:190px;margin:0;background:#161a24;border:1px solid var(--line);color:var(--ink);border-radius:4px;padding:8px 10px;font:11px 'DM Mono',monospace}
.service-search::placeholder{color:#5f7086}
.service-search:focus-visible{outline:2px solid var(--mint);outline-offset:2px}
@media(max-width:800px){.service-search{width:100%;order:3}.section-controls{flex-wrap:wrap;gap:12px}}
.uptime-strip{display:flex;gap:1px;margin-top:15px;height:22px}
.uptime-strip .day{flex:1 1 0;min-width:0;border-radius:1px;background:#252a38;transition:opacity .15s}
.uptime-strip .day:hover{opacity:.6}
.uptime-strip .day.good{background:var(--aqua)}.uptime-strip .day.warn{background:var(--orange)}.uptime-strip .day.bad{background:#f87171}
.uptime-strip-labels{display:flex;align-items:baseline;gap:8px;margin-top:7px;color:#5f7086;font:9px 'DM Mono',monospace}
.uptime-strip-labels span:nth-child(3){margin-left:auto;color:#8b90a0}
.uptime-strip-labels span:last-child{margin-left:8px}
.range-short{display:none}
.maintenance-banner{display:flex;flex-direction:column;gap:10px;background:#1b2030;border:1px solid #3d465d;border-left:3px solid #74c0fc;border-radius:4px;padding:16px 20px;margin:-58px 0 40px}
.maintenance-row{display:flex;align-items:center;gap:14px}
.maintenance-tag{color:#74c0fc;font:10px 'DM Mono',monospace;text-transform:uppercase;letter-spacing:1px;white-space:nowrap}
.maintenance-row.live .maintenance-tag{color:var(--orange)}
.maintenance-row strong{display:block;font-size:13px}
.maintenance-row span{display:block;color:#8b90a0;font:10px 'DM Mono',monospace;margin-top:4px}
.tz-toggle{background:none;border:1px solid var(--line);border-radius:3px;color:#8b90a0;font:9px 'DM Mono',monospace;padding:2px 6px;margin-left:8px;text-transform:uppercase}
.tz-toggle:hover{color:var(--mint);border-color:var(--mint)}
.detail-meta{grid-template-columns:repeat(auto-fit,minmax(112px,1fr))}
.maintenance-banner:not([hidden])+.summary-panel{margin-top:0}
.region-list em{font-style:normal;color:var(--aqua);margin-left:auto;padding-right:12px}
.region-list>div strong{margin-left:0}
@media(max-width:800px){.uptime-strip .day:nth-child(-n+45){display:none}.range-long{display:none}.range-short{display:inline}}

/* ---- Homepage directory ---- */
/* Several layout rules set display on elements the app also toggles with [hidden]; without this
   the attribute silently loses to them. */
[hidden]{display:none!important}
.topbar{height:auto;min-height:78px;gap:24px;flex-wrap:wrap;padding:14px 0}
.search-wrap{position:relative;flex:1 1 260px;max-width:520px}
.directory-search{width:100%;background:#161a24;border:1px solid var(--line);color:var(--ink);border-radius:6px;padding:11px 44px 11px 14px;font-size:13px;margin:0}
.directory-search::placeholder{color:#5f7086}
.directory-search:focus-visible{outline:2px solid var(--mint);outline-offset:2px}
.search-hint{position:absolute;right:10px;top:50%;transform:translateY(-50%);color:#5f7086;font:10px 'DM Mono',monospace;border:1px solid var(--line);border-radius:4px;padding:2px 5px;pointer-events:none}
.view-nav{gap:6px}
.nav-btn{background:none;border:1px solid transparent;border-radius:6px;color:var(--muted);padding:8px 12px;font-size:13px}
.nav-btn:hover{color:var(--ink)}
.nav-btn.active{color:var(--ink);border-color:var(--line);background:#161a24}
.user-menu{position:relative;margin-left:auto}
.user-btn{display:flex;align-items:center;gap:9px;background:#161a24;border:1px solid var(--line);border-radius:6px;color:var(--ink);padding:7px 11px;font-size:13px}
.avatar{display:grid;place-items:center;width:23px;height:23px;border-radius:50%;background:var(--mint);color:#06202b;font-weight:800;font-size:11px}
.user-panel{position:absolute;right:0;top:calc(100% + 8px);min-width:230px;background:var(--panel);border:1px solid #3d465d;border-radius:6px;padding:16px;z-index:6;box-shadow:0 18px 50px #0009}
.user-panel strong{display:block;font-size:13px}
.user-panel span{display:block;color:var(--muted);font:10px 'DM Mono',monospace;margin-top:5px;overflow-wrap:anywhere}
.user-panel-action{width:100%;margin-top:14px;background:#161a24;border:1px solid var(--line);border-radius:5px;color:var(--ink);padding:9px;font-size:12px}
.user-panel-action:hover{border-color:var(--mint);color:var(--mint)}

.auth-gate{display:grid;place-items:center;min-height:70vh;padding:40px 0}
.auth-card{width:min(100%,430px);background:var(--panel);border:1px solid #3d465d;border-radius:8px;padding:38px}
.auth-mark{width:38px;height:38px;font-size:26px;margin-bottom:22px}
.auth-card h1{font-size:34px;letter-spacing:-1.6px;margin:12px 0 14px;line-height:1.05}
.auth-copy{color:#91a198;font-size:13px;line-height:1.65;margin:0 0 26px}
.auth-error{background:#2a1618;border:1px solid #7f1d1d;border-radius:5px;color:#fca5a5;font:11px 'DM Mono',monospace;padding:10px 12px;margin:0 0 18px}

.notice{border-radius:6px;padding:13px 16px;margin-bottom:22px;font-size:12px;line-height:1.6;display:flex;align-items:center;gap:12px;flex-wrap:wrap}
.notice code{font:10px 'DM Mono',monospace;color:var(--mint)}
.notice-warn{background:#231d10;border:1px solid #5a4212;color:#f3d9a4}
.notice-error{background:#2a1618;border:1px solid #7f1d1d;color:#fca5a5}
.notice-error .text-action{margin-left:auto;border:0;background:none;color:var(--mint);font:11px 'DM Mono',monospace}

.favorites-section{margin-bottom:56px}
.app-group{margin-bottom:34px}
.app-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:12px}
.app-card{position:relative;background:#131722;border:1px solid var(--line);border-radius:8px;padding:18px;transition:border-color .2s,transform .2s}
.app-card:hover{border-color:#0090b8;transform:translateY(-2px)}
.app-card.pinned{border-color:#2f4a63}
.app-card h3{font-size:15px;margin:14px 0 6px}
.app-card h3 a{color:inherit}
.app-card h3 a::after{content:"";position:absolute;inset:0;border-radius:8px}
.app-card h3 a:focus-visible{outline:none}
.app-card:has(h3 a:focus-visible){outline:2px solid var(--mint);outline-offset:2px}
.app-card p{color:#7f9087;font-size:11px;margin:0;min-height:28px}
.app-top{display:flex;justify-content:space-between;align-items:start}
.app-icon{display:grid;place-items:center;width:33px;height:33px;border-radius:8px;background:#232735;color:#74c0fc;font-weight:700}
/* Scoped names: the bare .down/.unknown classes carry a background for status dots and
   would paint the whole badge. */
.app-state{display:flex;align-items:center;gap:6px;font:10px 'DM Mono',monospace;color:var(--aqua);background:none}
.app-state.state-down{color:#f87171}.app-state.state-unknown{color:#fbbf24}
.app-host{display:block;margin-top:8px;color:#5f7086;font:10px 'DM Mono',monospace;overflow-wrap:anywhere}
.app-actions{position:relative;z-index:1;display:flex;align-items:center;gap:6px;margin-top:14px}
.pin{background:none;border:1px solid var(--line);border-radius:5px;color:#8b90a0;width:30px;height:28px;font-size:13px;line-height:1}
.pin:hover{color:var(--mint);border-color:var(--mint)}
.pin[aria-pressed="true"]{color:#fbbf24;border-color:#5a4212}
.move{background:#161a24;border:1px solid var(--line);border-radius:5px;color:var(--ink);width:28px;height:28px;font-size:11px;line-height:1}
.move:disabled{opacity:.35;cursor:default}
.app-detail{margin-left:auto;background:none;border:1px solid var(--line);border-radius:5px;color:#8b90a0;padding:6px 10px;font:10px 'DM Mono',monospace}
.app-detail:hover{color:var(--mint);border-color:var(--mint)}
.app-card.dragging{opacity:.45}
.app-card.drop-target{border-color:var(--mint);box-shadow:inset 0 0 0 1px var(--mint)}
.reorder-hint{color:#68758a;font:10px 'DM Mono',monospace}
.empty-chart code{color:var(--mint)}

@media(max-width:800px){.topbar{gap:12px}
  .search-wrap{order:4;flex:1 1 100%;max-width:none}
  .search-hint{display:none}
  .view-nav{display:none}
  .view-nav.open{display:flex;order:5;width:100%;gap:8px}
  .user-menu{margin-left:auto}
  .app-grid{grid-template-columns:1fr}
  .auth-card{padding:26px}}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important;scroll-behavior:auto!important}
  .app-card:hover{transform:none}}
.pin:focus-visible,.move:focus-visible,.app-detail:focus-visible,.nav-btn:focus-visible,.user-btn:focus-visible,.user-panel-action:focus-visible,#signInBtn:focus-visible,#reorderBtn:focus-visible,.app-launch:focus-visible{outline:2px solid var(--mint);outline-offset:2px;border-radius:5px}
#directoryChecked{margin-right:14px}

/* Launch confirmation for a failing app: shown inside the tile,never as a blocking dialog. */
/* The tile's launch link is stretched over the whole card via h3 a::after, so anything meant to
   be clickable inside a tile has to lift above it — same reason .app-actions sets z-index. */
.launch-warning{position:relative;z-index:1;display:flex;flex-wrap:wrap;align-items:center;gap:10px;background:#2a1618;border:1px solid #7f1d1d;border-radius:4px;padding:9px 11px;margin:12px 0 0;color:#fca5a5;font:10px 'DM Mono',monospace;line-height:1.5}
.launch-warning span{flex:1 1 100%}
.app-launch-anyway{color:#fca5a5;border-bottom:1px solid #7f1d1d;font-weight:700}
.app-launch-anyway:hover{color:#fff;border-bottom-color:#fca5a5}
.launch-warning .text-action{border:0;background:transparent;font:10px 'DM Mono',monospace;color:#8b90a0}
.app-launch-anyway:focus-visible,.launch-warning .text-action:focus-visible{outline:2px solid var(--mint);outline-offset:2px}

/* Error budget tiles. Tone follows the budget,not the current status: a service can be green
   right now and still have spent its whole allowance this window. */
.metric small{display:block;color:#68758a;font:9px 'DM Mono',monospace;margin-top:6px;line-height:1.4}
.metric.budget-healthy strong{color:var(--aqua)}
.metric.budget-at-risk strong{color:var(--orange)}
.metric.budget-breached strong{color:#f87171}
.metric.budget-breached{border-color:#7f1d1d}

/* Monitoring quality: what the checks cannot tell you,grouped by cause and ranked by severity. */
.gap-intro{color:#8b90a0;font-size:12px;line-height:1.6;margin:-14px 0 22px;max-width:640px}
.gap-list{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:14px}
.gap-group{background:var(--panel);border:1px solid var(--line);border-left:3px solid #3d465d;border-radius:4px;padding:16px 18px}
.gap-group.gap-catch-all{border-left-color:#f87171}
.gap-group.gap-unverified-path{border-left-color:var(--orange)}
.gap-group.gap-no-definitive-checks{border-left-color:var(--orange)}
.gap-group.gap-unprobed{border-left-color:#74c0fc}
.gap-group.gap-orphan-history{border-left-color:#3d465d}
.gap-head{display:flex;align-items:baseline;gap:12px;margin-bottom:9px}
.gap-head h3{margin:0;font-size:13px;letter-spacing:-.2px}
.gap-head span{margin-left:auto;color:#68758a;font:10px 'DM Mono',monospace}
.gap-fix{color:#8b90a0;font:10px 'DM Mono',monospace;line-height:1.6;margin:0 0 12px}
.gap-items{list-style:none;margin:0;padding:0;border-top:1px solid var(--line)}
.gap-items li{display:flex;flex-direction:column;gap:3px;padding:9px 0;border-bottom:1px solid var(--line)}
.gap-items strong{font-size:12px;font-weight:600}
.gap-items em{font-style:normal;color:#68758a;font:9px 'DM Mono',monospace;line-height:1.5;overflow-wrap:anywhere}

/* App sheet: what an app is, for people who never see the status report. */
.app-sheet{width:min(100%,520px)}
.sheet-head{display:flex;align-items:center;gap:15px;margin-bottom:20px}
.sheet-icon{width:44px;height:44px;font-size:20px;flex:none}
.sheet-head h2{margin:0 0 6px;font-size:26px;letter-spacing:-1px}
.sheet-facts{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin:0 0 24px;background:var(--line);border:1px solid var(--line);border-radius:4px;overflow:hidden}
.sheet-facts>div{background:#0a1119;padding:13px 15px}
.sheet-facts dt{color:#68758a;font:9px 'DM Mono',monospace;text-transform:uppercase;letter-spacing:1px}
.sheet-facts dd{margin:7px 0 0;font-size:12px;overflow-wrap:anywhere}
.sheet-facts dd.unrecorded{color:#68758a;font-style:italic}
.sheet-links{display:flex;flex-wrap:wrap;gap:10px}
.sheet-link{border:1px solid var(--line);border-radius:4px;padding:10px 14px;font:11px 'DM Mono',monospace;color:var(--ink)}
.sheet-link:hover{border-color:var(--mint);color:var(--mint)}
.sheet-link.primary-link{background:var(--mint);border-color:var(--mint);color:#fff;font-weight:700}
.sheet-link.primary-link:hover{color:#fff;opacity:.9}
.app-about{background:transparent;border:1px solid var(--line);border-radius:4px;color:#8b90a0;font:9px 'DM Mono',monospace;padding:5px 8px}
.app-about:hover{border-color:var(--mint);color:var(--mint)}
.app-about:focus-visible,.sheet-link:focus-visible,[data-close-sheet]:focus-visible{outline:2px solid var(--mint);outline-offset:2px}
@media(max-width:800px){.sheet-facts{grid-template-columns:1fr}}

/* Status must not be carried by hue alone. The badges already pair a colour with a word, but the
   uptime strip, the history bars and the check strip were colour-only — indistinguishable to a
   red/green colour-blind reader at these sizes. Failure gets a stripe, partial failure a lighter
   one, so the three states differ in texture as well as colour. */
.uptime-strip .day.bad,.bar.bad,.check-strip .check.down{background-image:repeating-linear-gradient(45deg,rgba(0,0,0,.3) 0 2px,transparent 2px 5px)}
.uptime-strip .day.warn,.bar.warn,.check-strip .check.unknown{background-image:repeating-linear-gradient(45deg,rgba(0,0,0,.18) 0 1px,transparent 1px 5px)}
@media(forced-colors:active){
  .uptime-strip .day,.bar,.check-strip .check{border:1px solid CanvasText}
  .uptime-strip .day.bad,.bar.bad,.check-strip .check.down{border-style:dashed}
}

/* Save feedback. Failure already has a banner; this is the other three quarters of the story. */
.save-state{color:#68758a;font:10px 'DM Mono',monospace;transition:color .2s}
.save-state[data-state="saved"]{color:var(--aqua)}
.save-state[data-state="offline"]{color:var(--orange)}
.save-state:empty{display:none}

/* Hiding an app and minimizing the catalog: both device-local, both reversible in one click. */
.sheet-hide{display:flex;flex-direction:column;gap:5px;margin:22px 0 0;padding-top:18px;border-top:1px solid var(--line)}
.sheet-hide .text-action{align-self:flex-start;background:transparent;border:0;padding:0;font:11px 'DM Mono',monospace;color:var(--mint)}
.sheet-hide span{color:#68758a;font:9px 'DM Mono',monospace;line-height:1.5}
.sheet-hide .text-action:focus-visible,#collapseBtn:focus-visible,#hiddenBtn:focus-visible{outline:2px solid var(--mint);outline-offset:2px}
