/* Belschwerk Leitstand */
@font-face { font-family: 'Barlow Condensed'; font-weight: 600; font-display: swap; src: url(fonts/barlow-condensed-latin-600-normal.woff2) format('woff2'); }
@font-face { font-family: 'Barlow Condensed'; font-weight: 700; font-display: swap; src: url(fonts/barlow-condensed-latin-700-normal.woff2) format('woff2'); }
@font-face { font-family: 'IBM Plex Sans'; font-weight: 400; font-display: swap; src: url(fonts/ibm-plex-sans-latin-400-normal.woff2) format('woff2'); }
@font-face { font-family: 'IBM Plex Sans'; font-weight: 500; font-display: swap; src: url(fonts/ibm-plex-sans-latin-500-normal.woff2) format('woff2'); }
@font-face { font-family: 'IBM Plex Sans'; font-weight: 600; font-display: swap; src: url(fonts/ibm-plex-sans-latin-600-normal.woff2) format('woff2'); }
@font-face { font-family: 'IBM Plex Mono'; font-weight: 400; font-display: swap; src: url(fonts/ibm-plex-mono-latin-400-normal.woff2) format('woff2'); }
@font-face { font-family: 'IBM Plex Mono'; font-weight: 500; font-display: swap; src: url(fonts/ibm-plex-mono-latin-500-normal.woff2) format('woff2'); }

:root {
  --bg: #121417; --side: #0D0F11; --panel: #191C20; --panel-2: #20242A; --panel-3: #282D34;
  --line: #2A2E35; --line-2: #383E46; --ink: #F1F0EC; --ink-2: #C3C6CB; --ink-3: #868B93;
  --copper: #B8642E; --copper-btn: #A65524; --copper-light: #E39A64; --copper-tint: rgba(184, 100, 46, .15);
  --ok: #5FBF85; --ok-tint: rgba(95, 191, 133, .13); --warn: #E0A84A; --warn-tint: rgba(224, 168, 74, .14);
  --bad: #F07A70; --bad-tint: rgba(240, 122, 112, .14); --info: #8FB0D6; --info-tint: rgba(143, 176, 214, .13);
  --display: 'Barlow Condensed', 'Arial Narrow', sans-serif; --sans: 'IBM Plex Sans', system-ui, 'Segoe UI', sans-serif; --mono: 'IBM Plex Mono', ui-monospace, Consolas, monospace;
  --radius: 8px; --tabbar-h: 62px; color-scheme: dark;
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body { margin: 0; background: var(--bg); color: var(--ink); font: 400 14.5px/1.5 var(--sans); -webkit-font-smoothing: antialiased; -webkit-tap-highlight-color: transparent; }
a { color: inherit; }
button, input, select, textarea { font: inherit; color: inherit; }
.ico { width: 18px; height: 18px; flex: none; fill: none; stroke: currentColor; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; display: block; }
.ico.sm { width: 15px; height: 15px; } .ico.lg { width: 22px; height: 22px; }
.mono { font-family: var(--mono); } .muted { color: var(--ink-3); } .hide { display: none !important; }
:focus-visible { outline: 2px solid var(--copper-light); outline-offset: 2px; }
::-webkit-scrollbar { width: 10px; height: 10px; } ::-webkit-scrollbar-thumb { background: var(--panel-3); border-radius: 5px; border: 2px solid transparent; background-clip: padding-box; }

/* Marke */
.mark { width: 36px; height: 28px; flex: none; } .mark path { fill: none; stroke: currentColor; stroke-width: 2.4; } .mark rect, .mark .pr { fill: var(--copper-light); stroke: none; }
.brand { display: flex; align-items: center; gap: 12px; text-decoration: none; }
.brand b { display: block; font: 700 21px/1 var(--display); letter-spacing: .03em; text-transform: uppercase; }
.brand small { display: block; font: 500 10.5px/1.2 var(--mono); letter-spacing: .2em; text-transform: uppercase; color: var(--copper-light); margin-top: 4px; }

/* Gerüst */
.shell { display: grid; grid-template-columns: 236px minmax(0, 1fr); min-height: 100vh; min-height: 100dvh; }
.side { position: sticky; top: 0; height: 100vh; height: 100dvh; background: var(--side); border-right: 1px solid var(--line); display: flex; flex-direction: column; padding: 18px 12px 12px; }
.side .brand { padding: 2px 8px 20px; }
.nav { display: grid; gap: 2px; }
.nav a, .plist a { display: flex; align-items: center; gap: 11px; padding: 8px 10px; border-radius: 6px; color: var(--ink-2); text-decoration: none; font-size: 14px; position: relative; }
.nav a:hover, .plist a:hover { background: var(--panel-2); color: var(--ink); }
.nav a.on, .plist a.on { background: var(--panel-2); color: var(--ink); }
.nav a.on::before, .plist a.on::before { content: ''; position: absolute; left: -12px; top: 7px; bottom: 7px; width: 3px; border-radius: 0 2px 2px 0; background: var(--copper); }
.side h3 { margin: 18px 10px 6px; font: 500 10.5px/1 var(--mono); letter-spacing: .16em; text-transform: uppercase; color: var(--ink-3); }
.plist { display: grid; gap: 1px; overflow-y: auto; min-height: 0; flex: 1; align-content: start; }
.plist a span.t { overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.side-foot { border-top: 1px dashed var(--line-2); padding-top: 10px; margin-top: 10px; display: flex; align-items: center; gap: 10px; padding-left: 8px; }
.side-foot .who { flex: 1; min-width: 0; font-size: 13px; } .side-foot .who small { display: block; color: var(--ink-3); font: 400 11px var(--mono); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.main { min-width: 0; }
.content { max-width: 1400px; padding: 26px 34px 60px; }
.mtop, .tabbar { display: none; }

/* Bausteine */
.page-head { display: flex; align-items: flex-end; justify-content: space-between; gap: 16px; margin-bottom: 20px; flex-wrap: wrap; }
.page-head h1 { margin: 0; font: 600 34px/1.05 var(--display); letter-spacing: .01em; }
.page-head .sub { margin-top: 5px; color: var(--ink-3); font-size: 13.5px; display: flex; gap: 8px 14px; flex-wrap: wrap; align-items: center; }
.page-head .actions { display: flex; gap: 8px; flex-wrap: wrap; }
.back { display: inline-flex; align-items: center; gap: 4px; color: var(--ink-3); text-decoration: none; font-size: 13.5px; margin-bottom: 8px; }
.back:hover { color: var(--copper-light); }
.live { display: inline-flex; align-items: center; gap: 7px; font: 500 12px var(--mono); color: var(--ink-3); }
.live i { width: 8px; height: 8px; border-radius: 50%; background: var(--ok); box-shadow: 0 0 0 3px var(--ok-tint); animation: blink 2s infinite; }
.live.off i { background: var(--ink-3); box-shadow: none; animation: none; }
@keyframes blink { 50% { opacity: .35; } }
.card { background: var(--panel); border: 1px solid var(--line); border-radius: var(--radius); }
.card-head { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 13px 16px; border-bottom: 1px solid var(--line); }
.sec { margin: 0; font: 600 14px/1 var(--display); letter-spacing: .14em; text-transform: uppercase; color: var(--ink-2); }
.card-body { padding: 14px 16px; }
.btn { display: inline-flex; align-items: center; justify-content: center; gap: 7px; height: 36px; padding: 0 13px; border-radius: 6px; border: 1px solid var(--line-2); background: var(--panel-2); color: var(--ink); font-weight: 500; font-size: 13.5px; cursor: pointer; white-space: nowrap; text-decoration: none; transition: background .12s, border-color .12s; }
.btn:hover { background: var(--panel-3); border-color: var(--ink-3); }
.btn.primary { background: var(--copper-btn); border-color: var(--copper-btn); color: #fff; } .btn.primary:hover { background: var(--copper); border-color: var(--copper); }
.btn.go { color: var(--ok); } .btn.go:hover { border-color: var(--ok); background: var(--ok-tint); }
.btn.halt { color: var(--bad); } .btn.halt:hover { border-color: var(--bad); background: var(--bad-tint); }
.btn.ghost { background: transparent; border-color: transparent; color: var(--ink-2); } .btn.ghost:hover { background: var(--panel-2); color: var(--ink); }
.btn.sm { height: 30px; padding: 0 10px; font-size: 12.5px; gap: 6px; }
.btn.block { width: 100%; height: 42px; font-size: 14.5px; }
.btn[disabled] { opacity: .45; pointer-events: none; }
.icon-btn { display: inline-flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 6px; border: 1px solid transparent; background: transparent; color: var(--ink-3); cursor: pointer; text-decoration: none; }
.icon-btn:hover { background: var(--panel-3); color: var(--ink); }
.pill { display: inline-flex; align-items: center; gap: 6px; height: 24px; padding: 0 10px; border-radius: 12px; font-size: 12px; font-weight: 500; white-space: nowrap; background: var(--panel-3); color: var(--ink-2); }
.pill::before { content: ''; width: 7px; height: 7px; border-radius: 50%; background: currentColor; }
.pill.running { background: var(--ok-tint); color: var(--ok); } .pill.partial { background: var(--warn-tint); color: var(--warn); }
.pill.problem { background: var(--bad-tint); color: var(--bad); } .pill.stopped { background: var(--panel-3); color: var(--ink-3); }
.pill.plain::before { display: none; }
.tag { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px; border-radius: 4px; font: 500 11px var(--mono); background: var(--panel-3); color: var(--ink-2); }
.dot { width: 9px; height: 9px; border-radius: 50%; flex: none; background: var(--ink-3); }
.dot.running { background: var(--ok); } .dot.partial { background: var(--warn); } .dot.problem { background: var(--bad); } .dot.stopped { background: var(--line-2); }
.banner { display: flex; gap: 12px; align-items: center; padding: 12px 16px; border-radius: var(--radius); margin-bottom: 18px; background: var(--bad-tint); color: #F6B3AC; border: 1px solid rgba(240, 122, 112, .3); }

/* Server-Kacheln */
.tiles { display: grid; grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 14px; margin-bottom: 24px; }
.tile { padding: 15px 16px 14px; position: relative; overflow: hidden; }
.tile .l { font: 500 11px/1.2 var(--mono); letter-spacing: .14em; text-transform: uppercase; color: var(--ink-3); display: flex; justify-content: space-between; }
.tile .v { font: 600 36px/1 var(--display); margin-top: 10px; letter-spacing: .01em; }
.tile .v small { font-size: 18px; color: var(--ink-3); font-weight: 600; margin-left: 2px; }
.tile .s { font-size: 12.5px; color: var(--ink-3); margin-top: 6px; }
.bar { height: 6px; border-radius: 3px; background: var(--panel-3); overflow: hidden; margin-top: 10px; }
.bar i { display: block; height: 100%; border-radius: 3px; background: var(--ok); width: 0; transition: width .4s; }
.bar i.warn { background: var(--warn); } .bar i.bad { background: var(--bad); }
.spark { display: block; width: 100%; height: 38px; margin-top: 8px; }
.spark .area { fill: var(--copper-tint); } .spark .ln { fill: none; stroke: var(--copper-light); stroke-width: 1.6; vector-effect: non-scaling-stroke; }

/* Projektkarten */
.pgrid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 14px; }
.pcard { padding: 16px; display: flex; flex-direction: column; gap: 12px; transition: border-color .15s; }
.pcard:hover { border-color: var(--line-2); }
.pcard.problem { border-color: rgba(240, 122, 112, .45); }
.pcard .top { display: flex; gap: 12px; align-items: flex-start; }
.av { width: 42px; height: 42px; border-radius: 9px; display: flex; align-items: center; justify-content: center; flex: none; font: 600 17px/1 var(--display); color: #fff; text-transform: uppercase; letter-spacing: .02em; }
.av.lg { width: 56px; height: 56px; border-radius: 12px; font-size: 24px; }
.c0 { background: #9A5226; } .c1 { background: #45607E; } .c2 { background: #52704F; } .c3 { background: #6E5272; } .c4 { background: #8C6A25; } .c5 { background: #376D6B; } .c6 { background: #874035; } .c7 { background: #545C68; }
.pcard .tt { flex: 1; min-width: 0; }
.pcard h3 { margin: 0; font: 600 21px/1.1 var(--display); letter-spacing: .01em; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.pcard h3 a { text-decoration: none; } .pcard h3 a:hover { color: var(--copper-light); }
.pcard .nm { font: 400 12px var(--mono); color: var(--ink-3); margin-top: 3px; display: flex; gap: 6px; align-items: center; white-space: nowrap; overflow: hidden; }
.pcard .nm .ico { color: var(--copper-light); }
.pcard .desc { font-size: 13px; color: var(--ink-3); margin: -4px 0 0; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.metrics { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; background: var(--bg); border: 1px solid var(--line); border-radius: 6px; padding: 9px 12px; }
.metrics div { font: 500 11px/1.2 var(--mono); letter-spacing: .08em; text-transform: uppercase; color: var(--ink-3); }
.metrics b { display: block; font: 600 17px/1.2 var(--display); letter-spacing: .02em; color: var(--ink); text-transform: none; margin-top: 3px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
.cdots { display: flex; gap: 5px; flex-wrap: wrap; }
.cdots span { display: inline-flex; align-items: center; gap: 5px; height: 22px; padding: 0 8px 0 6px; border-radius: 11px; background: var(--panel-2); font: 400 11.5px var(--mono); color: var(--ink-2); }
.pacts { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; border-top: 1px solid var(--line); padding-top: 12px; margin-top: auto; }
.pacts .grow { flex: 1; }
.lock { display: inline-flex; align-items: center; gap: 4px; font: 500 11px var(--mono); color: var(--ink-3); }

/* Listen */
.feed { list-style: none; margin: 0; padding: 4px 0; }
.feed li { display: grid; grid-template-columns: 28px minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 9px 16px; border-bottom: 1px solid var(--line); font-size: 13.5px; }
.feed li:last-child { border-bottom: 0; }
.feed .fi { width: 28px; height: 28px; border-radius: 50%; display: flex; align-items: center; justify-content: center; background: var(--panel-2); color: var(--ink-3); }
.feed .fi.bad { background: var(--bad-tint); color: var(--bad); } .feed .fi.ok { background: var(--ok-tint); color: var(--ok); }
.feed .fi .ico { width: 14px; height: 14px; }
.feed .t { overflow-wrap: anywhere; } .feed .t small { display: block; color: var(--ink-3); font-size: 12px; }
.feed time { font: 400 11.5px var(--mono); color: var(--ink-3); white-space: nowrap; }
.two-col { display: grid; grid-template-columns: minmax(0, 1fr) 380px; gap: 20px; align-items: start; margin-top: 24px; }

/* Projektdetail */
.ctable { width: 100%; border-collapse: collapse; }
.ctable th { text-align: left; font: 500 10.5px var(--mono); letter-spacing: .12em; text-transform: uppercase; color: var(--ink-3); padding: 10px 14px; border-bottom: 1px solid var(--line); white-space: nowrap; }
.ctable td { padding: 12px 14px; border-bottom: 1px solid var(--line); vertical-align: middle; font-size: 13.5px; }
.ctable tr:last-child td { border-bottom: 0; }
.ctable .cn { font-weight: 500; } .ctable .cn small { display: block; font: 400 11.5px var(--mono); color: var(--ink-3); margin-top: 2px; overflow-wrap: anywhere; }
.ctable .st { display: flex; align-items: center; gap: 8px; } .ctable .st small { color: var(--ink-3); display: block; font-size: 12px; }
.ctable .num { font: 500 13px var(--mono); white-space: nowrap; }
.ctable .acts { display: flex; gap: 4px; justify-content: flex-end; flex-wrap: wrap; }
.kv { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 7px 16px; font-size: 13px; margin: 0; }
.kv dt { color: var(--ink-3); } .kv dd { margin: 0; overflow-wrap: anywhere; font-family: var(--mono); font-size: 12.5px; }
.job { margin-top: 16px; }
.job pre, .logbox { margin: 0; background: #0A0B0D; color: #D7D9DC; font: 400 12.5px/1.55 var(--mono); padding: 12px 14px; overflow: auto; border-radius: 0 0 var(--radius) var(--radius); }
.job pre { max-height: 360px; white-space: pre-wrap; overflow-wrap: anywhere; }
.job .state { display: inline-flex; align-items: center; gap: 8px; font-size: 13px; }
.spin { width: 14px; height: 14px; border-radius: 50%; border: 2px solid rgba(255, 255, 255, .25); border-top-color: var(--copper-light); animation: spin .7s linear infinite; }
@keyframes spin { to { transform: rotate(360deg); } }

/* Logs */
.logview { display: flex; flex-direction: column; height: calc(100vh - 200px); height: calc(100dvh - 200px); min-height: 360px; }
.logbar { display: flex; gap: 8px; align-items: center; flex-wrap: wrap; padding: 10px 12px; border-bottom: 1px solid var(--line); }
.logbar .input { max-width: 280px; height: 32px; }
.logbox { flex: 1; min-height: 0; white-space: pre; }
.logbox.wrap { white-space: pre-wrap; overflow-wrap: anywhere; }
.logbox .ln { display: block; } .logbox .ln.err { color: #F6A49C; } .logbox .ts { color: #6D737B; margin-right: 10px; }
.logbox.nots .ts { display: none; }
.logbox mark { background: rgba(227, 154, 100, .35); color: inherit; border-radius: 2px; }
.toggle { display: inline-flex; align-items: center; gap: 7px; font-size: 13px; color: var(--ink-2); cursor: pointer; user-select: none; }
.toggle input { accent-color: var(--copper); width: 15px; height: 15px; margin: 0; }

/* Konsole */
.term-wrap { display: flex; flex-direction: column; height: calc(100vh - 170px); height: calc(100dvh - 170px); min-height: 320px; }
.term { flex: 1; min-height: 0; background: #0A0B0D; padding: 8px 4px 4px 10px; border-radius: 0 0 var(--radius) var(--radius); }
.term .xterm { height: 100%; }

/* Formulare */
.field { display: grid; gap: 6px; } .field > span { font-size: 12.5px; font-weight: 500; color: var(--ink-2); } .field small { font-size: 12px; color: var(--ink-3); }
.input, .field input, .field select, .field textarea { width: 100%; height: 40px; padding: 0 12px; border-radius: 6px; border: 1px solid var(--line-2); background: var(--bg); color: var(--ink); font-size: 14px; }
.field textarea { height: auto; min-height: 80px; padding: 10px 12px; resize: vertical; }
.input:focus, .field input:focus, .field textarea:focus { outline: none; border-color: var(--copper); box-shadow: 0 0 0 3px var(--copper-tint); }
.form { display: grid; gap: 14px; } .form .two { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; }
.form-actions { display: flex; gap: 8px; justify-content: flex-end; flex-wrap: wrap; } .form-actions .left { margin-right: auto; }
.error { color: var(--bad); font-size: 13px; font-weight: 500; } .error:empty { display: none; }
.code-input { font: 600 26px var(--mono) !important; letter-spacing: .4em; text-align: center; height: 54px !important; }

/* Anmeldung */
.gate { min-height: 100vh; min-height: 100dvh; display: grid; place-items: center; padding: 24px 16px; position: relative; overflow: hidden; background: radial-gradient(1000px 600px at 50% 115%, rgba(184, 100, 46, .12), transparent 60%), var(--bg); }
.gate::before { content: ''; position: absolute; width: 820px; height: 820px; border-radius: 50%; border: 2px dashed var(--copper); opacity: .2; left: 50%; top: 50%; transform: translate(-50%, -50%); }
.gate-card { position: relative; width: min(420px, 100%); background: var(--panel); border: 1px solid var(--line); border-radius: 14px; padding: 28px 28px 24px; box-shadow: 0 30px 80px rgba(0, 0, 0, .5); display: grid; gap: 15px; }
.gate-card h1 { margin: 6px 0 0; font: 600 29px/1.05 var(--display); }
.gate-card p { margin: 0; color: var(--ink-3); font-size: 13.5px; }
.qr { background: #fff; border-radius: 10px; padding: 10px; width: 210px; height: 210px; margin: 0 auto; }
.qr svg { width: 100%; height: 100%; display: block; }
.secret { font: 500 13px var(--mono); text-align: center; color: var(--ink-2); letter-spacing: .06em; user-select: all; overflow-wrap: anywhere; }
.steps { margin: 0; padding-left: 18px; color: var(--ink-3); font-size: 13px; display: grid; gap: 3px; }

/* Dialog */
.overlay { position: fixed; inset: 0; z-index: 50; background: rgba(5, 6, 8, .65); display: grid; place-items: center; padding: 20px; animation: fade .12s; }
@keyframes fade { from { opacity: 0; } }
.modal { width: min(520px, 100%); max-height: calc(100dvh - 40px); overflow: auto; background: var(--panel); border: 1px solid var(--line-2); border-radius: 12px; box-shadow: 0 30px 80px rgba(0, 0, 0, .6); }
.modal-head { display: flex; justify-content: space-between; align-items: center; padding: 14px 18px; border-bottom: 1px solid var(--line); }
.modal-head h2 { margin: 0; font: 600 23px/1.1 var(--display); }
.modal-body { padding: 16px 18px 20px; display: grid; gap: 14px; }
.toasts { position: fixed; right: 18px; bottom: 18px; z-index: 100; display: grid; gap: 8px; pointer-events: none; }
.toast { pointer-events: auto; max-width: 380px; background: var(--panel-3); border: 1px solid var(--line-2); border-left: 3px solid var(--copper); border-radius: 8px; padding: 11px 14px; font-size: 13.5px; box-shadow: 0 12px 40px rgba(0, 0, 0, .5); animation: up .18s ease-out; }
.toast.ok { border-left-color: var(--ok); } .toast.bad { border-left-color: var(--bad); }
@keyframes up { from { transform: translateY(8px); opacity: 0; } }
.empty { text-align: center; color: var(--ink-3); padding: 40px 20px; }
.skel { display: grid; gap: 14px; } .skel i { display: block; height: 110px; border-radius: var(--radius); background: linear-gradient(90deg, var(--panel), var(--panel-2), var(--panel)); background-size: 200% 100%; animation: sh 1.2s infinite linear; }
@keyframes sh { to { background-position: -200% 0; } }
.users .row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; padding: 11px 16px; border-bottom: 1px solid var(--line); }
.users .row:last-child { border-bottom: 0; }
.users small { display: block; color: var(--ink-3); font-size: 12px; }
.settings { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 18px; align-items: start; }
.push-here { display: flex; align-items: center; gap: 12px; padding: 12px 14px; border-radius: 8px; background: var(--panel-2); border: 1px solid var(--line); flex-wrap: wrap; }
.push-here > div { flex: 1; min-width: 160px; } .push-here small, .device small { display: block; color: var(--ink-3); font-size: 12px; }
.push-here.on { background: var(--ok-tint); border-color: rgba(95, 191, 133, .3); } .push-here.on > .ico { color: var(--ok); }
.device { border: 1px solid var(--line); border-radius: 8px; padding: 12px 14px; display: grid; gap: 10px; }
.dev-top { display: flex; justify-content: space-between; gap: 10px; align-items: flex-start; } .dev-acts { display: flex; gap: 4px; flex: none; }
.ev-chips { display: flex; gap: 6px; flex-wrap: wrap; }
.chip { display: inline-flex; align-items: center; gap: 6px; height: 30px; padding: 0 11px; border-radius: 15px; border: 1px solid var(--line-2); font-size: 12.5px; color: var(--ink-3); cursor: pointer; user-select: none; }
.chip input { position: absolute; opacity: 0; pointer-events: none; }
.chip:has(input:checked) { background: var(--copper-tint); border-color: var(--copper); color: var(--copper-light); }
.chip:has(input:focus-visible) { outline: 2px solid var(--copper-light); outline-offset: 2px; }
.push-hint { display: flex; align-items: center; gap: 14px; padding: 14px 16px; margin-bottom: 18px; border-style: dashed; border-color: var(--copper); background: var(--copper-tint); }
.push-hint > .ico { color: var(--copper-light); } .push-hint .grow { flex: 1; } .push-hint small { display: block; color: var(--ink-2); font-size: 13px; }
.settings .full { grid-column: 1 / -1; }
.pw-show { font: 600 18px var(--mono); background: var(--bg); border: 1px dashed var(--copper); border-radius: 6px; padding: 12px; text-align: center; user-select: all; overflow-wrap: anywhere; }

@media (max-width: 1150px) {
  .tiles { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .two-col, .settings { grid-template-columns: minmax(0, 1fr); }
}
@media (max-width: 860px) {
  .shell { display: block; }
  .side { display: none; }
  .mtop { display: flex; align-items: center; gap: 10px; position: sticky; top: 0; z-index: 30; background: var(--side); border-bottom: 1px solid var(--line); padding: calc(env(safe-area-inset-top) + 8px) 8px 8px 14px; }
  .mtop .mark { width: 30px; height: 24px; }
  .mtop .ttl { flex: 1; min-width: 0; font: 600 20px/1 var(--display); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
  .mtop .ttl small { display: block; font: 500 9px/1.3 var(--mono); letter-spacing: .18em; text-transform: uppercase; color: var(--copper-light); }
  .tabbar { display: grid; grid-template-columns: repeat(3, 1fr); position: fixed; left: 0; right: 0; bottom: 0; z-index: 40; background: var(--side); border-top: 1px solid var(--line); padding-bottom: env(safe-area-inset-bottom); }
  .tabbar a { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px; height: var(--tabbar-h); color: var(--ink-3); text-decoration: none; font-size: 11px; font-weight: 500; }
  .tabbar a .ico { width: 23px; height: 23px; }
  .tabbar a.on { color: var(--copper-light); }
  .content { padding: 16px 14px calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 24px); }
  .page-head h1 { font-size: 29px; }
  .tiles { gap: 10px; margin-bottom: 18px; }
  .tile { padding: 13px; } .tile .v { font-size: 30px; }
  .tile .l { flex-direction: column; gap: 3px; } .tile .l span:last-child { letter-spacing: .06em; opacity: .8; }
  .pgrid { grid-template-columns: minmax(0, 1fr); gap: 10px; }
  .btn { height: 40px; } .btn.sm { height: 36px; } .icon-btn { width: 40px; height: 40px; }
  .ctable thead { display: none; }
  .ctable, .ctable tbody, .ctable tr, .ctable td { display: block; width: 100%; }
  .ctable tr { padding: 10px 0; border-bottom: 1px solid var(--line); } .ctable tr:last-child { border-bottom: 0; }
  .ctable td { border: 0; padding: 4px 14px; }
  .ctable td[data-l]::before { content: attr(data-l); display: inline-block; width: 70px; font: 500 10.5px var(--mono); letter-spacing: .1em; text-transform: uppercase; color: var(--ink-3); }
  .ctable .acts { justify-content: flex-start; padding-top: 6px; }
  .logview { height: calc(100dvh - 250px - var(--tabbar-h)); }
  .term-wrap { height: calc(100dvh - 210px - var(--tabbar-h)); }
  .toasts { left: 14px; right: 14px; bottom: calc(var(--tabbar-h) + env(safe-area-inset-bottom) + 10px); }
  .form .two { grid-template-columns: minmax(0, 1fr); }
  .input, .field input { font-size: 16px; }
  .overlay { align-items: end; padding: 0; } .modal { width: 100%; border-radius: 14px 14px 0 0; max-height: 92dvh; }
  .modal-body { padding-bottom: calc(20px + env(safe-area-inset-bottom)); }
}
