:root{
  --ink:#12262b;--ink2:#1b383e;--ink3:#28505a;--paper:#f5f2ea;--card:#fffdf9;--line:#e3ddd0;
  --brass:#a97424;--brass2:#c9973f;--brass-soft:#f4e9d2;--text:#1c2a2c;--muted:#687573;
  --ok:#2c7a57;--ok-soft:#e1f1e8;--warn:#a86a12;--warn-soft:#fbefd6;--bad:#b23c36;--bad-soft:#f8e2df;
  --info:#2b6788;--info-soft:#e0edf4;--radius:10px;
  --serif:"Iowan Old Style","Palatino Linotype",Palatino,"Book Antiqua",Georgia,serif;
  --sans:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html{-webkit-text-size-adjust:100%}
body{margin:0;font:15px/1.5 var(--sans);color:var(--text);background:var(--paper)}
a{color:var(--ink3);text-decoration:none}
a:hover{text-decoration:underline}
h1,h2,h3{font-family:var(--serif);font-weight:600;letter-spacing:-.01em;margin:0;color:var(--ink)}
h1{font-size:27px}h2{font-size:19px}h3{font-size:16px}
small,.muted{color:var(--muted)}
.num{font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}

/* ---------- app shell */
.shell{display:grid;grid-template-columns:232px 1fr;min-height:100vh}
.side{background:var(--ink);color:#cfdcd9;padding:20px 14px;display:flex;flex-direction:column;gap:4px;position:sticky;top:0;height:100vh;overflow:auto}
.brand{display:flex;align-items:center;gap:10px;padding:2px 8px 18px;color:#fff;font:600 21px var(--serif)}
.brand svg{flex:none}
.brand:hover{text-decoration:none}
.side a.nav{display:flex;align-items:center;gap:10px;padding:8px 10px;border-radius:8px;color:#c5d3d0;font-size:14.5px}
.side a.nav:hover{background:var(--ink2);text-decoration:none;color:#fff}
.side a.nav.on{background:var(--ink2);color:#fff;box-shadow:inset 3px 0 0 var(--brass2)}
.side a.nav .count{margin-left:auto;background:var(--brass2);color:var(--ink);border-radius:20px;font-size:11.5px;font-weight:700;padding:0 7px}
.side .sep{margin:12px 10px 4px;font-size:11px;letter-spacing:.09em;text-transform:uppercase;color:#7f9794}
.side .foot{margin-top:auto;padding:14px 10px 0;font-size:12px;color:#7f9794}
.side .foot a{color:#a9bdb9}
.main{min-width:0;display:flex;flex-direction:column}
.top{display:flex;align-items:center;gap:14px;padding:12px 28px;border-bottom:1px solid var(--line);background:var(--card);flex-wrap:wrap}
.top .bd{font-size:13.5px;color:var(--muted)}
.top .bd b{color:var(--ink)}
.top .sp{flex:1}
.top form{margin:0}
.content{padding:26px 28px 60px;max-width:1380px;width:100%}
.head{display:flex;align-items:flex-end;gap:14px;flex-wrap:wrap;margin-bottom:20px}
.head .sp{flex:1}
.head p{margin:2px 0 0;color:var(--muted)}

/* ---------- pieces */
.card{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px}
.card>h2,.card>h3{margin-bottom:12px}
.card.flush{padding:0;overflow:hidden}
.card.flush>h2,.card.flush>.card-h{padding:14px 18px;border-bottom:1px solid var(--line);margin:0;display:flex;align-items:center;gap:10px}
.card-h .sp{flex:1}
.grid{display:grid;gap:18px}
.g2{grid-template-columns:repeat(2,minmax(0,1fr))}.g3{grid-template-columns:repeat(3,minmax(0,1fr))}
.g-main{grid-template-columns:minmax(0,1.9fr) minmax(280px,1fr)}
.stack>*+*{margin-top:18px}
.kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:14px;margin-bottom:18px}
.kpi{background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:14px 16px}
.kpi .l{font-size:12px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted)}
.kpi .v{font:600 27px/1.2 var(--serif);color:var(--ink);margin-top:2px}
.kpi .s{font-size:12.5px;color:var(--muted)}
.kpi.accent{background:var(--ink);border-color:var(--ink)}
.kpi.accent .l,.kpi.accent .s{color:#9fb6b2}.kpi.accent .v{color:#fff}
.meter{height:6px;background:#ffffff26;border-radius:6px;margin-top:8px;overflow:hidden}
.meter i{display:block;height:100%;background:var(--brass2)}

.btn{display:inline-flex;align-items:center;gap:6px;border:1px solid var(--ink);background:var(--ink);color:#fff;border-radius:8px;padding:8px 14px;font:500 14px var(--sans);cursor:pointer;white-space:nowrap}
.btn:hover{background:var(--ink2);text-decoration:none}
.btn.ghost{background:transparent;color:var(--ink);border-color:#c9c2b2}
.btn.ghost:hover{background:#ece7da}
.btn.brass{background:var(--brass);border-color:var(--brass)}.btn.brass:hover{background:#8f611c}
.btn.danger{background:transparent;color:var(--bad);border-color:#e0b5b1}.btn.danger:hover{background:var(--bad-soft)}
.btn.sm{padding:4px 10px;font-size:13px;border-radius:7px}
.btn.lg{padding:12px 22px;font-size:16px}
.btn:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,a:focus-visible,summary:focus-visible{outline:2px solid var(--brass2);outline-offset:2px}
.row{display:flex;gap:8px;align-items:center;flex-wrap:wrap}
form.inline{display:inline;margin:0}

label{display:block;font-size:12.5px;font-weight:600;color:#455553;margin-bottom:4px}
input[type=text],input[type=email],input[type=password],input[type=number],input[type=date],input[type=time],input[type=search],input[type=tel],select,textarea{
  width:100%;border:1px solid #cfc8b8;background:#fff;border-radius:8px;padding:8px 10px;font:15px var(--sans);color:var(--text)}
textarea{min-height:70px;resize:vertical}
.fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px 14px}
.fields .wide{grid-column:1/-1}
.fields .w2{grid-column:span 2}
.check{display:flex;align-items:center;gap:7px;font-weight:500;font-size:14px;margin:0;color:var(--text)}
.check input{width:16px;height:16px;accent-color:var(--ink)}
.actions{display:flex;gap:10px;margin-top:14px;flex-wrap:wrap;align-items:center}

.tblwrap{overflow-x:auto}
table.tbl{width:100%;border-collapse:collapse;font-size:14px}
.tbl th{text-align:left;font-size:11.5px;letter-spacing:.06em;text-transform:uppercase;color:var(--muted);font-weight:600;padding:9px 12px;border-bottom:1px solid var(--line);white-space:nowrap;background:#faf7f0}
.tbl td{padding:9px 12px;border-bottom:1px solid #eee9dd;vertical-align:middle}
.tbl tr:last-child td{border-bottom:0}
.tbl tbody tr:hover td{background:#fbf8f1}
.tbl tfoot td{font-weight:700;border-top:2px solid var(--line);background:#faf7f0}
.tbl td.num,.tbl th.num{text-align:right}
.tbl .void td{color:#a3aaa8;text-decoration:line-through}
.empty{padding:26px 18px;text-align:center;color:var(--muted)}

.pill{display:inline-block;border-radius:20px;padding:1px 9px;font-size:12px;font-weight:600;background:#ece7da;color:#4d5a58;white-space:nowrap}
.pill.confirmed,.pill.arriving,.pill.in_progress,.pill.normal{background:var(--info-soft);color:var(--info)}
.pill.checked_in,.pill.clean,.pill.done,.pill.occupied,.pill.active{background:var(--ok-soft);color:var(--ok)}
.pill.inspected{background:#d5ecf0;color:#1e6672}
.pill.cancelled,.pill.no_show,.pill.dirty,.pill.urgent,.pill.suspended,.pill.out-of-order{background:var(--bad-soft);color:var(--bad)}
.pill.due-out,.pill.open,.pill.trial,.pill.vip{background:var(--warn-soft);color:var(--warn)}
.pill.checked_out,.pill.low{background:#ece7da;color:#5b6765}

.tabs{display:flex;gap:4px;border-bottom:1px solid var(--line);margin-bottom:18px;overflow-x:auto}
.tabs a{padding:9px 14px;color:var(--muted);border-bottom:2px solid transparent;margin-bottom:-1px;white-space:nowrap;font-weight:500}
.tabs a:hover{text-decoration:none;color:var(--ink)}
.tabs a.on{color:var(--ink);border-color:var(--brass)}
.tabs a b{font-weight:600;background:#ece7da;border-radius:20px;padding:0 7px;font-size:12px;margin-left:4px}

.flash{border-radius:8px;padding:10px 14px;margin-bottom:14px;border:1px solid;font-size:14.5px}
.flash.ok{background:var(--ok-soft);border-color:#b9dcc9;color:#1f5a40}
.flash.error{background:var(--bad-soft);border-color:#e9bdb9;color:#8a2a25}
.flash.warn{background:var(--warn-soft);border-color:#ecd49c;color:#7a4c0a}
.note{background:var(--brass-soft);border:1px solid #e5d2a8;border-radius:8px;padding:10px 14px;display:flex;gap:12px;align-items:center;margin-bottom:10px;font-size:14.5px}
.note .sp{flex:1}
dl.kv{display:grid;grid-template-columns:auto 1fr;gap:6px 16px;margin:0}
dl.kv dt{color:var(--muted);font-size:13.5px}dl.kv dd{margin:0;font-weight:500}
details.box{border:1px solid var(--line);border-radius:8px;background:#fff}
details.box>summary{cursor:pointer;padding:9px 12px;font-weight:600;font-size:14px;list-style:none}
details.box>summary::-webkit-details-marker{display:none}
details.box>summary:before{content:"+";display:inline-block;width:16px;color:var(--brass)}
details.box[open]>summary:before{content:"–"}
details.box>div{padding:4px 12px 14px}
code,.code{font:13px ui-monospace,SFMono-Regular,Menlo,Consolas,monospace;background:#efeadd;border-radius:5px;padding:1px 6px}
pre.code{padding:12px;overflow-x:auto;white-space:pre}

/* ---------- charts */
.bars{display:flex;align-items:flex-end;gap:5px;height:140px;padding-top:6px}
.bars .b{flex:1;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;height:100%;min-width:0;position:relative}
.bars .b i{display:block;width:100%;background:var(--ink3);border-radius:4px 4px 0 0;min-height:2px}
.bars .b.we i{background:var(--brass2)}
.bars .b span{font-size:10.5px;color:var(--muted);margin-top:4px;white-space:nowrap}
.bars .b em{font-style:normal;font-size:10.5px;color:var(--ink);margin-bottom:2px;font-variant-numeric:tabular-nums}
.legend{display:flex;gap:14px;font-size:12px;color:var(--muted);margin-top:8px}
.legend i{display:inline-block;width:10px;height:10px;border-radius:2px;margin-right:5px;background:var(--ink3)}
.legend i.we{background:var(--brass2)}

/* ---------- tape chart */
.tape{overflow-x:auto;border:1px solid var(--line);border-radius:var(--radius);background:var(--card)}
.tape-in{display:inline-block;min-width:100%}
.t-row{display:flex;border-bottom:1px solid #eee9dd;height:36px}
.t-row.hd{height:46px;position:sticky;top:0;background:#faf7f0;z-index:3;border-bottom:1px solid var(--line)}
.t-row.type{height:30px;background:#f1ece0;font-weight:600;font-size:13px}
.t-lab{flex:none;width:118px;padding:0 12px;display:flex;align-items:center;gap:6px;position:sticky;left:0;background:inherit;z-index:2;border-right:1px solid var(--line);font-size:14px;font-weight:600}
.t-row:not(.hd):not(.type) .t-lab{background:var(--card)}
.t-lab .dot{width:8px;height:8px;border-radius:50%;background:var(--ok);flex:none}
.t-lab .dot.dirty{background:var(--bad)}.t-lab .dot.inspected{background:#2a8f9d}
.t-cells{position:relative;display:flex;flex:none}
.t-c{flex:none;height:100%;border-right:1px solid #f0ebdf;display:flex;flex-direction:column;align-items:center;justify-content:center;font-size:11px;color:var(--muted);line-height:1.2}
a.t-c:hover{background:var(--brass-soft);text-decoration:none}
.t-c.we{background:#faf5ea}.t-c.today{background:#eef4f2;box-shadow:inset 0 -2px 0 var(--ink3)}
.t-c b{font-size:14px;color:var(--ink)}
.t-c.low{color:var(--bad);font-weight:700}
.t-bar{position:absolute;top:5px;height:25px;border-radius:5px;background:var(--info);color:#fff;font-size:12px;padding:0 7px;line-height:25px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;z-index:1}
.t-bar:hover{filter:brightness(1.12);text-decoration:none}
.t-bar.checked_in{background:var(--ok)}.t-bar.checked_out{background:#b4b9b3}
.t-bar.blk{background:repeating-linear-gradient(45deg,#c96a63,#c96a63 6px,#b85750 6px,#b85750 12px);top:3px;height:29px;border-radius:0}

/* ---------- housekeeping board */
.rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:10px}
.rm{border:1px solid var(--line);border-left:5px solid var(--ok);border-radius:8px;background:#fff;padding:10px 12px}
.rm.dirty{border-left-color:var(--bad)}.rm.inspected{border-left-color:#2a8f9d}
.rm .no{font:600 20px var(--serif);color:var(--ink)}
.rm .who{font-size:12.5px;color:var(--muted);min-height:19px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.rm .row{margin-top:8px;gap:4px}
.rm .btn.sm{padding:2px 8px;font-size:12px}

/* ---------- public pages */
.pub{background:var(--paper);min-height:100vh;display:flex;flex-direction:column}
.pubnav{display:flex;align-items:center;gap:18px;padding:16px 5vw}
.pubnav .brand{color:var(--ink);padding:0}
.pubnav .sp{flex:1}
.hero{padding:56px 5vw 64px;background:var(--ink);color:#d5e2df;position:relative;overflow:hidden}
.hero h1{color:#fff;font-size:clamp(34px,5vw,56px);line-height:1.08;max-width:15ch}
.hero p{font-size:18px;max-width:54ch;margin:18px 0 26px}
.hero .ey{color:var(--brass2);letter-spacing:.14em;text-transform:uppercase;font-size:12.5px;font-weight:600;margin-bottom:14px}
.hero .btn.ghost{color:#fff;border-color:#ffffff55}.hero .btn.ghost:hover{background:#ffffff14}
.hero-grid{display:grid;grid-template-columns:minmax(0,1.05fr) minmax(0,1fr);gap:48px;align-items:center;max-width:1240px;margin:0 auto}
.keyrack{display:grid;grid-template-columns:repeat(6,1fr);gap:8px;transform:rotate(-3deg)}
.keyrack div{aspect-ratio:1/1.25;border-radius:6px;background:var(--ink2);border:1px solid #ffffff14;display:flex;align-items:flex-end;justify-content:center;padding-bottom:6px;font:600 12px var(--serif);color:#7f9a96}
.keyrack div.o{background:var(--brass2);color:var(--ink);border-color:var(--brass2)}
.keyrack div.a{background:var(--ink3);color:#e3eeec}
.section{padding:56px 5vw;max-width:1240px;margin:0 auto;width:100%}
.section>h2{font-size:30px;margin-bottom:6px}
.section>p.lead{color:var(--muted);max-width:60ch;margin:0 0 28px;font-size:16.5px}
.feat{display:grid;grid-template-columns:repeat(3,1fr);gap:0;border-top:1px solid var(--line);border-left:1px solid var(--line)}
.feat div{padding:22px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:var(--card)}
.feat h3{margin-bottom:6px}.feat p{margin:0;color:var(--muted);font-size:14.5px}
.plans{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:18px}
.plan{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:24px}
.plan.hot{border-color:var(--brass);box-shadow:0 0 0 3px var(--brass-soft)}
.plan .p{font:600 38px var(--serif);color:var(--ink)}.plan .p small{font:400 14px var(--sans)}
.plan ul{padding:0;margin:14px 0 20px;list-style:none}
.plan li{padding:5px 0 5px 22px;position:relative;font-size:14.5px}
.plan li:before{content:"";position:absolute;left:2px;top:12px;width:10px;height:5px;border-left:2px solid var(--ok);border-bottom:2px solid var(--ok);transform:rotate(-45deg)}
.pubfoot{margin-top:auto;padding:22px 5vw;border-top:1px solid var(--line);color:var(--muted);font-size:13.5px;display:flex;gap:16px;flex-wrap:wrap}
.authbox{max-width:460px;margin:5vh auto;padding:0 18px;width:100%}
.authbox.wide{max-width:640px}
.authbox h1{margin-bottom:6px}
.offer{display:grid;grid-template-columns:minmax(0,1fr) minmax(260px,340px);gap:20px;align-items:start}
.offer.search{grid-template-columns:minmax(0,1fr) minmax(0,1.5fr)}
.rate{display:flex;align-items:center;gap:12px;padding:12px 0;border-top:1px solid var(--line)}
.rate:first-child{border-top:0;padding-top:0}
.rate .sp{flex:1}
.rate .tot{font:600 20px var(--serif);color:var(--ink);text-align:right}

@media (max-width:900px){
  .shell{grid-template-columns:1fr}
  .side{position:static;height:auto;flex-direction:row;overflow-x:auto;padding:8px 10px;align-items:center;gap:2px}
  .side .brand{padding:0 10px 0 4px;font-size:18px}.side .sep,.side .foot{display:none}
  .side a.nav{white-space:nowrap;padding:6px 10px}.side a.nav.on{box-shadow:inset 0 -3px 0 var(--brass2)}
  .content{padding:18px 14px 50px}.top{padding:10px 14px}
  .g2,.g3,.g-main,.hero-grid,.offer,.offer.search{grid-template-columns:1fr}
  .keyrack{display:none}.feat{grid-template-columns:1fr}
  .fields .w2{grid-column:auto}
}
@media print{
  .side,.top,.noprint,.flash{display:none!important}
  .shell{display:block}.content{padding:0;max-width:none}
  body{background:#fff;font-size:12.5px}.card{border:0;padding:0}
}
@media (prefers-reduced-motion:no-preference){.btn,.side a.nav,a.t-c{transition:background .12s}}
