:root{--bg:#0f1115;--card:#1a1d24;--ink:#e8eaed;--mut:#9aa0aa;--ok:#2fbf5b;--bad:#e3493f;--warn:#f5a623;--accent:#2f7fd6;--bar:#13161c}
*{box-sizing:border-box}
html,body{margin:0;height:100%;background:var(--bg);color:var(--ink);font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Ubuntu,sans-serif;-webkit-text-size-adjust:100%}
body{overflow:hidden}
.hidden{display:none !important}

/* App shell — fixed header + scrolling content + bottom tab bar (native feel) */
#app{position:fixed;inset:0;max-width:620px;margin:0 auto;display:flex;flex-direction:column;background:var(--bg)}
#bar{flex:0 0 auto;display:flex;align-items:center;gap:8px;padding:12px 14px;background:var(--bar);border-bottom:1px solid #23272f}
#bar .grow{flex:1}
#title{font-weight:700;font-size:1.15rem}
.chip{font-size:.72rem;background:#11141a;border:1px solid #2a2f3a;color:var(--mut);padding:4px 9px;border-radius:99px;white-space:nowrap;max-width:42vw;overflow:hidden;text-overflow:ellipsis}
.pill{font-size:.66rem;font-weight:700;letter-spacing:.04em;padding:3px 8px;border-radius:99px;background:#333;color:#bbb}
.pill.on{background:var(--ok);color:#06210f}.pill.off{background:var(--bad);color:#2a0a08}

/* the scrolling content region — exactly one .tabview is visible at a time */
.tabview{flex:1 1 auto;overflow-y:auto;-webkit-overflow-scrolling:touch;padding:12px;display:flex;flex-direction:column;gap:10px}

/* bottom tab bar */
#tabs{flex:0 0 auto;display:flex;justify-content:space-around;gap:2px;background:var(--bar);border-top:1px solid #23272f;padding:6px 4px;padding-bottom:max(6px,env(safe-area-inset-bottom))}
.tab{flex:1;display:flex;flex-direction:column;align-items:center;gap:2px;padding:6px 2px;border:0;border-radius:10px;background:transparent;color:var(--mut);font-weight:600;font-size:.66rem;cursor:pointer}
.tab .ti{font-size:1.15rem;line-height:1.1;filter:grayscale(.4) opacity(.8)}
.tab.on{color:var(--accent);background:#11141a}
.tab.on .ti{filter:none}

.card{background:var(--card);border-radius:14px;padding:12px}
.card h3{margin:0 0 10px;font-size:.82rem;color:var(--mut);text-transform:uppercase;letter-spacing:.06em;display:flex;align-items:center;justify-content:space-between;gap:8px}
.card h4{margin:14px 0 6px;font-size:.8rem;color:var(--ink)}
.grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.cell{background:#11141a;border-radius:10px;padding:10px;text-align:center}
.cell label{display:block;font-size:.6rem;color:var(--mut);text-transform:uppercase}
.cell b{font-size:1.1rem}
#map{height:40vh;min-height:220px;border-radius:12px;overflow:hidden;background:#202530;margin-bottom:8px}
.set{display:flex;align-items:center;gap:8px;margin:10px 0}
.set label{flex:1;font-size:.9rem}
.set input,.set select{width:160px;padding:8px;border-radius:8px;border:1px solid #333;background:#11141a;color:var(--ink)}
button{padding:9px 13px;border:0;border-radius:8px;background:var(--accent);color:#fff;font-weight:600;cursor:pointer}
button.mini{padding:4px 9px;font-size:.72rem}
button.ghost{background:#2a2f3a}
button.danger{background:var(--bad)}
#pu-autotune{width:100%;margin-top:8px;background:#6b4ea0}
.row{display:flex;gap:8px;margin-top:8px}
.muted{color:var(--mut);font-size:.78rem;margin:6px 0 0}
.muted code{background:#11141a;padding:1px 5px;border-radius:5px}
.item{display:flex;justify-content:space-between;align-items:center;background:#11141a;border-radius:10px;padding:10px;margin-top:8px;gap:8px}
.item .n{font-weight:600}
.item .s{font-size:.8rem;color:var(--mut)}
.item .actions{display:flex;gap:6px;flex-shrink:0}
.fault{background:var(--bad);color:#fff;border-radius:8px;padding:8px;margin-top:8px;font-weight:600;font-size:.85rem}
.dot{width:10px;height:10px;border-radius:99px;background:#555;display:inline-block;margin-left:6px}
.dot.ok{background:var(--ok)}.dot.bad{background:var(--bad)}
.bar{height:8px;border-radius:5px;background:#2a2f3a;overflow:hidden;flex:1;margin:0 8px}
.bar>i{display:block;height:100%;background:var(--accent)}
/* tank-fill cascade editor */
.casrow{background:#11141a;border-radius:10px;padding:8px 10px;margin-top:8px}
.casrow .crow{display:flex;align-items:center;gap:8px;margin:4px 0}
.casrow .crow label{font-size:.8rem;color:var(--mut);flex:0 0 auto}
.casrow .crow input{flex:1;min-width:0;padding:6px;border-radius:8px;border:1px solid #333;background:#0c0f14;color:var(--ink)}
.casrow .c-name{font-weight:600}
.casrow .c-relay,.casrow .c-low,.casrow .c-high,.casrow .c-minsrc{flex:0 0 5rem}
.casrow .cx{flex:0 0 auto;background:var(--bad);color:#fff;border:0}
.tag{display:inline-block;font-size:.66rem;background:#2a2f3a;color:var(--mut);padding:2px 7px;border-radius:99px;margin:2px 3px 0 0}
.tag.role{background:#23364a;color:#9fd0ff}
.tag.off{background:#3a2422;color:#f0a59e}
textarea{width:100%;background:#0c0f14;color:var(--ink);border:1px solid #333;border-radius:8px;padding:8px;font-family:ui-monospace,Menlo,monospace;font-size:.8rem}
hr{border:0;border-top:1px solid #2a2f3a;margin:14px 0}

/* subscriptions */
.sub-row{background:#11141a;border-radius:10px;padding:10px;margin-top:8px}
.sub-row .sn{font-weight:600;display:flex;justify-content:space-between;gap:8px}
.sub-row .sk{font-size:.66rem;color:var(--mut)}
.evts{display:flex;flex-wrap:wrap;gap:10px;margin-top:8px}
.evts label{font-size:.8rem;color:var(--ink);display:flex;align-items:center;gap:5px}

/* auth screens */
.auth-screen{position:fixed;inset:0;z-index:1500;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--bg)}
.auth-box{width:100%;max-width:340px;background:var(--card);border-radius:16px;padding:22px;display:flex;flex-direction:column;gap:10px}
.auth-box h1{margin:0 0 6px;font-size:1.4rem;text-align:center}
.auth-box input{padding:11px;border-radius:9px;border:1px solid #333;background:#11141a;color:var(--ink);font-size:1rem}
.auth-box button{padding:11px;font-size:1rem}
.auth-box .oauth{display:block;text-align:center;padding:11px;border-radius:9px;background:#2a2f3a;color:#fff;text-decoration:none;font-weight:600}
.auth-error{color:var(--bad);font-size:.82rem;min-height:1em;margin:0;text-align:center}

/* modal */
.modal{position:fixed;inset:0;background:#000b;display:flex;align-items:center;justify-content:center;padding:16px;z-index:1000}
.modal-box{width:100%;max-width:440px;max-height:88vh;overflow:auto;background:var(--card);border-radius:16px;padding:18px}
.modal-box h3{margin:0 0 12px;font-size:1rem;color:var(--ink);text-transform:none;letter-spacing:0}
.field{margin:10px 0}
.field label{display:block;font-size:.74rem;color:var(--mut);margin-bottom:4px}
.field input,.field select,.field textarea{width:100%;padding:9px;border-radius:8px;border:1px solid #333;background:#11141a;color:var(--ink)}
.field .check{display:flex;align-items:center;gap:8px}
.field .check input{width:auto}
.checklist{max-height:200px;overflow:auto;border:1px solid #2a2f3a;border-radius:8px;padding:8px}
.checklist label{display:flex;align-items:center;gap:8px;font-size:.85rem;padding:3px 0}
.checklist input{width:auto}

/* fuel */
.tbl{width:100%;border-collapse:collapse;font-size:.8rem;margin-top:8px}
.tbl th{text-align:left;color:var(--mut);font-weight:600;border-bottom:1px solid #2a2f3a;padding:6px 6px}
.tbl td{padding:6px 6px;border-bottom:1px solid #181c23}
#screen-img{width:100%;border-radius:10px;background:#000;display:block;image-rendering:auto;cursor:pointer}
#screen-keypad{display:grid;grid-template-columns:repeat(4,1fr);gap:6px;margin-top:10px}

.nodewrap .nodehist{margin-top:8px;border-top:1px solid #2a2f3a;padding-top:8px}
.spark{display:block;background:#11141a;border-radius:8px;margin:6px 0;padding:4px}
#toast{position:fixed;left:50%;bottom:20px;transform:translateX(-50%);background:#000a;color:#fff;padding:10px 16px;border-radius:10px;opacity:0;transition:opacity .2s;pointer-events:none;z-index:2000}
#toast.show{opacity:1}
