/* ASP House Portal — sea-glass teal on cool neutrals; status colors separate from the accent */
:root{
  --bg:#eef2f3; --panel:#fff; --sunk:#e3e9eb; --ink:#12262e; --muted:#5a6d74; --line:#d3dcdf;
  --accent:#0a6276; --accent-soft:#d8edf1; --on-accent:#fff;
  --ok:#1f7a45; --ok-soft:#dcefe3; --warn:#9a6300; --warn-soft:#f7ebcf; --bad:#b3261e; --bad-soft:#f6dcd9; --arr:#e6b800; --arr-soft:#fff4c2; --arr-ink:#7a5b00;
  --none:#6b5aa6; --none-soft:#e7e2f5; --due:#1d5fb4; --due-soft:#dde9f8; --part:#c25a0a; --part-soft:#fce6d4; --flag:#0b5c8a; --flag-soft:#dbeaf4;
  --f-display:"Bricolage Grotesque",ui-sans-serif,system-ui,sans-serif;
  --f-body:"IBM Plex Sans",ui-sans-serif,system-ui,-apple-system,"Segoe UI",sans-serif;
  --f-mono:"IBM Plex Mono",ui-monospace,Menlo,Consolas,monospace;
  color-scheme:light;
}
@media (prefers-color-scheme:dark){:root{
  --bg:#0d1719; --panel:#142226; --sunk:#0f1c1f; --ink:#e3eef0; --muted:#93a8ae; --line:#26393e;
  --accent:#3bcdcf; --accent-soft:#143840; --on-accent:#062022;
  --ok:#5fcf8c; --ok-soft:#173424; --warn:#f0b54a; --warn-soft:#3a2d12; --bad:#ff8a80; --bad-soft:#431d1b; --arr:#ffd84d; --arr-soft:#3a3210; --arr-ink:#ffd84d; --arr:#ffd84d;
  --none:#b7a6f0; --none-soft:#2a2442; --due:#7fb2f2; --due-soft:#15294a; --part:#ffa15c; --part-soft:#3f2410; --flag:#7cc4ef; --flag-soft:#16303f; color-scheme:dark}}
*{box-sizing:border-box}
html{-webkit-text-size-adjust:100%}
body{margin:0;background:var(--bg);color:var(--ink);font:15px/1.5 var(--f-body);min-height:100vh;display:flex;flex-direction:column}
a{color:var(--accent)}
button,input,select,textarea{font:inherit;color:inherit}
:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.sr{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0)}
.muted{color:var(--muted)} .small{font-size:13px} .mono{font-family:var(--f-mono);font-variant-numeric:tabular-nums}
.txt-bad{color:var(--bad)} .txt-warn{color:var(--warn)}
h1{font-family:var(--f-display);font-weight:700;font-size:clamp(24px,4vw,32px);letter-spacing:-.02em;line-height:1.15;margin:0 0 6px;text-wrap:balance}
h2{font-family:var(--f-display);font-weight:500;font-size:17px;margin:26px 0 10px;display:flex;gap:10px;align-items:baseline;flex-wrap:wrap}
h2.flush{margin-top:0}
.src{font-family:var(--f-body);font-size:13px;color:var(--muted);font-weight:400}
.eyebrow{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--muted);font-weight:600;margin:0 0 4px}

/* top bar */
.top{position:sticky;top:0;z-index:10;background:var(--panel);border-bottom:1px solid var(--line);display:flex;align-items:center;gap:18px;padding:10px max(16px,env(safe-area-inset-left));padding-top:calc(10px + env(safe-area-inset-top,0px));flex-wrap:wrap}
.brand{display:flex;align-items:center;gap:10px;text-decoration:none;color:var(--ink)}
.mark{font-family:var(--f-display);font-weight:700;background:var(--accent);color:var(--on-accent);border-radius:7px;padding:3px 7px;font-size:13px;letter-spacing:.04em}
.mark.big{font-size:20px;padding:6px 12px;display:inline-block;margin-bottom:12px}
.bt{font-family:var(--f-display);font-weight:700;font-size:17px}
.nav{display:flex;gap:4px;flex-wrap:wrap}
.nav a{text-decoration:none;color:var(--muted);padding:7px 10px;border-radius:6px;font-weight:500}
.nav a:hover{background:var(--sunk);color:var(--ink)}
.nav a[aria-current]{background:var(--accent-soft);color:var(--ink)}
.badge{font-family:var(--f-mono);font-size:11px;line-height:1.4;background:var(--bad);color:#fff;border-radius:10px;padding:1px 6px;margin-left:4px;vertical-align:1px}
.who{margin-left:auto;display:flex;align-items:center;gap:10px}
.avatar{width:32px;height:32px;border-radius:50%;background:var(--sunk);border:1px solid var(--line);display:inline-grid;place-items:center;font-weight:600;font-size:12px;color:var(--ink);text-decoration:none;flex:none}
.avatar.sm{width:30px;height:30px;font-size:11px}
.link{background:none;border:0;color:var(--accent);cursor:pointer;padding:0;text-decoration:underline}
@media (max-width:760px){.nav{order:3;width:100%;overflow-x:auto;flex-wrap:nowrap}.nav a{white-space:nowrap}.bt{font-size:15px}}

.wrap{width:100%;max-width:1180px;margin:0 auto;padding:22px 16px 48px;flex:1}
.foot{border-top:1px solid var(--line);padding:14px 16px calc(14px + env(safe-area-inset-bottom,0px));display:flex;justify-content:space-between;gap:10px;flex-wrap:wrap;font-size:12px;color:var(--muted)}

/* shared blocks */
.panel{background:var(--panel);border:1px solid var(--line);border-radius:10px}
.pad{padding:16px}
.empty{padding:22px 16px;color:var(--muted)}
.flash{padding:10px 14px;border-radius:8px;margin-bottom:16px;background:var(--ok-soft);color:var(--ok);font-weight:500}
.flash.warn{background:var(--warn-soft);color:var(--warn)} .flash.bad{background:var(--bad-soft);color:var(--bad)}
.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:0;background:var(--accent);color:var(--on-accent);padding:9px 16px;border-radius:7px;font-weight:600;cursor:pointer;text-decoration:none;white-space:nowrap}
.btn:hover{filter:brightness(1.07)}
.btn.ghost{background:transparent;color:var(--accent);border:1px solid var(--line)}
.btn.small{padding:6px 11px;font-size:13px}
.pill{display:inline-block;font-size:12px;font-weight:600;padding:2px 9px;border-radius:12px;white-space:nowrap}
.pill.ok{background:var(--ok-soft);color:var(--ok)} .pill.warn{background:var(--warn-soft);color:var(--warn)}
.pill.bad{background:var(--bad-soft);color:var(--bad)} .pill.none{background:var(--none-soft);color:var(--none)}
.pill.flag{background:var(--flag-soft);color:var(--flag)}
.dot{display:inline-block;width:9px;height:9px;border-radius:50%;flex:none;vertical-align:middle}
.dot.ok{background:var(--ok)} .dot.warn{background:var(--warn)} .dot.bad{background:var(--bad)} .dot.none{background:var(--none)}
.tag{font-size:10px;font-weight:600;letter-spacing:.05em;padding:1px 6px;border-radius:4px;background:var(--sunk);color:var(--muted);vertical-align:2px}
.tag.phm{background:var(--accent-soft);color:var(--accent)}
.note{font-size:11px;font-weight:600;padding:1px 7px;border-radius:4px;background:var(--sunk);color:var(--muted)}
.note.bad{background:var(--bad-soft);color:var(--bad)}
.legend{display:flex;flex-wrap:wrap;gap:16px;font-size:12px;color:var(--muted);margin-top:16px}
.legend span{display:inline-flex;align-items:center;gap:6px}
.back{display:inline-block;margin-bottom:10px;text-decoration:none;font-weight:600}
.split{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.split h2{margin:22px 0 10px}

/* page head + dashboard */
.pagehead{display:flex;justify-content:space-between;align-items:flex-end;gap:16px;flex-wrap:wrap;margin-bottom:16px}
.pagehead p.muted{margin:0}
.seg{display:flex;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:var(--panel)}
.seg a{padding:7px 12px;text-decoration:none;color:var(--muted);font-weight:500;font-size:14px}
.seg a[aria-current]{background:var(--accent);color:var(--on-accent)}
.kpis{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:10px;margin-bottom:14px}
@media (max-width:900px){.kpis{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media (max-width:640px){.kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
.kpi{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px;text-decoration:none;color:var(--ink);display:flex;flex-direction:column}
.kpi b{font-family:var(--f-display);font-size:28px;line-height:1.1}
.kpi span{font-size:12px;color:var(--muted)}
.kpi.bad b{color:var(--bad)} .kpi.warn b{color:var(--warn)} .kpi.none b{color:var(--none)}
.kpi[aria-current]{outline:2px solid var(--accent);outline-offset:-2px}
.toolbar{display:flex;gap:10px;align-items:center;margin-bottom:12px}
.toolbar input{flex:1;min-width:0;max-width:420px;background:var(--panel);border:1px solid var(--line);border-radius:8px;padding:9px 12px}
.list .row{display:grid;grid-template-columns:5px minmax(0,1fr) auto 56px;gap:14px;align-items:center;padding:11px 14px 11px 0;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink)}
.list .row:last-child{border-bottom:0}
.list .row:hover{background:var(--sunk)}
.stripe{align-self:stretch;border-radius:0 3px 3px 0;background:var(--line)}
.stripe.ok{background:var(--ok)} .stripe.warn{background:var(--warn)} .stripe.bad{background:var(--bad)} .stripe.none{background:var(--none)}
.rmain,.rhv{display:flex;flex-direction:column;min-width:0}
.rhv{align-items:flex-end}
.rt{font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rs{font-size:12px;color:var(--muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rnum{text-align:center;display:flex;flex-direction:column}
.rnum b{font-family:var(--f-mono);font-size:16px} .rnum span{font-size:11px;color:var(--muted)}
.list .row.hl-warn{background:var(--warn-soft)} .list .row.hl-bad{background:var(--bad-soft)}
.rnum.old b{color:var(--bad)}
@media (max-width:560px){.list .row{grid-template-columns:5px minmax(0,1fr) auto 40px;gap:10px;padding-right:10px}.rhv .rs{display:none}}

/* program */
.section-title{font-size:20px;margin-top:28px}
.staffgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:12px}
.staff header{display:flex;align-items:center;gap:10px;padding:12px 14px;border-bottom:1px solid var(--line)}
.staff header div{display:flex;flex-direction:column;min-width:0;flex:1}
.staff header .n{font-family:var(--f-display);font-weight:700;font-size:20px;color:var(--accent)}
.staff ol{list-style:none;margin:0;padding:8px 14px 12px;counter-reset:h}
.staff ol{padding:6px 8px 10px}
.staff li{display:grid;grid-template-columns:9px minmax(0,1fr) auto;align-items:center;gap:8px;padding:5px 6px;border-radius:6px}
.staff li.hl-warn{background:var(--warn-soft)} .staff li.hl-bad{background:var(--bad-soft)}
.hn{display:flex;flex-wrap:wrap;align-items:center;gap:2px 8px;min-width:0}
.hvtxt{font-size:11px;font-weight:600} .hvtxt.warn{color:var(--warn)} .hvtxt.bad{color:var(--bad)}
.tix{min-width:26px;height:22px;padding:0 7px;border-radius:11px;background:var(--sunk);border:1px solid var(--line);font:600 12px/20px var(--f-mono);text-align:center;color:var(--ink);text-decoration:none;display:inline-block}
.tix{background:var(--arr-soft);border-color:var(--arr);color:var(--arr-ink)} .tix.old{border-width:2px;line-height:18px;font-weight:700} .tix.zero{background:var(--sunk);border-color:var(--line);color:var(--muted);opacity:.7}
a.tix:hover{background:var(--accent-soft)}
.viewas{position:sticky;top:0;z-index:11;background:var(--warn-soft);color:var(--ink);border-bottom:1px solid var(--warn);display:flex;justify-content:space-between;align-items:center;gap:10px;flex-wrap:wrap;padding:8px 16px}
.viewpick{margin-bottom:18px}
form.inline{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
form.inline select{width:auto;min-width:240px;max-width:100%}
.staff li a{text-decoration:none;color:var(--ink);font-weight:500}
.staff li a:hover{color:var(--accent);text-decoration:underline}

/* house */
.househead{display:flex;justify-content:space-between;gap:16px;align-items:flex-end;flex-wrap:wrap;margin-bottom:14px}
.facts{display:flex;flex-wrap:wrap;gap:6px 18px;margin:4px 0 0;font-size:14px}
.hactions{display:flex;gap:8px;flex-wrap:wrap}
.tabs{display:flex;gap:2px;border-bottom:1px solid var(--line);margin-bottom:8px;overflow-x:auto}
.tabs a{padding:9px 12px;text-decoration:none;color:var(--muted);font-weight:500;border-bottom:2px solid transparent;white-space:nowrap}
.tabs a[aria-current]{color:var(--ink);border-bottom-color:var(--accent)}
.tabs .n{font-family:var(--f-mono);font-size:11px;background:var(--sunk);padding:1px 6px;border-radius:10px}
.tiles{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:10px}
.tile{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:12px 14px 12px 18px;display:flex;flex-direction:column;gap:7px;position:relative;overflow:hidden}
.tile::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--line)}
.tile.ok::before{background:var(--ok)} .tile.warn::before{background:var(--warn)} .tile.bad::before{background:var(--bad)} .tile.none::before{background:var(--none)}
.tt{display:flex;justify-content:space-between;gap:6px 8px;align-items:flex-start;flex-wrap:wrap}
.tt .lbl{font-weight:600;min-width:0;flex:1 1 auto;overflow-wrap:anywhere}
.count{font-family:var(--f-display);font-weight:700;font-size:32px;line-height:1}
.count small{font-family:var(--f-body);font-size:12px;font-weight:500;color:var(--muted);margin-left:5px}
.tile.ok .count{color:var(--ok)} .tile.warn .count{color:var(--warn)} .tile.bad .count{color:var(--bad)} .count.none{color:var(--none)}
.tile p{margin:0}
.bar{height:5px;background:var(--sunk);border-radius:3px;overflow:hidden}
.bar i{display:block;height:100%;background:var(--ok)}
.tile.warn .bar i{background:var(--warn)} .tile.bad .bar i{background:var(--bad)}
.dates{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}
.dates b{color:var(--ink);font-weight:500}
.grid2{display:grid;grid-template-columns:minmax(0,1.6fr) minmax(0,1fr);gap:20px}
@media (max-width:900px){.grid2{grid-template-columns:1fr}}
.issues{list-style:none;margin:0;padding:0}
.issue{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line)}
.issue:last-child{border-bottom:0}
.issue.flagged{background:var(--flag-soft);box-shadow:inset 4px 0 0 var(--flag)}
.issue.flagged.cleared{background:var(--none-soft);box-shadow:inset 4px 0 0 var(--none)}
.issue.flagged.cleared .pill.flag{background:var(--none-soft);color:var(--none);border:1px solid var(--none)}
.tixlist textarea{width:100%;font-family:var(--f-mono);font-size:13px;margin-top:4px}
.issue .it{display:flex;flex-direction:column;gap:3px;min-width:0}
.meta{font-size:12px;color:var(--muted)}
.age.warn{color:var(--warn);font-weight:600} .age.bad{color:var(--bad);font-weight:600}
.detail{margin:4px 0 0;font-size:14px;white-space:normal;overflow-wrap:anywhere}
.ia{display:flex;flex-direction:column;align-items:flex-end;gap:4px;text-align:right;max-width:260px}
@media (max-width:640px){.issue{grid-template-columns:1fr}.ia{align-items:flex-start;text-align:left;max-width:none}}
.flagbox summary{list-style:none;cursor:pointer}
.flagbox summary::-webkit-details-marker{display:none}
.flagbox[open] summary{margin-bottom:8px}
.flagbox form{text-align:left;min-width:230px}
.more{display:inline-block;margin-top:8px;font-weight:600;text-decoration:none}

/* forms */
.stack,.form{display:flex;flex-direction:column;gap:6px}
.form{max-width:560px}
label{font-size:13px;font-weight:600;margin-top:6px}
input[type=text],input[type=email],input[type=password],input[type=search],input:not([type]),select,textarea{width:100%;background:var(--panel);border:1px solid var(--line);border-radius:7px;padding:9px 11px}
.check{display:flex;gap:8px;align-items:center;font-weight:500}
.actions{display:flex;gap:10px;align-items:center;margin-top:12px;flex-wrap:wrap}
.login{display:grid;place-items:center;min-height:70vh}
.login-card{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:28px 24px;width:100%;max-width:400px}
.login-card .btn{margin-top:12px}

/* walkthrough */
.walk{display:flex;flex-direction:column;gap:8px;max-width:820px}
.wrow{border:1px solid var(--line);border-radius:10px;background:var(--panel);padding:10px 14px;margin:0;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:8px;align-items:center}
.wrow legend{float:left;display:flex;flex-direction:column;padding:0}
.wrow input:not([type=radio]){grid-column:1/-1}
.pf{display:flex;border:1px solid var(--line);border-radius:7px;overflow:hidden}
.pf input{position:absolute;opacity:0;pointer-events:none}
.pf label{margin:0;padding:7px 14px;cursor:pointer;font-size:13px}
.pf input:checked+label.p{background:var(--ok);color:#fff}
.pf input:checked+label.f{background:var(--bad);color:#fff}
.pf input:focus-visible+label{outline:2px solid var(--accent);outline-offset:-2px}
.whist{padding:10px 14px;border-bottom:1px solid var(--line)}
.whist:last-child{border-bottom:0}
.whist ul{margin:8px 0 0;padding-left:0;list-style:none;display:grid;gap:3px}

/* chat */
.chat{display:flex;flex-direction:column;gap:10px;max-width:760px}
.msg{background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 14px;overflow-wrap:anywhere}
.msg.me{background:var(--accent-soft);border-color:transparent;margin-left:40px}
.mh{display:flex;justify-content:space-between;gap:10px;font-size:12px;color:var(--muted);margin-bottom:3px}
.mh b{color:var(--ink)}
.compose{display:flex;gap:8px;align-items:flex-end}
.compose textarea{flex:1}

/* tables */
.tablewrap{overflow-x:auto}
table{width:100%;border-collapse:collapse;font-size:14px}
th,td{padding:10px 12px;text-align:left;border-bottom:1px solid var(--line);vertical-align:top}
th{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);background:var(--sunk);font-weight:600}
tr:last-child td{border-bottom:0}
tr.dim td{opacity:.55}
td.acts{display:flex;gap:6px;flex-wrap:wrap}
[hidden]{display:none!important}
@media (prefers-reduced-motion:no-preference){.row,.kpi,.btn{transition:background .15s,filter .15s}}

/* update 2 */
.duty{display:inline-block;font-size:11px;font-weight:600;padding:1px 7px;border-radius:10px;margin-left:4px;white-space:nowrap}
.duty.on{background:var(--ok-soft);color:var(--ok)} .duty.off{background:var(--sunk);color:var(--muted);border:1px solid var(--line)}
.staff header .duty{margin:3px 0 0;align-self:flex-start}
.staff.unassigned{border-style:dashed}
.who2{font-size:11px;color:var(--muted)}
.headbtns{display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.rs.insp{display:flex;gap:4px;align-items:center;flex-wrap:wrap}
.pf label.x{color:var(--muted)} .pf input:checked+label.x{background:var(--muted);color:#fff}
.kindseg{display:inline-flex;margin:8px 0 4px}
.kindseg a{display:inline-flex;gap:6px;align-items:center}
.grp{margin:10px 0 0}
a.link-tile{text-decoration:none;color:var(--ink)} a.link-tile:hover{border-color:var(--accent)}
.redflag{background:var(--bad-soft);border:1px solid var(--bad);border-radius:10px;padding:14px 16px;margin-bottom:16px;color:var(--ink)}
.redflag h2{margin:0 0 6px;color:var(--bad)}
.redflag ul{margin:6px 0 0;padding-left:18px;columns:2 220px}
.redflag li{break-inside:avoid;margin:2px 0}
.roster{border-collapse:collapse;font-size:13px}
.roster td.on{background:var(--ok-soft);color:var(--ok);font-weight:600;text-align:center}
.roster td.off{background:var(--sunk);color:var(--muted);text-align:center}
.roster td.none{color:var(--muted);text-align:center}
.roster th.today,.roster td.today{outline:2px solid var(--accent);outline-offset:-2px}

/* update 3: assign homes + zone sheets */
#alloctable select{min-width:190px;padding:6px 8px}
#alloctable select.unset{border-color:var(--warn);color:var(--warn)}
#alloctable select.changed{border-color:var(--accent);box-shadow:0 0 0 2px var(--accent-soft)}
#dirty{color:var(--warn);font-weight:600}
.zonesheet{background:#fff;color:#111;border:1px solid var(--line);border-radius:10px;padding:18px;overflow-x:auto}
.zhead{text-align:center;background:#fff200;border:1px solid #111;padding:8px;margin-bottom:12px}
.zhead h1{font-size:22px;margin:0;color:#111}
.zhead p{margin:2px 0 0;font-weight:600;color:#111}
.ztitle{font-size:14px;margin:14px 0 6px;color:#111;background:#fff200;border:1px solid #111;padding:4px 8px;display:block}
.ztable{border-collapse:collapse;width:100%;font-size:12px;table-layout:fixed}
.ztable th,.ztable td{border:1px solid #111;padding:3px 5px;vertical-align:top;background:#fff;color:#111;text-transform:none;letter-spacing:0}
.ztable th{background:#f3f3f3;font-size:11.5px;font-weight:700}
.ztable thead th:not(.num){background:#d4eaf7;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.ztable th.num,.ztable td.num{width:26px;text-align:center;color:#555}
.ztable b{font-weight:600}
.zsub{display:block;font-size:10px;color:#555}
.zn{font-weight:400;font-size:10px;color:#555}
.zfoot{font-size:11px;color:#333;margin:6px 0 0}
@media print{
  @page{size:landscape;margin:8mm}
  body{background:#fff}
  .top,.foot,.viewas,.flash,.noprint{display:none!important}
  .wrap{max-width:none;padding:0}
  .zonesheet{border:0;padding:0;overflow:visible}
  .zblock{break-after:page}
  .zblock:last-of-type{break-after:auto}
  .zhead{padding:4px;margin-bottom:6px} .zhead h1{font-size:16px} .zhead p{font-size:10px}
  .ztitle{margin:6px 0 4px;padding:2px 6px;font-size:11px}
  .ztable{font-size:9px;line-height:1.2}
  .ztable th,.ztable td{padding:1px 3px}
  .ztable th{font-size:9px}
  .zsub{display:inline;font-size:7.5px}
  .zsub::before{content:" · "}
}

/* update 4: admin home */
.syncchip{font-size:12px;font-weight:600;padding:4px 10px;border-radius:14px;text-decoration:none;white-space:nowrap}
.syncchip.ok{background:var(--ok-soft);color:var(--ok)} .syncchip.warn{background:var(--warn-soft);color:var(--warn)} .syncchip.bad{background:var(--bad-soft);color:var(--bad)}
.subnav{display:flex;gap:4px;flex-wrap:wrap;margin:-6px 0 16px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.subnav a{font-size:13px;text-decoration:none;color:var(--muted);padding:5px 10px;border-radius:6px;border:1px solid transparent}
.subnav a:hover{background:var(--sunk);color:var(--ink)}
.subnav a[aria-current]{background:var(--panel);border-color:var(--line);color:var(--ink);font-weight:600}
@media (max-width:760px){.syncchip{display:none}}
@media print{.subnav{display:none!important}}
.syncbox{margin-bottom:16px}

/* update 5: reports */
.reportform{margin-bottom:18px}
.rchecks{border:0;padding:0;margin:0;display:grid;grid-template-columns:repeat(auto-fit,minmax(230px,1fr));gap:14px}
.rgroup{display:flex;flex-direction:column;gap:4px}
.rgroup .check{margin:0;font-weight:500;font-size:14px}
.rfilters{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:12px;margin-top:14px}
.rsummary{display:grid;grid-template-columns:repeat(auto-fill,minmax(170px,1fr));gap:10px;margin:12px 0}
.rsummary .kpi b{font-size:24px}
.rtable td{font-size:13px}
@media print{
  .reportout .tablewrap{overflow:visible;border:0}
  .rtable{font-size:9px} .rtable th,.rtable td{padding:3px 5px}
  .rsection{break-inside:auto}
  .rsummary{grid-template-columns:repeat(4,1fr)}
}

/* HVAC: due soon = blue, some units not serviced = orange */
.pill.due{background:var(--due-soft);color:var(--due)} .pill.part{background:var(--part-soft);color:var(--part)}
.dot.due{background:var(--due)} .dot.part{background:var(--part)}
.kpi.due b{color:var(--due)} .kpi.part b{color:var(--part)}
.stripe.due{background:var(--due)} .stripe.part{background:var(--part)}
.list .row.hl-due{background:var(--due-soft)} .list .row.hl-part{background:var(--part-soft)}
.staff li.hl-due{background:var(--due-soft)} .staff li.hl-part{background:var(--part-soft)}
.hvtxt.due{color:var(--due)} .hvtxt.part{color:var(--part)}
.tile.due::before{background:var(--due)} .tile.due .count{color:var(--due)} .tile.due .bar i{background:var(--due)}

/* Today's ticket counts on Homes in Program */
.todaytix{display:flex;flex-wrap:wrap;align-items:baseline;gap:6px 22px;padding:12px 16px;margin-bottom:14px}
.todaytix .tt-lbl{font-weight:600;color:var(--muted);font-size:13px;text-transform:uppercase;letter-spacing:.04em}
.todaytix .tt-n b{font-family:var(--f-display,inherit);font-size:22px;margin-right:4px}
.todaytix a{margin-left:auto}

/* Tech card: total open tickets across their homes */
.tixsum{font-size:12px;color:var(--muted);margin-top:3px} .tixsum b{color:var(--ink);font-family:var(--f-mono)} .tixsum.old{color:var(--bad)}

/* Housekeeping */
.hkgrid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.hkgrid label{display:block;margin-bottom:6px}
.hkgrid select{width:100%}
@media (max-width:560px){.hkgrid{grid-template-columns:1fr}}
.hklist{list-style:none;margin:0;padding:0} .hklist li{padding:10px 14px;border-bottom:1px solid var(--line)} .hklist li:last-child{border-bottom:0}
.hktable td{vertical-align:top} .hktable .nowrap{white-space:nowrap}
.hkact{min-width:190px} .hkact .inline{display:flex;gap:6px;flex-wrap:wrap}

/* On property right now (from the schedule): green ring = on shift now, red ring = off now */
.person{display:inline-block;padding:0 6px;border-radius:999px;border:2px solid transparent;line-height:1.35}
.person.on{border-color:var(--ok);background:var(--ok-soft)} .person.off{border-color:var(--bad);background:var(--bad-soft)}
.duty.off{background:var(--bad-soft);color:var(--bad);border:0}
@media print{.person{border:0;background:none;padding:0}}

/* Staff schedule */
.nowgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:8px 24px}
.nowp{display:inline-block;margin:3px 0}
.roster tr.me td{font-weight:600}
/* Property map */
.mapbar{display:flex;gap:6px;margin-bottom:8px}
.mapview{overflow:auto;max-height:78vh;cursor:grab;-webkit-overflow-scrolling:touch;touch-action:pan-x pan-y pinch-zoom}
.mapview.drag{cursor:grabbing}
.mapview img{display:block;width:100%;max-width:none;height:auto;user-select:none}
.hkexport{flex-wrap:wrap;gap:6px;align-items:center}

/* Logo */
.brand .logo{height:40px;width:auto;display:block}
.loginlogo{display:block;width:min(280px,80%);height:auto;margin:0 auto 14px}
@media (prefers-color-scheme:dark){.brand .logo,.loginlogo{background:#fff;border-radius:10px;padding:3px 6px}}

/* Photos */
.photobtn{display:inline-flex;align-items:center;gap:6px;border:1px dashed var(--line);border-radius:8px;padding:4px 10px;font-size:13px;color:var(--accent);cursor:pointer;background:var(--panel)}
.photobtn input{position:absolute;opacity:0;width:1px;height:1px}
.photobtn:focus-within{outline:2px solid var(--accent)}
.photostrip{display:flex;flex-wrap:wrap;gap:6px;margin:8px 0}
.photostrip img{width:84px;height:84px;object-fit:cover;border-radius:8px;border:1px solid var(--line);display:block}
.wrow .photobtn{margin-top:6px}
/* Occupancy */
.occ{display:inline-block;font-size:11px;font-weight:600;border-radius:999px;padding:1px 8px;vertical-align:2px;text-decoration:none;margin:2px 2px 2px 0}
.occ.in,.occ.arr,.occ.dep,.occ.turn{background:var(--accent-soft);color:var(--accent);border:1px solid var(--accent)}
.occ.soon{background:var(--due-soft);color:var(--due)}
h1 .occ{font-size:13px;vertical-align:6px}
.occboard td{text-align:center;font-size:14px}
.occboard td.o-in{background:var(--accent-soft);color:var(--accent)}
.occboard td.o-arr,.occboard td.o-dep,.occboard td.o-turn{background:var(--accent-soft);color:var(--accent);font-weight:700}
.kpi.occk b{color:var(--accent)}
.prearr{background:var(--due-soft);border:1px solid var(--due);border-radius:10px;padding:10px 14px;margin:0 0 14px}
.prearr .pa{display:block;font-size:13px;margin-top:4px}
.txt-ok{color:var(--ok)}
.repeat{background:var(--part-soft);border:1px solid var(--part);border-radius:10px;padding:10px 14px;margin:0 0 14px}
.repeat ul{margin:4px 0 4px 18px;padding:0}
.note.rep{background:var(--part-soft);color:var(--part)}
.stays{list-style:none;margin:0 0 8px;padding:0}.stays li{padding:4px 0;border-bottom:1px solid var(--line)}.stays form{display:inline}
table.plain td{padding:6px 8px;border-bottom:1px solid var(--line);vertical-align:top}
/* Home info */
.infogrp{margin:0 0 12px;border:1px solid var(--line)} .infogrp legend{font-weight:700;padding:0 6px}
.infogrp textarea{width:100%;margin-bottom:8px}
.infoview{display:grid;grid-template-columns:repeat(auto-fit,minmax(280px,1fr));gap:12px}
.infoview dt{font-weight:600;margin-top:6px} .infoview dd{margin:0 0 4px}
/* Storm */
.stormbanner{background:#c25a0a;color:#fff;padding:8px 16px;text-align:center}
.stormbanner a{color:#fff;font-weight:700}
.stormnav{color:var(--part)!important;font-weight:700}
.btn.stormbtn{background:var(--part);border-color:var(--part);color:#fff}
.stormbar{display:flex;height:14px;border-radius:7px;background:var(--line);overflow:hidden}
.stormbar i{display:block;height:100%} .stormbar .s-done{background:var(--ok)} .stormbar .s-damage{background:var(--bad)} .stormbar .s-part{background:var(--due)}
/* Offline bar */
#offbar{position:fixed;left:12px;right:12px;bottom:12px;z-index:50;border-radius:10px;padding:10px 14px;font-size:14px;box-shadow:0 4px 18px rgba(0,0,0,.18);background:var(--panel);border:1px solid var(--line)}
#offbar.wait{background:var(--due-soft);color:var(--due);border-color:var(--due)}
#offbar.off{background:var(--part-soft);color:var(--part);border-color:var(--part)}
#offbar.ok{background:var(--ok-soft);color:var(--ok);border-color:var(--ok)}
@media print{#offbar,.stormbanner{display:none}}
/* Occupancy dots on Homes in Program */
.dot.occ-in{background:var(--ok)} .dot.occ-soon{background:var(--arr)} .dot.occ-vac{background:var(--bad)}
a.plink{color:inherit;text-decoration:none} a.plink:hover .person, a.plink:hover{text-decoration:underline}
/* Person page */
.weekstrip{display:flex;gap:6px;flex-wrap:wrap;margin:0 0 14px}
.weekstrip span{display:flex;flex-direction:column;font-size:12px;padding:6px 10px;border-radius:8px;border:1px solid var(--line);background:var(--panel);min-width:78px}
.weekstrip span.on{background:var(--ok-soft);border-color:var(--ok);color:var(--ok)} .weekstrip span.off{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}
.weekstrip b{color:var(--ink)}
.ptable td{vertical-align:top}
.kpi.part b{color:var(--part)}
.addstay summary{margin-top:4px}
.addstay form{margin-top:6px;gap:4px;max-width:220px} .addstay label{font-size:12px;display:flex;flex-direction:column}

/* House name and vendors */
.hname-line{margin:2px 0 6px;font-size:17px}
.hname{font-style:italic;color:var(--accent,#3BCDCF)}
.hname-sm{font-style:italic;color:var(--muted);font-size:.9em;margin-left:4px}
.hdedit{margin-top:8px}
.hdedit summary{cursor:pointer;list-style:none;display:inline}
.hdedit summary::-webkit-details-marker{display:none}
.hdform{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:flex-end;margin-top:8px}
.hdform label{display:flex;flex-direction:column;gap:3px;font-size:13px;flex:1 1 180px}
.hdtbl input{width:100%;min-width:140px}
.hdtbl td{vertical-align:top}
.hdsave{position:sticky;bottom:0;padding:10px 0;background:var(--bg);display:flex;gap:10px;align-items:center;flex-wrap:wrap}
/* Rentals */
.badge.info{background:var(--accent);color:var(--on-accent)}
.occ.rent{background:var(--part-soft,#fde6d4);color:var(--part,#c25a0a);border:1px solid var(--part,#c25a0a)}
.tag.notprog{background:var(--sunk);color:var(--muted)}
.tag.cb{background:var(--part-soft,#fde6d4);color:var(--part,#c25a0a)}
.renttbl td{vertical-align:top}
.renttbl tr.cx td{opacity:.55}
.renttbl tr.cx td b{text-decoration:line-through}
.rentform{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px 14px;margin-top:10px;align-items:end}
.rentform label{display:flex;flex-direction:column;gap:3px;font-size:13px}
.rentform label.check{flex-direction:row;align-items:center;gap:6px}
.rentform .wide{grid-column:1/-1}
.rentform .actions{grid-column:1/-1}
.addrent{margin-bottom:14px}
.addrent>summary{list-style:none;cursor:pointer;display:inline-flex}
.addrent>summary::-webkit-details-marker,.rowedit>summary::-webkit-details-marker{display:none}
.rowedit>summary{list-style:none;cursor:pointer}
.rowedit[open]{min-width:min(640px,80vw)}
.rentban{background:var(--part-soft,#fde6d4);border:1px solid var(--part,#c25a0a);border-radius:10px;padding:10px 14px;margin:0 0 14px}
.rentban b{color:var(--part,#c25a0a)}
.myrent{margin-bottom:14px}
.myrent ul.plain{list-style:none;padding:0;margin:6px 0 8px}
.myrent li{padding:4px 0;border-bottom:1px solid var(--line)}
.rentadmin{display:grid;gap:10px;margin-bottom:14px}
.rentadmin .addrent{margin:0}
.rentup .inline{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:8px}
.renttbl tr.monthrow th{background:var(--sunk);border-top:3px solid var(--accent);padding:10px 12px;text-align:left;font-size:15px;text-transform:none;letter-spacing:0;color:var(--ink)}
.renttbl tr.monthrow:first-child th{border-top:0}
.renttbl tr.monthrow th a{margin-left:8px;font-weight:400}
.toolbar form.inline select{min-width:170px}

.kpi.arrk b{color:var(--arr)}
.dot.occ-soon{box-shadow:0 0 0 1px rgba(0,0,0,.15)}
/* LuxAbaco Design credit */
.ld-wrap{display:flex;justify-content:center;padding:6px 16px calc(16px + env(safe-area-inset-bottom,0px))}
.ld-credit{display:inline-flex;align-items:center;gap:8px;font-size:11px;color:var(--muted);text-decoration:none;opacity:.85}
.ld-credit:hover{opacity:1}
.ld-credit img{height:28px;width:auto;display:block}
@media print{.ld-wrap{display:none}}
/* Arrival readiness */
.arralert{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;background:var(--bad-soft);border:2px solid var(--bad);color:var(--ink);border-radius:12px;padding:12px 16px;margin:0 0 16px}
.arralert>div>b{color:var(--bad);font-size:16px;margin-right:6px}
.arralert ul{margin:6px 0 0;padding-left:18px;font-size:14px}
.prearr.notready{border-color:var(--bad);background:var(--bad-soft)}
.arrnote{background:var(--warn-soft);border-left:4px solid var(--warn);padding:10px 12px;border-radius:6px}
.arrlist{display:grid;gap:12px}
.arrcard{padding:14px 16px;border-left:5px solid var(--line)}
.arrcard.st-ready{border-left-color:var(--ok)} .arrcard.st-problem{border-left-color:var(--bad)} .arrcard.st-due{border-left-color:var(--warn)}
.arrhead{display:grid;grid-template-columns:110px 1fr auto;gap:12px;align-items:start}
.arrwhen b{display:block;font-size:16px}.arrwhen span{font-size:12px;color:var(--muted)}
.arrbody{display:grid;grid-template-columns:1.4fr 1fr .8fr;gap:16px;margin-top:10px;padding-top:10px;border-top:1px solid var(--line)}
.arrbody .lbl{display:block;font-size:11px;text-transform:uppercase;letter-spacing:.06em;color:var(--muted);margin-bottom:4px}
.arrtix{margin:0 0 4px;padding-left:16px;font-size:14px}
@media (max-width:760px){.arrhead{grid-template-columns:1fr auto}.arrwhen{grid-column:1/-1}.arrbody{grid-template-columns:1fr}}
/* Ticket status: vendor / parts / project */
.tstat{display:inline-block;font-size:11px;font-weight:600;border-radius:999px;padding:1px 8px;background:var(--due-soft);color:var(--due);border:1px solid var(--due);vertical-align:1px}
.tstat.parts{background:var(--warn-soft);color:var(--warn);border-color:var(--warn)}
.tstat.project{background:var(--none-soft);color:var(--none);border-color:var(--none)}
.tsline{display:block;margin-top:4px}
.issue.parked{opacity:.92}
.stbox select{width:100%}
.tixp{display:inline-block;margin-left:3px;font-size:10px;color:var(--due);font-weight:600;vertical-align:2px}
/* Checklist items */
.chkgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px;margin-bottom:18px}
.chklist{list-style:none;padding:0;margin:4px 0 10px}
.chklist li{padding:5px 0;border-bottom:1px solid var(--line);display:flex;gap:6px;flex-wrap:wrap;align-items:baseline}
.chklist li form{margin-left:auto}
.chklist.std li{border-bottom:0;padding:2px 0}
.chkadd{display:flex;gap:8px;flex-wrap:wrap;align-items:flex-end}
.chkadd label{display:flex;flex-direction:column;gap:3px;font-size:13px;flex:1 1 160px}
.chkedit{margin:14px 0}
.chkedit>summary{cursor:pointer}
/* Hover / tap a name: on or off now, and the next shift */
.person{position:relative;cursor:default}
.person.nosched{border-color:transparent;background:none;padding:0}
.tipbox{position:fixed;z-index:60;max-width:240px;background:var(--ink);color:var(--bg);font-size:12px;font-weight:500;line-height:1.4;padding:6px 9px;border-radius:8px;box-shadow:0 4px 14px rgba(0,0,0,.25);pointer-events:none;white-space:pre-line}
.tipbox[hidden]{display:none}
.person[data-tip]:focus{outline:2px solid var(--accent);outline-offset:1px}
.txt-arr{color:var(--arr-ink)}
/* Pest control */
.pestbox{margin-bottom:6px;border-left:5px solid var(--ok)}
.pestbox.due{border-left-color:var(--due)} .pestbox.warn{border-left-color:var(--warn)} .pestbox.bad{border-left-color:var(--bad)}
.pestline{margin-bottom:6px}
.list .row.simple{grid-template-columns:minmax(0,1fr) auto;padding-left:16px}
.phmload{display:grid;grid-template-columns:repeat(auto-fill,minmax(180px,1fr));gap:8px;margin-top:8px}
.ztable td.zshare{background:#bdbdbd;-webkit-print-color-adjust:exact;print-color-adjust:exact}
.zpct{font-size:9px;font-weight:600;color:#555;margin-left:3px;vertical-align:1px}
.ztable td.zopen{color:#1f7a45;font-weight:600;font-style:italic;vertical-align:middle;text-align:center}

/* update 43: zone sheet boxes all the same size */
.ztable tbody td:not(.num){height:54px;overflow:hidden}
.zc{height:48px;overflow:hidden}
.zc .zl,.zc .zsub{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
@media print{
  .ztable tbody td:not(.num){height:34px}
  .zc{height:33px}
  .zc .zsub{display:block}
  .zc .zsub::before{content:none}
}

/* update 45: Homes in Program - tech (or Rep) always on the line under the home name */
.hn .brk{flex-basis:100%;height:0}
/* update 47: pest control Google Sheet */
.pestsheet{margin-bottom:16px}
.pestsheet .chkadd label.grow{flex:1 1 380px}
.pestsheet .chkadd label.grow input{width:100%}
.pestsheet form.inline{display:inline-block;margin:10px 10px 0 0}
.pestexp{display:flex;flex-wrap:wrap;gap:8px 10px;align-items:center;margin-bottom:14px}
.pestexp select{padding:6px 8px}
/* update 50: meter readings + electric */
.mtabs{margin:0 0 14px}
.meterform{display:grid;gap:12px;margin:12px 0}
.mrow{display:grid;gap:4px;padding:10px 12px;border:1px solid var(--line);border-radius:10px}
.mrow > label{display:flex;flex-direction:column;gap:4px;font-size:13px}
.mrow input[data-meter]{font-size:18px;font-family:var(--mono, ui-monospace, monospace);max-width:260px;padding:8px 10px}
.mopts{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center}
.mhint:empty{display:none}
.meterform > label{display:flex;flex-direction:column;gap:3px;font-size:13px;max-width:520px}
.mhist{margin-top:10px}
.mhist summary{cursor:pointer;font-weight:600;font-size:13px}
.mhist h3{margin:10px 0 4px}
table.mini td,table.mini th{padding:4px 8px;font-size:12.5px}
tr.mf-check td{background:color-mix(in srgb, var(--warn) 10%, transparent)}
tr.mf-high td{background:color-mix(in srgb, var(--bad) 10%, transparent)}
.ebars{display:flex;align-items:flex-end;gap:2px;height:34px;min-width:120px;max-width:420px}
.elecbox .ebars{height:70px;max-width:none;margin-top:10px}
.ebars .eb{flex:1 1 0;max-width:16px;background:var(--accent);border-radius:2px 2px 0 0;min-width:3px;opacity:.85}
.ebars .eb.zero{background:var(--bad)}
.ebars .eb.stale{background:repeating-linear-gradient(45deg,var(--line),var(--line) 3px,transparent 3px,transparent 6px);opacity:1}
.mupload{margin-bottom:14px}
/* update 52: arrival sign-off under 3 days */
.arrcard.urgent{background:var(--warn-soft);border-color:var(--warn);border-left-color:var(--warn)}
.arrcard.urgent.st-problem{background:var(--bad-soft);border-color:var(--bad);border-left-color:var(--bad)}
.arrsign{margin-top:12px;padding-top:12px;border-top:1px dashed currentColor;font-size:14px}
.arrsignf{display:flex;flex-wrap:wrap;gap:8px 12px;align-items:center}
.arrsignf input{flex:1 1 220px;max-width:360px;padding:8px 10px}
.arrok{margin-top:10px;padding:8px 12px;border-radius:8px;background:var(--ok-soft);color:var(--ok);font-size:13.5px}
.arrcard.st-confirmed{border-left-color:var(--ok)}
.btn.pulse{background:#b3261e;border-color:#b3261e;color:#fff;font-weight:700;animation:arrpulse 1.2s ease-in-out infinite}
@keyframes arrpulse{0%,100%{box-shadow:0 0 0 0 color-mix(in srgb, var(--bad) 70%, transparent);transform:scale(1)}50%{box-shadow:0 0 0 8px transparent;transform:scale(1.04)}}
@media (prefers-reduced-motion: reduce){.btn.pulse{animation:none;outline:3px solid var(--bad);outline-offset:2px}}
@media print{.arrsign form,.arrok form{display:none}}
.ebars .eb{cursor:default;transition:opacity .1s}
.ebars:hover .eb{opacity:.45} .ebars .eb:hover,.ebars .eb:focus{opacity:1;outline:none;box-shadow:0 0 0 2px var(--ink, #fff)}
.hdtbl input.sqft{max-width:90px}
.ebars .eb.occ{background:var(--ok)}
.elegend{margin:6px 0 2px}
.eb-key{display:inline-block;width:10px;height:10px;border-radius:2px;background:var(--accent);opacity:.85;vertical-align:-1px;margin:0 2px 0 8px}
.eb-key.occ{background:var(--ok);margin-left:0}
.ebars .eb.est,.eb-key.est{background-image:repeating-linear-gradient(135deg,rgba(255,255,255,.45) 0 2px,transparent 2px 5px)}
.wbars{min-width:140px}
.wflag{font-weight:700;white-space:nowrap} .wflagtxt{color:var(--bad);font-weight:600}
#wrlist tr.wflagrow td{background:color-mix(in srgb,var(--bad) 9%,transparent)} #wrlist tr.wflagrow td:first-child{box-shadow:inset 4px 0 0 var(--bad)}
.elecbox.wflagbox{border-color:var(--bad);box-shadow:inset 4px 0 0 var(--bad)}
.proptbl input{min-width:0;width:100%} .proptbl input.lot{max-width:110px} .proptbl input.beds{max-width:52px} .proptbl td.center{text-align:center}
.proptbl td{padding:4px 6px}
.urform .chkadd label{flex:1 1 120px}
.urtbl td{vertical-align:top} .urtbl tr.uravg td{border-top:2px solid var(--line);background:color-mix(in srgb, var(--accent) 8%, transparent)}
.urtbl tr.ur-size td{background:color-mix(in srgb, var(--warn) 6%, transparent)}
.urnote{font-size:13.5px;padding:10px 12px;border-radius:8px;background:var(--warn-soft);color:var(--warn);margin:0 0 12px}
.proptbl input.acct{max-width:110px}

/* Public Spaces */
.pslist{display:grid;gap:8px;margin-bottom:6px}
.pstask{display:flex;gap:14px;align-items:center;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:14px 16px;font-size:17px;cursor:pointer}
.pstask input{width:26px;height:26px;flex:none;accent-color:var(--accent)}
.pstask:has(input:checked){background:var(--ok-soft);border-color:var(--ok)}
.pstask small,.psstock small{display:block;color:var(--muted);font-size:13px}
.psstock{display:flex;justify-content:space-between;align-items:center;gap:12px;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:10px 12px 10px 16px;font-size:17px}
.stepper{display:inline-flex;align-items:center;gap:0;flex:none}
.stepper button{width:44px;height:44px;border:1px solid var(--line);background:var(--sunk);color:var(--ink);font-size:22px;cursor:pointer}
.stepper button:first-child{border-radius:8px 0 0 8px}.stepper button:last-child{border-radius:0 8px 8px 0}
.stepper input{width:56px;height:44px;text-align:center;border:1px solid var(--line);border-left:0;border-right:0;font-size:18px;background:var(--panel);color:var(--ink)}
.psform textarea,.psform input[name=note]{width:100%}
.psdone{margin:18px 0}.btn.big{padding:14px 34px;font-size:18px;width:100%;max-width:420px}
.psopen{margin-bottom:12px;display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.psrow{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap}
.psrow details form{margin-top:6px}
.psissue p{margin:6px 0}
.psitems td{padding:3px 4px}.psitems input[name$="[label]"]{min-width:220px}
.psqrbox{display:flex;gap:20px;align-items:flex-start;flex-wrap:wrap}
.psqrbox .psqr{width:180px;background:#fff;padding:6px;border-radius:6px}
.psqr svg{width:100%;height:auto;display:block}
.pscands{columns:3 220px;margin-bottom:10px}.pscands .eyebrow{break-after:avoid;margin:8px 0 2px}.pscands label{break-inside:avoid;margin:3px 0}
.qrsheet{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}
.qrcard{border:2px solid var(--line);border-radius:12px;padding:16px;text-align:center;background:#fff;color:#111;break-inside:avoid}
.qrcard .psqr{width:62%;margin:8px auto}
.qrcard .qb{margin:0;font-size:13px;letter-spacing:.06em;text-transform:uppercase;color:#555}
.qrcard .qn{margin:2px 0 0;font-size:20px;font-weight:700}
.qrcard .qh{margin:4px 0 0;font-size:12px;color:#555}
@media (max-width:640px){.qrsheet{grid-template-columns:1fr}}
@page qrpage{size:portrait;margin:10mm}
@media print{.qrsheet{page:qrpage;gap:0.2in}.qrcard{height:4.1in;border-color:#999;padding:10px}.qrcard .psqr{width:70%}.tabs{display:none!important}}
.psitems{width:100%}.psitems .beds{width:64px}.psitems td:first-child{width:72px}.psitems td:nth-child(4){width:190px}.psitems td:last-child{width:60px;text-align:center}
.psscanbar{margin:4px 0 16px}
.psscanbar .btn.big{max-width:none}
.psscanner{position:fixed;inset:0;z-index:100;background:rgba(0,0,0,.88);display:flex;align-items:center;justify-content:center;padding:16px}
.psscanner[hidden]{display:none}
.pssbox{position:relative;width:min(560px,100%);text-align:center}
.pssbox video{width:100%;border-radius:12px;background:#000;display:block}
.pssframe{position:absolute;left:50%;top:0;transform:translateX(-50%);width:60%;aspect-ratio:1;margin-top:8%;border:3px solid rgba(255,255,255,.85);border-radius:16px;pointer-events:none}
.pssmsg{color:#fff;font-size:17px;margin:14px 0}
body.noscroll{overflow:hidden}
.pstaskwrap{display:grid;gap:4px}
.pscomm summary{font-size:13px;color:var(--accent);cursor:pointer;padding:0 4px;list-style:none}
.pscomm summary::before{content:"+ "}
.pscomm[open] summary::before{content:"− "}
.pscomm input{width:100%;margin-top:4px;padding:10px 12px;font-size:16px;border:1px solid var(--line);border-radius:8px;background:var(--panel);color:var(--ink)}
.pscmt{display:inline-block;margin-top:2px;padding:1px 6px;border-radius:4px;background:var(--sunk);color:var(--ink)}
.pslog .person{white-space:nowrap}
.stateseg{display:flex;gap:4px;margin-top:6px;flex-wrap:wrap}
.stateseg button{font-size:12px;font-weight:600;padding:6px 9px;border-radius:7px;border:1px solid var(--line);background:var(--panel);color:var(--ink);cursor:pointer;white-space:nowrap}
.stateseg button.ok.on{background:var(--ok-soft);border-color:var(--ok);color:var(--ok)}
.stateseg button.warn.on{background:var(--warn-soft);border-color:var(--warn);color:var(--warn)}
.stateseg button.bad.on{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}
.statecell{min-width:230px}
.auditf{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end;margin-bottom:12px}
.auditf label{display:flex;flex-direction:column;gap:3px;font-size:13px;font-weight:600}
.auditf label.check{flex-direction:row;align-items:center}
.auditf p{flex-basis:100%;margin:0}
.auditppl{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}
.auditppl .chip{font-size:13px;text-decoration:none;padding:4px 10px;border-radius:14px;border:1px solid var(--line);background:var(--panel);color:var(--ink)}
.auditppl .chip b{font-family:var(--f-mono);margin-left:4px;color:var(--accent)}
.auditdet{max-width:420px;word-break:break-word;font-family:var(--f-mono);font-size:11px;margin-top:4px}
.audittbl td{vertical-align:top}
.hstate{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin:4px 0 10px}
.hstate .stateseg{margin-top:0}
h1 .hstatepill .pill{font-size:15px;padding:4px 12px;vertical-align:6px;font-family:var(--f-body,inherit);letter-spacing:0}
.homeitem{border-bottom:1px solid var(--line)}
.homeitem:last-child{border-bottom:0}
.homeitem .row{border-bottom:0!important}
.hsbar{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;padding:0 14px 11px 19px}
.hsbar .stateseg{margin-top:0}
.hstate.big{padding:10px 12px;background:var(--panel);border:1px solid var(--line);border-radius:10px;width:fit-content;max-width:100%}
.hstate.big .stateseg button{font-size:14px;padding:9px 14px}
.psroute{margin-bottom:14px}
.psrouteh{display:flex;justify-content:space-between;align-items:flex-start;gap:12px;flex-wrap:wrap;margin-bottom:8px}
.psstops{list-style:none;margin:0;padding:0;counter-reset:st}
.psstops li{display:grid;grid-template-columns:28px minmax(0,1fr) auto auto;gap:10px;align-items:center;padding:10px 0;border-top:1px solid var(--line);counter-increment:st}
.psstops li::before{content:counter(st);width:24px;height:24px;border-radius:50%;background:var(--sunk);display:grid;place-items:center;font-size:12px;font-weight:700;color:var(--muted)}
.psstops li.done::before{background:var(--ok-soft);color:var(--ok)} .psstops li.part::before{background:var(--warn-soft);color:var(--warn)}
.psrounds{display:inline-flex;gap:3px}
.psrounds i{font-style:normal;font-size:11px;width:22px;height:22px;border-radius:5px;border:1px solid var(--line);display:grid;place-items:center;color:var(--muted)}
.psrounds i.on{background:var(--ok-soft);border-color:var(--ok);color:var(--ok);font-weight:700}
.pssec{margin-bottom:6px}
details.pssec{background:var(--panel);border:1px dashed var(--line);border-radius:10px;padding:8px 12px;margin:10px 0}
details.pssec>summary{cursor:pointer;font-weight:600}
.pssech{display:flex;flex-wrap:wrap;gap:8px;align-items:baseline}
h2.pssech{margin:18px 0 8px}
.pssec.closing .pssech{color:var(--accent)}
.psitems2 td{vertical-align:top}.psitems2 textarea{width:100%;min-width:260px;font:inherit;font-size:13px}.psitems2 input[name$="[section]"]{width:170px}
@media (max-width:640px){.psstops li{grid-template-columns:24px minmax(0,1fr);}.psstops li .psrounds{grid-column:2}}
.psassign td{vertical-align:top;min-width:130px}
.psassign select{width:100%;max-width:170px;font-size:12px}
.psassign select.set{border-color:var(--accent);background:var(--accent-soft)}
.psassign td.off{background:var(--sunk)}
.psassign th.today{color:var(--accent)}
.psassign td .small{display:block;margin-top:3px}
.psnotstarted{margin-bottom:12px}.psnotstarted p+p{margin-top:6px}

/* Public Spaces section (Oct 2026): its own logo and green accent, taken from the Public Spaces logo */
.pslink{display:flex;border-radius:50%;flex:none;transition:transform .15s}
.pslink:hover{transform:scale(1.06)}
.pslink img,.psbrand .pslogo{height:46px;width:46px;display:block;border-radius:50%}
.pssec{--accent:#0f7a62;--accent-soft:#d6f2e8}
.pssec .top{border-bottom:3px solid #6fd4b4}
.aspback{display:inline-flex;align-items:center;gap:6px}
.aspback img{height:18px;width:auto}
@media (prefers-color-scheme:dark){.pssec{--accent:#4fd1ae;--accent-soft:#123a30}.pssec .top{border-bottom-color:#2a8f74}.aspback img{background:#fff;border-radius:4px;padding:1px 2px}}
@media (max-width:760px){.aspback span{display:none}.aspback img{height:22px}}
@media (max-width:760px){.pslink img{height:38px;width:38px}.top:has(.pslink){gap:10px}.top:has(.pslink) .brand .logo{height:34px}}
@media (max-width:440px){.top:has(.pslink) .bt{display:none}}

/* Public Spaces practice mode (Oct 2026): pick a code on screen; nothing is saved */
.flash.info{background:var(--due-soft);color:var(--due)}
.tag.ok{background:var(--ok-soft);color:var(--ok)}
.practicebar{position:sticky;top:0;z-index:9;display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;justify-content:center;padding:9px 16px;text-align:center;font-weight:500;color:#3a2a00;
  background:repeating-linear-gradient(135deg,#ffd84d 0 18px,#ffcc1a 18px 36px);border-bottom:2px solid #c99a00}
.practicebar b{letter-spacing:.08em;text-transform:uppercase}
.practicebar .btn{background:#3a2a00;color:#fff;border-color:#3a2a00}
.top .practicebar{position:static;flex-basis:calc(100% + 32px);margin:2px -16px -10px;border-radius:0}
.psprac{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.psprac select{max-width:100%;width:auto;flex:0 1 360px}
.pspick{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:12px}
.pspickc{display:flex;flex-direction:column;align-items:center;gap:4px;text-align:center;padding:12px 10px;background:var(--panel);border:1px solid var(--line);border-radius:12px;text-decoration:none;color:var(--ink);transition:border-color .15s,transform .15s}
.pspickc:hover{border-color:var(--accent);transform:translateY(-1px)}
.pspickc .psqr{width:96px;background:#fff;padding:5px;border-radius:6px;display:block}
.pspickc .psqr img,.pspickc .psqr svg,.pspickc .psqr canvas{width:100%;height:auto;display:block}
.pspickc b{font-size:14px;line-height:1.25}
.pspickc.off{opacity:.55}
.practiceres{margin:12px 0 0;text-align:left}
@media (max-width:440px){.pspick{grid-template-columns:repeat(2,minmax(0,1fr))}.pspickc .psqr{width:84px}}
.practicebar .pbs{display:none}
@media (max-width:600px){.practicebar{flex-wrap:nowrap;gap:8px;padding:6px 12px;font-size:13px;justify-content:space-between;text-align:left}.practicebar .pbl{display:none}.practicebar .pbs{display:inline}.practicebar .btn{padding:4px 8px;font-size:12px;white-space:nowrap}}
@media (max-width:600px){.practicebar b{white-space:nowrap;letter-spacing:.04em}.practicebar>span{flex:1}}
/* Meters: find a Vision account (Oct 2026) */
.acctfind{margin:12px 0}
.acctfind input[name=acc]{min-width:min(420px,100%)}
.acctlink{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:6px}
.acctlink select{max-width:220px}
/* Utility report: pick homes by hand (Oct 2026) */
.urpickbox{margin:12px 0}
.urpickbox summary{cursor:pointer}
.urpickcols{display:grid;grid-template-columns:1fr 1fr;gap:18px;max-height:460px;overflow:auto;border:1px solid var(--line);border-radius:8px;padding:10px 12px;background:var(--bg)}
.urpk{display:flex;gap:8px;align-items:flex-start;padding:3px 0;font-size:14px;cursor:pointer}
.urpk[hidden]{display:none}
.urpk input{margin-top:3px}
@media (max-width:760px){.urpickcols{grid-template-columns:1fr}}
.propgrp th{background:var(--sunk);text-align:left;font-size:13px}
/* Housekeeping: daily entries (Oct 2026) */
.tag.hkdaily{background:var(--accent-soft);color:var(--accent)}
.hkall{display:flex;gap:6px;align-items:center;margin-top:4px}
/* Housekeeping form: one day / several days, per-day plan (Oct 2026) */
.hkchoice{border:0;padding:0;margin:4px 0 12px;display:flex;gap:18px;flex-wrap:wrap}
.hkchoice legend{font-weight:600;margin-bottom:6px;padding:0;width:100%}
.hkchoice label{display:flex;gap:6px;align-items:center;font-weight:400}
.hkdates{display:grid;grid-template-columns:repeat(2,minmax(0,220px));gap:10px;margin-bottom:12px}
.hkdates label{display:block;margin-bottom:6px}
.hkdates [hidden],.hkform [hidden]{display:none!important}
.hkdaytbl{width:auto;min-width:min(100%,460px)}
.hkdaytbl select{width:auto}
.hkday{display:flex;gap:8px;align-items:center;white-space:nowrap;font-weight:500}
@media (max-width:560px){.hkdates{grid-template-columns:1fr}}
.solar{color:#e0a100;font-size:1.05em;cursor:help;margin-left:2px}
.solarbtn{display:inline}.solarbtn .link{padding:0}
/* Sortable tables (Oct 2026) */
th.sorth{cursor:pointer;user-select:none;white-space:nowrap}
th.sorth:hover{color:var(--ink)}
th.sorth::after{content:" ↕";opacity:.35;font-size:.9em}
th.sorth[aria-sort=ascending]::after{content:" ↑";opacity:.9}
th.sorth[aria-sort=descending]::after{content:" ↓";opacity:.9}
.solarbtn .link{white-space:nowrap}
.tag.pestm{background:var(--due-soft);color:var(--due)}
.lastup{margin:10px 0 0;padding:8px 10px;background:var(--sunk);border-radius:6px}

/* Awards (Update 94) */
.champs{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin-bottom:8px}
.champ{display:flex;gap:16px;align-items:center;padding:18px 20px;background:linear-gradient(135deg,var(--arr-soft),var(--panel) 70%);border-color:var(--arr)}
.champ.none{background:var(--panel);border-color:var(--line)}
.champ .cup{font-size:44px;line-height:1}
.champ h2{margin:2px 0 2px;font-family:var(--f-display);font-size:26px}
.champ p{margin:0}
.awardteam{margin:26px 0 10px;font-family:var(--f-display)}
.awards{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px}
.award{padding:14px 16px;display:flex;flex-direction:column;gap:10px}
.award header{display:flex;gap:10px;align-items:flex-start}
.award .aicon{font-size:24px;line-height:1.2}
.award h3{margin:0;font-size:16px}
.award header p{margin:2px 0 0}
.award .winner{display:flex;justify-content:space-between;gap:10px;align-items:baseline;background:var(--accent-soft);border-radius:8px;padding:10px 12px}
.award .winner b{font-family:var(--f-display);font-size:18px}
.award .winner span{font-weight:600;color:var(--accent);white-space:nowrap}
.award .winner.none{background:var(--sunk)} .award .winner.none b{font-size:15px;color:var(--muted)} .award .winner.none span{color:var(--muted);font-weight:400}
.board{list-style:none;margin:0;padding:0;display:flex;flex-direction:column}
.board li{display:grid;grid-template-columns:26px 1fr auto;gap:8px;align-items:center;padding:7px 2px;border-top:1px solid var(--line)}
.board li[hidden]{display:none}
.board li b{white-space:nowrap;font-variant-numeric:tabular-nums}
.board li.me{background:var(--accent-soft);border-radius:6px;padding-left:6px;padding-right:6px}
.board li.out b{color:var(--muted);font-weight:500}
.board li.sep{margin-top:6px;border-top:1px dashed var(--line)}
.medal{width:22px;height:22px;border-radius:50%;display:inline-grid;place-items:center;font-size:11px;font-weight:700;background:var(--sunk);color:var(--muted)}
.medal.m1{background:#e6b800;color:#3d2e00} .medal.m2{background:#b8c2c6;color:#22303a} .medal.m3{background:#c98a4b;color:#2e1a06}
.award .showall{align-self:flex-start}
.awardhow{margin-top:16px} .awardhow ul{margin:8px 0 0;padding-left:18px}
@media (max-width:720px){.champs{grid-template-columns:1fr}.champ h2{font-size:21px}.awards{grid-template-columns:1fr}}
.league table{width:100%} .league td.num,.league th.num{text-align:right;font-variant-numeric:tabular-nums}
.league td:first-child,.league th:first-child{text-align:center;width:52px}
.league tr.lead td{background:var(--arr-soft)} .league tr.me td{box-shadow:inset 0 0 0 9999px var(--accent-soft)}
.league .pts b{font-family:var(--f-display);font-size:20px;color:var(--accent)}
.awardsub{margin:16px 0 8px;font-size:15px;color:var(--muted);text-transform:uppercase;letter-spacing:.06em}
.awlink[aria-current]{box-shadow:0 0 0 3px var(--arr)}
.awardshead{align-items:center}
.awardshead .awardsbadge{width:150px;height:150px;flex:none;border-radius:50%;filter:drop-shadow(0 6px 14px rgba(10,98,118,.25))}
@media (max-width:720px){.awardshead .awardsbadge{width:96px;height:96px}}
.awardshead > div:nth-of-type(1){flex:1 1 320px}
.league th:nth-child(3),.league td:nth-child(3){background:var(--accent-soft)}
.league tr.lead td:nth-child(3){background:var(--arr-soft)}

/* Awards (Update 95): dancing starfish, votes, shout-outs, banner */
[data-dance]{position:relative}
[data-dance] video{position:absolute;inset:0;width:100%;height:100%;border-radius:50%;object-fit:cover;opacity:0;transition:opacity .15s;pointer-events:none}
[data-dance].dancing video{opacity:1}
.awlink video{width:48px;height:48px}
.awardshead .awardsbadge{display:block;width:150px;height:150px;flex:none;border-radius:50%;filter:drop-shadow(0 6px 14px rgba(10,98,118,.25))}
.awardshead .awardsbadge img{width:100%;height:100%;border-radius:50%;display:block}
.lname{display:flex;align-items:center;gap:10px}
video.dance{width:46px;height:46px;border-radius:50%;object-fit:cover;flex:none;box-shadow:0 0 0 2px var(--arr)}
.champs{grid-template-columns:repeat(2,minmax(0,1fr))}
.champs.one{grid-template-columns:1fr}
.league td.minus{color:var(--bad)}
.league tr.out td{opacity:.7}
.streak{color:var(--part);font-weight:600}
.votebox{display:flex;flex-direction:column;gap:8px;margin:14px 0 4px;border-color:var(--accent);background:linear-gradient(135deg,var(--accent-soft),var(--panel) 60%)}
.votebox p{margin:2px 0 0}
.votebox .inline{display:flex;gap:8px;flex-wrap:wrap;align-items:center}
.votebox select{min-width:220px}
.votebox input[name=note]{flex:1 1 220px}
.ok-txt{color:var(--ok);margin:0}
.shoutform{display:flex;gap:10px;flex-wrap:wrap;align-items:flex-end;padding-bottom:14px;margin-bottom:12px;border-bottom:1px solid var(--line)}
.shoutform label{display:flex;flex-direction:column;gap:4px;font-size:13px;color:var(--muted)}
.shoutform label.wide{flex:1 1 280px}
.shoutlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:10px}
.shoutlist li{display:flex;gap:10px;align-items:flex-start}
.shoutlist li > div{flex:1}
.shoutlist .aicon{font-size:20px}
.awbanner{display:flex;align-items:center;gap:12px;padding:8px 14px;margin-bottom:14px;text-decoration:none;color:var(--ink);background:linear-gradient(90deg,var(--arr-soft),var(--panel) 55%);border-color:var(--arr);flex-wrap:wrap}
.awbanner img{border-radius:50%;flex:none}
.awbanner > span:first-of-type{flex:1 1 240px}
.awbanner .awme{font-size:13px}
.awbanner .go{font-weight:600;color:var(--accent);white-space:nowrap}
@media (prefers-reduced-motion:reduce){video.dance{display:none}[data-dance] video{display:none}}
@media (max-width:720px){.awardshead .awardsbadge{width:96px;height:96px}video.dance{width:36px;height:36px}}
.league th{font-size:10.5px;white-space:normal;line-height:1.25;vertical-align:bottom}
.league td:nth-child(2){min-width:210px}
.league .lname > span{min-width:0}
.league td.num{white-space:nowrap}

/* Section switcher (Update 96): the same top-left look in the ASP portal, Public Spaces and ASP Awards */
.secswitch{display:flex;align-items:center;gap:8px;flex:none;position:relative;z-index:40}
.secswitch .sec{position:relative;display:block;width:44px;height:44px;border-radius:50%;flex:none;opacity:.78;transition:transform .15s,opacity .15s,box-shadow .15s}
.secswitch .sec img{width:100%;height:100%;border-radius:50%;display:block}
.secswitch .sec:hover,.secswitch .sec:focus-visible{transform:scale(1.08);opacity:1}
.secswitch .sec.on{opacity:1;box-shadow:0 0 0 3px var(--panel),0 0 0 5px var(--accent)}
.secswitch .secname{font-family:var(--f-display);font-weight:700;font-size:18px;margin-left:8px;white-space:nowrap;color:var(--ink)}
@media (max-width:760px){.secswitch .sec{width:38px;height:38px}.secswitch .secname{font-size:15px}}
@media (max-width:400px){.secswitch{gap:6px}.secswitch .sec{width:34px;height:34px}.secswitch .secname{font-size:14px;margin-left:4px}}
.adminvotes{margin:14px 0 4px;border-color:var(--warn)} .adminvotes .vmpick{margin:10px 0 0} .adminvotes table{width:100%}

/* ASP banner (Update 97): Mark's artwork with real text on top */
.aspbanner{position:relative;container-type:inline-size;border-radius:14px;overflow:hidden;margin:0 0 16px;border:1px solid var(--line);background:#d8f1f2;aspect-ratio:2064/512}
.aspbanner picture,.aspbanner > picture img{display:block;width:100%;height:100%;object-fit:cover}
.aspbanner .bn-left{position:absolute;left:2.5%;top:50%;transform:translateY(-50%);width:36%;display:flex;align-items:center;gap:1.6cqw}
.aspbanner .bn-logo{height:11cqw;width:auto;flex:none;filter:drop-shadow(0 2px 6px rgba(255,255,255,.8))}
.aspbanner .bn-text{display:flex;flex-direction:column;gap:.5cqw;color:#0a6276}
.aspbanner .bn-text b{font-family:var(--f-display);font-size:1.5cqw;line-height:1.2;white-space:nowrap}
.aspbanner .bn-text span{font-size:1.05cqw;white-space:nowrap;color:#3b6f7a;font-weight:600;letter-spacing:.02em}
.aspbanner .bn-lab{position:absolute;top:80.5%;transform:translate(-50%,-50%);font-family:var(--f-display);font-weight:700;font-size:1.3cqw;letter-spacing:.06em;text-transform:uppercase;color:#0a6276;white-space:nowrap;text-shadow:0 0 6px rgba(255,255,255,.9)}
.aspbanner .bn-l1{left:48.6%} .aspbanner .bn-l2{left:68.9%} .aspbanner .bn-l3{left:89.3%}
.aspbanner.onlogin{max-width:1180px;margin:0 auto 18px}
.login.withbanner{min-height:auto;padding-bottom:30px}
.login.withbanner .loginlogo{display:none}
@media (max-width:700px){
  .aspbanner{aspect-ratio:1000/428;border-radius:10px}
  .aspbanner .bn-left{left:2.5%;width:24%}
  .aspbanner .bn-logo{height:16.5cqw}
  .aspbanner .bn-text,.aspbanner .bn-lab{display:none}
}
/* Hover labels on the section badges (Update 97) */
.secswitch .sec::after{content:attr(data-label);position:absolute;left:50%;top:calc(100% + 8px);transform:translate(-50%,-4px);background:var(--ink);color:var(--panel);font:600 12px/1.2 var(--f-body);padding:5px 9px;border-radius:6px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .15s,transform .15s;z-index:30;box-shadow:0 4px 12px rgba(0,0,0,.18)}
.secswitch .sec::before{content:"";position:absolute;left:50%;top:calc(100% + 3px);transform:translateX(-50%);border:5px solid transparent;border-bottom-color:var(--ink);opacity:0;transition:opacity .15s;z-index:30;pointer-events:none}
.secswitch .sec:hover::after,.secswitch .sec:focus-visible::after{opacity:1;transform:translate(-50%,0)}
.secswitch .sec:hover::before,.secswitch .sec:focus-visible::before{opacity:1}
.secswitch .sec:first-child::after{left:-4px;transform:translate(0,-4px)}
.secswitch .sec:first-child:hover::after,.secswitch .sec:first-child:focus-visible::after{transform:translate(0,0)}
.secswitch .sec:first-child::before{left:22px}

/* Login page (Update 98): Mark's portrait artwork beside the sign-in form; always light so the artwork's white edge blends in */
.loginsplit{display:grid;grid-template-columns:minmax(320px,400px) auto;justify-content:center;width:fit-content;max-width:100%;margin:3vh auto 30px;background:#fff;border:1px solid #d3dcdf;border-radius:18px;overflow:hidden;box-shadow:0 12px 32px rgba(10,98,118,.14);
  color-scheme:light;--panel:#fff;--ink:#12262e;--muted:#5a6d74;--line:#d3dcdf;--sunk:#e3e9eb;--accent:#0a6276;--accent-soft:#d8edf1;--on-accent:#fff;color:var(--ink)}
.loginsplit .login-card{border:0;border-radius:0;max-width:none;width:100%;padding:40px 34px;align-self:center;background:#fff}
.loginsplit .loginlogo{width:min(220px,70%);background:none;padding:0}
.loginart{--ah:max(420px,min(80vh,720px,calc((100vw - 380px) * 1.339)));position:relative;width:calc(var(--ah) * .7467);min-height:var(--ah)}
.loginart picture{position:absolute;inset:0}
.loginart img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;object-position:right center;display:block}
@media (max-width:760px){
  .loginsplit{grid-template-columns:1fr;width:auto;margin:0 0 20px;border-radius:14px}
  .loginart{order:-1;width:auto;min-height:0;position:static}
  .loginart picture,.loginart img{position:static;width:100%;height:auto}
  .loginsplit .loginlogo{display:none}
  .loginsplit .login-card{padding:22px 20px 26px}
}

/* New chat messages (Update 99) */
.newmsgs{margin-bottom:14px;border-color:var(--due);background:linear-gradient(135deg,var(--due-soft),var(--panel) 55%)}
.newmsgs .nmhead{display:flex;justify-content:space-between;align-items:baseline;gap:10px;flex-wrap:wrap;margin-bottom:8px}
.nmlist{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}
.nmlist a{display:flex;gap:10px;align-items:flex-start;text-decoration:none;color:var(--ink);padding:8px 10px;border-radius:8px;background:var(--panel);border:1px solid var(--line)}
.nmlist a:hover{border-color:var(--due)}
.nmlist .nmn{flex:none;min-width:26px;height:26px;border-radius:13px;background:var(--due);color:#fff;font-weight:700;font-size:13px;display:grid;place-items:center;padding:0 6px}
.nmlist .nmb{display:flex;flex-direction:column;min-width:0}
.nmlist .nmm{font-size:13px;color:var(--muted);overflow:hidden;text-overflow:ellipsis}
.nmlist .nmm b{color:var(--ink);font-weight:600}
.tag.newchat{background:var(--due-soft);color:var(--due);text-decoration:none}
.n.newn{background:var(--due);color:#fff}
.newdiv{display:flex;align-items:center;gap:10px;margin:6px 0;color:var(--due);font-size:12px;font-weight:700;text-transform:uppercase;letter-spacing:.06em}
.newdiv::before,.newdiv::after{content:"";flex:1;height:1px;background:var(--due)}
.msg.isnew{box-shadow:inset 3px 0 0 var(--due)}

/* All chats (Admin, Update 99) */
.chatsplit{display:grid;grid-template-columns:minmax(260px,380px) 1fr;gap:14px;align-items:start}
.chatlist{max-height:calc(100vh - 220px);overflow-y:auto;position:sticky;top:90px}
.chatsearch{padding:10px;border-bottom:1px solid var(--line);position:sticky;top:0;background:var(--panel);z-index:1}
.chatsearch input{width:100%}
.cthread{display:flex;flex-direction:column;gap:2px;padding:10px 12px;border-bottom:1px solid var(--line);text-decoration:none;color:var(--ink)}
.cthread:hover{background:var(--sunk)}
.cthread.on{background:var(--accent-soft);box-shadow:inset 3px 0 0 var(--accent)}
.cthread.hasnew .ctop b{color:var(--due)}
.cthread .ctop{display:flex;align-items:baseline;gap:6px}
.cthread .cwhen{margin-left:auto;font-size:12px;color:var(--muted);white-space:nowrap}
.cthread .cmsg{font-size:13px;color:var(--ink);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.cthread .cmeta{font-size:12px;color:var(--muted)}
.cthread .nmn{background:var(--due);color:#fff;border-radius:9px;padding:0 7px;font-weight:700;margin-left:4px}
.chatthread{padding:14px 16px;min-height:300px}
.chatthread .cthead{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;margin-bottom:10px;padding-bottom:10px;border-bottom:1px solid var(--line)}
.chatthread .chat{max-width:none}
@media (max-width:820px){.chatsplit{grid-template-columns:1fr}.chatlist{position:static;max-height:none}.chatsplit.has-sel .chatlist{display:none}}
.ctback{display:none;margin-bottom:8px} @media (max-width:820px){.ctback{display:inline-block}}
/* Header (Update 99): section badges and account on the first row, the section buttons on their own row below — the same in the ASP portal, Public Spaces and Awards */
.top .nav{order:3;flex-basis:100%;width:100%}
@media (min-width:761px) and (max-width:1400px){.top .nav{gap:2px}.top .nav a{padding:7px 8px}}

/* Chat points (Update 101) */
.msgfoot{display:flex;flex-wrap:wrap;align-items:center;gap:8px;margin-top:8px}
.chatstar{display:inline-block;background:var(--arr-soft);color:var(--arr-ink);border:1px solid var(--arr);border-radius:12px;padding:1px 9px;font-size:12px;font-weight:600}
.ptsbox summary{list-style:none;cursor:pointer}
.ptsbox summary::-webkit-details-marker{display:none}
.ptsform{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:6px}
.ptsform input[name=note]{flex:1 1 160px;min-width:140px}

/* Profile photos, cartoons, vacation (Update 102) */
.av{border-radius:50%;object-fit:cover;flex:none;display:inline-block;vertical-align:middle;background:var(--sunk)}
.avi{display:inline-grid;place-items:center;font-weight:700;color:var(--muted);border:1px solid var(--line)}
.avatar.hasimg{padding:0;overflow:hidden;border-color:var(--accent)}
.avatar .av{width:100%!important;height:100%!important;border:0}
.avatar .avi{background:transparent;color:var(--ink);font-size:12px!important}
.msg .mwho{display:inline-flex;align-items:center;gap:6px}
.lname .av{box-shadow:0 0 0 2px var(--panel),0 0 0 3px var(--line)}
.nmm .av{vertical-align:-4px}
.profid{display:flex;align-items:center;gap:16px}
.profid .av.big{box-shadow:0 0 0 3px var(--panel),0 0 0 5px var(--accent)}
.profgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:14px;align-items:start}
.profcol{display:flex;flex-direction:column;gap:14px;min-width:0}
@media (max-width:1019px){.profcols .profcol{display:contents}.profcols #notify{order:1}.profcols #docs{order:2}.profcols #vacation{order:3}.profcols #sounds{order:4}.profcols #security{order:5}.profcols #password{order:6}}
@media (min-width:1020px){.profcols{grid-template-columns:repeat(3,minmax(0,1fr))}}
.profpics,.avpics{display:flex;gap:16px;margin:10px 0}
.profpics figure,.avpics figure{margin:0;text-align:center;font-size:12px;color:var(--muted)}
.profpics img,.avpics img{border-radius:50%;object-fit:cover;display:block;border:1px solid var(--line)}
.profpics figcaption,.avpics figcaption{margin-top:4px}
.cartoonph{font-size:34px}
.showpick{gap:6px;margin-bottom:8px}
.photoform{margin-top:6px}
.proflinks{gap:14px;margin-top:6px}
.vaclist{list-style:none;padding:0;margin:8px 0 0;display:flex;flex-direction:column;gap:6px}
.vacpanel{margin:16px 0}
.vacform{display:flex;flex-wrap:wrap;gap:10px;align-items:flex-end;margin-top:12px;padding-top:12px;border-top:1px solid var(--line)}
.vacform label{display:flex;flex-direction:column;gap:3px;font-size:13px;color:var(--muted)}
.vacform label.check{flex-direction:row;align-items:center}
.vacform label.wide{flex:1 1 160px}
.avgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:12px;margin-bottom:18px}
.avcard .avacts{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:10px}
.avcard input[type=file]{max-width:190px;font-size:12px}

/* Pictures next to names (Update 103) */
.person.hasav{padding-left:2px}
.person .pav{margin:-2px 5px 0 0;vertical-align:middle;border:0}
.person .pav{box-shadow:0 0 0 1.5px var(--panel)}   /* shift shows on the name pill; the green ring around the picture means online now (Update 113) */
h1 .person.hasav{padding:3px 14px 3px 4px}
h1 .person .pav{margin-right:12px}
.addcartoon{margin-bottom:16px}
.addcartoon .inline{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin-top:8px}
@media print{.person .pav,.av{display:none!important}}

/* Happy Inspector (Update 104) */
table.hctbl th,table.hctbl td{padding:8px 10px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
table.hctbl tr.warnrow td{background:var(--warn-soft,#fff7e6)}
table.hctbl select{max-width:280px}
.hchead{margin:18px 0 8px}
.hclist .hcrow{padding:10px 14px;border-bottom:1px solid var(--line)}
.hclist .hcrow:last-of-type{border-bottom:0}
.hclist .hcmain{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}
.hclist details ul{margin:6px 0 0;padding-left:18px}
.hclist .pad{padding:8px 14px;margin:0}
.syncbox pre{background:var(--sunk);padding:8px 10px;border-radius:8px;overflow:auto;white-space:pre-wrap}

/* RS Laundry (Update 107) */
.secswitch .secdot{position:absolute;top:-4px;right:-6px;min-width:18px;height:18px;padding:0 5px;border-radius:9px;background:var(--bad);color:#fff;font:600 11px/18px var(--f-body,inherit);text-align:center;box-shadow:0 0 0 2px var(--panel)}
.laundrybar{display:flex;align-items:center;gap:10px;flex-wrap:wrap;background:#e3f6f3;border:1px solid #9fd9cf;color:#0b4f45;border-radius:10px;padding:8px 12px;margin:10px auto 0;max-width:1180px}
.laundrybar img{border-radius:50%}
.laundrybar span{flex:1;min-width:200px}
.lnhero{display:flex;align-items:center;gap:16px;margin:6px 0 12px}
.lnhero img{width:96px;height:96px;border-radius:50%;flex:none}
.lnhero h1{margin:0}
.lnhero p{margin:4px 0 0}
.lnboard{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:16px;align-items:start}
.lnboard h2{margin:6px 0 10px}
.lngrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:12px}
.lncard{background:var(--panel);border:1px solid var(--line);border-left:5px solid var(--warn);border-radius:10px;padding:12px 14px;margin-bottom:10px}
.lncard.ready{border-left-color:var(--ok)}
.lncard.collected{border-left-color:var(--line);opacity:.85}
.lncard p{margin:4px 0}
.lnhead{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.lnwhere{font-size:17px}
.lnid{font-family:var(--f-mono,monospace);color:var(--muted);font-size:12px}
.lnitems{list-style:none;margin:8px 0;padding:0;display:flex;flex-wrap:wrap;gap:6px}
.lnitems li{background:var(--sunk);border-radius:14px;padding:3px 10px;font-size:13px}
.lnnote{background:var(--warn-soft);border-radius:8px;padding:6px 9px}
.lnact{display:flex;flex-wrap:wrap;gap:8px;align-items:center;margin-top:8px}
.lnact input{flex:1;min-width:150px}
.lncounts{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:14px 0;display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px 18px}
.lncounts legend{font-weight:600;padding:0 6px}
.lncount{display:flex;align-items:center;justify-content:space-between;gap:8px}
.lncount label{margin:0}
.stepper{display:flex;align-items:center;gap:4px}
.stepper input{width:58px;text-align:center;font-size:17px;padding:6px 4px}
.stepper .btn{width:40px;height:40px;padding:0;font-size:20px;line-height:1}
.lnsearch{margin:8px 0 12px}
@media (max-width:900px){.lnboard{grid-template-columns:1fr}}
.form.lnform{max-width:920px}
/* RS Laundry Form (Update 108) */
a.lncard{display:block;color:inherit;text-decoration:none}
a.lncard:hover{box-shadow:0 2px 8px rgba(0,0,0,.08)}
.lncard.sent{border-left-color:var(--accent)}
.lnboard{grid-template-columns:repeat(4,minmax(0,1fr))}
@media (max-width:1100px){.lnboard{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media (max-width:640px){.lnboard{grid-template-columns:1fr}}
.lnentry h3{margin:14px 0 6px;font-size:15px;color:var(--muted);text-transform:uppercase;letter-spacing:.04em}
.lnrow{display:grid;grid-template-columns:minmax(120px,1.1fr) auto minmax(120px,1fr);gap:6px 12px;align-items:center;padding:6px 0;border-bottom:1px solid var(--line)}
.lnlbl{font-weight:500}
.lnqty{display:flex;gap:6px}
.lnqty label{display:flex;align-items:center;gap:3px;margin:0}
.lnqty .sz{font:600 11px var(--f-mono,monospace);color:var(--muted);width:12px;text-align:center}
.lnqty input{width:56px;text-align:center;padding:6px 4px;font-size:16px}
.lncmt{font-size:13px;padding:6px 8px}
@media (max-width:640px){.lnrow{grid-template-columns:1fr auto}.lncmt{grid-column:1/-1}}
.lnfixed{margin:4px 0 0;padding:9px 0;font-weight:600}
.lnticket .lntop{display:flex;justify-content:space-between;align-items:flex-start;gap:10px;flex-wrap:wrap;margin-bottom:10px}
.lnsteps{list-style:none;margin:0 0 12px;padding:0;display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:6px}
.lnsteps li{background:var(--panel);border:1px solid var(--line);border-top:4px solid var(--line);border-radius:8px;padding:7px 10px;display:flex;flex-direction:column;font-size:13px}
.lnsteps li span{color:var(--muted);font-size:12px}
.lnsteps li.done{border-top-color:var(--ok)}
.lnsteps li.now{border-top-color:var(--warn)}
@media (max-width:640px){.lnsteps{grid-template-columns:repeat(2,minmax(0,1fr))}}
.lntbl{width:100%;border-collapse:collapse;font-size:14px}
.lntbl th,.lntbl td{padding:6px 8px;border-bottom:1px solid var(--line);text-align:left;vertical-align:middle}
.lntbl .n{text-align:center;width:72px}
.lntbl tfoot th{border-top:2px solid var(--line)}
.lntbl tr.diff td{background:var(--bad-soft)}
.lntbl input[type=number]{width:64px;text-align:center;font-size:16px;padding:5px 4px}
.lntbl input:not([type]){width:100%;min-width:120px;font-size:13px;padding:5px 7px}
.lnstep{margin:12px 0}
.lnstep .lntbl{margin:8px 0}
.grid3{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:12px}
@media (max-width:640px){.grid3{grid-template-columns:1fr}}
.lntiles{margin:12px 0}
.lnprintbar{display:flex;gap:12px;align-items:center;margin-bottom:12px}
.lnsheet{background:#fff;color:#111;max-width:800px;padding:18px 22px;border:1px solid var(--line);border-radius:8px;page:lnprint}
.lnsheethead{display:flex;align-items:center;gap:14px;font-size:20px;margin-bottom:10px}
.lnmeta{width:100%;border-collapse:collapse;margin:8px 0;font-size:13px}
.lnmeta th{text-align:left;font-weight:600;width:22%;padding:5px 6px;border:1px solid #ccc;background:#f4f6f6}
.lnmeta td{padding:5px 6px;border:1px solid #ccc;width:28%}
.lnsheet .lntbl th,.lnsheet .lntbl td{border:1px solid #ccc;padding:4px 6px;font-size:12.5px}
.lnsigns{display:flex;justify-content:space-between;gap:16px;margin-top:22px;font-size:12.5px;flex-wrap:wrap}
@page lnprint{size:portrait;margin:10mm}
@media print{.lnsheet{border:0;padding:0;max-width:none}.lnprintbar,.laundrybar{display:none!important}}
.lnform .grid2 > div > label{display:block}
[data-lnextra]{display:block;margin:6px 0 12px}
/* RS Laundry animated logo (Update 109) */
.lnhero .lnanim{position:relative;display:block;width:120px;height:120px;flex:none;border-radius:50%;overflow:hidden;background:#fff;box-shadow:0 2px 10px rgba(10,98,118,.15)}
.lnhero .lnanim video,.lnhero .lnanim img{position:absolute;inset:0;width:100%;height:100%;object-fit:cover;border-radius:50%}
.lnhero .lnanim img{display:none}
@media (prefers-reduced-motion:reduce){.lnhero .lnanim video{display:none}.lnhero .lnanim img{display:block}}
@media (max-width:640px){.lnhero .lnanim{width:84px;height:84px}}
/* Shared laundry tablet (Update 111) */
.lnpick{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:14px;margin-top:10px}
.lnwho{background:var(--panel);border:1px solid var(--line);border-radius:14px;padding:0}
.lnwho.on{border-color:var(--ok)}
.lnwho summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:64px 1fr;grid-template-rows:auto auto;column-gap:14px;align-items:center;padding:14px 16px}
.lnwho summary::-webkit-details-marker{display:none}
.lnwho summary .av{grid-row:1/3}
.lnwho summary b{font-size:19px;align-self:end}
.lnwho summary span{align-self:start}
.lnwho[open]{box-shadow:0 4px 16px rgba(10,98,118,.15)}
.lnpin{padding:0 16px 16px;display:flex;flex-direction:column;gap:6px}
.lnpin input[type=password]{font-size:28px;letter-spacing:.5em;text-align:center;padding:10px;max-width:220px}
.lnpin .btn.big{max-width:none}
.lnworking{display:inline-flex;align-items:center;gap:6px;font-size:15px}
.lntablet{margin-top:22px}
.lntablet form.inline{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin:8px 0}
.lnpick{align-items:start}
/* Laundry practice mode (Update 112) */
.lnpracbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 12px;background:#fff4c2;border:1px solid #e6b800;color:#5c4500;border-radius:10px;padding:9px 14px;margin:0 0 12px}
.lnpracbar span{flex:1;min-width:220px}
/* Online now (Update 113): green ring around the picture of anyone using the portal in the last 5 minutes */
.av.online{box-shadow:0 0 0 2px var(--panel),0 0 0 4px #22c55e!important}
.person .pav.online{box-shadow:0 0 0 1.5px var(--panel),0 0 0 3.5px #22c55e!important;margin-left:2px}
.avatar .av.online{box-shadow:none!important}   /* your own picture, top right: you're always online */
.ondot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#22c55e;box-shadow:0 0 0 2px var(--panel);margin:0 5px 1px 1px;vertical-align:middle}
@media print{.ondot{display:none}}
/* Update 114 (Option C): picture just before the name tag; ring around the picture = online now */
.pw{display:inline-flex;align-items:center;gap:6px;white-space:nowrap;vertical-align:middle;max-width:100%}
.pw .pav{margin:0!important;box-shadow:0 0 0 1px var(--line)!important}
.pw .pav.online{box-shadow:0 0 0 2px var(--panel),0 0 0 4px #22c55e!important;margin:0 2px!important}
.pw .ondot{margin:0 1px}
.pw.pwbig{gap:12px}
.pw > .person{margin:0}
@media print{.pw .pav,.pw .ondot{display:none!important}}

/* Update 116: day labels on each roster group row */
.roster tr.rgrp th{background:var(--sunk);padding:8px 6px;font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);white-space:nowrap}
.roster tr.rgrp th:first-child{text-align:left}
.roster tr.rgrp th.rday{text-align:center;text-transform:none;letter-spacing:0;font-weight:600}
.roster tr.rgrp th.rday span{font-weight:400;opacity:.8}
.roster tr.rgrp th.rday.today{color:var(--accent)}

/* Update 118: who the laundry is for */
.lnkind{display:inline-block;font-size:11px;font-weight:600;padding:1px 8px;border-radius:999px;border:1px solid var(--line);color:var(--muted);vertical-align:middle;max-width:100%;overflow-wrap:anywhere}
.lnkind.k-ASP{color:#2bb6c9;border-color:currentColor}
.lnkind.k-PHM{color:#8b7cf6;border-color:currentColor}
.lnkind.k-rental{color:#e0a43a;border-color:currentColor}
.lnkind.k-outside{color:#e07a5f;border-color:currentColor}
.lncard .lnkind{margin:2px 0 4px}
.lntop .lnkind{margin-top:4px}

/* Update 119: "Laundry requested" card on the house page */
.lnreqok{border:1px solid var(--ok);background:var(--ok-soft);border-radius:10px;padding:12px 16px;margin:0 0 16px}
.lnreqok p{margin:6px 0 0}
.lnreqhead{display:flex;gap:12px;align-items:baseline;flex-wrap:wrap}
.lnreqhead b{color:var(--ok);font-size:17px}
.lnreqid{font-family:'IBM Plex Mono',monospace;font-weight:600;font-size:16px}
.lnreqok .lbl{font-weight:600}
.hklist li.lnjust{background:var(--ok-soft)}

/* Update 120/121: RS Public Spaces logo — a circle like the others (the whole logo sits inside the white circle) */
.pagehead .pshero{margin:0 0 4px}

/* Update 122: Happy Inspector — goal is every program home matched */
.hcgoal{margin:0 0 10px}
.hcbar{height:12px;border-radius:999px;background:var(--sunk);overflow:hidden;border:1px solid var(--line)}
.hcbar span{display:block;height:100%;background:var(--ok);border-radius:999px}
.hcgoal p{margin:6px 0 0}
.hchomes select{max-width:340px}
.hcsug{display:flex;gap:8px;align-items:center;flex-wrap:wrap;margin-top:6px}
.hcall{margin-top:16px}
.hcall summary{cursor:pointer}
/* BBUC Utilities (Update 127) */
.uthero{margin-bottom:10px}
.tag.utcondo{background:var(--none-soft);color:var(--none);border-color:transparent}
.utype.condo{font-weight:600;color:var(--none)}
.uttbl td.num,.uttbl th.num{text-align:right}
.uttbl tr.utfirst td{border-top:2px solid var(--line)}
.uttbl tr.wflagrow td{background:color-mix(in srgb,var(--bad) 9%,transparent)}
.utflag{margin:10px 0;break-inside:avoid;page-break-inside:avoid;display:block}
.utflaghead{display:flex;justify-content:space-between;gap:12px;align-items:flex-start;flex-wrap:wrap;margin-bottom:6px}
.utflaghead .right{text-align:right}
.wchart{display:block;max-width:760px}
.wchart .wg{stroke:var(--line);stroke-width:1}
.wchart .wt{font-size:10px;fill:var(--muted)}
.wchart .wok{fill:#3aa0e6} .wchart .whi{fill:var(--bad)} .wchart .west{opacity:.55}
.wchart .wnull{fill:var(--line);opacity:.35}
.wchart .wlim{stroke:var(--bad);stroke-width:1.2;stroke-dasharray:5 4} .wchart .wlimt{fill:var(--bad);font-weight:600;paint-order:stroke;stroke:var(--panel);stroke-width:3px}
.utprinthead{display:none}
.utload .chkadd{margin-top:8px}
@media print{
  .utprinthead{display:block;font-size:14px;margin:0 0 8px}
  .utreport .kpis{gap:6px} .utreport .kpi{padding:6px 8px}
  .utreport,.utreport *{-webkit-print-color-adjust:exact;print-color-adjust:exact}
  .uttbl th,.uttbl td{font-size:11px;padding:3px 5px}
  .utreport a{color:inherit;text-decoration:none}
  .utflag{overflow:visible!important;display:block}
  .utflag .wchart{width:6.8in;height:1.8in;max-width:100%}
}
.proptbl select.utype{min-width:88px}
.utlims{flex-basis:100%;background:var(--panel);border:1px solid var(--line);border-radius:10px;padding:8px 12px}
.utlims summary{cursor:pointer;font-weight:600}
.utlimrow{display:flex;flex-wrap:wrap;gap:10px 16px;align-items:flex-end;margin-top:8px}
.utlims label{display:flex;flex-direction:column;gap:4px;font-size:13px}
.utlims input{width:130px}
.utbar{flex-wrap:wrap;align-items:flex-end}
.utlims{width:100%}

.wchart .wocc{fill:var(--ok)} .wchart .wemp{fill:var(--line)}
.wbarwrap{display:inline-block}
.wband{display:flex;gap:2px;min-width:140px;max-width:420px;margin-top:3px}
.wband span{flex:1 1 0;max-width:16px;min-width:3px;height:5px;border-radius:1px}
.wband .o{background:var(--ok)} .wband .e{background:var(--line)} .wband .u{background:transparent}
.tag.utin{background:var(--ok-soft);color:var(--ok);border-color:transparent}
.hoask{border-left:4px solid var(--warn);margin-bottom:12px}
/* Home spec sheet (Update 138) */
.spectbl{width:100%;border-collapse:collapse} .spectbl th{text-align:left;font-weight:600;color:var(--muted);font-size:13px;padding:6px 10px 6px 0;width:42%;vertical-align:top} .spectbl td{padding:6px 0;font-size:14px} .spectbl tr+tr th,.spectbl tr+tr td{border-top:1px solid var(--line)}
.specgrid{gap:14px} tr.specnow td{background:var(--accent-soft)}
.spectbl th{background:none;text-transform:none;letter-spacing:0;font-size:13px}
/* Home locations (Update 139) */
.geobtns .btn{margin-right:6px} .geosign{max-width:100%;border-radius:8px;display:block;margin:6px 0} .geothumb{width:64px;height:44px;object-fit:cover;border-radius:4px}
.geogrid{gap:14px} .geoform{margin:6px 0 10px} #geolist tr.geohide{display:none}
/* Condo associations (Update 141) */
.coacards{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:12px;margin:12px 0}
.coacard{display:flex;flex-direction:column;gap:6px;text-decoration:none;color:inherit} .coacard:hover{border-color:var(--accent)}
.coanum{font-size:20px;font-family:'Bricolage Grotesque',sans-serif} .coastats{font-size:13px}
.coaphoto{max-width:100%;border-radius:8px;display:block;margin:6px 0} .coagrid{gap:14px}
.uttbl tr.coatot td{border-top:2px solid var(--line);font-weight:600} .uttbl tr.coahdr td{background:var(--sunk)} .uttbl tr.coacom td{color:var(--muted)}

/* Update 142: used after rain (Mark: over 2,000 gal the day after more than 0.1" of rain) */
.pill.wrainp{background:color-mix(in srgb,#2f80d0 16%,transparent);color:#1f5fa0;border-color:color-mix(in srgb,#2f80d0 40%,transparent)}
.uttbl tr.wrainrow td{background:color-mix(in srgb,#2f80d0 8%,transparent)}
.tag.utrain{background:color-mix(in srgb,#2f80d0 14%,transparent);color:#1f5fa0}
.utraintxt{color:#1f5fa0}
.kpi.rain b{color:#1f5fa0}
.utwx.utrain{color:#1f5fa0}
.wchart .wrain{fill:#2f80d0} .wchart .wrainl{fill:#bfd8f0} .wchart .wrhi{fill:#1f5fa0} .wchart .wraint{fill:#1f5fa0;font-weight:700}
.elecbox.wrainbox{border-left:4px solid #2f80d0}
@media (prefers-color-scheme:dark){.pill.wrainp,.tag.utrain,.utraintxt,.kpi.rain b,.utwx.utrain{color:#8cc2f2}}
.tag.utrain{white-space:nowrap}
.stormbanner.wxoffbar{background:#b3261e}

/* Update 144: unit numbers on the COA layout photo — white circles (Mark) */
.coamap{position:relative;container-type:inline-size;margin:6px 0;user-select:none}
.coamap .coaphoto{margin:0;width:100%}
.coamk{position:absolute;transform:translate(-50%,-50%);width:max(24px,4.4cqw);height:max(24px,4.4cqw);border-radius:50%;background:#fff;color:#12262e;border:max(2px,.35cqw) solid #0a6276;box-shadow:0 2px 6px rgba(0,0,0,.35);display:flex;align-items:center;justify-content:center;font-weight:800;font-size:max(12px,2.2cqw);line-height:1;text-decoration:none;font-variant-numeric:tabular-nums}
.coamk:hover,.coamk:focus-visible{background:#0a6276;color:#fff}
.coamk.coamk-in{position:static;transform:none;display:inline-flex;width:22px;height:22px;font-size:11px;border-width:2px;box-shadow:none;vertical-align:middle}
.coamap.editing{cursor:crosshair;outline:2px dashed #0a6276;outline-offset:3px}
.coamap.editing .coamk{cursor:grab}
tr:target td{background:color-mix(in srgb,#0a6276 12%,transparent)}
.coamkedit{margin-top:8px} .coamkedit form{display:flex;flex-wrap:wrap;gap:8px;align-items:end}
@media print{.coamk{box-shadow:none;-webkit-print-color-adjust:exact;print-color-adjust:exact}}
.coagrid .coawide{grid-column:1/-1} .coawide .coamap{max-width:1100px}

/* Update 145: Condo maps for everyone */
.cmbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;position:sticky;top:0;z-index:5;background:var(--bg,#eef2f3);padding:6px 0}
.cmbar input[type=search]{min-width:260px;flex:1 1 260px;max-width:420px}
.cmjump a{display:inline-block;padding:2px 6px;border-radius:6px;background:var(--panel);color:var(--ink);border:1px solid var(--line);text-decoration:none;font-weight:700}
.cmgrid{display:grid;grid-template-columns:minmax(0,2fr) minmax(240px,1fr);gap:16px;align-items:start;margin-top:8px}
.cmgrid.nophoto{grid-template-columns:1fr}
.cmgrid.nophoto .cmunits{columns:2 260px}
.cmunits{list-style:none;margin:0;padding:0}
.cmunits li{display:flex;flex-wrap:wrap;gap:6px;align-items:center;padding:5px 6px;border-radius:8px;break-inside:avoid}
.cmunits li.hit,.cmunits li.on{background:color-mix(in srgb,#0a6276 12%,transparent)}
.coamap .coamk.hit,.coamap .coamk.on{background:#0a6276;color:#fff;transform:translate(-50%,-50%) scale(1.15);z-index:2}
@media (max-width:760px){.cmgrid{grid-template-columns:1fr}}
@media print{.cmcoa{break-inside:avoid}.cmbar{display:none}}

/* Update 146: New Construction */
.buildform fieldset{border:1px solid var(--line);border-radius:10px;padding:10px 12px;margin:0 0 12px;display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:8px 12px}
.buildform legend{font-weight:700;padding:0 6px}
.buildform label{display:flex;flex-direction:column;gap:3px;font-size:.92em}
.buildform .wide{grid-column:1/-1}
.buildtbl tr.buildwarn td{background:color-mix(in srgb,var(--warn,#b26b00) 10%,transparent)}
.buildtbl .tag{white-space:nowrap}

/* Update 147: Access per person */
.accform h3{margin:16px 0 6px} .acctbl td{vertical-align:middle} .acctbl select{min-width:190px}
.acctbl tr.accset td{background:color-mix(in srgb,#0a6276 8%,transparent)}
/* Update 148: RS reached out about the ASP */
.buildrsf{display:flex;gap:4px;align-items:center;margin:0} .buildrsf input[type=date]{width:132px;padding:3px 4px;font-size:.85em}
.buildrsok{color:var(--ok,#1f7a45);font-weight:700}
.buildrs{padding:6px 0}
.printonly{display:none} @media print{.printonly{display:inline}}
.buildrsf{flex-wrap:wrap;max-width:150px} .buildrsf input[type=date]{width:128px}
.buildtbl td.nowrap .buildrsf{white-space:normal}

/* Update 149: weather and quote of the day on the home page */
.homewx{display:grid;grid-template-columns:auto 1fr;gap:10px 22px;align-items:center}
.hwnow{display:flex;gap:12px;align-items:center}
.hwic{font-size:44px;line-height:1}
.hwt{font-size:30px;line-height:1}
.hwlbl{color:var(--muted)}
.hwdays{display:flex;gap:8px;justify-content:flex-end;flex-wrap:wrap}
.hwday{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:78px;padding:6px 8px;border-radius:10px;background:color-mix(in srgb,var(--line) 35%,transparent);font-size:.9em}
.hwday.wet{background:color-mix(in srgb,#2f80d0 14%,transparent)}
.hwdn{font-weight:700;font-size:.85em} .hwdi{font-size:24px;line-height:1.1} .hwdr{font-size:.85em;color:#1f5fa0;min-height:1.1em}
.hwtips{grid-column:1/-1;display:flex;flex-direction:column;gap:4px;padding:8px 12px;border-radius:10px;background:color-mix(in srgb,#2f80d0 9%,transparent);font-weight:600}
.hwquote{grid-column:1/-1;margin:2px 0 0;padding:8px 0 0 14px;border-left:3px solid var(--accent,#0a6276)}
.hwquote p{margin:0;font-style:italic;font-size:1.05em} .hwquote cite{font-size:.85em;color:var(--muted);font-style:normal}
@media (max-width:700px){.homewx{grid-template-columns:1fr}.hwdays{justify-content:flex-start}.hwday{min-width:68px}}
@media (prefers-color-scheme:dark){.hwdr{color:#8cc2f2}}
.hwtips p{margin:0}
.mylaundry h2 img{vertical-align:middle;border-radius:50%} .mylaundry ul{margin:6px 0 8px}

/* Update 152: photo + two cartoons to choose from, and cropping */
.profpick{flex-wrap:wrap}
.profpick figure{padding:6px;border-radius:14px;border:2px solid transparent}
.profpick figure.on{border-color:var(--ok,#1f7a45);background:color-mix(in srgb,var(--ok,#1f7a45) 8%,transparent)}
.picbtn{padding:0;border:0;background:none;cursor:pointer;border-radius:50%} .picbtn:disabled{cursor:default}
.picbtn:not(:disabled):hover img{outline:3px solid var(--accent,#0a6276);outline-offset:2px}
.cropbox{margin:10px 0} .cropbox summary{cursor:pointer;font-weight:700}
.cropstage{position:relative;display:inline-block;max-width:100%;margin:8px 0;touch-action:none;user-select:none;line-height:0}
.cropstage img{max-width:min(100%,420px);max-height:420px;display:block;border-radius:8px}
.cropsq{position:absolute;border:3px solid #fff;border-radius:50%;box-shadow:0 0 0 9999px rgba(0,0,0,.45);cursor:move}
.cropstage{overflow:hidden;border-radius:8px}
.cropform{display:flex;gap:10px;align-items:center;flex-wrap:wrap}
.avprompt{display:block;white-space:normal;font-size:12px;background:color-mix(in srgb,var(--line) 30%,transparent);padding:6px 8px;border-radius:6px;margin-top:4px}
.profpick figure img,.profpick .av{width:96px!important;height:96px!important}
.profpick{gap:8px}
/* face guide inside the crop circle: where the face sits in the cartoons */
.cropsq::after{content:"";position:absolute;left:30%;top:9%;width:40%;height:50%;border:2px dashed rgba(255,255,255,.75);border-radius:50%;pointer-events:none}
.profpick{flex-wrap:nowrap;gap:4px} .profpick figure{padding:4px;flex:1 1 0;min-width:0}
.profpick figure img,.profpick .av{width:88px!important;height:88px!important;margin:0 auto}

/* Update 153: Sales */
.salecards{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:12px;margin-bottom:14px}
.salecard{border-left:4px solid var(--warn,#b26b00);display:flex;flex-direction:column;gap:8px}
.saleswap{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.saleswap label{display:flex;flex-direction:column;gap:2px;flex:1 1 160px}
.salearrow{font-size:22px;color:var(--muted)}
.salelink{display:inline-block;margin-left:4px} .salelink select{max-width:220px}
.saleform{max-width:640px}
/* Update 155: the picture each person chose, on Admin → Profile photos */
.avpics figure{padding:4px;border-radius:12px;border:2px solid transparent}
.avpics figure.inuse{border-color:var(--ok,#1f7a45);background:color-mix(in srgb,var(--ok,#1f7a45) 8%,transparent)}
.inusetag{color:var(--ok,#1f7a45)}
/* Update 158: recently sold homes on the allocation and zone sheets */
.salenote{color:var(--warn,#b26b00);font-weight:600}
.zsale{font-size:.78em;font-weight:600;color:#8a5a00}
/* Update 161: no ASP picture banner on phones (Mark) */
@media (max-width:700px){.aspbanner.hidephone{display:none}}
/* Phone notifications (Update 162) */
.pushbox{background:var(--sunk);border:1px solid var(--line);border-radius:10px;padding:12px 14px;margin:8px 0}
.pushbox .pushstate{margin:0 0 8px;font-weight:600}
.pushbtns{display:flex;flex-wrap:wrap;gap:10px;align-items:center}
.pushios{font-size:14px;margin:0 0 10px}.pushios ol{margin:6px 0 0 18px;padding:0}.pushios li{margin:3px 0}
.pushdevs{list-style:none;margin:0;padding:0}.pushdevs li{padding:5px 0;border-bottom:1px solid var(--line);display:flex;flex-wrap:wrap;gap:6px;align-items:center}
.pushprefs .check{margin:4px 0;font-size:14px}
.warnline{color:var(--bad)}
/* Staff ferry (Update 162) */
.ferrybar{display:flex;flex-wrap:wrap;align-items:center;gap:4px 18px;padding:6px 16px;background:var(--accent-soft);color:var(--ink);font-size:14px;border-bottom:1px solid var(--line)}
.ferrybar .ferryic{font-size:16px}
.ferrybar a.ferryleg{color:inherit;text-decoration:none;white-space:nowrap}.ferrybar a.ferryleg:hover .fl{text-decoration:underline}
.ferrybar .fl{color:var(--muted)}.ferrybar .fw{color:var(--accent)}
.ferrybar .soon .fw,.ferrynext .soon .fw{color:var(--bad)}
@media (max-width:640px){.ferrybar{font-size:12.5px;padding:5px 12px;gap:2px 12px}.ferrybar .ferryic{display:none}.ferrybar a.ferryleg{flex:1 1 45%}}
.ferryhero{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:flex-end;gap:14px;margin:6px 0 14px}
.ferrynext{display:flex;gap:12px;flex-wrap:wrap}
.ferrynext .fcard{background:var(--panel);border:1px solid var(--line);border-radius:12px;padding:10px 16px;min-width:200px;display:flex;flex-direction:column;gap:2px}
.ferrynext .fw.big{font-family:var(--f-display);font-size:30px;line-height:1.1;color:var(--accent)}
.ferrygrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px}
.ferryday.ftoday{border:2px solid var(--accent)}
.ferrycols{display:grid;grid-template-columns:1fr 1fr;gap:12px}.ferrycols h3{font-size:15px;margin:8px 0 6px}
.ferrylist{list-style:none;margin:0;padding:0}.ferrylist li{padding:5px 8px;border-radius:6px;font-weight:600;font-variant-numeric:tabular-nums}
.ferrylist li.fpast{opacity:.45;font-weight:400}.ferrylist li.fnext{background:var(--accent-soft)}
.ferrynote{background:var(--warn-soft);border-radius:10px;padding:10px 14px;margin:14px 0}
.ferryedit{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));gap:10px}.ferryedit textarea{font-family:var(--f-mono);font-size:13px}
@media (max-width:420px){.ferrycols{grid-template-columns:1fr 1fr;gap:6px}.ferrylist li{padding:4px 4px;font-size:12.5px;white-space:nowrap}.ferryday.pad{padding-left:10px;padding-right:10px}.ferrynext .fcard{min-width:0;flex:1}}
/* What's new (Update 167) */
.updrel{margin-bottom:16px}
.updgroups{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));gap:6px 28px}
.updgroup{min-width:0}.updgroup h3{font-size:15px;color:var(--accent);margin:14px 0 6px;text-transform:uppercase;letter-spacing:.04em}
.updgroup ul{margin:0;padding-left:18px}.updgroup li{margin:5px 0;line-height:1.45}
.updpick select{max-width:260px}
/* Site map (Update 168) */
.smlink{text-decoration:none;color:var(--accent);font-weight:600;font-size:14px;white-space:nowrap}
.smlink:hover .smtxt{text-decoration:underline}
@media (max-width:700px){.smlink .smtxt{display:none}.smlink{font-size:20px}}
.smgrid{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:14px;align-items:start}
.smgroup ul{list-style:none;margin:8px 0 0;padding:0}
.smgroup li{display:flex;flex-direction:column;gap:1px;padding:8px 0;border-bottom:1px solid var(--line)}
.smgroup li:last-child{border-bottom:0}
.smgroup li a{text-decoration:none}.smgroup li a:hover b{text-decoration:underline}
.howto{border-top:1px solid var(--line);padding:10px 0}.howto:first-of-type{border-top:0}
.howto summary{cursor:pointer;list-style-position:outside}.howto ol{margin:8px 0 4px;padding-left:22px}.howto li{margin:4px 0;line-height:1.45}
.howtip{background:var(--warn-soft);border-radius:8px;padding:8px 12px;margin:6px 0 0;font-size:14px}
/* Occupancy & transport (Update 170) */
.trtbl td{vertical-align:top}
.tralloc{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.tralloc select{max-width:220px}
.trchange summary{cursor:pointer;color:var(--accent);margin-top:4px}
.trwarn{border-left:4px solid var(--warn)}.trwarn ul{margin:6px 0 0;padding-left:18px}
.trsecs{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:2px 16px}
.trtbl .tag{white-space:nowrap}
/* Water plant (Update 171) */
.plantchart{width:100%;height:auto;max-width:900px;display:block}
.plantchart .pg{stroke:var(--line);stroke-width:1}.plantchart .pl{font-size:11px;fill:var(--muted)}.plantchart .pw{font-size:11px;fill:var(--bad);font-weight:700}
.plantchart .pp,.plantleg .pp{fill:#9fc9d3;background:#9fc9d3}.plantchart .pd,.plantleg .pd{fill:var(--accent);background:var(--accent)}.plantchart .pm,.plantleg .pm{fill:#a97a2e;background:#a97a2e}.plantchart .po{fill:var(--ok)}.plantleg .po{background:var(--ok);border-radius:50%}
.plantleg .sw{display:inline-block;width:12px;height:12px;border-radius:2px;margin:0 4px 0 12px;vertical-align:-1px}
.plantbl td{white-space:nowrap}.plantbl td.small{white-space:normal;min-width:220px}
.plantnote input{width:170px}
.printonly{display:none}@media print{.printonly{display:inline}}
.plantchart .tdown,.plantleg .tdown{fill:var(--bad);background:var(--bad)}.plantchart .tok,.plantleg .tok{fill:var(--ok);background:var(--ok)}
.regtbl td{vertical-align:middle}.regedit input{width:200px}

/* Update 184: one home on Vision */
.uhlink{color:inherit;text-decoration:underline;text-decoration-color:var(--line);text-underline-offset:3px}.uhlink:hover{text-decoration-color:var(--accent)}
.uhfacts{display:flex;flex-wrap:wrap;gap:10px 28px}.uhfact{display:flex;flex-direction:column;min-width:110px}.uhfact span{font-size:12px;color:var(--muted);text-transform:uppercase;letter-spacing:.05em}.uhfact b{font-size:17px}
.uhchart{width:100%;height:auto;display:block}.uhchart .uhlbl{font-size:12px;font-weight:700;fill:var(--ink)}.uhchart .uhax{font-size:10px;fill:var(--muted)}.uhchart .uhgrid{stroke:var(--line);stroke-width:.6}
.uhchart .uhocc{fill:#f2b84b;opacity:.16}.uhchart .uhw{fill:#2f7fa8}.uhchart .uhe{fill:#d98a1c}.uhchart .uhr{fill:#5b9bd5;opacity:.55}
.uhchart .uhthi{fill:none;stroke:#d0453a;stroke-width:1.8}.uhchart .uhtlo{fill:none;stroke:#8a6fd1;stroke-width:1.5}.uhchart .uhhum{fill:none;stroke:#2aa198;stroke-width:1.4;stroke-dasharray:3 3}
.uhkey{margin-top:8px}.uhsw{display:inline-block;width:12px;height:10px;border-radius:2px;vertical-align:-1px;margin-left:4px}
.uhoccsw{background:#f2b84b;opacity:.45}.uhwsw{background:#2f7fa8}.uhesw{background:#d98a1c}.uhthisw{background:#d0453a;height:3px}.uhtlosw{background:#8a6fd1;height:3px}.uhhumsw{background:#2aa198;height:3px}.uhrsw{background:#5b9bd5;opacity:.6}
.uhtbl td,.uhtbl th{padding-top:6px;padding-bottom:6px}
.soltbl td{vertical-align:middle}.solkw input{width:56px;text-align:right}.solbars rect{fill:var(--line)}.solbars rect.sbar{fill:#2e9d5b}
.soltbl td:first-child{min-width:240px}.soltbl .solkw{display:flex;align-items:center;gap:4px;justify-content:flex-end;flex-wrap:nowrap}

/* Update 187: home access requests */
.accbox{margin:8px 0 4px;display:flex;flex-direction:column;gap:6px}.accform{align-items:flex-end}.accform .grow{flex:1 1 260px}.accform .grow input{width:100%}
.accans{display:inline-flex;flex-wrap:wrap;gap:6px;align-items:center;margin-left:6px}.accans input{width:240px;max-width:100%}
.accwait{border-left:4px solid var(--warn,#c98a12)}.accl li{padding:8px 0;border-bottom:1px solid var(--line)}.accl li:last-child{border-bottom:0}

/* Update 190: property manager replies */
.pmrec h2 .src{font-weight:500}.pmhome select{max-width:100%}.pmtbl tr.pmdiff td{background:var(--warn-soft);color:var(--ink)}.pmraw{white-space:pre-wrap;font-size:12px;background:var(--bg);padding:8px;border-radius:6px}

/* Update 191: one home on All homes */
.peopen{display:inline-grid;place-items:center;width:26px;height:26px;border-radius:6px;border:1px solid var(--line);text-decoration:none;font-size:14px;vertical-align:middle}.peopen:hover{border-color:var(--accent)}
.pegrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(210px,1fr));gap:10px 16px}.pegrid label{display:flex;flex-direction:column;gap:3px}.pegrid .pewide{grid-column:1/-1}
.peform h2{margin-top:18px}.pefill input,.pefill select{background:var(--warn-soft);color:var(--ink);border-color:var(--warn)}.pefill .small{color:var(--warn)}.pefillnote{background:var(--warn-soft);color:var(--ink);padding:8px 12px;border-radius:8px}
.pepaste textarea{width:100%;margin:8px 0}

.hodone{display:inline-flex;gap:6px;align-items:center;flex-wrap:wrap}.hodone select{max-width:170px}

/* Update 194: one person's awards */
.awlink{color:inherit;text-decoration:none}.awlink:hover{text-decoration:underline}
.awwho{display:flex;align-items:center;gap:12px}.awhist{display:flex;gap:6px;align-items:flex-end;overflow-x:auto;padding:8px 0}
.awm{display:flex;flex-direction:column;align-items:center;gap:2px;min-width:52px}.awm .awbar{width:28px;background:var(--accent);border-radius:4px 4px 0 0;opacity:.75}.awm.champ .awbar{background:#c99a2e;opacity:1}
/* COA team (Update 194) */
.coateam{list-style:none;padding:0;margin:8px 0;display:grid;gap:6px} .coateam li{display:flex;flex-wrap:wrap;gap:8px;align-items:center}
.coteamadd{display:grid;gap:10px;margin-top:10px} .coanologin{display:flex;flex-wrap:wrap;gap:6px}
.coaadd>summary{list-style:none;display:inline-block;margin:6px 0} .coaadd>summary::-webkit-details-marker{display:none}
.coawl{list-style:none;padding:0;margin:0} .coawl li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:8px;padding:8px 0;border-bottom:1px solid var(--line)} .coawl li>div{flex:1 1 280px}
.coawact{flex:0 1 auto} .coawact[open]{flex:1 1 100%} .coawact form{margin-top:6px}
.coainv{border-top:1px solid var(--line);padding-top:8px;margin-top:8px;align-items:end}
.awoldbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:14px 0}
.awpts td{vertical-align:middle} .awptin{width:80px;text-align:right} .awpts tr.awchg td{background:color-mix(in srgb,var(--accent) 8%,transparent)}
/* BBUC tools (Update 199) */
.uwchart{width:100%;height:auto;display:block}.uwchart .uwl{fill:none;stroke-width:2.2}.uwchart .uwthis.uwt{stroke:#d0453a}.uwchart .uwthis.uwfeels{stroke:#e98b2a}
.uwchart .uwlast.uwt{stroke:#d0453a;stroke-dasharray:5 4;opacity:.55}.uwchart .uwlast.uwfeels{stroke:#e98b2a;stroke-dasharray:5 4;opacity:.55}
.uwchart .uwd.uwthis.uwt{fill:#d0453a}.uwchart .uwd.uwthis.uwfeels{fill:#e98b2a}.uwchart .uwd.uwlast{fill:var(--panel);stroke-width:1.5}.uwchart .uwd.uwlast.uwt{stroke:#d0453a}.uwchart .uwd.uwlast.uwfeels{stroke:#e98b2a}
.uwsw-this{background:#d0453a;height:3px}.uwsw-thisf{background:#e98b2a;height:3px}.uwsw-last{background:repeating-linear-gradient(90deg,#d0453a 0 4px,transparent 4px 7px);height:3px;opacity:.6}.uwsw-lastf{background:repeating-linear-gradient(90deg,#e98b2a 0 4px,transparent 4px 7px);height:3px;opacity:.6}
.uwtbl th.uwgrp{text-align:center;border-bottom:1px solid var(--line)} .uwtbl tr.uwcur td{background:var(--accent-soft)}
.ucfilter fieldset{border:0;padding:0;margin:0 0 10px} .ucareas{display:flex;flex-wrap:wrap;gap:4px 14px} .ucareas legend{font-weight:600;margin-bottom:4px}
.ucbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;padding:12px 16px}
.uccmp .ucbarcol{min-width:220px;white-space:nowrap} .uccmp .ucbarcol .ucbar{display:inline-block;width:120px;height:10px;background:var(--sunk);border-radius:5px;vertical-align:middle;padding:0;overflow:hidden}
.uccmp .ucbarcol .ucbar span{display:block;height:100%;background:#d98a1c;border-radius:5px} .uccmp tr.uctot td{border-top:2px solid var(--line);background:var(--sunk)}
.uodraft label{display:block;margin-bottom:10px} .uodraft input,.uodraft textarea{width:100%;font-family:var(--f-body)} .uodraft textarea{min-height:320px}
.uoform fieldset{border:0;padding:0;margin:0 0 16px} .uoform legend{font-weight:700;margin-bottom:6px} .uoform textarea{width:100%}
.uoarea{border:1px solid var(--line);border-radius:8px;padding:6px 10px;margin:6px 0} .uoarea summary{cursor:pointer} .uohomes{display:grid;grid-template-columns:repeat(auto-fill,minmax(260px,1fr));gap:4px 12px;padding:8px 0 4px}
.builddoc b.txt-ok{color:var(--ok)}
@media print{.ureport .pagehead .headbtns{display:none}}
.uwpair .uwcard .uhfacts{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px 16px;margin-top:10px} .uwsum{font-size:1.05rem}
/* HOA GM Report (Update 206) */
.gmtitle{margin:16px 0 8px} .gmsec h3{margin-bottom:8px} .gmsec .kpis{margin:0} .gmnote{width:100%;min-width:220px}
@media print{.gmsec{break-inside:avoid}}
/* GM Report charts (Update 215) */
.gmcharts .gmchart{margin:6px 0 14px} .gmcharts svg{width:100%;height:auto;display:block} .gmct{font-weight:700;margin:0 0 4px} .gmkey{font-weight:400;font-size:.85rem;color:var(--muted);margin-left:8px}
.gmc-water{fill:#2f7fa8;background:#2f7fa8}.gmc-power{fill:#d98a1c;background:#d98a1c}.gmc-occ{fill:#0a6276;background:#0a6276}.gmc-arr{fill:#2aa198;background:#2aa198}.gmc-dep{fill:#8a6fd1;background:#8a6fd1}.gmc-mem{fill:#0a6276;background:#0a6276}.gmc-gst{fill:#e6b800;background:#e6b800}
@media print{.gmchart{break-inside:avoid}}
.gmcharts .gml{fill:none;stroke-width:2.2;stroke-linejoin:round} .gml.gmc-water{stroke:#2f7fa8}.gml.gmc-power{stroke:#d98a1c}.gml.gmc-occ{stroke:#0a6276}.gml.gmc-arr{stroke:#2aa198}.gml.gmc-dep{stroke:#8a6fd1}.gml.gmc-mem{stroke:#0a6276}.gml.gmc-gst{stroke:#c99a00}
.gmcharts .gmd{stroke:var(--panel);stroke-width:1}
@media (prefers-color-scheme:dark){.gml.gmc-occ,.gml.gmc-mem{stroke:#3bcdcf}.gmd.gmc-occ,.gmd.gmc-mem,.uhsw.gmc-occ,.uhsw.gmc-mem{fill:#3bcdcf;background:#3bcdcf}}
/* GM overlay chart (Update 217) */
.ovpick{display:flex;flex-wrap:wrap;gap:4px 14px;margin:0 0 6px} .gmc-temp{fill:#d0453a;background:#d0453a}.gmc-feels{fill:#e98b2a;background:#e98b2a}.gmc-avgkw{fill:#b5651d;background:#b5651d}
.gml.gmc-temp{stroke:#d0453a}.gml.gmc-feels{stroke:#e98b2a}.gml.gmc-avgkw{stroke:#b5651d} .gml.ovdash2{stroke-dasharray:6 3}.gml.ovdash3{stroke-dasharray:2 3}.gml.ovdash4{stroke-dasharray:8 3 2 3}
.ovax.gmc-occ{fill:#0a6276}.ovax.gmc-temp{fill:#d0453a}.ovax.gmc-power{fill:#b5651d}.ovax.gmc-water{fill:#2f7fa8} .ovleg{margin-top:4px}
/* On the island (Update 218) */
.islrow{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:8px;margin-top:10px} @media (max-width:760px){.islrow{grid-template-columns:repeat(3,minmax(0,1fr))}}
.isl{border:1px solid var(--line);border-radius:10px;padding:8px 10px;display:flex;flex-direction:column;gap:2px;background:var(--panel)} .isl.act{border-color:var(--accent);background:var(--accent-soft)}
.isl b{font-family:var(--f-display);font-size:1.5rem;line-height:1.1} .isld{font-weight:700;font-size:.85rem} .isld small{font-weight:400;color:var(--muted)} .islh{font-size:.85rem} .islk{font-size:.72rem;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
/* Admin → Uploads (Update 220) */
.upgrp{margin:18px 0 8px} .upgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(340px,1fr));gap:12px} .upitem h3{display:flex;flex-wrap:wrap;gap:8px;align-items:center;justify-content:space-between}
.upitem.up-warn{border-color:var(--warn)} .upitem.up-bad{border-color:var(--bad)} .upitem form{margin-top:6px}
/* Update 229 (Mark): chart text follows the theme everywhere (was black in dark mode on the Power plant, GM Report and weather charts) */
:where(svg text:not([fill])){fill:var(--ink)}
svg .uhax{font-size:10px;fill:var(--muted)} svg .uhlbl{font-size:12px;font-weight:700;fill:var(--ink)} svg .uhgrid{stroke:var(--line)}
/* Update 232: interactive property map */
.pmtools{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 10px}
.pmedit{display:flex;gap:6px;align-items:center;font-weight:600}
.pmwrap{display:grid;grid-template-columns:300px 1fr;gap:12px;align-items:start}
.pmside{padding:10px;max-height:78vh;display:flex;flex-direction:column;gap:8px}
.pmside input[type=search]{width:100%}
.pmlist{overflow:auto;flex:1;min-height:120px}
.pmgrp summary{cursor:pointer;font-weight:700;padding:6px 2px;border-bottom:1px solid var(--line)}
.pmrow{display:flex;gap:8px;align-items:center;width:100%;text-align:left;background:none;border:0;border-bottom:1px solid var(--line);padding:6px 2px;color:var(--ink);cursor:pointer;font:inherit}
.pmrow:hover,.pmrow:focus-visible{background:var(--sunk)}
.pmrow.off{opacity:.75}
.pmrow i{flex:0 0 auto;min-width:26px;height:22px;border-radius:11px;color:#fff;font-style:normal;font-size:.72rem;font-weight:700;display:grid;place-items:center;padding:0 4px}
.pmrow span{display:flex;flex-direction:column;line-height:1.25}
.pmrow small{color:var(--muted)}
.pmchips{display:flex;flex-wrap:wrap;gap:4px}
.pmchip{display:inline-flex;gap:5px;align-items:center;font-size:.75rem;border:1px solid var(--line);border-radius:12px;padding:2px 8px;background:var(--panel);color:var(--ink);font-family:inherit}
button.pmchip{cursor:pointer} .pmchip.on{outline:2px solid var(--accent)}
.pmchip i{width:10px;height:10px;border-radius:50%;display:inline-block}
.pmmap{position:relative;overflow:hidden;height:78vh;touch-action:none;background:#e9e2cc;cursor:grab;padding:0}
.pmmap.editing{cursor:default} .pmmap.placing{cursor:crosshair}
.pmstage{position:absolute;left:0;top:0;transform-origin:0 0;will-change:auto}
.pmstage img{width:100%;height:100%;display:block;user-select:none;-webkit-user-drag:none}
.pmpins{position:absolute;inset:0;--ps:1;pointer-events:none;z-index:2;overflow:hidden}
.pmpins .pmpin{pointer-events:auto}
.pmpin{position:absolute;transform:translate(-50%,-50%) scale(var(--ps));min-width:22px;height:22px;padding:0 5px;border-radius:11px;border:1.5px solid #fff;color:#fff;font:700 11px/19px system-ui,sans-serif;text-align:center;cursor:pointer;box-shadow:0 1px 3px rgba(0,0,0,.45);transition:box-shadow .2s}
.pmpin.grp{min-width:22px;height:22px;border-radius:11px;line-height:19px;border-width:2px}
.pmpin.ap{border-style:dashed}
.pmpin.dim{opacity:.55}
.pmpin.off{opacity:.15}
.pmpin.flag{box-shadow:0 0 0 3px rgba(179,38,30,.35),0 1px 3px rgba(0,0,0,.45)}
.pmpin.build{background:#fff!important;color:#000;border-color:#e07a10;font-size:11px}
.pmpin.sel{z-index:3;box-shadow:0 0 0 4px rgba(59,205,207,.9),0 1px 3px rgba(0,0,0,.5)}
.pmmap.editing .pmpin:not(.build){cursor:move}
@keyframes pmpulse{0%{box-shadow:0 0 0 0 rgba(59,205,207,.95)}100%{box-shadow:0 0 0 22px rgba(59,205,207,0)}}
.pmpin.pulse{animation:pmpulse 1s ease-out 3}
.pmzoom{position:absolute;right:8px;top:8px;z-index:5;display:flex;flex-direction:column;gap:4px}
.pmzoom .btn{background:var(--panel)}
.pmcard{position:absolute;left:10px;bottom:10px;z-index:6;max-width:320px;max-height:60%;overflow:auto;background:var(--panel);color:var(--ink);border:1px solid var(--line);border-radius:10px;padding:10px 12px;box-shadow:0 6px 24px rgba(0,0,0,.25)}
.pmcard .pmx{position:absolute;right:6px;top:2px;background:none;border:0;font-size:1.3rem;color:var(--muted);cursor:pointer}
.pmc+.pmc{border-top:1px solid var(--line);margin-top:8px;padding-top:8px}
.pmc h3{margin:2px 0}
.pmcl{font-size:.75rem;color:var(--muted);margin:0;display:flex;gap:6px;align-items:center}
.pmcl i{width:10px;height:10px;border-radius:50%;display:inline-block}
.pmch{margin:0 0 4px;font-style:italic}
.pmclinks{display:flex;flex-wrap:wrap;gap:10px;margin:6px 0 0}
.linklike{background:none;border:0;padding:0;color:var(--accent);text-decoration:underline;cursor:pointer;font:inherit}
@media (max-width:800px){.pmwrap{grid-template-columns:1fr}.pmside{max-height:40vh;order:2}.pmmap{height:62vh;order:1}.pmcard{left:6px;right:6px;max-width:none}}
@media print{.pmside,.pmzoom,.pmcard{display:none!important}.pmwrap{display:block}.pmmap{height:auto;overflow:visible}}
/* Update 235: a chosen home stands out on the map */
.pmpins.focusing .pmpin:not(.sel){opacity:.18}
.pmpin.sel{opacity:1!important;z-index:4;transform:translate(-50%,-50%) scale(calc(var(--ps) * 1.6));border-width:2.5px;box-shadow:0 0 0 4px #fff,0 0 0 7px rgba(10,98,118,.9),0 3px 10px rgba(0,0,0,.5)}
.pmpin.sel.pulse{animation:pmpulse 1s ease-out 3}
/* Update 236: Show all / occupied / under construction */
.pmpin.hide{display:none}
.pmshow button{background:none;border:0;padding:7px 12px;font:inherit;font-size:14px;font-weight:500;color:var(--muted);cursor:pointer}
.pmshow button[aria-pressed=true]{background:var(--accent);color:var(--on-accent)}
.pmpin.build{min-width:34px;font-size:10px;white-space:nowrap}
.pmpin.build{background:#e07a10!important;color:#fff;border-color:#fff;font-size:11px}
/* Update 239: occupancy groups switch on and off */
.pmocc{cursor:pointer;user-select:none} .pmocc.off{opacity:.45;text-decoration:line-through}
.pmocc select{font:inherit;font-size:.75rem;padding:0 2px;border:1px solid var(--line);border-radius:6px;background:var(--panel);color:var(--ink)}
/* Update 240: map export preview (Admin) */
.pmexp{margin:0 0 12px}
.pmexphead{display:flex;flex-wrap:wrap;gap:10px;justify-content:space-between;align-items:flex-start;margin-bottom:8px}
.pmexpbtns{display:flex;flex-wrap:wrap;gap:6px}
.pmexpstage{position:relative;width:100%;aspect-ratio:1152/900;user-select:none;touch-action:none;--k:1;border:1px solid var(--line)}
.pmexpstage img{position:absolute;inset:0;width:100%;height:100%}
.pmexpstage svg{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.pmblk{position:absolute;background:#fff;color:#12262e;border:calc(1.2px * var(--k)) solid;cursor:move;overflow:hidden;box-shadow:0 1px 4px rgba(0,0,0,.25)}
.pmblk.drag{box-shadow:0 0 0 3px rgba(59,205,207,.8),0 4px 14px rgba(0,0,0,.35);z-index:3}
.pmblkt{color:#fff;font:700 calc(8.5px * var(--k))/calc(15px * var(--k)) Helvetica,Arial,sans-serif;text-align:center;height:calc(15px * var(--k));white-space:nowrap}
.pmblkc{display:flex;padding:calc(5px * var(--k));font:calc(7px * var(--k))/calc(8.6px * var(--k)) Helvetica,Arial,sans-serif}
.pmblkc>div{flex:0 0 auto;width:calc(var(--cw) * var(--k))}
.pmblkc>div>div{white-space:nowrap}
.pmexpdate{position:absolute;left:calc(14 / 1152 * 100%);top:calc(852 / 900 * 100%);width:calc(150 / 1152 * 100%);height:calc(30 / 900 * 100%);background:#fff;border:calc(1.2px * var(--k)) solid #7a8f12;color:#12262e;font:700 calc(11px * var(--k)) Helvetica,Arial,sans-serif;display:grid;place-items:center}
.pmalso{margin:2px 0}
/* Update 243: taller card; a building's units in two columns */
.pmcard{max-height:78%;overscroll-behavior:contain}
.pmalsos{display:grid;grid-template-columns:1fr 1fr;gap:0 12px}
.pmalsos .pmalso{margin:1px 0;line-height:1.3}
@media (max-width:800px){.pmcard{max-height:70%}}
/* Update 244 (Mark, phone): the list never spills out of its panel; on a phone the panel grows and the list scrolls inside it */
.pmside{overflow:hidden}
.pmlist{min-height:0}
@media (max-width:800px){.pmside{max-height:none;overflow:visible}.pmlist{flex:none;max-height:60vh;overflow:auto;overscroll-behavior:contain}.pmchip{font-size:.72rem;padding:1px 7px}}
/* Update 247: staff notices, staff details, propane round, laundry steps */
.bdaywish{display:flex;gap:14px;align-items:center;background:linear-gradient(90deg,var(--accent-soft),var(--panel));border-color:var(--accent)}
.bdaywish>span{font-size:34px;line-height:1}
.bdaywish b{font-size:18px}
.docalert{background:var(--warn-soft);border:2px solid var(--warn);border-radius:12px;padding:12px 16px;margin:0 0 16px;color:var(--ink)}
.docalert.bad{background:var(--bad-soft);border-color:var(--bad)}
.docalert.team{border-width:1px}
.docalert>b{margin-right:6px}
.docalert ul{margin:6px 0 8px;padding-left:18px}
.bdays ul.plain li,.closealert ul.plain li{display:flex;align-items:center;gap:8px;flex-wrap:wrap;padding:6px 0;border-bottom:1px solid var(--line)}
.bdays ul.plain li:last-child,.closealert ul.plain li:last-child{border-bottom:0}
.closealert ul.plain li{justify-content:space-between}
.closealert .metform input{max-width:180px}
.propnote{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap}
.doclist li{padding:4px 0}
table.staffdocs td{vertical-align:top}
table.staffdocs input[type=date]{max-width:150px}
input.sdate.soon{border-color:var(--warn);background:var(--warn-soft)}
input.sdate.expd{border-color:var(--bad);background:var(--bad-soft)}
.proptools{display:flex;gap:12px;align-items:center;flex-wrap:wrap}
.proptools input[type=search]{flex:1;min-width:180px}
.proptable .proparea th{background:var(--sunk);font-size:12px;text-transform:uppercase;letter-spacing:.05em;text-align:left}
.proptable input.proppct{width:4.2em;text-align:center;font-size:16px}
.proptable input.propnote{min-width:120px;width:100%}
.proptable tr.pst-refill td:first-child{box-shadow:inset 4px 0 0 var(--bad)}
.proptable tr.pst-late td:first-child,.proptable tr.pst-none td:first-child{box-shadow:inset 4px 0 0 var(--warn)}
.proptable tr.done{background:var(--ok-soft)}
.proptable .tag{font-size:11px}
.propsave{position:sticky;bottom:0;padding:10px 0;background:linear-gradient(transparent,var(--bg) 40%);z-index:2}
.lnsteps{display:grid;gap:10px}
.lnsteprow{display:flex;justify-content:space-between;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 14px}
.lnstepwho a{color:inherit;text-decoration:none}
.lnstepbtns{display:flex;gap:6px;flex-wrap:wrap}
.lnstepbtn{display:inline-block;border:1px solid var(--line);background:var(--panel);color:var(--ink);border-radius:10px;padding:12px 14px;font:inherit;font-weight:600;cursor:pointer;text-decoration:none;min-height:48px}
.lnstepbtn.on{background:var(--accent);border-color:var(--accent);color:var(--on-accent)}
.lnstepbtn.ready{background:var(--ok-soft);border-color:var(--ok);color:var(--ok)}
@media (max-width:640px){.lnstepbtn{flex:1 1 45%;text-align:center}}
.lnsteps>.lnsteprow{width:100%;box-sizing:border-box}
.lnstepwho{flex:1 1 260px;min-width:0}
@media (max-width:640px){
  .proptable thead{display:none}
  .proptable tbody tr{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;padding:8px 10px;border-bottom:1px solid var(--line)}
  .proptable tbody td{border:0;padding:0}
  .proptable tbody td:first-child{flex:1 1 100%}
  .proptable tbody td:nth-child(2){flex:1 1 100%}
  .proptable tbody tr.proparea{display:block;padding:0}
  .proptable tbody tr.proparea th{display:block;padding:6px 10px}
  .proptable input.propnote{min-width:0;flex:1}
  .proptable tbody td:last-child{flex:1 1 100%}
}
.lnsteps{width:100%;grid-template-columns:minmax(0,1fr)}
.propgnw{display:none}
@media (max-width:640px){.propgnw{display:inline}}
.docwarn{display:flex;gap:10px 16px;align-items:center;flex-wrap:wrap}
.bdshare{margin:10px 0 8px}
.bdshare.ask{background:var(--warn-soft);border-radius:8px;padding:8px 10px}
label.check.inline{display:inline-flex;margin-right:14px}
/* Update 255: Atlantic hurricane season box on My homes */
.atlbox{grid-column:1/-1;padding:8px 12px;border-radius:10px;background:color-mix(in srgb,#0a6276 7%,transparent);border-left:4px solid var(--ok)}
.atlbox.atl-storm{border-left-color:#2f80d0}
.atlbox.atl-near{border-left-color:var(--warn);background:var(--warn-soft)}
.atlbox.atl-close{border-left-color:var(--bad);background:var(--bad-soft)}
.atlbox .atlsum{font-weight:600;margin:2px 0 4px}
.atlbox p{margin:2px 0}
.atllist{margin:4px 0}
.atllist li{padding:3px 0;font-size:.93em}
.atlnote{margin:6px 0 4px;padding:7px 10px;border-radius:8px;background:var(--sunk);color:var(--ink);border:1px solid var(--line);border-left:3px solid var(--accent);font-size:.93em}
.atledit{margin:4px 0}.atledit summary{cursor:pointer;color:var(--accent,#0a6276)}.atledit textarea{width:100%;margin:6px 0}.atltwo{white-space:pre-wrap;font-size:.85em;max-height:260px;overflow:auto;background:var(--panel);color:var(--ink);padding:8px;border-radius:6px}
.atllist li.atl-area{padding-left:8px;border-left:3px solid #e0b000}
.atllist li.atl-area.atl-high{border-left-color:var(--bad)}
.atllist li.atl-area.atl-low{border-left-color:#e8d36a}
.atllist .atlwhere{color:var(--muted)}
.atllist li.atl-near .atlwhere{color:var(--warn);font-weight:600}
.atllist li.atl-close .atlwhere{color:var(--bad);font-weight:700}
.kpi .occall{display:block;font-size:12px;color:var(--muted);margin-top:3px;text-transform:none;letter-spacing:0}
.bkdl input[type=password]{width:150px;max-width:45vw}

/* Update 270: What's On */
.whatson{padding:0;overflow:hidden;max-width:760px}
.whatsonframe{display:block;width:100%;min-height:400px;border:0;background:#fff}
.ntform .ntrow{border:1px solid var(--line,#d8e2e5);border-radius:10px;padding:8px 10px;margin:8px 0}.ntform .ntrow legend{font-weight:700;font-size:.9em;padding:0 4px}.ntform .ntrow input[type=text],.ntform .ntrow input:not([type]),.ntform textarea{width:100%;margin:4px 0}
.ntsent li{padding:5px 0;border-bottom:1px solid var(--line,#eee)}.ntsent li:last-child{border:0}
/* Update 272: schedule editing, sick days */
.roster td.sick{background:var(--bad-soft);color:var(--bad);font-weight:600;text-align:center}
.roster td.ed{position:relative}.roster td.ed::after{content:"";position:absolute;top:3px;right:3px;width:6px;height:6px;border-radius:50%;background:#e0a100}
.schededit td{padding:2px}.schededit td.nm{white-space:nowrap;padding:4px 8px}
.schededit input{width:100%;min-width:74px;border:1px solid transparent;background:transparent;text-align:center;font:inherit;padding:5px 2px;border-radius:6px;color:inherit}
.schededit input:focus{border-color:var(--accent,#0a6276);background:var(--panel);color:var(--ink);outline:none}
.schededit .printval{display:none}
.sickbtn{font-size:.78em;padding:1px 7px;margin-left:4px}
@media print{.schededit input{display:none}.schededit .printval{display:inline}.schededit td{padding:4px 3px;font-size:10px}.schededit{width:100%}h2.printonly{display:block;font-size:14px;margin:0 0 6px}@page{size:landscape;margin:.4in}}
.propsync{display:flex;flex-wrap:wrap;gap:6px 14px;align-items:center;border-left:4px solid var(--ok)}
.propsync.waiting{border-left-color:#e0a100;background:var(--warn-soft)}
.propsync .propbtns{margin-left:auto;display:flex;gap:6px;flex-wrap:wrap}
.propst{font-size:.78em;font-weight:600;white-space:nowrap}.propst.ok{color:var(--ok)}.propst.wait{color:#a86d00}.propst.bad{color:var(--bad)}
.acdays{display:flex;gap:2px}.acdays span{width:10px;height:18px;border-radius:2px;background:var(--sunk,#e6ecee)}.acdays .u{background:var(--ok)}.acdays .m{background:var(--bad)}
.actable tr.acidle td{background:var(--bad-soft)}
.otbar{display:flex;flex-wrap:wrap;gap:8px 16px;align-items:center;position:sticky;top:0;z-index:5}.otbar .otacts{display:flex;flex-wrap:wrap;gap:8px 16px;margin-left:auto}
.otgroup{padding:10px 14px;margin:10px 0}.otgroup li{padding:6px 0;border-bottom:1px solid var(--line,#eee)}.otgroup li:last-child{border:0}
.otbar select,.otbar input[name=note]{width:auto;display:inline-block;margin:0}
/* Update 273: service calls */
.svcdl{display:grid;grid-template-columns:max-content 1fr;gap:4px 12px;margin:8px 0}.svcdl dt{color:var(--muted);font-size:.9em}.svcdl dd{margin:0}
.svcstep{padding:8px 0;border-bottom:1px solid var(--line,#eee)}.svcstep.done b{color:var(--ok)}.svcstepf{display:flex;flex-wrap:wrap;gap:6px;align-items:center;margin-top:4px}.svcstepf input,.svcstepf select{width:auto;margin:0}
.svcnotes li{padding:6px 0;border-bottom:1px solid var(--line,#eee)}.svcnotes li.done{background:var(--ok-soft)}.svcnotes li.log{color:var(--muted);font-size:.92em}
.svcbill{border:1px solid var(--line,#d8e2e5);border-radius:10px;padding:8px 12px;margin:10px 0}.svcmoney{display:flex;flex-wrap:wrap;gap:8px 14px;align-items:center;margin:6px 0}.svcmoney input{width:7em;display:inline-block;margin:0 0 0 4px}
.svcwhen{display:flex;gap:6px}.svctable tr.svclate td{background:var(--bad-soft)}

.pwrow{display:flex;gap:8px;align-items:center}.pwrow input{flex:1}.notifybox{border-left:4px solid var(--ok);margin-bottom:12px}.uilist li{padding:6px 0;border-bottom:1px solid var(--line,#eee);display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center}.uilist li .btn{margin-left:auto}
.uiwho{margin-top:4px;max-width:260px;font-size:.92em}

/* Update 285: usage history (monthly bars, scrolling daily bars) */
.usagenote{border-left:3px solid var(--accent);margin-bottom:12px}
.ubars{display:flex;align-items:flex-end;gap:6px;height:170px;padding-top:4px;overflow-x:auto}
.ub{flex:1 1 0;min-width:34px;max-width:64px;display:flex;flex-direction:column;align-items:center;justify-content:flex-end;height:100%}
.ubv{font-family:var(--f-mono);font-size:11px;color:var(--muted);margin-bottom:3px;white-space:nowrap}
.ubt{flex:1 1 auto;width:100%;display:flex;align-items:flex-end;justify-content:center}
.ubb{width:70%;background:var(--accent);opacity:.85;border-radius:3px 3px 0 0}
.ubb:hover,.ubb:focus{opacity:1;outline:none;box-shadow:0 0 0 2px var(--ink,#fff)}
.ubars.many{gap:3px} .ubars.many .ub{min-width:22px} .ubars.many .ubv{display:none}
.eb-key.stale{background:repeating-linear-gradient(45deg,var(--line),var(--line) 2px,transparent 2px,transparent 4px);opacity:1}
.ubl{font-size:11px;color:var(--muted);margin-top:4px;text-align:center;line-height:1.25;min-height:28px}
.scrollbars{overflow-x:auto}
.scrollbars .ebars{min-width:max-content}
.scrollbars .ebars .eb{flex:0 0 auto;width:12px;max-width:none}
.scrollbars.r90 .ebars .eb{width:7px} .scrollbars.r365 .ebars .eb{width:3px} .scrollbars.r365 .ebars{gap:1px}
.scrollbars .wbarwrap{display:block} .scrollbars .wband{min-width:max-content;max-width:none} .scrollbars .wband span{flex:0 0 auto;width:12px;max-width:none}
.scrollbars.r90 .wband span{width:7px} .scrollbars.r365 .wband span{width:3px} .scrollbars.r365 .wband{gap:1px}
.usetbl td,.usetbl th{white-space:normal}
@media print{.ubars{overflow:visible}}

/* Update 285: What's On set out */
.wo h2{margin-top:22px}
.wo-hero{padding:16px 18px}
.wo-hero h2{margin:2px 0 8px;font-size:22px}
.wo-key{display:flex;flex-wrap:wrap;gap:6px 10px;align-items:center;margin:0 0 4px}
.wo-b{display:inline-block;font-size:11px;font-weight:700;padding:1px 7px;border-radius:10px;margin-left:4px;white-space:nowrap;vertical-align:1px}
.wo-key .wo-b{margin-left:0;margin-right:5px}
.wo-b.free{background:var(--ok-soft);color:var(--ok)} .wo-b.sign{background:var(--accent-soft, var(--sunk));color:var(--accent)} .wo-b.adult{background:var(--warn-soft);color:var(--warn)}
.wo-days{display:grid;grid-template-columns:repeat(auto-fit,minmax(290px,1fr));gap:12px;margin-top:12px}
.wo-day{padding:14px 16px}
.wo-day h3{margin:0 0 6px;font-size:18px}
.wo-day h3 span{color:var(--muted);font-weight:500;font-size:15px}
.wo-day h3 em{font-style:normal;font-size:11px;font-weight:700;background:var(--accent);color:var(--on-accent);padding:2px 8px;border-radius:10px;vertical-align:3px}
.wo-day.today{border-color:var(--accent);box-shadow:0 0 0 1px var(--accent)}
.wo-day.past{opacity:.6}
.wo-day h4{margin:12px 0 4px;font-size:12px;text-transform:uppercase;letter-spacing:.04em;color:var(--muted)}
.wo-allday{margin:6px 0;padding:6px 10px;background:var(--sunk);border-radius:8px;font-weight:600}
.wo-items{list-style:none;margin:0;padding:0}
.wo-items li{display:flex;gap:10px;padding:5px 0;border-top:1px solid var(--line)}
.wo-items li:first-child{border-top:0}
.wo-t{flex:0 0 66px;font-family:var(--f-mono);font-size:12px;color:var(--muted);padding-top:2px}
.wo-w{flex:1 1 auto;min-width:0}
.wo-w .muted{display:block;font-size:13px}
.wo-events{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:12px}
.wo-events figure{margin:0;padding:8px;overflow:hidden}
.wo-events img{display:block;width:100%;height:auto;border-radius:6px}
.wo-events figcaption{padding:8px 4px 2px;font-size:14px}
.wo-dining{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:10px}
.wo-dining .panel,.wo-ess .panel{padding:12px 14px}
.wo-dining h3,.wo-ess h3{margin:0 0 4px;font-size:15px}
.wo-dining p{margin:2px 0;font-size:13px}
.wo-ess{display:grid;grid-template-columns:repeat(auto-fit,minmax(260px,1fr));gap:10px}
.wo-ess p{margin:2px 0;font-size:14px}
.wo-notice{display:flex;gap:14px;align-items:flex-start;padding:14px 16px;margin-top:18px}
.wo-notice img{width:64px;height:auto;border-radius:12px;flex:0 0 auto}
.wo-notice h3{margin:0 0 4px}
.wo-notice p{margin:4px 0}
.wo-intro{margin-top:18px;padding:12px 16px}
.wo-intro summary{cursor:pointer;font-weight:600}
.wo-introbody{display:flex;gap:16px;flex-wrap:wrap;margin-top:10px}
.wo-introbody img{max-width:320px;width:100%;height:auto;border-radius:8px}
.wo-introbody div{flex:1 1 260px}
@media print{.wo-day.past{opacity:1}.wo-intro{display:none}}

/* Update 289: property manager on All homes */
.proptbl td.pmco select{min-width:170px;max-width:220px}.proptbl select[aria-label="Pool"]{min-width:150px}.pmconew{display:block;margin-top:4px;width:170px}.pmconew[hidden]{display:none}.pmsaved select[data-pmco]{min-width:170px;max-width:240px}

/* Update 292: occupancy report */
.occrrow{display:flex;flex-wrap:wrap;gap:10px 14px;align-items:flex-end}.occrrow label{flex:1 1 150px;max-width:260px}
.occrcoa{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:12px 0;display:flex;flex-wrap:wrap;gap:4px 16px}.occrcoa legend{padding:0 4px;font-weight:600}
.occrhead h2{margin-bottom:10px}.occrdays tr.today td{background:var(--accent-soft)}
@media print{.occrf{display:none}}

/* Update 295: days on file on Admin → Uploads */
.updays{display:flex;gap:3px;margin:6px 0 2px;flex-wrap:wrap}
.updays span{width:22px;height:22px;border-radius:5px;display:flex;align-items:center;justify-content:center;font-size:10px;border:1px solid var(--line);color:var(--muted)}
.updays span.on{background:var(--ok);border-color:var(--ok);color:#fff}
.updays span.off{background:var(--bad-soft);border-color:var(--bad);color:var(--bad)}
.updays span.wait{border-style:dashed}
.updaysl{margin:2px 0 8px}

/* Update 298: welcome back after a sick day */
.sickwelcome{display:flex;gap:14px;align-items:center;background:linear-gradient(90deg,var(--ok-soft),var(--panel));border-color:var(--ok)}
.sickwelcome>span{font-size:32px;line-height:1}

/* Update 300: personal messages at the top of the first page */
.staffnote{display:flex;gap:12px;align-items:flex-start;border-color:var(--accent);background:linear-gradient(90deg,var(--accent-soft),var(--panel))}
.staffnote .snbody{flex:1 1 auto;min-width:0}.staffnote .snbody p+p{margin-top:4px}.staffnote .snok{flex:0 0 auto}
@media (max-width:600px){.staffnote{flex-wrap:wrap}.staffnote .snok{width:100%}.staffnote .snok .btn{width:100%}}
.smform{max-width:640px}.smrow{display:flex;gap:12px;flex-wrap:wrap}.smrow label{flex:1 1 160px}

/* Update 301: groups and shout-outs on Personal messages */
.smgroups,.smshout{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:8px 0;display:flex;flex-wrap:wrap;gap:4px 16px}
.smgroups legend,.smshout legend{padding:0 4px;font-weight:600}.smshout .smrow{width:100%}
.personlink{text-decoration:none;color:inherit;cursor:pointer}.personlink:hover .person{text-decoration:underline}
.smpreview{border:1px dashed var(--accent);border-radius:10px;padding:10px 12px;margin-top:12px}.smpreview .staffnote{margin:8px 0}

/* Update 302: message themes */
.smthemes{border:1px solid var(--line);border-radius:8px;padding:8px 12px;margin:8px 0;display:flex;flex-wrap:wrap;gap:6px}
.smthemes legend{padding:0 4px;font-weight:600}
.smth{display:inline-flex;margin:0}.smth input{position:absolute;opacity:0;pointer-events:none}
.smth span{padding:5px 10px;border:1px solid var(--line);border-radius:16px;cursor:pointer;font-size:14px;white-space:nowrap}
.smth input:checked+span{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}
.smth input:focus-visible+span{outline:2px solid var(--accent);outline-offset:2px}
.staffnote{position:relative;overflow:hidden}
.sntheme{position:absolute;right:10px;top:50%;transform:translateY(-50%) rotate(-12deg);font-size:64px;opacity:.22;pointer-events:none;line-height:1}
.staffnote .snok{position:relative;z-index:1}
.staffnote.th-shout{border-color:#e07a10;background:linear-gradient(90deg,rgba(224,122,16,.18),var(--panel))}
.staffnote.th-thanks{border-color:#2f7fa8;background:linear-gradient(90deg,rgba(47,127,168,.18),var(--panel))}
.staffnote.th-congrats{border-color:#8a6fd1;background:linear-gradient(90deg,rgba(138,111,209,.2),var(--panel))}
.staffnote.th-welcome{border-color:var(--ok);background:linear-gradient(90deg,var(--ok-soft),var(--panel))}
.staffnote.th-birthday{border-color:#d6457f;background:linear-gradient(90deg,rgba(214,69,127,.2),var(--panel))}
.staffnote.th-getwell{border-color:var(--ok);background:linear-gradient(90deg,var(--ok-soft),var(--panel))}
.staffnote.th-holiday{border-color:#18a0a0;background:linear-gradient(90deg,rgba(24,160,160,.2),var(--panel))}
.staffnote.th-christmas{border-color:#c62828;background:linear-gradient(90deg,rgba(198,40,40,.18),rgba(46,125,50,.14) 60%,var(--panel))}
.staffnote.th-newyear{border-color:#d4a017;background:linear-gradient(90deg,rgba(212,160,23,.22),rgba(40,40,90,.12) 70%,var(--panel))}
.staffnote.th-bahamas{border-color:#00a3b4;background:linear-gradient(90deg,rgba(0,163,180,.2),rgba(255,199,44,.18) 55%,var(--panel))}
.staffnote.th-thanksgiving{border-color:#b5651d;background:linear-gradient(90deg,rgba(181,101,29,.2),var(--panel))}
.staffnote.th-halloween{border-color:#e65100;background:linear-gradient(90deg,rgba(230,81,0,.2),rgba(60,30,90,.14) 70%,var(--panel))}
.staffnote.th-easter{border-color:#9c7bd6;background:linear-gradient(90deg,rgba(156,123,214,.18),rgba(255,214,102,.16) 60%,var(--panel))}
.smcount{cursor:help;text-decoration:underline dotted;text-underline-offset:3px}

/* Update 304 (Mark): What's new in flowing columns (no big gaps), group headings in a box */
.updgroups{display:block;columns:3 300px;column-gap:28px}
.updgroup{break-inside:avoid;-webkit-column-break-inside:avoid;page-break-inside:avoid;display:inline-block;width:100%;margin:0 0 14px}
.updgroup h3{margin:0 0 8px;padding:7px 12px;border:1px solid var(--accent);border-left-width:4px;border-radius:8px;background:var(--accent-soft);color:var(--ink);font-size:14px;letter-spacing:.05em}
.updgroup ul{margin-top:4px}

/* What's On banner (Update 308, Mark) */
.wobanner{max-width:1100px;margin:0 0 14px;border-radius:14px;overflow:hidden;box-shadow:0 2px 10px rgba(0,0,0,.12)}
.wobanner img{display:block;width:100%;height:auto}
@media (max-width:640px){.wobanner{border-radius:10px;margin:0 -4px 12px}}
@media print{.wobanner{box-shadow:none}}

/* HOA GM Report: smaller tiles, Electric and Water each on one line (Update 310, Mark) */
.gmsec .kpis{grid-template-columns:repeat(auto-fit,minmax(118px,1fr));gap:6px}
.gmsec .kpi{padding:7px 10px;border-radius:8px}
.gmsec .kpi b{font-size:18px;line-height:1.15;white-space:nowrap}
.gmsec .kpi span{font-size:11px;line-height:1.25;margin-top:2px}
@media (max-width:640px){.gmsec .kpis{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* Sign-in lockouts (Update 312) */
.lockbox{border-left:4px solid var(--bad);margin-bottom:14px}.lockbox ul{margin:6px 0}.lockbox li{padding:4px 0}.lockbox .btn{margin-left:8px}

/* Sign-in button: "Signing in…" with a spinner (Update 314, Mark) */
.signbtn{display:inline-flex;align-items:center;justify-content:center;gap:10px}
.signspin{display:none;width:16px;height:16px;border:2.5px solid currentColor;border-right-color:transparent;border-radius:50%;animation:signspin .7s linear infinite}
.signbtn.busy{opacity:.85;cursor:progress;pointer-events:none}
.signbtn.busy .signspin{display:inline-block}
@keyframes signspin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.signspin{animation-duration:1.6s}}

/* Home sales on My homes (Update 315) */
.salecols{display:grid;grid-template-columns:1fr 1fr;gap:6px 24px;margin-top:6px}
.salespanel h3{font-size:.95rem;margin:4px 0 6px}
.salelist{list-style:none;padding-left:0;margin:0}
.salelist li{padding:4px 0;border-bottom:1px solid var(--line);line-height:1.35}
.salelist li:last-child{border-bottom:0}
.salelist .sdate{display:inline-block;min-width:48px;font-size:12px;color:var(--muted);font-variant-numeric:tabular-nums}
.salenote{margin:8px 0 0;color:var(--warn,#9a6700)}
@media (max-width:760px){.salecols{grid-template-columns:1fr}}

/* New owner: each person ticks, comments (Update 316) */
.closeitem{border-top:1px solid var(--line);padding:10px 0}
.closeitem:first-of-type{border-top:0}
.cihead{display:flex;justify-content:space-between;align-items:center;gap:8px;flex-wrap:wrap}
.cipeople{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0}
.cichip{font-size:12px;border-radius:12px;padding:2px 9px;border:1px solid var(--line)}
.cichip.done{background:var(--ok-soft,#e3f4ea);border-color:transparent;color:var(--ok)}
.cichip.wait{color:var(--muted)}
.cinotes{list-style:none;margin:4px 0;padding:0 0 0 10px;border-left:3px solid var(--line);font-size:13px}
.cinotes li{padding:3px 0}
.cinote{display:flex;gap:6px;margin-top:4px}.cinote input{flex:1;min-width:0}
.tag.ok{background:var(--ok-soft,#e3f4ea);color:var(--ok)}
