/* Night Desk typefaces, self-hosted as data URIs.
   The CSP is `font-src 'self' data:` -- a file would need a route to serve
   it, which is a change to how every request is handled; this is a change
   to a stylesheet. Latin subsets only. Both SIL Open Font Licence. */
@font-face{font-family:'Public Sans';font-style:normal;font-weight:400 800;font-display:swap;
  src:url(data:font/woff2;base64,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) format('woff2');
  unicode-range:U+0000-00FF,U+0131,U+0152-0153,U+02BB-02BC,U+02C6,U+02DA,U+02DC,U+0304,U+0308,U+0329,U+2000-206F,U+2074,U+20AC,U+2122,U+2191,U+2193,U+2212,U+2215,U+FEFF,U+FFFD}
/* ASP Works enterprise product system — one authoritative production cascade */
:root{
  color-scheme:light;
  --asp-navy-950:#070b12;
  --asp-navy-900:#0d1420;
  --asp-navy-800:#1e2b3f;
  --asp-teal-700:#0b7a82;
  --asp-teal-600:#0e9ba4;
  --asp-teal-100:#e4f5f5;
  --asp-teal-glow:#3fd9d1;
  --asp-bronze-600:#a97c33;
  --asp-bronze-500:#c29348;
  --asp-bronze-100:#f8f0e2;
  --asp-ink:#111a26;
  --asp-muted:#5b6a7e;
  --asp-line:#e3e8ef;
  --asp-line-strong:#ccd3e0;
  --asp-canvas:#f4f6f9;
  --asp-surface:#ffffff;
  --asp-surface-soft:#f8f9fd;
  --asp-good:#0f9c7e;
  --asp-good-soft:#e7f8f3;
  --asp-warn:#a86d15;
  --asp-warn-soft:#fff5dc;
  --asp-bad:#b32d22;
  --asp-bad-soft:#fff0ef;
  --asp-shadow-xs:0 1px 2px rgba(24,32,51,.05);
  --asp-shadow-sm:0 10px 30px rgba(7,11,18,.08);
  --asp-shadow-md:0 26px 64px rgba(7,11,18,.13);
  --asp-shadow-lg:0 28px 75px rgba(7,21,38,.22);
  --asp-radius-xs:6px;
  --asp-radius-sm:10px;
  --asp-radius-md:14px;
  --asp-radius-lg:20px;
  --asp-radius-full:999px;
  --asp-space-1:4px;
  --asp-space-2:8px;
  --asp-space-3:12px;
  --asp-space-4:16px;
  --asp-space-5:20px;
  --asp-space-6:24px;
  --asp-space-8:32px;
  --asp-space-10:40px;
  --asp-space-12:48px;
  --asp-space-16:64px;
  --asp-content:1240px;
  --asp-control:46px;
  /* §5 documents a nine-step type scale (--asp-text-2xs through
     --asp-text-display) that was never actually defined here -- the same
     gap §6 found and fixed for --asp-shadow-lg. Closed in full: every step
     the doc names, at the exact values §5 lists. */
  --asp-text-2xs:11px;
  --asp-text-xs:12px;
  --asp-text-sm:13px;
  --asp-text-base:14px;
  --asp-text-md:15px;
  --asp-text-lg:18px;
  --asp-text-xl:21px;
  --asp-text-2xl:28px;
  --asp-text-display:clamp(30px, 4vw, 46px);
  /* Chart series colours 0-5, matching night_audit_dashboard.py's own
     SERIES_COLOURS tuple exactly. Index 0 gets its own token (rather than
     reusing --asp-teal-700, which is a close-but-not-identical shade used
     broadly for branding/links/buttons throughout this file) so the chart
     matches its Python source of truth without recolouring the rest of
     the app. */
  --asp-series-0:#0e7c86;
  --asp-series-1:#5b5ce9;
  --asp-series-2:#a66332;
  --asp-series-3:#16a985;
  --asp-series-4:#8a5e12;
  --asp-series-5:#a8231c;
  /* Consolidated 2026-09-29: raw hex literals repeated 2+ times across the
     stylesheet for a real, consistent purpose but with no matching existing
     token (checked via Lab ΔE, not raw RGB proximity -- see
     docs/ASP_WORKS_DESIGN_SYSTEM.md §4). These are new NAMES for colours
     that were already in the file, not new colours: every value below is
     copied byte-for-byte from the literal it replaces, so nothing repaints. */
  --asp-navy-700:#243352;
  --asp-navy-600:#3d4a5c;
  --asp-navy-deep:#082c43;
  --asp-navy-text-soft:#cedae1;
  --asp-teal-eyebrow:#79d0cf;
  --asp-teal-border-soft:#cfe0e4;
  --asp-bronze-800:#7a4b12;
  --asp-bronze-900:#765026;
  --asp-bronze-border:#ead7bd;
  --asp-bronze-border-soft:#eedcbb;
  --asp-good-border:#b8decf;
  --asp-guest-muted:#6b7684;
  --asp-caption-muted:#9aa5b1;
  --asp-disabled-text:#6f7f89;
}

*,*::before,*::after{box-sizing:border-box}
html{background:var(--asp-canvas);scroll-behavior:smooth;-webkit-text-size-adjust:100%}
.asp-route-progress{position:fixed;inset:0 auto auto 0;z-index:100;width:0;height:3px;background:linear-gradient(90deg,var(--asp-teal-600),#65b8b4);box-shadow:0 1px 8px rgba(14,124,134,.28);opacity:0;transition:width .18s ease,opacity .12s ease}
.asp-route-pending .asp-route-progress{width:72vw;opacity:1}
/* Owner Control real-tenant impersonation (2026-09-29): unmistakable on
   every page rendered under an impersonated session -- see production_page
   in rc430_production.py. Deliberately not position:fixed/sticky: plain
   top-of-body flow can never be covered by another sticky element and
   needs no z-index tuning against .topbar/.asp-route-progress/.asp-chat-*. */
.asp-impersonation-banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:center;gap:var(--asp-space-3);padding:var(--asp-space-3) var(--asp-space-4);background:var(--asp-bad);color:#fff;font-weight:800;font-size:13.5px;line-height:1.4;text-align:center}
.asp-impersonation-banner form{margin:0}
.asp-impersonation-banner button{background:#fff;color:var(--asp-bad);border:1px solid #fff;border-radius:var(--asp-radius-sm);padding:var(--asp-space-1) var(--asp-space-3);font-weight:800;cursor:pointer;white-space:nowrap}
.asp-impersonation-banner button:hover{background:var(--asp-bad-soft)}
.asp-route-pending main{opacity:.82;transition:opacity .12s ease}
body{
  margin:0;
  min-width:320px;
  background:
    radial-gradient(circle at 100% 0,rgba(14,124,134,.055),transparent 30rem),
    linear-gradient(180deg,var(--asp-surface) 0,var(--asp-canvas) 25rem);
  color:var(--asp-ink);
  font-family:"Segoe UI Variable","Aptos","Segoe UI",ui-sans-serif,system-ui,-apple-system,sans-serif;
  font-size:15px;
  line-height:1.55;
  text-rendering:optimizeLegibility;
}
img,svg{max-width:100%}
button,input,select,textarea{font:inherit}
button,a,input,select,textarea{-webkit-tap-highlight-color:transparent}
a{color:var(--asp-teal-700);text-underline-offset:3px}
a:hover{color:var(--asp-navy-900)}
[hidden]{display:none!important}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:calc(var(--asp-space-1) * -1)!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}

.shell{min-height:100vh;display:flex;flex-direction:column}
.topbar{
  position:sticky;top:0;z-index:60;
  min-height:78px;
  display:flex;align-items:center;gap:var(--asp-space-4);
  padding:var(--asp-space-2) max(20px,calc((100vw - var(--asp-content))/2));
  /* apple-mobile-web-app-status-bar-style is black-translucent (see
     rc430_production.py's production_page head_assets), which makes iOS
     overlay the status bar on top of page content in standalone/PWA mode
     instead of pushing it down. This sticky top:0 header would otherwise
     render its brand/nav under the status bar's clock and icons. Falls
     back to 0 on a browser tab (or Android), where there is no overlay
     and env() resolves to nothing extra. */
  padding-top:calc(var(--asp-space-2) + env(safe-area-inset-top,0px));
  background:linear-gradient(120deg,var(--asp-navy-950),var(--asp-navy-900));
  color:var(--asp-surface);
  border-bottom:1px solid rgba(255,255,255,.08);
  box-shadow:0 7px 24px rgba(7,21,38,.22);
}
.brand{display:flex;align-items:center;gap:var(--asp-space-2);min-width:0;flex:0 0 auto}
.brand-mark{display:block;width:46px;height:46px;overflow:visible;flex:0 0 46px}
.brand-mark img{display:block;width:46px;height:46px;object-fit:contain;transform:none;mix-blend-mode:normal}
.brand-wordmark{color:var(--asp-surface);font-size:21px;font-weight:800;letter-spacing:-.035em;line-height:1;white-space:nowrap}
.brand-context{padding-left:var(--asp-space-3);border-left:1px solid rgba(255,255,255,.18);color:rgba(255,255,255,.65);font-size:12px;font-weight:750;letter-spacing:.04em;white-space:nowrap}
.role-customer .brand-context,.role-owner .brand-context{display:none}
.brand-copy{display:none}
.topbar nav{display:flex;align-items:center;justify-content:flex-end;gap:var(--asp-space-1);min-width:0;flex:1}
.topbar nav a{
  min-height:42px;display:inline-flex;align-items:center;
  padding:var(--asp-space-2) var(--asp-space-2);border-radius:var(--asp-radius-sm);
  color:rgba(255,255,255,.78);text-decoration:none;font-size:13px;font-weight:650;white-space:nowrap;
}
.topbar nav a:hover,.topbar nav a:focus-visible,.topbar nav a[aria-current="page"]{background:rgba(255,255,255,.1);color:var(--asp-surface)}
.nav-back{min-height:42px;padding:var(--asp-space-2) var(--asp-space-2)!important;border:1px solid var(--asp-nav-back-edge,rgba(255,255,255,.22))!important;background:var(--asp-nav-back-bg,rgba(255,255,255,.08))!important;color:var(--asp-nav-back-ink,var(--asp-surface))!important;box-shadow:none!important}
.nav-back:hover{border-color:var(--asp-nav-back-edge-hover,rgba(255,255,255,.4))!important;background:var(--asp-nav-back-bg-hover,rgba(255,255,255,.14))!important}
.page-sign-in .nav-back,.page-owner-sign-in .nav-back,.page-solution-studio .nav-back,.page-asp-works-owner-control .nav-back{display:none}
.lab{
  display:inline-flex;align-items:center;min-height:30px;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-full);
  background:var(--asp-bronze-100);border:1px solid var(--asp-bronze-border);color:var(--asp-bronze-900);
  font-size:10px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap;
}
.asp-nav-toggle{display:none;min-width:44px;min-height:44px;padding:var(--asp-space-2)!important;background:rgba(255,255,255,.08)!important;color:var(--asp-surface)!important;border:1px solid rgba(255,255,255,.22)!important;box-shadow:none!important}
.main{width:min(100%,var(--asp-content));margin:0 auto;padding:var(--asp-space-10) var(--asp-space-6) 80px;flex:1}

.banner{display:flex;align-items:flex-start;gap:var(--asp-space-2);margin:0 0 var(--asp-space-6);padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-bronze-border);border-radius:var(--asp-radius-md);background:#fff9ed;color:#6f522b;font-size:12px}
.banner b{color:#5f421d;white-space:nowrap}
.hero{padding:var(--asp-space-6) 0 var(--asp-space-6)}
/* The card variant needs its own horizontal padding: .hero above is
   written for a hero with no background sitting flush in .main's own
   padding, and once this variant gained a background and rounded
   corners it became a bounded card whose text had nothing keeping it
   off the card's own edge. */
.hero:not(.compact){padding:var(--asp-space-8) var(--asp-space-6) var(--asp-space-6)}
.hero.compact{padding-bottom:var(--asp-space-4)}
.eyebrow{margin-bottom:8px;color:var(--asp-teal-700);font-size:11px;font-weight:800;letter-spacing:.13em;text-transform:uppercase}
h1,h2,h3{color:var(--asp-navy-900);font-weight:720;text-wrap:balance}
h1{max-width:950px;margin:0 0 var(--asp-space-3);font-size:clamp(34px,4.6vw,58px);line-height:1.04;letter-spacing:-.045em}
h2{margin:0 0 var(--asp-space-2);font-size:clamp(23px,2.4vw,31px);line-height:1.16;letter-spacing:-.028em}
h3{margin:0 0 var(--asp-space-2);font-size:17px;line-height:1.3;letter-spacing:-.012em}
p{margin:0 0 var(--asp-space-3)}
.lead{max-width:790px;margin:0;color:var(--asp-muted);font-size:18px;line-height:1.65}
.muted{color:var(--asp-muted)}
.mini{color:var(--asp-muted);font-size:12px;line-height:1.55}
.good{color:var(--asp-good)}.warn{color:var(--asp-warn)}.bad{color:var(--asp-bad)}

.section{margin-top:var(--asp-space-8)}
.section-head{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--asp-space-4);margin-bottom:12px}
.grid,.system-grid,.choice-grid,.asp-capability-grid,.owner-invite-grid,.asp-owner-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--asp-space-4)}
.grid.two,.rail-grid,.settings-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.card,.system-card,.choice-option,.intel-card,.asp-capability-card,.asp-owner-metric{
  background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  box-shadow:var(--asp-shadow-xs);
}
.card{margin:var(--asp-space-3) 0;padding:var(--asp-space-5)}
.card:hover,.system-card:hover,.choice-option:hover{border-color:var(--asp-line-strong)}
.choice-stack{display:grid;gap:var(--asp-space-3);margin:var(--asp-space-4) 0 var(--asp-space-5)}
.choice-stack form{min-width:0;margin:0}
button.choice-option{
  width:100%;min-height:104px;padding:var(--asp-space-4) var(--asp-space-4);align-items:flex-start;justify-content:center;flex-direction:column;
  overflow-wrap:anywhere;white-space:normal;text-align:left;background:var(--asp-surface);color:var(--asp-navy-900);
  border-color:var(--asp-line-strong);box-shadow:var(--asp-shadow-xs);transform:none;
}
button.choice-option:hover{background:var(--asp-canvas);color:var(--asp-navy-900);border-color:var(--asp-teal-600);box-shadow:var(--asp-shadow-sm);transform:translateY(-1px)}
button.choice-option:focus-visible{outline:3px solid rgba(14,124,134,.34);outline-offset:3px;border-color:var(--asp-teal-700)}
button.choice-option.is-recommended{border-color:var(--asp-teal-600);background:linear-gradient(135deg,#f4fcfb 0%,var(--asp-surface) 72%)}
.choice-option-badge{display:inline-flex;align-items:center;min-height:22px;margin-bottom:var(--asp-space-2);padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-full);background:var(--asp-teal-100);color:var(--asp-teal-800);font-size:11px;font-weight:850;letter-spacing:.025em;text-transform:uppercase}
.choice-option-title{display:block;color:inherit;font-size:16px;font-weight:800;line-height:1.35}
.choice-option-helper{display:block;margin-top:var(--asp-space-1);color:var(--asp-muted);font-size:12px;font-weight:650;line-height:1.45}
button.choice-option[disabled]{background:var(--asp-canvas);color:var(--asp-disabled-text);border-color:#d4dcdf;opacity:1;cursor:not-allowed}
button.choice-option[disabled] .choice-option-helper{color:var(--asp-disabled-text)}
.asp-tester-guide{margin:0 0 var(--asp-space-5);padding:var(--asp-space-4) var(--asp-space-4);border:1px solid #bde2df;border-radius:var(--asp-radius-md);background:linear-gradient(135deg,var(--asp-teal-100),var(--asp-surface))}
.asp-tester-guide h2{margin-bottom:var(--asp-space-2);font-size:20px}.asp-tester-guide p{margin:0}
.asp-system-connections{margin-top:var(--asp-space-5)}.asp-system-connection-card{height:100%;margin:0;padding:var(--asp-space-4)}.asp-system-connection-card h3{margin:var(--asp-space-2) 0}.asp-system-connection-card p{margin:var(--asp-space-2) 0}.asp-system-connection-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:var(--asp-space-4)}.asp-system-connection-actions .btn{width:auto}.asp-system-connection-actions .btn.ghost{min-height:42px;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);background:white;color:var(--asp-teal-800)}
.choice-card{position:relative;min-height:205px;display:flex;flex-direction:column;justify-content:space-between}
.icon,.asp-cap-icon{
  width:42px;height:42px;display:grid;place-items:center;margin-bottom:var(--asp-space-5);border-radius:var(--asp-radius-md);
  background:var(--asp-teal-100);color:var(--asp-teal-700);font-size:18px;font-weight:850;
}
/* 2026-09-15 (UI/UX overhaul, phase 3): the setup checklist card's own
   icon is a warning triangle ("1 thing still needs attention"), but
   .icon's default treatment is the same neutral brand teal every purely
   decorative icon on the page uses (the "Add another hotel program"
   sparkle, capability icons, etc.) -- so the one icon actually meant to
   signal attention-needed read as just another neutral accent instead
   of standing apart. --asp-warn/--asp-warn-soft already exist and are
   used this same way for .pill.warn; this is the one icon instance that
   never picked it up. */
.asp-setup-checklist-card .icon{background:var(--asp-warn-soft);color:var(--asp-warn)}
.pill{
  display:inline-flex;align-items:center;gap:var(--asp-space-1);min-height:28px;padding:var(--asp-space-1) var(--asp-space-2);margin:var(--asp-space-1);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-full);background:var(--asp-surface-soft);
  color:#4b5c6c;font-size:11px;font-weight:650;line-height:1.2;
}
.pill.good{background:var(--asp-good-soft);border-color:var(--asp-good-border);color:var(--asp-good)}
.pill.warn{background:var(--asp-warn-soft);border-color:#ecd298;color:var(--asp-warn)}
.status-row{display:flex;align-items:center;flex-wrap:wrap;gap:var(--asp-space-2)}

.btn,button{
  appearance:none;min-height:var(--asp-control);display:inline-flex;align-items:center;justify-content:center;gap:var(--asp-space-2);
  padding:var(--asp-space-3) var(--asp-space-4);border:1px solid transparent;border-radius:var(--asp-radius-sm);
  background:var(--asp-teal-600);color:white;text-decoration:none;
  font-weight:720;font-size:14px;line-height:1.2;cursor:pointer;
  box-shadow:0 8px 18px rgba(14,124,134,.14);
  transition:background-color var(--asp-motion-fast) ease,border-color var(--asp-motion-fast) ease,color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,transform var(--asp-motion-fast) ease;
}
.btn:hover,button:hover{background:var(--asp-teal-700);color:white;box-shadow:0 10px 22px rgba(14,124,134,.18);transform:translateY(-1px)}
.btn:active,button:active{transform:translateY(0)}
.btn.secondary,button.secondary{
  background:white;color:var(--asp-navy-900);border-color:var(--asp-line-strong);box-shadow:none;
}
.btn.secondary:hover,button.secondary:hover{background:var(--asp-canvas);border-color:var(--asp-teal-600);color:var(--asp-teal-700)}
.btn.ghost{padding-left:var(--asp-space-1);padding-right:var(--asp-space-1);background:transparent;color:var(--asp-teal-700);box-shadow:none}
.btn.block,button.block{width:100%}
button[disabled],.btn[aria-disabled="true"]{opacity:.62;cursor:wait;transform:none;box-shadow:none}
:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:3px solid rgba(14,124,134,.28);outline-offset:2px}

label{display:block;color:#26394b;font-size:13px;font-weight:700}
/* A required field says so where it is read -- before typing, not
   after being refused. aria-hidden because the control already
   carries `required`, and a screen reader saying "star" after every
   label is noise on top of an announcement it already made. */
label .req{margin-left:4px;color:var(--asp-bad);font-weight:700}
input,select,textarea,.field{
  width:100%;min-height:var(--asp-control);margin:var(--asp-space-1) 0 var(--asp-space-3);padding:var(--asp-space-3) var(--asp-space-3);
  border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);background:white;color:var(--asp-ink);
  outline:none;box-shadow:inset 0 1px 1px rgba(7,21,38,.025);
}
textarea{min-height:116px;resize:vertical}
input:hover,select:hover,textarea:hover{border-color:#aebcc3}
input:focus,select:focus,textarea:focus{border-color:var(--asp-teal-600);box-shadow:0 0 0 3px rgba(14,124,134,.11)}
input[aria-invalid="true"],textarea[aria-invalid="true"],select[aria-invalid="true"]{border-color:var(--asp-bad);background:var(--asp-bad-soft)}
fieldset{min-width:0;margin:0;padding:0;border:0}
.checkbox-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-2);margin:var(--asp-space-3) 0 var(--asp-space-4)}
.check,.setting-switch{display:flex;gap:var(--asp-space-2);align-items:flex-start;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:white}
.check input,.setting-switch input{width:18px;min-height:18px;margin:var(--asp-space-1) 0;box-shadow:none}
.setting-switch{align-items:center;padding:var(--asp-space-3) var(--asp-space-3);background:var(--asp-surface)}
.setting-switch input[type='checkbox']{position:relative;appearance:none;width:42px;min-width:42px;height:24px;min-height:24px;margin:0;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-full);background:#dfe8e8;box-shadow:none;cursor:pointer;transition:background .18s ease,border-color .18s ease}
.setting-switch input[type='checkbox']::after{content:"";position:absolute;top:2px;left:2px;width:18px;height:18px;border-radius:50%;background:white;box-shadow:0 1px 3px rgba(7,21,38,.22);transition:transform .18s ease}
.setting-switch input[type='checkbox']:checked{border-color:var(--asp-teal-700);background:var(--asp-teal-700)}
.setting-switch input[type='checkbox']:checked::after{transform:translateX(18px)}
.setting-switch input[type='checkbox']:focus-visible{outline:3px solid rgba(12,148,145,.28);outline-offset:2px}
/* A real checkbox, not the bare browser square (2026-09-01): every
   multi-select list in the app -- the catalogue picker, explore's old
   grid, settings option lists -- used the native default, unstyled and
   inconsistent across browsers. One shared appearance for all of them.
   Unscoped to input[type='checkbox'] itself (2026-09-01) rather than a
   list of wrapper classes -- the list kept missing real checkboxes that
   used none of the four named wrappers (owner budget flags, a staff
   delegation toggle, a per-system automation toggle), each still the
   plain browser square this rule exists to remove everywhere. A toggle
   with its own distinct switch treatment (.setting-switch) and the
   hidden checkbox behind a custom permission card (.asp-permission-card)
   both already style their own input more specifically than this, so
   this general rule never overrides either. */
input[type='checkbox']{appearance:none;-webkit-appearance:none;width:20px;height:20px;min-width:20px;min-height:20px;border:1.5px solid var(--asp-line-strong);border-radius:var(--asp-radius-xs);background:var(--asp-surface);cursor:pointer;position:relative;margin:var(--asp-space-1) 0;flex:none;vertical-align:middle;transition:background var(--asp-motion-fast) ease,border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease}
input[type='checkbox']:hover{border-color:var(--asp-teal-600)}
input[type='checkbox']:checked{background:var(--asp-teal-700);border-color:var(--asp-teal-700)}
input[type='checkbox']:checked::after{content:'';position:absolute;left:6px;top:2px;width:5px;height:10px;border:solid white;border-width:0 2px 2px 0;transform:rotate(45deg)}
input[type='checkbox']:focus-visible{outline:3px solid rgba(12,148,145,.28);outline-offset:2px}
.choice:has(input[type='checkbox']:checked),.check:has(input[type='checkbox']:checked){border-color:var(--asp-teal-600);background:var(--asp-teal-100)}

select{cursor:pointer;background-color:var(--asp-surface)}
.composer{overflow:hidden;padding:var(--asp-space-2) var(--asp-space-2) var(--asp-space-2);border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-lg);background:white;box-shadow:var(--asp-shadow-sm)}
.composer textarea{min-height:112px;margin:0;padding:var(--asp-space-4);border:0;box-shadow:none;font-size:16px}
.composer-actions{display:flex;justify-content:flex-end;padding-top:var(--asp-space-2);border-top:1px solid var(--asp-canvas)}
.form-card{max-width:760px}
.loading-note{display:none;margin-top:8px;color:var(--asp-muted);font-size:12px}
.is-submitting .loading-note{display:block}
.is-submitting{cursor:progress}
.asp-inline-alert,.error-card,.success-card{margin:0 0 var(--asp-space-4);padding:var(--asp-space-3) var(--asp-space-3);border-radius:var(--asp-radius-sm);border:1px solid}
.asp-inline-alert-error,.error-card{border-color:#efc2bf;background:var(--asp-bad-soft);color:#81312e}
.success-card{border-color:var(--asp-good-border);background:var(--asp-good-soft);color:#135f46}

.asp-auth-layout{min-height:calc(100vh - 250px);display:grid;grid-template-columns:minmax(0,1.05fr) minmax(340px,520px);align-items:center;gap:clamp(var(--asp-space-10),7vw,100px);padding:var(--asp-space-12) 0 66px}
.asp-auth-intro{position:relative;padding:var(--asp-space-10);overflow:hidden;border-radius:var(--asp-radius-lg);background:linear-gradient(145deg,var(--asp-navy-950),var(--asp-navy-800));color:white;box-shadow:var(--asp-shadow-md)}
.asp-auth-intro::after{content:"";position:absolute;width:220px;height:220px;right:-90px;bottom:-120px;border:1px solid rgba(181,135,75,.55);border-radius:50%}
.asp-auth-intro h1{color:white;font-size:clamp(38px,5vw,62px)}
.asp-auth-intro .lead{color:#cfdae2}
.asp-auth-intro .eyebrow{color:var(--asp-teal-eyebrow)}
.asp-auth-card{margin:0;padding:var(--asp-space-6);border-top:3px solid var(--asp-bronze-500);box-shadow:var(--asp-shadow-md)}
.asp-trust-list{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:var(--asp-space-6)}
.asp-trust-list span{padding:var(--asp-space-1) var(--asp-space-2);border:1px solid rgba(255,255,255,.18);border-radius:var(--asp-radius-full);color:var(--asp-line);font-size:11px}
.asp-workspace-list{display:grid;gap:var(--asp-space-2);margin:var(--asp-space-1) 0 var(--asp-space-4)}
.asp-workspace-choice{position:relative;display:flex;gap:var(--asp-space-3);align-items:flex-start;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);cursor:pointer}
.asp-workspace-choice:hover{border-color:var(--asp-teal-600);background:var(--asp-canvas)}
.asp-workspace-choice:has(input:checked){border-color:var(--asp-teal-600);box-shadow:0 0 0 3px rgba(14,124,134,.1);background:var(--asp-teal-100)}
.asp-workspace-choice input{width:18px;min-height:18px;margin:var(--asp-space-1) 0 0;flex:0 0 auto}
.asp-workspace-choice b,.asp-workspace-choice small{display:block}
.asp-workspace-choice small{margin-top:var(--asp-space-1);color:var(--asp-muted);font-weight:500}

/* Customer connection choices use full, calm selection cards instead of raw controls. */
.asp-permission-panel{max-width:900px}.asp-permission-stack{display:grid;gap:var(--asp-space-2);margin:var(--asp-space-4) 0}.asp-permission-card{position:relative;display:grid;grid-template-columns:26px minmax(0,1fr);gap:var(--asp-space-3);align-items:start;padding:var(--asp-space-4);border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-md);background:var(--asp-surface);cursor:pointer;transition:border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,background var(--asp-motion-fast) ease}.asp-permission-card:hover{border-color:var(--asp-teal-600);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}.asp-permission-card:has(input:checked){border-color:var(--asp-teal-600);background:linear-gradient(135deg,var(--asp-teal-100),var(--asp-surface));box-shadow:0 0 0 3px rgba(14,124,134,.10)}.asp-permission-card input{position:absolute;inline-size:1px;block-size:1px;opacity:0}.asp-permission-check{display:grid;width:24px;height:24px;place-items:center;margin-top:var(--asp-space-1);border:2px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);background:var(--asp-surface)}.asp-permission-card:has(input:checked) .asp-permission-check{border-color:var(--asp-teal-700);background:var(--asp-teal-700)}.asp-permission-card:has(input:checked) .asp-permission-check::after{content:'✓';color:var(--asp-surface);font-size:15px;font-weight:900}.asp-permission-card:has(input:focus-visible){outline:3px solid rgba(12,148,145,.28);outline-offset:3px}.asp-permission-copy{min-width:0}.asp-permission-copy>b,.asp-permission-copy>small{display:block}.asp-permission-copy>b{color:var(--asp-navy-900);font-size:15px;line-height:1.35}.asp-permission-copy>small{margin-top:4px;color:var(--asp-muted);font-size:12px;line-height:1.5}.asp-permission-meta{display:inline-flex;width:max-content;max-width:100%;margin-top:var(--asp-space-2);padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-full);background:var(--asp-teal-100);color:var(--asp-teal-800);font-size:11px;font-weight:800}.asp-permission-details{margin-top:var(--asp-space-3);color:var(--asp-muted);font-size:11px}.asp-permission-details summary{cursor:pointer;color:var(--asp-teal-800);font-weight:750}.asp-permission-details p{margin:var(--asp-space-1) 0 0;overflow-wrap:anywhere}

.metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--asp-space-3)}
.metric{min-width:0;padding:var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:white}
.metric b{display:block;color:var(--asp-navy-900);font-size:28px;line-height:1.1}
.metric span{display:block;margin-top:var(--asp-space-1);color:var(--asp-muted);font-size:12px}
.list-row,.delivery-row{padding:var(--asp-space-4) var(--asp-space-1);border-bottom:1px solid var(--asp-line)}
.list-row:last-child,.delivery-row:last-child{border-bottom:0}
.system-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
.system-card{min-height:180px;display:flex;flex-direction:column;justify-content:space-between;padding:var(--asp-space-5);color:var(--asp-ink);text-decoration:none}
.system-card-top,.system-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--asp-space-4)}
.system-row{padding:var(--asp-space-4) var(--asp-space-1);border-bottom:1px solid var(--asp-line);color:var(--asp-ink);text-decoration:none}
.system-row-main{min-width:0;flex:1}
.record-list-details{display:flex;flex-wrap:wrap;gap:var(--asp-space-1) var(--asp-space-3);margin-top:var(--asp-space-2);color:var(--asp-muted);font-size:12px}
.progressbar{height:7px;overflow:hidden;border-radius:var(--asp-radius-full);background:#e7edee}
.progressbar span{display:block;height:100%;border-radius:var(--asp-radius-full);background:linear-gradient(90deg,var(--asp-teal-600),var(--asp-bronze-500))}
.timeline{position:relative;margin:var(--asp-space-3) 0;padding-left:var(--asp-space-6)}
.timeline::before{content:"";position:absolute;left:7px;top:4px;bottom:4px;width:2px;background:var(--asp-line)}
.timeline-item{position:relative;padding:0 0 var(--asp-space-4)}
.timeline-item::before{content:"";position:absolute;left:-21px;top:6px;width:10px;height:10px;border:2px solid white;border-radius:50%;background:var(--asp-teal-600);box-shadow:0 0 0 2px var(--asp-teal-100)}
.filterbar{display:flex;align-items:center;flex-wrap:wrap;gap:var(--asp-space-2);margin-bottom:16px;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:white}
.filterbar input,.filterbar select{width:auto;min-width:170px;margin:0}
.table-wrap{max-width:100%;overflow:auto;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:white}
table{width:100%;border-collapse:collapse;background:white;font-size:13px}
th,td{padding:var(--asp-space-3) var(--asp-space-3);border-bottom:1px solid var(--asp-line);text-align:left;vertical-align:top}
th{background:var(--asp-canvas);color:var(--asp-navy-800);font-size:11px;letter-spacing:.04em;text-transform:uppercase}
tbody tr:last-child td{border-bottom:0}tbody tr:hover{background:var(--asp-surface)}
.asp-modal,dialog{width:min(600px,calc(100vw - 28px));max-height:min(760px,calc(100vh - 28px));padding:0;border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);background:white;box-shadow:var(--asp-shadow-lg)}
.asp-modal::backdrop,dialog::backdrop{background:rgba(5,20,36,.58);backdrop-filter:blur(3px)}
.asp-modal-body{padding:var(--asp-space-6)}.asp-modal-actions{display:flex;justify-content:flex-end;gap:var(--asp-space-2);padding:var(--asp-space-3) var(--asp-space-6);border-top:1px solid var(--asp-line);background:var(--asp-surface)}
.asp-drawer{position:fixed;inset:0 0 0 auto;z-index:90;width:min(440px,100vw);overflow:auto;padding:var(--asp-space-6);
  /* Same fixed-position, screen-edge-to-edge gap as .topbar/.asp-side/
     .asp-more-panel: this panel's own top and bottom both sit at the true
     viewport edge (inset:0 0 0 auto), so its first and last scrollable
     content can end up under the status bar or the home-indicator gesture
     strip in standalone/PWA mode. env() is 0 without viewport-fit=cover. */
  padding-top:calc(var(--asp-space-6) + env(safe-area-inset-top,0px));
  padding-bottom:calc(var(--asp-space-6) + env(safe-area-inset-bottom,0px));
  background:white;box-shadow:-24px 0 60px rgba(7,25,43,.22)}
.skeleton{overflow:hidden;position:relative;min-height:16px;border-radius:var(--asp-radius-xs);background:#e9eeef;color:transparent}
.skeleton::after{content:"";position:absolute;inset:0;transform:translateX(-100%);background:linear-gradient(90deg,transparent,rgba(255,255,255,.7),transparent);animation:asp-skeleton 1.35s ease-in-out infinite}
@keyframes asp-skeleton{to{transform:translateX(100%)}}
.photo-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--asp-space-3)}
.record-photo{overflow:hidden;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-canvas)}
.record-photo img{display:block;width:100%;height:180px;object-fit:cover}
.qr-box{display:inline-grid;place-items:center;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:white}
pre{max-width:100%;overflow:auto;padding:var(--asp-space-4);border-radius:var(--asp-radius-md);background:var(--asp-navy-950);color:var(--asp-line);white-space:pre-wrap;word-break:break-word;font:12px/1.6 ui-monospace,SFMono-Regular,Consolas,monospace}

.connection-card{min-height:100%;display:flex;flex-direction:column;overflow:hidden}
.connection-actions{margin-top:auto;padding-top:var(--asp-space-3)}
.asp-provider-note,.setup-summary{padding:var(--asp-space-3);border-left:3px solid var(--asp-bronze-500);border-radius:0 var(--asp-radius-sm) var(--asp-radius-sm) 0;background:#fbf6ef;color:#5f503c;font-size:12px}
.provider-ready{color:var(--asp-good)}.provider-off{color:var(--asp-muted)}
.settings-grid{display:grid;gap:var(--asp-space-5)}.settings-aside{align-self:start;position:sticky;top:98px}
.attention{border-left:4px solid var(--asp-bronze-500)}
.empty-state{padding:var(--asp-space-6);text-align:center;border:1px dashed var(--asp-line-strong);border-radius:var(--asp-radius-md);background:var(--asp-surface);color:var(--asp-muted)}

.asp-owner-grid{grid-template-columns:repeat(4,minmax(0,1fr));margin:var(--asp-space-4) 0}
.asp-owner-metric{padding:var(--asp-space-4);min-width:0}
.asp-owner-metric>b,.owner-kpi{display:block;color:var(--asp-navy-900);font-size:23px;line-height:1.15}
.role-owner .main{max-width:1380px}
.role-owner .hero{padding-bottom:var(--asp-space-4)}
.role-owner details{margin:var(--asp-space-2) 0;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:var(--asp-surface)}
.role-owner summary{cursor:pointer;color:var(--asp-navy-900);font-weight:700}
.asp-owner-nav{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3);margin:0 0 var(--asp-space-5);padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:var(--asp-shadow-sm)}
.asp-owner-nav-primary{display:flex;flex-wrap:wrap;gap:var(--asp-space-1)}.asp-owner-nav a{display:inline-flex;align-items:center;min-height:34px;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-sm);color:var(--asp-muted);font-size:12px;font-weight:700;text-decoration:none}.asp-owner-nav a:hover,.asp-owner-nav a[aria-current='page']{background:var(--asp-teal-100);color:var(--asp-teal-800)}
.asp-owner-nav-advanced{position:relative;margin:0!important;padding:0!important;border:0!important;background:transparent!important}.asp-owner-nav-advanced summary{padding:var(--asp-space-2) var(--asp-space-1);font-size:12px;white-space:nowrap}.asp-owner-nav-advanced[open]{min-width:174px}.asp-owner-nav-advanced[open]>a{display:block}.asp-owner-nav-advanced:not([open])>a{display:none}
.asp-owner-action-grid{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:var(--asp-space-4)}.asp-owner-list-row{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-4);padding:var(--asp-space-4) 0;border-bottom:1px solid var(--asp-line)}.asp-owner-list-row:last-child{border-bottom:0}.asp-owner-list-row b{color:var(--asp-navy-900)}.asp-owner-list-row p{margin:var(--asp-space-1) 0 0;color:var(--asp-muted);font-size:13px}.asp-inline-form{display:flex;align-items:center;gap:var(--asp-space-2);flex-wrap:wrap;margin:0}.asp-inline-form input{width:auto;min-width:180px}
.asp-onboarding-steps{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:var(--asp-space-2);margin:0 0 var(--asp-space-5);padding:0;list-style:none}.asp-onboarding-steps li{min-height:72px;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:var(--asp-surface)}.asp-onboarding-steps b,.asp-onboarding-steps span{display:block}.asp-onboarding-steps b{color:var(--asp-navy-900);font-size:12px}.asp-onboarding-steps span{margin-top:4px;color:var(--asp-muted);font-size:11px;line-height:1.35}
.asp-budget-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-4);margin-top:var(--asp-space-5)}.asp-budget-card{margin:0}.asp-budget-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-2);margin:var(--asp-space-4) 0}.asp-budget-metrics>div{padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:var(--asp-surface)}.asp-budget-metrics span,.asp-budget-metrics b{display:block}.asp-budget-metrics span{color:var(--asp-muted);font-size:11px}.asp-budget-metrics b{margin-top:var(--asp-space-1);color:var(--asp-navy-900);font-size:16px}.asp-budget-details,.asp-budget-advanced{margin:var(--asp-space-3) 0;padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:var(--asp-surface)}.asp-budget-details summary,.asp-budget-advanced summary{cursor:pointer;color:var(--asp-teal-800);font-size:12px;font-weight:750}.asp-budget-details p{margin:var(--asp-space-2) 0 0;color:var(--asp-muted);font-size:12px}.asp-budget-form{display:grid;gap:var(--asp-space-2);margin-top:16px}.asp-budget-form fieldset{margin:0;padding:0;border:0}.asp-budget-form legend{margin-bottom:var(--asp-space-2);color:var(--asp-navy-900);font-size:12px;font-weight:750}.asp-budget-presets{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--asp-space-2)}.asp-budget-presets label{position:relative;margin:0}.asp-budget-presets input{position:absolute;opacity:0;pointer-events:none}.asp-budget-presets span{display:grid;min-height:38px;place-items:center;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);background:var(--asp-surface);color:var(--asp-navy-800);font-size:12px;font-weight:750;cursor:pointer}.asp-budget-presets input:checked+span{border-color:var(--asp-teal-700);background:var(--asp-teal-100);color:var(--asp-teal-800);box-shadow:inset 0 0 0 1px var(--asp-teal-700)}.asp-budget-presets input:focus-visible+span{outline:3px solid rgba(12,148,145,.28);outline-offset:2px}.asp-budget-advanced form{display:grid;gap:var(--asp-space-2);margin-top:12px}

.asp-chat-launcher{position:fixed;right:22px;bottom:22px;z-index:80;display:inline-flex;width:auto;min-width:56px;min-height:56px;align-items:center;justify-content:center;padding:0 var(--asp-space-4);border-radius:var(--asp-radius-lg);background:var(--asp-navy-900);border:1px solid rgba(255,255,255,.22);box-shadow:0 18px 40px rgba(7,21,38,.24);font-size:13px;font-weight:750;letter-spacing:.01em;white-space:nowrap}
.asp-chat-launcher-label-short{display:none}
.asp-chat-launcher:hover{background:var(--asp-teal-700)}
.asp-chat-panel{position:fixed;right:22px;bottom:90px;z-index:79;width:min(410px,calc(100vw - 32px));height:min(600px,calc(100vh - 130px));display:none;flex-direction:column;overflow:hidden;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-lg);background:white;box-shadow:var(--asp-shadow-lg)}
.asp-chat-panel.is-open{display:flex}
.asp-chat-header{display:flex;align-items:center;gap:var(--asp-space-2);padding:var(--asp-space-3) var(--asp-space-4);background:var(--asp-navy-900);color:white}
.asp-chat-avatar{width:36px;height:36px;display:grid;place-items:center;flex:0 0 auto;border-radius:var(--asp-radius-sm);background:var(--asp-teal-600);color:white;font-weight:800}
.asp-chat-title{min-width:0;flex:1}.asp-chat-title b{display:block;color:white}.asp-chat-title span{display:block;color:#bdccd4;font-size:11px}
.asp-chat-clear{min-height:32px!important;width:auto!important;padding:var(--asp-space-1) var(--asp-space-2)!important;border:1px solid rgba(255,255,255,.24)!important;border-radius:var(--asp-radius-sm)!important;background:transparent!important;color:var(--asp-line)!important;box-shadow:none!important;font-size:11px!important}.asp-chat-clear:hover{background:rgba(255,255,255,.10)!important;color:white!important}
.asp-chat-min{width:36px;min-height:36px;padding:0;background:rgba(255,255,255,.09);box-shadow:none}
.asp-chat-log{flex:1;overflow:auto;padding:var(--asp-space-4);background:var(--asp-canvas)}
.asp-chat-msg{max-width:87%;margin:0 0 var(--asp-space-2);padding:var(--asp-space-3) var(--asp-space-3);border-radius:var(--asp-radius-md);font-size:14px;white-space:pre-wrap}
.asp-chat-msg.bot{border:1px solid var(--asp-line);background:white}.asp-chat-msg.me{margin-left:auto;background:var(--asp-navy-800);color:white}
.asp-chat-form{display:grid;grid-template-columns:1fr auto;gap:var(--asp-space-2);padding:var(--asp-space-3);border-top:1px solid var(--asp-line);background:white}
.asp-chat-form textarea{min-height:48px;max-height:110px;margin:0}.asp-chat-send{min-height:48px}.asp-chat-note{grid-column:1/-1;margin-top:calc(var(--asp-space-1) * -1);color:var(--asp-muted);font-size:10px}

.asp-site-footer{margin-top:auto;background:#f5f1e9;color:var(--asp-navy-800);border-top:3px solid var(--asp-bronze-500)}
.asp-footer-orbit,.asp-footer-spark{display:none}
.asp-site-footer{content-visibility:auto;contain-intrinsic-size:auto 340px}
.asp-footer-inner{width:min(100%,var(--asp-content));margin:0 auto;padding:var(--asp-space-8) var(--asp-space-6) var(--asp-space-6)}
.asp-footer-top{display:grid;grid-template-columns:minmax(260px,1.35fr) minmax(420px,1fr);gap:var(--asp-space-12)}
.asp-footer-brandline{display:flex;align-items:center;gap:var(--asp-space-3);min-height:58px}
.asp-footer-brandline img{display:block;width:48px;height:48px;object-fit:contain;transform:none;mix-blend-mode:normal}
.asp-footer-wordmark{color:var(--asp-navy-900);font-size:22px;font-weight:800;letter-spacing:-.035em;line-height:1;white-space:nowrap}
.asp-footer-brand p{max-width:540px;color:var(--asp-muted);font-size:13px}
.asp-footer-contact{color:var(--asp-teal-800);font-size:13px;text-decoration:none}
.asp-footer-cols{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--asp-space-5)}
.asp-footer-col h3{color:var(--asp-navy-900);font-size:12px;text-transform:uppercase;letter-spacing:.08em}
.asp-footer-col a{display:block;margin:var(--asp-space-2) 0;color:var(--asp-muted);font-size:12px;text-decoration:none}
.asp-footer-col a:hover{color:var(--asp-teal-800)}
.asp-footer-bottom{display:flex;justify-content:space-between;gap:var(--asp-space-5);margin-top:var(--asp-space-8);padding-top:var(--asp-space-5);border-top:1px solid rgba(12,35,64,.12);font-size:11px;color:var(--asp-muted)}
.asp-footer-legal{display:flex;gap:var(--asp-space-3)}.asp-footer-legal a{color:var(--asp-muted);text-decoration:none}
.role-customer .asp-site-footer,.role-owner .asp-site-footer{margin-top:var(--asp-space-5)}
.role-customer .asp-footer-top,.role-owner .asp-footer-top{display:none}
.role-customer .asp-footer-inner,.role-owner .asp-footer-inner{padding-top:var(--asp-space-5)}
.role-customer .asp-footer-bottom,.role-owner .asp-footer-bottom{margin-top:0;padding-top:0;border-top:0}
.footer-note{display:none}

.asp-home .main>.hero{position:relative;overflow:hidden;margin:var(--asp-space-1) 0 var(--asp-space-6);padding:var(--asp-space-10);border-radius:var(--asp-radius-lg);background:linear-gradient(145deg,var(--asp-navy-950),var(--asp-navy-800));box-shadow:var(--asp-shadow-md)}
.asp-home .main>.hero::after{content:"";position:absolute;width:270px;height:270px;right:-110px;bottom:-180px;border:1px solid rgba(181,135,75,.45);border-radius:50%}
.asp-home .main>.hero h1{max-width:890px;color:white}.asp-home .main>.hero .lead{color:var(--asp-navy-text-soft)}.asp-home .main>.hero .eyebrow{color:var(--asp-teal-eyebrow)}
.asp-home .wow-panel,.asp-home .asp-designer-showcase{display:none}
.wow-panel,.asp-designer-showcase{border-color:var(--asp-line);background:white;color:var(--asp-ink)}
.wow-panel::after,.asp-home .main>.hero::before,.asp-showcase-kicker::before{display:none!important;content:none!important}
.asp-final-cta{margin:var(--asp-space-10) 0 var(--asp-space-5);padding:var(--asp-space-8) var(--asp-space-8);border:1px solid rgba(255,255,255,.08);border-radius:var(--asp-radius-lg);background:linear-gradient(145deg,var(--asp-navy-950),var(--asp-navy-800));color:white;box-shadow:var(--asp-shadow-md)}
.asp-final-cta h2{max-width:760px;color:white}.asp-final-cta p{max-width:800px;color:#cdd9df}.asp-final-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:var(--asp-space-5)}.asp-final-cta .btn.secondary{background:white;color:var(--asp-navy-900)}
.asp-proof-strip{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--asp-space-3)}.asp-proof-item{padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:white}

.asp-legal-wrap{max-width:900px;margin:0 auto}.asp-legal-hero{padding:var(--asp-space-10) 0 var(--asp-space-5)}.asp-legal-meta{display:flex;gap:var(--asp-space-2);flex-wrap:wrap;color:var(--asp-muted);font-size:12px}.asp-legal-card{margin:var(--asp-space-4) 0;padding:var(--asp-space-6);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);background:white}.asp-legal-callout{padding:var(--asp-space-3);border-left:3px solid var(--asp-teal-600);background:#eff8f7}

/* Raised from 1100px on 2026-08-27: adding "My Tasks" widened the primary nav
   enough to collide with the wordmark between roughly 1100 and 1230 -- where a
   non-maximised window on a 1366 screen lands. The nav only collapses to the
   Menu button at 860px, so this compacting has to begin before the collision
   rather than after it. Caught by screenshotting the real header at laptop
   widths while building the manual walkthroughs. */
@media(max-width:1024px){
  .topbar{padding-left:var(--asp-space-5);padding-right:var(--asp-space-5)}.brand-context{display:none}
  .topbar nav a{padding-left:var(--asp-space-2);padding-right:var(--asp-space-2);font-size:12px}
  .asp-owner-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .asp-footer-top{grid-template-columns:1fr;gap:var(--asp-space-8)}
}

@media(max-width:768px){
  .topbar{min-height:72px;flex-wrap:wrap;gap:var(--asp-space-2) var(--asp-space-3)}.brand{flex:1}.brand-mark{width:42px;height:42px;flex-basis:42px}.brand-mark img{width:42px;height:42px}.brand-wordmark{font-size:20px}
  .lab{order:2}.asp-nav-toggle{display:inline-flex;order:3}.topbar nav{display:none;order:4;flex:1 0 100%;padding:var(--asp-space-1) 0 var(--asp-space-2);border-top:1px solid rgba(255,255,255,.18);overflow:auto;justify-content:flex-start}.topbar nav.is-open{display:flex}
  .main{padding:var(--asp-space-6) var(--asp-space-5) var(--asp-space-16)}.asp-auth-layout{grid-template-columns:1fr;gap:var(--asp-space-5);padding:var(--asp-space-6) 0 var(--asp-space-12)}.asp-auth-intro{padding:var(--asp-space-8)}.asp-auth-card{max-width:620px;width:100%;justify-self:center}
  .grid,.asp-capability-grid,.owner-invite-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.metrics{grid-template-columns:repeat(2,minmax(0,1fr))}
  .settings-grid{grid-template-columns:1fr}.settings-aside{position:static}
  .asp-footer-cols{grid-template-columns:repeat(2,minmax(0,1fr))}
  .asp-owner-nav{align-items:flex-start;flex-direction:column}.asp-owner-nav-advanced{width:100%}
  .asp-onboarding-steps{grid-template-columns:repeat(3,minmax(0,1fr))}
  .asp-budget-grid{grid-template-columns:1fr}
}

/* ── Tables become stacked records below md (design system §7) ──────
   §7 has always promised this ("Tables become stacked records below md
   ... They never shrink to unreadable"); until now the only mobile
   behaviour any <table> actually got was .table-wrap's horizontal
   scroll (still true, and still the fallback below).

   A table opts in with a markup convention, not a rewrite: give each
   <td> a `data-label="<column header text>"` attribute matching its
   column's <th>. That is the whole contract -- see §8 "Tables" for the
   canonical example (the guest ticket board). Gated on
   :has([data-label]) so this is purely additive: a table that has not
   been touched keeps exactly today's horizontal-scroll behaviour,
   unchanged. As more render functions adopt the attribute they get
   this treatment for free, with no further CSS change here.

   The PMS report library's tables (.asp-report-table-wrap, rc501/620/625)
   generate their data-labels from each report's own column list, so the
   same rules are keyed on that wrapper too; min-width:0 undoes the
   report table's 640px desktop minimum, and a report's <tfoot> totals
   row becomes a card like any other row. A row-header
   <th scope=row> inside <tbody> (the year-vs-budget grid, rc685) becomes
   the card's bold title line. */
@media(max-width:768px){
  .table-wrap:has([data-label]),.asp-report-table-wrap:has([data-label]){overflow:visible;border:0;border-radius:0;background:transparent}
  .table-wrap:has([data-label]) table,.asp-report-table-wrap:has([data-label]) table{display:block;width:100%;min-width:0;border-collapse:separate}
  .table-wrap:has([data-label]) thead,.asp-report-table-wrap:has([data-label]) thead{position:absolute;width:1px;height:1px;padding:0;margin:calc(var(--asp-space-1) * -1);overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
  .table-wrap:has([data-label]) tbody,.asp-report-table-wrap:has([data-label]) tbody{display:block}
  .table-wrap:has([data-label]) tfoot,.asp-report-table-wrap:has([data-label]) tfoot{display:block;margin-top:var(--asp-space-3)}
  .table-wrap:has([data-label]) tr,.asp-report-table-wrap:has([data-label]) tr{display:block;margin-bottom:var(--asp-space-3);padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
  .table-wrap:has([data-label]) tbody tr:last-child,.asp-report-table-wrap:has([data-label]) tbody tr:last-child{margin-bottom:0}
  .table-wrap:has([data-label]) tbody tr:hover,.asp-report-table-wrap:has([data-label]) tbody tr:hover{background:var(--asp-surface)}
  .table-wrap:has([data-label]) td,.asp-report-table-wrap:has([data-label]) td{display:block;padding:var(--asp-space-2) 0;border-top:0;border-bottom:1px solid var(--asp-line);text-align:left;vertical-align:top}
  .table-wrap:has([data-label]) td:last-child,.asp-report-table-wrap:has([data-label]) td:last-child{border-bottom:0;padding-bottom:0}
  .table-wrap:has([data-label]) td:first-child,.asp-report-table-wrap:has([data-label]) td:first-child{padding-top:0}
  .table-wrap:has([data-label]) td::before,.asp-report-table-wrap:has([data-label]) td::before{content:attr(data-label);display:block;margin-bottom:var(--asp-space-1);color:var(--asp-muted);font-size:var(--asp-text-2xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase}
  .table-wrap:has([data-label]) tbody th[scope=row],.asp-report-table-wrap:has([data-label]) tbody th[scope=row]{display:block;padding:0 0 var(--asp-space-2);border-bottom:1px solid var(--asp-line);background:transparent;font-size:inherit;font-weight:700;letter-spacing:normal;text-transform:none;text-align:left}
}

@media(max-width:560px){
  body{font-size:14px}.topbar{padding:var(--asp-space-1) var(--asp-space-3)}
  /* This shorthand `padding` re-sets top along with left/right, which
     silently cancelled the safe-area padding-top set on the base .topbar
     rule above -- at exactly the phone width the status-bar overlay (and
     the PWA install prompt) actually apply. Restated here, after it, so
     it wins inside this breakpoint too. */
  .topbar{padding-top:calc(var(--asp-space-1) + env(safe-area-inset-top,0px))}
  .brand-mark{width:38px;height:38px;flex-basis:38px}.brand-mark img{width:38px;height:38px}.brand-wordmark{font-size:19px}.brand-context{display:none}.lab{font-size:9px;padding:var(--asp-space-1) var(--asp-space-2)}.nav-back{order:4;width:100%;min-height:38px!important}
  .main{padding:var(--asp-space-5) var(--asp-space-3) var(--asp-space-12)}.banner{font-size:11px}.banner span{min-width:0}.hero{padding:var(--asp-space-5) 0}.hero:not(.compact){padding:var(--asp-space-5) var(--asp-space-4) var(--asp-space-5)}.hero h1,h1{font-size:clamp(31px,10vw,42px)}.lead{font-size:16px}
  .section{margin-top:var(--asp-space-6)}.section-head{align-items:flex-start;flex-direction:column;gap:var(--asp-space-2)}
  .grid,.grid.two,.system-grid,.choice-grid,.asp-capability-grid,.owner-invite-grid,.rail-grid,.settings-grid,.asp-owner-grid,.asp-proof-strip{grid-template-columns:1fr}
  .card{padding:var(--asp-space-4);border-radius:var(--asp-radius-md)}.choice-card{min-height:auto}.metrics{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-2)}.metric{padding:var(--asp-space-3)}.metric b{font-size:23px}
  .checkbox-grid{grid-template-columns:1fr}.btn,button{width:100%;min-height:48px}.status-row>.btn,.status-row>button{width:auto;flex:1}.choice-stack{gap:var(--asp-space-2);margin:var(--asp-space-3) 0 var(--asp-space-5)}button.choice-option{min-height:96px;padding:var(--asp-space-4) var(--asp-space-4)}.choice-option-title{font-size:15px}.asp-system-connection-card{padding:var(--asp-space-4)}.asp-system-connection-actions .btn,.asp-system-connection-actions .btn.ghost{width:100%}
  .filterbar{align-items:stretch;flex-direction:column}.filterbar input,.filterbar select{width:100%;min-width:0}.photo-grid{grid-template-columns:1fr 1fr}.record-photo img{height:150px}
  .asp-auth-layout{min-height:0;padding-top:var(--asp-space-3)}.asp-auth-intro{padding:var(--asp-space-6);border-radius:var(--asp-radius-lg)}.asp-auth-intro h1{font-size:37px}.asp-auth-card{padding:var(--asp-space-5)}.asp-workspace-choice{padding:var(--asp-space-3)}
  .asp-home .main>.hero{margin-left:calc(var(--asp-space-1) * -1);margin-right:calc(var(--asp-space-1) * -1);padding:var(--asp-space-8) var(--asp-space-5);border-radius:var(--asp-radius-lg)}
  .asp-owner-nav{padding:var(--asp-space-2)}.asp-owner-nav-primary{gap:var(--asp-space-1)}.asp-owner-nav a{padding:var(--asp-space-1) var(--asp-space-2);font-size:11px}.asp-owner-list-row{align-items:flex-start;flex-direction:column}.asp-owner-list-row .btn{width:100%}
  .asp-onboarding-steps{grid-template-columns:repeat(2,minmax(0,1fr))}.asp-onboarding-steps li{min-height:64px}
  .asp-budget-presets{grid-template-columns:repeat(2,minmax(0,1fr))}
  .asp-chat-launcher{right:14px;bottom:14px;width:auto;min-width:52px;min-height:52px;padding:0 var(--asp-space-3);font-size:12px}.asp-chat-launcher-label{display:none}.asp-chat-launcher-label-short{display:inline}.asp-chat-panel{right:8px;bottom:74px;width:calc(100vw - 16px);height:min(590px,calc(100vh - 84px));border-radius:var(--asp-radius-lg)}.asp-chat-form{grid-template-columns:1fr}.asp-chat-send{width:100%}
  .asp-footer-inner{padding:var(--asp-space-6) var(--asp-space-4) var(--asp-space-5)}.asp-footer-top{display:block}.asp-footer-cols{grid-template-columns:1fr 1fr;margin-top:24px}.asp-footer-bottom{align-items:flex-start;flex-direction:column}.role-customer .asp-footer-bottom,.role-owner .asp-footer-bottom{gap:var(--asp-space-2)}
  .asp-permission-card{grid-template-columns:24px minmax(0,1fr);gap:var(--asp-space-3);padding:var(--asp-space-4)}.asp-permission-copy>b{font-size:14px}.asp-permission-copy>small{font-size:12px}
}

@media(max-width:560px){
  .brand-mark{width:36px;height:36px;flex-basis:36px}.brand-mark img{width:36px;height:36px}.brand-wordmark{font-size:18px}.lab{display:none}.main{padding-left:var(--asp-space-3);padding-right:var(--asp-space-3)}.metrics{grid-template-columns:1fr 1fr}.photo-grid{grid-template-columns:1fr}.asp-footer-cols{grid-template-columns:1fr}
}

@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}*,*::before,*::after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}.asp-route-pending .asp-route-progress{width:100%;transition:none}
}
/* Which hotel you are working in. This is the fallback shape only --
   rc544 relocates it into the header itself on every page that carries
   the left sidebar, once that page's own nav has moved into the
   sidebar and the header has room. Left as a standalone bar here for
   whatever page type does not end up with a sidebar, where the header
   can still carry real nav content that this would collide with. */
.asp-property-bar{background:var(--asp-bronze-100);border-bottom:1px solid var(--asp-bronze-border);padding:8px max(20px,calc((100vw - var(--asp-content))/2))}.asp-property-switch{display:flex;align-items:center;gap:var(--asp-space-2);flex-wrap:wrap}.asp-property-switch-label{font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--asp-bronze-900);font-weight:800}.asp-property-switch select{font:inherit;font-size:13.5px;font-weight:700;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-sm);border:1px solid var(--asp-bronze-border);background:var(--asp-surface);color:var(--asp-navy-900);max-width:280px}.asp-property-switch select:focus-visible{outline:2px solid var(--asp-teal);outline-offset:1px}@media(max-width:560px){.asp-property-switch select{flex:1;max-width:none}}
/* 2026-09-16: the header integration of the property switcher, used only
   on pages that also carry the left sidebar (asp-has-side) -- see this
   overlay's own has_sidebar branch for why the standalone bronze bar
   above stays the fallback for pages without it. margin-left:auto pushes
   this to the end of the topbar's own flex row, matching "Working in
   [property]" sitting after the wordmark rather than crowding it. */
.asp-property-switch-inline{margin-left:auto}
.asp-property-switch-inline .asp-property-switch{gap:var(--asp-space-1)}
.asp-property-switch-inline .asp-property-switch-label{color:#aeb9d2;font-size:10px}
.asp-property-switch-inline .asp-property-switch select{border:1px solid rgba(255,255,255,.22);background:rgba(255,255,255,.08);color:var(--asp-surface);max-width:220px}
.asp-property-switch-inline .asp-property-switch select:focus-visible{outline:2px solid rgba(255,255,255,.5)}
@media(max-width:768px){.asp-property-switch-inline{margin-left:0;width:100%}.asp-property-switch-inline .asp-property-switch select{max-width:none;flex:1}}
/* ---- 2026-08-27 visual refresh -------------------------------------
   Asked for after a reference build: its feel, explicitly not its layout
   or navigation. Type only -- weight and tracking are what actually carry
   that look, and the typeface itself cannot change because the CSP is
   font-src 'self' data: and the reference loads Inter from a CDN. */
h1,h2,h3,.brand-wordmark{letter-spacing:-.03em}
h1{font-weight:800}h2,h3{font-weight:750}.hero h1{letter-spacing:-.035em;line-height:1.05}
/* Numbers read as data rather than prose: tabular figures stop a column
   of counts jittering as the digits change. */
.metric b,.stat b,.metric-value{font-variant-numeric:tabular-nums;letter-spacing:-.02em}
/* Cards sit on the canvas rather than being drawn on it. */
.card{border-color:var(--asp-line)}.system-card{transition:border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,transform var(--asp-motion-fast) ease}.system-card:hover{border-color:var(--asp-teal-600);box-shadow:var(--asp-shadow-sm);transform:translateY(-1px)}
@media(prefers-reduced-motion:reduce){.system-card{transition:none}.system-card:hover{transform:none}}
/* An area is one system with parts, so its parts read as tabs rather than
   as separate places you navigate between. */
.asp-area-tabs{display:flex;gap:var(--asp-space-1);flex-wrap:wrap;margin:0 0 var(--asp-space-5);padding:var(--asp-space-1);background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}.asp-area-tab{padding:var(--asp-space-2) var(--asp-space-3);border-radius:var(--asp-radius-sm);font-size:13.5px;font-weight:700;color:var(--asp-muted);text-decoration:none;white-space:nowrap;letter-spacing:-.01em}.asp-area-tab:hover{color:var(--asp-ink);background:rgba(255,255,255,.7)}.asp-area-tab.is-active{background:var(--asp-surface);color:var(--asp-ink);box-shadow:var(--asp-shadow-xs)}.asp-area-tab:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:1px}@media(max-width:560px){.asp-area-tabs{overflow-x:auto;flex-wrap:nowrap}}
/* Phase 3 (2026-09-05): every part of the department, visible above the tabs
   instead of only named on them -- reuses .asp-program-parts' row markup
   (title + status pill) but grids responsively across the page's full width
   instead of stacking in a narrow dashboard card. */
.asp-area-parts-summary{grid-template-columns:repeat(auto-fit,minmax(190px,1fr));margin:0 0 var(--asp-space-4)}
.asp-area-parts-summary li{padding:var(--asp-space-2) var(--asp-space-3);background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}
.asp-area-parts-summary a:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:1px}
/* ---- asp-look-2026-08-27: contrast, not just colour -----------------
   The reference's feel comes from how heavily things are drawn, not from
   its hex values. Nothing here moves or renames an element. */
.metric{padding:var(--asp-space-5) var(--asp-space-5);border-radius:var(--asp-radius-md);border:1px solid var(--asp-line);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}.metric b{font-size:34px;font-weight:800;letter-spacing:-.035em;line-height:1.05;display:block}.metric span{font-size:12px;font-weight:600;color:var(--asp-muted);letter-spacing:.01em}.metrics{gap:var(--asp-space-3)}
.hero:not(.compact){background:linear-gradient(135deg,var(--asp-navy-900) 0%,#1d2942 55%,var(--asp-navy-700) 100%);border:0;border-radius:var(--asp-radius-lg);box-shadow:0 28px 70px rgba(12,19,34,.28)}.hero:not(.compact) h1{color:var(--asp-surface);font-size:clamp(2rem,3.6vw,3rem);font-weight:820;letter-spacing:-.04em;line-height:1.04}.hero:not(.compact) .lead{color:rgba(255,255,255,.76);font-size:1.02rem}.hero:not(.compact) .eyebrow{color:var(--asp-teal-100);letter-spacing:.14em;font-size:11px;font-weight:800}
.pill{border-radius:var(--asp-radius-full);padding:var(--asp-space-1) var(--asp-space-3);font-size:11.5px;font-weight:800;letter-spacing:.01em;border:1px solid transparent}.pill.good{background:var(--asp-good-soft);color:#0f7a60;border-color:#bce8da}.pill.warn{background:var(--asp-warn-soft);color:var(--asp-warn);border-color:#f0dcae}.pill.bad{background:var(--asp-bad-soft);color:var(--asp-bad);border-color:#f2c9c6}
.card{border-radius:var(--asp-radius-md);padding:var(--asp-space-6) var(--asp-space-6)}.system-card{border-radius:var(--asp-radius-md);padding:var(--asp-space-5) var(--asp-space-6)}.system-card h3{font-size:1.22rem;font-weight:780;letter-spacing:-.022em;margin:var(--asp-space-3) 0 var(--asp-space-1)}.section-head h2{font-size:1.35rem;font-weight:780;letter-spacing:-.025em}
button,.btn{border-radius:var(--asp-radius-sm);font-weight:750;letter-spacing:-.005em}.btn.secondary{border-color:var(--asp-line-strong)}.btn.secondary:hover{border-color:var(--asp-teal-600);color:var(--asp-teal-700)}
.eyebrow{font-size:11px;font-weight:800;letter-spacing:.13em;text-transform:uppercase}
.system-row{border-radius:var(--asp-radius-sm);padding-left:var(--asp-space-3);padding-right:var(--asp-space-3);margin-left:calc(var(--asp-space-3) * -1);margin-right:calc(var(--asp-space-3) * -1)}.system-row:hover{background:var(--asp-surface-soft)}
/* ---- Command Center -------------------------------------------------
   KPI tiles with the number dominant and its trend beneath. Sparklines
   are inline SVG: the CSP is script-src 'self' and no charting library is
   worth an exception to that. */
.asp-kpi-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(216px,1fr));gap:var(--asp-space-3);margin:0 0 var(--asp-space-5)}.asp-kpi{background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-4) var(--asp-space-5) var(--asp-space-3);box-shadow:var(--asp-shadow-xs)}.asp-kpi.is-missing{background:var(--asp-surface-soft);border-style:dashed}.asp-kpi-head{display:flex;align-items:baseline;justify-content:space-between;gap:var(--asp-space-2)}.asp-kpi-label{font-size:12px;font-weight:700;color:var(--asp-muted);letter-spacing:.02em}.asp-kpi-value{font-size:32px;font-weight:800;letter-spacing:-.035em;line-height:1.1;margin:var(--asp-space-1) 0 var(--asp-space-1);font-variant-numeric:tabular-nums}.asp-kpi.is-missing .asp-kpi-value{color:var(--asp-muted)}.asp-kpi-note{font-size:11px;color:var(--asp-muted);margin-top:var(--asp-space-2);min-height:1.2em}.asp-delta{font-size:12px;font-weight:800;font-variant-numeric:tabular-nums}.asp-delta.is-up{color:var(--asp-good)}.asp-delta.is-down{color:var(--asp-bad)}.asp-delta.is-flat{color:var(--asp-muted)}.asp-kpi-icon{display:inline-flex;align-items:center;justify-content:center;width:34px;height:34px;border-radius:50%;font-size:15px;font-weight:800;margin-bottom:var(--asp-space-3)}.asp-kpi-icon-occupancy{background:var(--asp-teal-100);color:var(--asp-teal-700)}.asp-kpi-icon-money{background:var(--asp-bronze-100);color:var(--asp-bronze-600)}.asp-kpi-icon-rooms{background:#ecebfc;color:var(--asp-series-1)}.asp-kpi-icon-flow{background:var(--asp-bronze-100);color:var(--asp-series-2)}
.asp-spark{display:block;width:100%;height:34px;margin-top:4px}.asp-spark-line{fill:none;stroke:var(--asp-teal-600);stroke-width:2;stroke-linecap:round;stroke-linejoin:round}.asp-spark-fill{fill:var(--asp-teal-100);opacity:.55;stroke:none}.asp-spark-dot{fill:var(--asp-teal-600)}
.asp-dash-picker{display:flex;align-items:center;gap:var(--asp-space-2);margin:var(--asp-space-3) 0 var(--asp-space-1);flex-wrap:wrap}.asp-dash-picker label{font-size:11px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:var(--asp-muted)}.asp-dash-picker select{font:inherit;font-size:13.5px;font-weight:700;padding:var(--asp-space-1) var(--asp-space-3);border-radius:var(--asp-radius-sm);border:1px solid var(--asp-line-strong);background:var(--asp-surface);color:var(--asp-ink);max-width:280px}
/* ---- sidebar navigation ---------------------------------------------
   Eleven links across the top bar is what kept colliding with the
   wordmark. Down the side they have room and read as a list. */
/* .shell is already flex-direction:column, so the direction has to be
   reset explicitly or the sidebar stacks on top of the page. */
.shell.asp-has-side{display:flex;flex-direction:row;align-items:stretch;min-height:100vh}.asp-col{flex:1;min-width:0;display:flex;flex-direction:column}.asp-side{width:236px;flex:0 0 236px;background:var(--asp-navy-900);color:var(--asp-line-strong);display:flex;flex-direction:column;gap:var(--asp-space-1);padding:var(--asp-space-4) var(--asp-space-3) var(--asp-space-6);position:sticky;top:0;align-self:flex-start;height:100vh;overflow-y:auto}
.asp-side-brand{display:flex;align-items:center;gap:var(--asp-space-2);padding:var(--asp-space-1) var(--asp-space-2) var(--asp-space-4);text-decoration:none;color:var(--asp-surface)}.asp-side-brand img{border-radius:var(--asp-radius-sm);background:var(--asp-surface);padding:var(--asp-space-1)}.asp-side-brand b{display:block;font-size:15px;font-weight:800;letter-spacing:-.02em}.asp-side-brand small{display:block;font-size:11px;color:#8f9cb5;letter-spacing:.02em}
.asp-side-group{margin-bottom:12px}.asp-side-heading{margin:var(--asp-space-2) var(--asp-space-2) var(--asp-space-1);font-size:10px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;color:#6f7d99}.asp-side-link{display:flex;align-items:center;gap:var(--asp-space-3);padding:var(--asp-space-2) var(--asp-space-2);border-radius:var(--asp-radius-sm);color:var(--asp-line-strong);text-decoration:none;font-size:13.5px;font-weight:650;letter-spacing:-.005em}.asp-side-link:hover{background:rgba(255,255,255,.07);color:var(--asp-surface)}.asp-side-link.is-active{background:linear-gradient(100deg,var(--asp-teal-700),var(--asp-teal-600));color:var(--asp-surface);box-shadow:0 6px 18px rgba(14,155,164,.34)}.asp-side-link.is-active .asp-side-icon{opacity:1}.asp-side-link:focus-visible{outline:2px solid var(--asp-teal-100);outline-offset:1px}.asp-side-more{display:none}.asp-side-icon{width:18px;height:18px;flex:0 0 18px;fill:none;stroke:currentColor;stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round;opacity:.8}
.asp-side-link{position:relative}
.asp-side-link .asp-nav-badge{display:block;position:absolute;top:2px;right:4px;min-width:16px;height:16px;padding:0 var(--asp-space-1);border-radius:var(--asp-radius-full);background:#e5484d;color:var(--asp-surface);font-size:10px;font-weight:800;line-height:16px;text-align:center;box-shadow:0 0 0 2px var(--asp-navy-950,#0b1220)}
.asp-more-panel-nav .asp-nav-badge{box-shadow:0 0 0 2px var(--asp-surface)}
/* With the links gone the header is a slim context strip. */.asp-has-side .topbar{min-height:60px;padding-left:var(--asp-space-6);padding-right:var(--asp-space-6)}.asp-has-side .topbar .brand{display:none}
@media(max-width:1024px){.shell.asp-has-side{display:block}.asp-side{width:auto;flex:none;height:auto;position:static;flex-direction:row;flex-wrap:wrap;gap:var(--asp-space-1);padding:var(--asp-space-3)}.asp-side-brand{padding:var(--asp-space-1) var(--asp-space-2);width:100%}.asp-side-heading{display:none}.asp-side-nav{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--asp-space-1);width:100%}.asp-side-group{margin:0;display:contents}.asp-side-link{padding:var(--asp-space-2) var(--asp-space-3)}}
/* 2026-09-15 (UI/UX overhaul, phase 2): this used to re-enable the topbar's
   own brand for the whole 561-900px range above, but .asp-side-brand only
   actually disappears at 560px (the phone-bar rule below) -- so from 561 to
   900px both the sidebar's brand AND the topbar's brand rendered at once,
   two "ASP Works" wordmarks stacked. Confirmed live on a fresh local build.
   Scoped to the same 560px threshold .asp-side-brand hides at, so the two
   are never both visible or both hidden. */
@media(max-width:560px){.asp-has-side .topbar .brand{display:flex}}
/* ---- chart and gauges ------------------------------------------------
   Inline SVG for the same reason as the sparklines: the CSP is
   script-src 'self' and no charting library is worth an exception. */
.asp-chart svg{display:block;width:100%;height:auto;overflow:visible}.asp-chart-grid{stroke:var(--asp-line);stroke-width:1}.asp-chart-line{fill:none;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round}.asp-chart-tick,.asp-chart-xtick{font-size:10px;fill:var(--asp-muted);font-family:inherit;font-variant-numeric:tabular-nums}.asp-chart-tick{text-anchor:end}.asp-chart-xtick{text-anchor:middle}.asp-chart-legend{display:flex;flex-wrap:wrap;gap:var(--asp-space-3);margin:0 0 var(--asp-space-2)}.asp-chart-key{display:inline-flex;align-items:center;gap:var(--asp-space-1);font-size:12px;font-weight:700;color:var(--asp-muted)}.asp-chart-key i{width:11px;height:3px;border-radius:2px;display:inline-block}
.asp-gauge-row{display:flex;flex-wrap:wrap;gap:var(--asp-space-6)}.asp-gauge{text-align:center;min-width:104px}.asp-gauge svg{width:96px;height:96px;display:block;margin:0 auto var(--asp-space-1)}.asp-gauge-track{fill:none;stroke:var(--asp-line);stroke-width:9}.asp-gauge-value{fill:none;stroke:var(--asp-teal-600);stroke-width:9;stroke-linecap:round}.asp-gauge b{display:block;font-size:19px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums;margin-top:calc(var(--asp-space-16) * -1);margin-bottom:var(--asp-space-10)}.asp-gauge span{display:block;font-size:12.5px;font-weight:700}.asp-gauge small{display:block;font-size:11px;color:var(--asp-muted)}
.asp-hotel-pulse-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--asp-space-3);margin:var(--asp-space-1) 0 var(--asp-space-1)}
.asp-hotel-pulse-card{display:block;background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-4) var(--asp-space-4);text-decoration:none;color:inherit;box-shadow:var(--asp-shadow-xs);transition:border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,transform var(--asp-motion-fast) ease}
.asp-hotel-pulse-card:hover{border-color:var(--asp-teal-600);box-shadow:var(--asp-shadow-sm);transform:translateY(-1px)}
.asp-hotel-pulse-name{font-size:14.5px;font-weight:750;letter-spacing:-.01em;margin-bottom:var(--asp-space-3)}
.asp-hotel-pulse-stats{display:flex;gap:var(--asp-space-4)}
.asp-hotel-pulse-stats div{display:flex;flex-direction:column;gap:var(--asp-space-1)}
.asp-hotel-pulse-stats b{font-size:16px;font-weight:800;letter-spacing:-.02em;font-variant-numeric:tabular-nums;color:var(--asp-ink)}
.asp-hotel-pulse-stats span{font-size:11px;font-weight:700;color:var(--asp-muted);text-transform:uppercase;letter-spacing:.04em}
/* The phone bar's More sheet (2026-09-01): a real bottom sheet instead
   of an anchor jump to the page footer. The trigger only ever shows at
   the same max-width:560px breakpoint the rest of the phone bar does,
   so the sheet can never open on a layout that has no bottom bar to open
   it from. */
.asp-more-sheet{position:fixed;inset:0;z-index:80}
.asp-more-sheet[hidden]{display:none}
.asp-more-backdrop{position:absolute;inset:0;background:rgba(11,17,30,.44)}
.asp-more-panel{position:absolute;left:0;right:0;bottom:0;max-height:78vh;overflow-y:auto;background:var(--asp-surface);border-radius:var(--asp-radius-lg) var(--asp-radius-lg) 0 0;box-shadow:0 -12px 34px rgba(9,14,26,.28);padding:var(--asp-space-3) var(--asp-space-4) calc(var(--asp-space-4) + env(safe-area-inset-bottom))}
.asp-more-panel-head{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-2);padding:var(--asp-space-2) var(--asp-space-1) var(--asp-space-2);border-bottom:1px solid var(--asp-line);margin-bottom:var(--asp-space-2)}
.asp-more-panel-head b{font-size:15px;letter-spacing:-.01em;flex:1}
.asp-more-close{appearance:none;border:0;background:var(--asp-surface-soft);color:var(--asp-ink);width:30px;height:30px;border-radius:var(--asp-radius-full);font-size:18px;line-height:1;cursor:pointer;flex:none}
.asp-notification-mute{appearance:none;border:1px solid var(--asp-line);background:var(--asp-surface-soft);color:var(--asp-ink);height:30px;padding:0 var(--asp-space-3);border-radius:var(--asp-radius-full);font-size:12px;font-weight:650;cursor:pointer;flex:none;white-space:nowrap}
.asp-notification-mute[aria-pressed='true']{background:var(--asp-teal-100);border-color:var(--asp-teal-600);color:var(--asp-teal-800)}
.asp-more-panel-nav .asp-side-heading{display:block;color:var(--asp-muted)}
.asp-more-panel-nav .asp-side-link{color:var(--asp-ink)}
.asp-more-panel-nav .asp-side-link span{display:inline}
.asp-more-panel-nav .asp-side-link:hover{background:var(--asp-surface-soft);color:var(--asp-ink)}
.asp-more-panel-nav .asp-side-link.is-active{background:var(--asp-teal-100);color:var(--asp-teal-700);box-shadow:none}
@media(min-width:561px){.asp-more-sheet{display:none!important}}


/* One colour per hotel on the chart. Here rather than in an inline style
   attribute, which style-src 'self' blocks -- a styled line would have no
   stroke and draw nothing at all. */
path.asp-series-0{stroke:var(--asp-series-0)}.asp-chart-key i.asp-series-0{background:var(--asp-series-0)}
path.asp-series-1{stroke:var(--asp-series-1)}.asp-chart-key i.asp-series-1{background:var(--asp-series-1)}
path.asp-series-2{stroke:var(--asp-series-2)}.asp-chart-key i.asp-series-2{background:var(--asp-series-2)}
path.asp-series-3{stroke:var(--asp-series-3)}.asp-chart-key i.asp-series-3{background:var(--asp-series-3)}
path.asp-series-4{stroke:var(--asp-series-4)}.asp-chart-key i.asp-series-4{background:var(--asp-series-4)}
path.asp-series-5{stroke:var(--asp-series-5)}.asp-chart-key i.asp-series-5{background:var(--asp-series-5)}
/* Same six colours, applied to an occupancy ring instead of a chart line, so
   one hotel keeps one colour everywhere on the dashboard. */
.asp-gauge-value.asp-series-0{stroke:var(--asp-teal-700)}.asp-gauge-value.asp-series-1{stroke:var(--asp-series-1)}.asp-gauge-value.asp-series-2{stroke:var(--asp-series-2)}.asp-gauge-value.asp-series-3{stroke:var(--asp-series-3)}.asp-gauge-value.asp-series-4{stroke:var(--asp-series-4)}.asp-gauge-value.asp-series-5{stroke:var(--asp-series-5)}
/* ---- Today's operating flow --------------------------------------------
   Three stages in the order the day happens, each carrying its own accent so
   the sequence reads as a sequence rather than three identical cards. */
.asp-flow{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--asp-space-3)}
.asp-flow-step{position:relative;background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-3) var(--asp-space-4) var(--asp-space-4);overflow:hidden}
.asp-flow-step::before{content:'';position:absolute;inset:0 0 auto 0;height:3px}
.asp-flow-0::before{background:var(--asp-bronze-500)}
.asp-flow-1::before{background:var(--asp-teal-600)}
.asp-flow-2::before{background:var(--asp-series-1)}
.asp-flow-phase{display:block;font-size:10px;font-weight:800;letter-spacing:.12em;text-transform:uppercase;color:var(--asp-muted)}
.asp-flow-value{display:block;font-size:29px;font-weight:800;letter-spacing:-.03em;line-height:1.15;margin:var(--asp-space-1) 0 var(--asp-space-1);font-variant-numeric:tabular-nums}
.asp-flow-label{display:block;font-size:13.5px;font-weight:700}
.asp-flow-bar{display:block;width:100%;height:6px;margin:var(--asp-space-2) 0 var(--asp-space-2)}
.asp-flow-bar-bed{fill:var(--asp-line)}
.asp-flow-0 .asp-flow-bar-fill{fill:var(--asp-bronze-500)}
.asp-flow-1 .asp-flow-bar-fill{fill:var(--asp-teal-600)}
.asp-flow-2 .asp-flow-bar-fill{fill:var(--asp-series-1)}
.asp-flow-note{display:block;font-size:11.5px;color:var(--asp-muted)}
.asp-flow-load{margin:var(--asp-space-3) 0 0;padding-top:var(--asp-space-3);border-top:1px solid var(--asp-line);font-size:13.5px}
.asp-flow-load b{font-weight:800}
/* ---- ASP Intelligence panel -------------------------------------------- */
.asp-ai-panel .section-head{align-items:flex-start}
.asp-ai-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:var(--asp-space-3);margin-top:var(--asp-space-2)}
.asp-ai-idea{background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-4) var(--asp-space-4)}
.asp-ai-idea h3{margin:0 0 var(--asp-space-1);font-size:15px;font-weight:750;letter-spacing:-.01em}
.asp-ai-idea p{margin:0 0 var(--asp-space-2);font-size:13px;line-height:1.5}
.asp-ai-idea p:last-child{margin-bottom:0}
.asp-ai-step{color:var(--asp-ink)}
.asp-ai-step b{font-weight:800}
.asp-ai-idea-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--asp-space-2);margin-bottom:var(--asp-space-2)}
.asp-ai-idea-head h3{margin:0}
.asp-ai-idea .pill{flex:none;white-space:nowrap}
.asp-overview-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--asp-space-3);margin-top:var(--asp-space-2)}
.asp-overview-card{display:block;background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-3) var(--asp-space-4);text-decoration:none;color:inherit;box-shadow:var(--asp-shadow-xs);transition:border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,transform var(--asp-motion-fast) ease}
.asp-overview-card:hover{border-color:var(--asp-teal-600);box-shadow:var(--asp-shadow-sm);transform:translateY(-1px)}
.asp-overview-card-top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--asp-space-2);margin-bottom:4px}
.asp-overview-card-top b{font-size:14.5px;font-weight:750;letter-spacing:-.01em}
.asp-overview-card .pill{flex:none;white-space:nowrap}
.asp-program-parts{list-style:none;margin:var(--asp-space-1) 0 var(--asp-space-1);padding:0;display:flex;flex-direction:column;gap:var(--asp-space-1)}
.asp-program-parts li a{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-2);margin:0 -8px;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-xs);text-decoration:none;color:inherit;font-size:13px;transition:background-color .12s ease}
.asp-program-parts li a:hover{background:var(--asp-surface-soft)}
.asp-program-parts li a .pill{font-size:11px}
.asp-program-all{display:inline-block;margin-top:4px;color:var(--asp-teal-700)}
.asp-program-all:hover{color:var(--asp-navy-900)}

/* Dashboard v2 -- dark elevated-card treatment, scoped to /app/dashboard's
   own content only (.asp-dash-v2 wraps just that page's return value) so it
   cannot bleed into any other route's cards, hero, or nav. Reuses the same
   --asp-navy/teal tokens the home page's own dark hero already uses, rather
   than a second palette invented just for this page. */
.asp-dash-v2 .hero.compact{background:linear-gradient(135deg,var(--asp-navy-950) 0%,var(--asp-navy-800) 100%);border:0;border-radius:var(--asp-radius-lg);padding:var(--asp-space-6) var(--asp-space-6) var(--asp-space-5);box-shadow:var(--asp-shadow-md);position:relative;overflow:hidden}
.asp-dash-v2 .hero.compact::after{content:'';position:absolute;inset:-40% -10% auto auto;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,rgba(63,217,209,.14),transparent 70%);pointer-events:none}
.asp-dash-v2 .hero.compact>*{position:relative;z-index:1}
.asp-dash-v2 .hero.compact h1{color:var(--asp-surface)}
.asp-dash-v2 .hero.compact .lead{color:rgba(255,255,255,.75)}
.asp-dash-v2 .hero.compact .eyebrow{color:var(--asp-teal-glow)}
.asp-dash-v2 .hero.compact .mini.muted{color:rgba(255,255,255,.55)}
.asp-dash-v2 .asp-dash-picker label{color:rgba(255,255,255,.5)}
.asp-dash-v2 .asp-dash-picker select{background:rgba(255,255,255,.08);border-color:rgba(255,255,255,.2);color:var(--asp-surface)}
.asp-dash-v2 .card,.asp-dash-v2 .asp-kpi,.asp-dash-v2 .asp-hotel-pulse-card,.asp-dash-v2 .asp-overview-card{background:linear-gradient(165deg,var(--asp-navy-900) 0%,var(--asp-navy-800) 100%);border:1px solid rgba(255,255,255,.08);color:var(--asp-surface);box-shadow:var(--asp-shadow-sm)}
.asp-dash-v2 .card:hover,.asp-dash-v2 .asp-hotel-pulse-card:hover,.asp-dash-v2 .asp-overview-card:hover{border-color:var(--asp-teal-glow);box-shadow:var(--asp-shadow-md)}
.asp-dash-v2 .card h2,.asp-dash-v2 .card h3{color:var(--asp-surface)}
.asp-dash-v2 .card .muted,.asp-dash-v2 .card>p{color:rgba(255,255,255,.62)}
.asp-dash-v2 .asp-kpi.is-missing{background:var(--asp-navy-800);border-style:dashed;border-color:rgba(255,255,255,.15)}
.asp-dash-v2 .asp-kpi.is-missing .asp-kpi-value{color:rgba(255,255,255,.4)}
.asp-dash-v2 .asp-kpi-label{color:rgba(255,255,255,.55)}
.asp-dash-v2 .asp-kpi-value{color:var(--asp-surface)}
.asp-dash-v2 .asp-kpi-note{color:rgba(255,255,255,.45)}
.asp-dash-v2 .asp-hotel-pulse-name{color:var(--asp-surface)}
.asp-dash-v2 .asp-hotel-pulse-stats b{color:var(--asp-teal-glow)}
.asp-dash-v2 .asp-hotel-pulse-stats span{color:rgba(255,255,255,.5)}
.asp-dash-v2 .asp-overview-card-top b{color:var(--asp-surface)}
.asp-dash-v2 .asp-dash-other{background:rgba(255,255,255,.04);border-color:rgba(255,255,255,.1)}
.asp-dash-v2 .asp-dash-other summary{color:var(--asp-surface)}
.asp-dash-v2 .pill{background:rgba(255,255,255,.12);color:var(--asp-surface)}
.asp-dash-v2 .asp-gauge-track{stroke:rgba(255,255,255,.14)}
.asp-dash-v2 .asp-chart-grid{stroke:rgba(255,255,255,.1)}
.asp-dash-v2 .asp-chart-tick,.asp-dash-v2 .asp-chart-xtick{fill:rgba(255,255,255,.5)}
.asp-dash-v2 .asp-chart-key{color:rgba(255,255,255,.6)}
.asp-dash-v2 a.btn.secondary{border-color:rgba(255,255,255,.3);color:var(--asp-surface)}
.asp-dash-v2 .asp-ai-idea{background:rgba(255,255,255,.05);border-color:rgba(255,255,255,.1)}
.asp-dash-v2 .asp-ai-idea h3{color:var(--asp-surface)}
.asp-dash-v2 .asp-ai-idea p{color:rgba(255,255,255,.65)}
.asp-dash-v2 .asp-ai-step{color:var(--asp-surface)}

/* The guest-facing request page. Seen on a phone, in a room, often at
   night: one column, large type, one action, no operator chrome. */
body.asp-guest{margin:0;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:var(--asp-space-6) var(--asp-space-4);background:linear-gradient(160deg,var(--asp-navy-900),var(--asp-navy-700))}
.asp-guest-card{width:100%;max-width:32rem;background:var(--asp-surface);border-radius:var(--asp-radius-lg);padding:var(--asp-space-8) var(--asp-space-6) var(--asp-space-6);box-shadow:0 24px 60px rgba(12,19,34,.35)}
.asp-guest-card h1{margin:0 0 var(--asp-space-1);font-size:clamp(1.6rem,6vw,2.1rem);letter-spacing:-.03em;color:var(--asp-navy-900)}
.asp-guest-room{margin:0 0 var(--asp-space-4);font-weight:700;color:var(--asp-teal-700);letter-spacing:.02em}
.asp-guest-note{margin:0 0 var(--asp-space-4);padding:var(--asp-space-3) var(--asp-space-3);border-radius:var(--asp-radius-sm);background:var(--asp-bronze-100);color:var(--asp-bronze-800);font-size:.95rem}
.asp-guest-card label{display:block;margin:var(--asp-space-4) 0 var(--asp-space-1);font-weight:650;color:var(--asp-navy-700);font-size:.95rem}
.asp-guest-optional{font-weight:400;color:var(--asp-guest-muted)}
.asp-guest-card textarea,.asp-guest-card select,.asp-guest-card input{width:100%;box-sizing:border-box;padding:var(--asp-space-3) var(--asp-space-3);border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);font:inherit;font-size:1rem;background:var(--asp-surface);color:var(--asp-navy-900)}
.asp-guest-card textarea{min-height:104px;resize:vertical}
.asp-guest-card textarea:focus,.asp-guest-card select:focus,.asp-guest-card input:focus{outline:2px solid var(--asp-teal-700);outline-offset:1px;border-color:var(--asp-teal-700)}
.asp-guest-card button{margin-top:20px;width:100%;padding:var(--asp-space-3);border:0;border-radius:var(--asp-radius-sm);background:var(--asp-teal-700);color:var(--asp-surface);font:inherit;font-size:1.02rem;font-weight:700;cursor:pointer}
.asp-guest-card button:hover{background:var(--asp-teal-800)}
.asp-guest-card button:focus-visible{outline:3px solid var(--asp-navy-900);outline-offset:2px}
.asp-guest-card .mini{margin:var(--asp-space-3) 0 0;color:var(--asp-guest-muted);font-size:.88rem}
.asp-guest-address{margin:var(--asp-space-2) 0 var(--asp-space-3);padding:var(--asp-space-3);border-left:3px solid var(--asp-teal-700);border-radius:var(--asp-radius-sm);background:var(--asp-surface-soft);font-weight:600;color:var(--asp-navy-900);overflow-wrap:anywhere}
.asp-guest-address-form{margin:0 0 var(--asp-space-4)}
.asp-guest-card button.asp-guest-secondary{background:var(--asp-surface);color:var(--asp-teal-700);border:1px solid var(--asp-teal-700)}
.asp-guest-card button.asp-guest-secondary:hover{background:var(--asp-surface);color:var(--asp-teal-800);border-color:var(--asp-teal-800)}
.asp-guest-foot{margin:var(--asp-space-5) 0 0;text-align:center;color:var(--asp-caption-muted);font-size:.78rem;letter-spacing:.08em;text-transform:uppercase}
@media (prefers-reduced-motion:reduce){.asp-guest-card *{transition:none!important}}

/* Area-wide search: one box that covers every part of the area.
   Styled for a light surface -- the area uses `hero compact`, which sits on
   the page background, not the dark gradient `.hero:not(.compact)` gets. */
.asp-area-search{display:flex;gap:var(--asp-space-2);margin-top:var(--asp-space-5);max-width:34rem}
.asp-area-search input{flex:1;min-width:0;padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);background:var(--asp-surface);color:var(--asp-navy-900);font:inherit}
.asp-area-search input::placeholder{color:var(--asp-guest-muted)}
.asp-area-search input:focus{outline:2px solid var(--asp-teal-700);outline-offset:1px;border-color:var(--asp-teal-700)}
.asp-area-search button{padding:var(--asp-space-2) var(--asp-space-4);border:0;border-radius:var(--asp-radius-sm);background:var(--asp-teal-700);color:var(--asp-surface);font:inherit;font-weight:650;cursor:pointer}
.asp-area-search button:hover{background:var(--asp-teal-800)}
.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:calc(var(--asp-space-1) * -1);overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap;border:0}

/* One search result. Its own class rather than .list-row, which is written
   for a div and lays anchors out inline -- two results then read as one. */
.asp-area-result{display:flex;align-items:center;gap:var(--asp-space-3);padding:var(--asp-space-3) var(--asp-space-1);border-top:1px solid var(--asp-line,#e6ecf1);color:inherit;text-decoration:none}
.asp-area-result:first-of-type{border-top:0}
.asp-area-result b{flex:1;min-width:0;color:var(--asp-navy-900)}
.asp-area-result:hover b{color:var(--asp-teal-700)}
.asp-area-result .mini{color:var(--asp-guest-muted);white-space:nowrap}
.asp-area-result:focus-visible{outline:2px solid var(--asp-teal-700);outline-offset:2px;border-radius:var(--asp-radius-sm)}
@media(max-width:560px){.asp-area-result{flex-wrap:wrap;gap:var(--asp-space-1)}.asp-area-result b{flex:1 0 100%}}

/* Which part a control acts on, inside an area. Quieter than the label it
   qualifies -- it answers a question rather than competing for the click. */
.asp-part-scope{margin:0 0 var(--asp-space-2);font-size:12px;color:var(--asp-guest-muted);line-height:1.35}.asp-part-scope b{color:var(--asp-navy-900);font-weight:650}



/* The in-room directory. Read on a phone, standing up, often in the dark:
   one column, large targets, address and directions before anything else. */
body.asp-dir{margin:0;background:var(--asp-canvas);color:var(--asp-navy-900)}
.asp-dir-page{max-width:34rem;margin:0 auto;padding:0 0 var(--asp-space-10)}
.asp-dir-head{padding:var(--asp-space-8) var(--asp-space-5) var(--asp-space-6);background:linear-gradient(160deg,var(--asp-navy-900),var(--asp-navy-700));color:var(--asp-surface)}
.asp-dir-brand{margin:0 0 var(--asp-space-1);font-size:12px;letter-spacing:.16em;text-transform:uppercase;color:var(--asp-teal-eyebrow)}
.asp-dir-head h1{margin:0;color:var(--asp-surface);font-size:clamp(1.7rem,6.4vw,2.3rem);line-height:1.08;letter-spacing:-.03em}
.asp-dir-address{margin:var(--asp-space-2) 0 0;color:var(--asp-navy-text-soft);font-size:1rem;line-height:1.45}
.asp-dir-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:20px}
.asp-dir-action{flex:1 1 9rem;min-width:0;text-align:center;padding:var(--asp-space-3) var(--asp-space-4);border-radius:var(--asp-radius-sm);background:var(--asp-teal-700);color:var(--asp-surface);text-decoration:none;font-weight:650;font-size:.95rem}
.asp-dir-action:hover{background:var(--asp-teal-800)}
.asp-dir-action:focus-visible{outline:3px solid var(--asp-surface);outline-offset:2px}
.asp-dir-facts{display:grid;grid-template-columns:1fr 1fr;gap:var(--asp-space-1);margin:0;background:var(--asp-line);border-bottom:1px solid var(--asp-line)}
.asp-dir-fact{background:var(--asp-surface);padding:var(--asp-space-3) var(--asp-space-4)}
.asp-dir-fact:last-child:nth-child(odd){grid-column:1/-1}
.asp-dir-fact dt{margin:0;font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--asp-guest-muted)}
.asp-dir-fact dd{margin:var(--asp-space-1) 0 0;font-weight:650}
.asp-dir-section{padding:var(--asp-space-6) var(--asp-space-5) var(--asp-space-1)}
.asp-dir-section h2{margin:0;font-size:1.15rem;letter-spacing:-.01em}
.asp-dir-sub{margin:var(--asp-space-1) 0 var(--asp-space-3);color:var(--asp-guest-muted);font-size:.9rem}
.asp-dir-item{display:block;background:var(--asp-surface);border-radius:var(--asp-radius-md);padding:var(--asp-space-3) var(--asp-space-4);margin-bottom:var(--asp-space-2);text-decoration:none;color:inherit;box-shadow:var(--asp-shadow-xs)}
a.asp-dir-item:hover{box-shadow:0 3px 10px rgba(20,28,46,.12)}
a.asp-dir-item:focus-visible{outline:2px solid var(--asp-teal-700);outline-offset:2px}
.asp-dir-item b{display:block;font-size:1rem}
.asp-dir-item span{display:block;margin-top:var(--asp-space-1);color:var(--asp-navy-600);font-size:.92rem;line-height:1.4}
.asp-dir-item small{display:block;margin-top:var(--asp-space-1);color:var(--asp-guest-muted);font-size:.82rem}
.asp-dir-foot{margin:var(--asp-space-6) var(--asp-space-5) 0;text-align:center;color:var(--asp-caption-muted);font-size:.75rem;letter-spacing:.06em;text-transform:uppercase}
@media(min-width:561px){.asp-dir-page{margin-top:var(--asp-space-6);border-radius:var(--asp-radius-lg);overflow:hidden;box-shadow:0 20px 50px rgba(20,28,46,.14);background:var(--asp-canvas)}}
.asp-dir-weather{display:inline-flex;align-items:center;gap:var(--asp-space-2);margin-top:var(--asp-space-4);padding:var(--asp-space-2) var(--asp-space-3);border-radius:var(--asp-radius-full);background:rgba(255,255,255,.12);color:var(--asp-surface);font-size:.85rem}
.asp-dir-weather b{font-size:1rem}
.asp-dir-weather small{color:var(--asp-navy-text-soft)}
.asp-dir-gallery{display:grid;grid-auto-flow:column;grid-auto-columns:min(78%,220px);gap:var(--asp-space-2);overflow-x:auto;padding:var(--asp-space-4) var(--asp-space-5) var(--asp-space-1);scroll-snap-type:x mandatory}
.asp-dir-gallery img{width:100%;height:150px;object-fit:cover;border-radius:var(--asp-radius-md);scroll-snap-align:start;background:var(--asp-line)}
.asp-dir-item-extras{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:8px}
.asp-dir-item-extra{color:var(--asp-teal-700);font-size:.82rem;font-weight:650;text-decoration:none}
.asp-dir-item-extra:hover{text-decoration:underline}
.asp-dir-prose{margin:0 0 var(--asp-space-4);color:var(--asp-navy-600);font-size:.92rem;line-height:1.5}
.asp-dir-emergency>summary{cursor:pointer;list-style:none}
.asp-dir-emergency>summary::-webkit-details-marker{display:none}
.asp-dir-emergency>summary h2::after{content:' ▾';color:var(--asp-guest-muted)}
.asp-dir-emergency[open]>summary h2::after{content:' ▴'}
.asp-dashboard-data-sources>summary{cursor:pointer;list-style:none}
.asp-dashboard-data-sources>summary::-webkit-details-marker{display:none}
.asp-dashboard-data-sources>summary .section-head{margin:0}
.asp-dashboard-data-sources>summary h2::after{content:' ▾';color:var(--asp-muted);font-size:.8em}
.asp-dashboard-data-sources[open]>summary h2::after{content:' ▴'}
.asp-dashboard-data-sources>summary:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:2px;border-radius:var(--asp-radius-xs)}
.asp-dir-details-form textarea{min-height:90px}
.asp-checkbox-row{display:flex;align-items:center;gap:var(--asp-space-2);margin:var(--asp-space-1) 0 var(--asp-space-4);font-size:.9rem;color:var(--asp-navy-600)}
.asp-checkbox-row input{width:auto}
.asp-dir-photo-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(140px,1fr));gap:var(--asp-space-3);margin:var(--asp-space-3) 0}
.asp-dir-photo img{width:100%;height:100px;object-fit:cover;border-radius:var(--asp-radius-sm);background:var(--asp-surface-soft)}
.asp-dir-photo p{margin:var(--asp-space-1) 0 var(--asp-space-1)}

/* Drafted lines waiting on a person. Their own group, never mixed into the
   list they will join -- mixing them is how an unchecked claim ships. */
.asp-dir-pending{margin:var(--asp-space-1) 0 var(--asp-space-4);padding:var(--asp-space-3) var(--asp-space-4);border-radius:var(--asp-radius-md);background:var(--asp-bronze-100);border:1px solid var(--asp-bronze-border-soft)}
.asp-dir-pending>p{margin:0 0 var(--asp-space-2);color:var(--asp-bronze-800)}
.asp-dir-check{display:flex;gap:var(--asp-space-3);align-items:flex-start;justify-content:space-between;padding:var(--asp-space-2) 0;border-top:1px solid var(--asp-bronze-border-soft)}
.asp-dir-check>div{flex:1;min-width:0}
.asp-dir-check b{display:block}
.asp-dir-check p{margin:var(--asp-space-1) 0 0}

/* Finding a hotel by name. Candidates are listed to be chosen between,
   never auto-applied: two hotels in a chain share a name. */
.asp-dir-start{display:block}
.asp-dir-found{margin:var(--asp-space-2) 0 var(--asp-space-1);padding:var(--asp-space-3) var(--asp-space-3);border-radius:var(--asp-radius-md);background:var(--asp-canvas);border:1px solid var(--asp-teal-border-soft)}
.asp-dir-found>p{margin:0 0 var(--asp-space-2);color:#25525a}
.asp-dir-candidate{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3);padding:var(--asp-space-2) 0;border-top:1px solid var(--asp-teal-border-soft)}
.asp-dir-candidate:first-of-type{border-top:0}
.asp-dir-candidate>div{flex:1;min-width:0}
.asp-dir-candidate p{margin:var(--asp-space-1) 0 0}
.asp-dir-credit{margin:var(--asp-space-2) 0 0;font-size:11px;color:#5c6b73}
.asp-dir-credit a{color:inherit}
.asp-dir-problem{margin:var(--asp-space-2) 0 0;color:var(--asp-bronze-800)}
.asp-dir-manual{margin-top:var(--asp-space-3)}
.asp-dir-manual summary{cursor:pointer;color:var(--asp-teal-700);font-size:.9rem;font-weight:600}

/* ── Night Desk: the phone menu sits at the bottom ──────────────────
   Below 560px the rail becomes a bar along the bottom of the screen,
   where a thumb reaches. Five destinations with their words kept, the
   rest behind More.

   A phone's most valuable area is the bottom third and navigation was
   taking the top; and a collapsed rail drops its labels, which turns
   fourteen destinations into a memory test.

   Built on the markup the rail already has rather than by rewriting it:
   rewriting the navigation is what broke it twice this week. */
@media(max-width:560px){
  .shell.asp-has-side{display:flex;flex-direction:column;min-height:100vh}
  .asp-col{order:1;flex:1;min-width:0;padding-bottom:var(--asp-space-16)}
  /* Both of these are .shell children too. Without an explicit order they
     keep the initial value of 0 and therefore render ABOVE .asp-col's
     order:1 -- which is why, on a phone, every page opened with the closing
     "Everything above, ready when you are" card and the entire site footer,
     with the actual page content pushed ~900px below the fold. Only the
     column and the nav rail were ordered when this phone layout was
     written; these two were simply never given one. */
  .asp-final-cta{order:3}
  .asp-site-footer{order:4}
  .asp-side{order:2;position:fixed;left:0;right:0;bottom:0;top:auto;z-index:40;width:auto;height:auto;
    flex:none;flex-direction:row;flex-wrap:nowrap;gap:0;padding:var(--asp-space-1) 4px calc(var(--asp-space-2) + env(safe-area-inset-bottom));
    background:var(--asp-navy-900);border-top:1px solid rgba(255,255,255,.09);
    box-shadow:0 -8px 26px rgba(7,11,18,.34);overflow:visible;align-items:stretch}
  .asp-side-brand{display:none}
  .asp-side-nav{display:flex;flex-direction:row;flex-wrap:nowrap;gap:0;width:100%}
  /* Everything from here down is scoped to .asp-side-nav -- the phone bar's
     own nav, inside the fixed <aside>. The exact same groups markup (same
     classes: .asp-side-group, .asp-side-heading, .asp-side-link) is reused
     verbatim inside the "More" sheet's .asp-more-panel-nav, a completely
     separate part of the page. These rules used to be unscoped, so the
     five-destination allowlist below applied there too -- the sheet meant to
     hold "the rest" ended up hiding everything except the four items already
     in the bar it was supposed to be the alternative to. That is the bug
     behind "More only shows what's already in the bar": confirmed by
     inspecting the live sheet, where every non-allowlisted link rendered
     with computed display:none despite being present in the DOM. */
  .asp-side-nav .asp-side-group{display:contents}
  .asp-side-nav .asp-side-heading{display:none}
  .asp-side-nav .asp-side-link{flex:1;min-width:0;flex-direction:column;align-items:center;justify-content:center;
    gap:var(--asp-space-1);padding:var(--asp-space-2) var(--asp-space-1);border-radius:var(--asp-radius-sm);font-size:var(--asp-text-2xs);font-weight:700;text-align:center;
    letter-spacing:0;line-height:1.15}
  .asp-side-nav .asp-side-link span{display:block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;max-width:100%}
  .asp-side-nav .asp-side-icon{width:19px;height:19px;flex:0 0 19px;opacity:.62}
  .asp-side-nav .asp-side-link.is-active{background:none;color:var(--asp-teal-glow);box-shadow:none}
  .asp-side-nav .asp-side-link.is-active .asp-side-icon{opacity:1}
  /* Past the fifth destination, out of the bar. Reached from the footer's
     Workspace column, which carries every one of them permanently. */
  /* Named rather than counted. `nth-of-type` counts within each parent and
     the groups are `display:contents`, so it counted per group and hid
     almost nothing -- four rows of icons instead of one bar.
     Four destinations plus More: what is happening now, what is mine,
     where the records are, what is late. The rest sits behind More. */
  .asp-side-nav .asp-side-link{display:none}
  /* RC6.6.2: named as they exist today. my-tasks and reminders folded into
     the Inbox and /app/systems became a redirect, so three of these four
     matched nothing and a phone was left with Dashboard and More. */
  .asp-side-nav .asp-side-link[href="/app"],
  .asp-side-nav .asp-side-link[href="/app/dashboard"],
  .asp-side-nav .asp-side-link[href="/app/inbox"],
  .asp-side-nav .asp-side-link[href="/app/messages"]{display:flex}
  .asp-side-more{display:flex;flex:1;min-width:0;flex-direction:column;align-items:center;
    justify-content:center;gap:var(--asp-space-1);padding:var(--asp-space-2) var(--asp-space-1);font-size:var(--asp-text-2xs);font-weight:700;
    color:var(--asp-line-strong);text-decoration:none;line-height:1.15}
  .asp-side-more svg{width:19px;height:19px;fill:none;stroke:currentColor;stroke-width:1.8;
    stroke-linecap:round;opacity:.62}
  .asp-has-side .topbar{position:sticky;top:0;z-index:30}
}
@media(max-width:560px) and (prefers-reduced-motion:no-preference){
  .asp-side-link{transition:color var(--asp-motion-fast) ease}
}

/* Night Desk: what the bottom bar has to move out of its own way. */
@media(max-width:560px){
  /* The assistant launcher sat on top of the bar. Lifted above it, and the
     bar wins the z-order either way -- navigation is not something a
     floating button gets to cover. */
  .asp-chat-launcher{bottom:calc(74px + env(safe-area-inset-bottom));z-index:35}
  .asp-chat-panel{bottom:calc(74px + env(safe-area-inset-bottom));z-index:36}
  /* The header's Menu toggle opened the old top navigation. The bar is the
     navigation now, so the toggle is a control that does nothing. */
  .asp-has-side .asp-nav-toggle{display:none}
  /* "More" is the only route to the five destinations the bar cannot hold,
     and it jumps to #asp-more in the footer's Workspace column. That column
     lives inside .asp-footer-top, which is display:none for signed-in roles
     (it also carries the marketing brand block, which signed-in users should
     not be shown) -- so the jump landed on a hidden element and, correctly
     but uselessly, did nothing at all. Show the link columns here, and keep
     the brand block hidden, so More has a real destination without putting
     marketing copy back in front of somebody who has already signed up.
     Same specificity as the rule above deliberately: this sits later in the
     file, so it wins inside this breakpoint and nowhere else. */
  .role-customer .asp-footer-top,.role-owner .asp-footer-top{display:block}
  .role-customer .asp-footer-brand,.role-owner .asp-footer-brand{display:none}
  /* Back and the wordmark were taking a full row each above the content.
     One compact row: mark, name, and the beta pill. */
  .asp-has-side .topbar{padding:var(--asp-space-2) var(--asp-space-3);gap:var(--asp-space-2);align-items:center}
  /* Same shorthand-cancels-safe-area-top gap as the plain .topbar rule
     above (see that one's comment) -- this is a higher-specificity
     selector (.asp-has-side .topbar), so it needs its own restatement
     rather than being covered by that fix. */
  .asp-has-side .topbar{padding-top:calc(var(--asp-space-2) + env(safe-area-inset-top,0px))}
  .asp-has-side .topbar .brand-context{display:none}
  .asp-has-side .topbar .brand-mark img{width:28px;height:28px}
  .asp-has-side .nav-back{padding:var(--asp-space-1) var(--asp-space-3);font-size:12px}
}

/* ── Night Desk: the type ───────────────────────────────────────────
   2026-09-15 (UI/UX overhaul): one sans-serif family, Public Sans, for
   everything -- body copy, headings, figures, chart labels. Previously
   headings and figures were set in Fraunces, a decorative display serif;
   direct comparison against real operational software a hotelier already
   uses (SynergyMMS, ileftmystuff.com) confirmed serif display type reads
   as editorial/marketing, not operational-software, and none of them use
   one anywhere. Headings now differentiate by weight and tight negative
   letter-spacing instead of by typeface, matching the pattern already
   proven on .asp-dash-v2's own hero heading below. Fraunces' @font-face
   (a 90KB embedded font) is removed entirely along with it -- smaller
   page weight as a direct side effect, not the point of the change. */
body,.asp-home,input,select,textarea,button{
  font-family:'Public Sans',-apple-system,'Segoe UI Variable','Segoe UI',
    ui-sans-serif,system-ui,sans-serif}
h1,h2,h3,.hero h1,.metric b,.asp-kpi-value,.asp-gauge b,.asp-dir-head h1,
.asp-guest-card h1,.asp-chart-tick{
  font-family:'Public Sans',-apple-system,'Segoe UI Variable','Segoe UI',ui-sans-serif,system-ui,sans-serif;
  font-weight:700;letter-spacing:-.022em}
.hero h1,.hero:not(.compact) h1{font-weight:800;letter-spacing:-.03em}
.metric b,.asp-kpi-value{font-weight:700;font-variant-numeric:tabular-nums}
.asp-kpi-label,.asp-side-heading,.eyebrow,.asp-property-switch-label{
  font-family:'Public Sans',-apple-system,'Segoe UI',sans-serif}

/* The reason a connect button is not yet pressable, said next to it. */
.asp-connect-hint:empty{display:none}
.asp-connect-hint{margin:0 0 var(--asp-space-2);max-width:52ch}
button[aria-disabled='true']{opacity:.55;cursor:not-allowed}

/* Closing the loop with a guest: the link back, and the one question at
   the end. Sized for a thumb, because this is only ever read on a phone. */
.asp-guest-follow{display:block;margin:var(--asp-space-4) 0 0;padding:var(--asp-space-3);border-radius:var(--asp-radius-sm);
  background:var(--asp-teal-600);color:var(--asp-surface);text-align:center;text-decoration:none;font-weight:700}
.asp-guest-follow:hover{background:var(--asp-teal-700)}
.asp-ask{margin-top:var(--asp-space-6);padding-top:var(--asp-space-5);border-top:1px solid var(--asp-line)}
.asp-ask-q{margin:0 0 var(--asp-space-3);font-weight:700;font-size:1.05rem}
.asp-rate-row{display:flex;gap:var(--asp-space-2)}
.asp-rate{flex:1;padding:var(--asp-space-3) 0;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-sm);background:var(--asp-surface);
  font:inherit;font-size:1.15rem;font-weight:700;color:var(--asp-navy-900);cursor:pointer}
.asp-rate:hover{border-color:var(--asp-teal-600);background:var(--asp-teal-100)}
.asp-rate:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:2px}
.asp-ask textarea{margin-top:12px}
.asp-dir-ask{margin:var(--asp-space-5) var(--asp-space-5) 0;padding-top:var(--asp-space-5);border-top:1px solid var(--asp-line);display:flex;flex-direction:column;align-items:center}
.asp-dir-ask .asp-dir-action{flex:0 0 auto;min-width:14rem}
.asp-dir-ask .mini{margin:var(--asp-space-2) 0 0;color:var(--asp-muted);text-align:center}

/* What a guest said, one at a time. Never averaged: a mean is the one
   number that cannot tell you which night went wrong. */
.asp-voice{display:flex;gap:var(--asp-space-3);align-items:flex-start;padding:var(--asp-space-3) 0;
  border-top:1px solid var(--asp-line)}
.asp-voice:first-of-type{border-top:0}
.asp-voice-score{flex:0 0 32px;height:32px;border-radius:var(--asp-radius-sm);display:grid;place-items:center;
  background:var(--asp-teal-100);color:var(--asp-teal-700);font-weight:800;font-size:14px}
.asp-voice-score.is-low{background:#fbe6e4;color:var(--asp-bad)}
.asp-voice-said{margin:0;font-size:.95rem;line-height:1.45}
.asp-voice p.mini{margin:var(--asp-space-1) 0 0}

/* ── Night Desk: depth ──────────────────────────────────────────────
   What the approved design had that the palette and type alone did not.
   Nothing here carries meaning, so none of it is applied to anything that
   does -- a tinted row is a row that looks like it means something. */

/* The rail gets light where the brand is, so it reads as an object rather
   than a shaded margin. Behind everything, and never in the way. */
/* Scoped above the point the sidebar becomes the mobile bottom bar. Below
   it, the bare selector below (.asp-side{position:fixed;...}) must win the
   tie on `position` -- as a bare, unscoped rule this one used to sit after it
   in the file and silently cancelled `position:fixed` on every page, at
   every width, because both are the same selector and source order breaks
   the tie. `position:fixed` already gives ::before a containing block, so
   nothing here needs repeating below the breakpoint. */
@media(min-width:561px){
/* The rail is a structural part of the signed-in shell, not a viewport-sized
   floating panel. Let the flex row stretch it through the page's footer so a
   long customer or Owner Control page never leaves a pale gap beside it. */
.asp-side{position:relative;align-self:stretch;height:auto;overflow:visible}
.asp-side::before{content:'';position:absolute;inset:0 0 auto 0;height:200px;
  pointer-events:none;z-index:0;
  background:radial-gradient(58% 62% at 28% 0%,rgba(63,217,209,.15),transparent 72%)}
.asp-side-brand,.asp-side-nav{position:relative;z-index:1}
}

/* A figure is the point of its card, so the accent runs teal to nothing
   beneath it and the eye lands on the number, not the border. */
.asp-kpi{position:relative;overflow:hidden;
  transition:box-shadow .18s ease,transform .18s ease}
.asp-kpi::after{content:'';position:absolute;inset:auto 0 0 0;height:2px;
  background:linear-gradient(90deg,var(--asp-teal-600),transparent)}
.asp-kpi.is-missing::after{background:linear-gradient(90deg,var(--asp-line-strong),transparent)}
.asp-kpi:hover{box-shadow:var(--asp-shadow-sm);transform:translateY(-1px)}

/* Cards sit slightly above the page. Small enough that a page of them
   still reads as a page rather than a pile. */
.card{box-shadow:var(--asp-shadow-xs)}
.system-card:hover,.asp-capability-card:hover{box-shadow:var(--asp-shadow-sm)}

/* The area header carries the same light as the rail, so moving between
   them feels like one product rather than two screens. */
.hero:not(.compact){position:relative;overflow:hidden}
.hero:not(.compact)::after{content:'';position:absolute;inset:-40% -10% auto auto;
  width:52%;height:180%;pointer-events:none;
  background:radial-gradient(closest-side,rgba(63,217,209,.13),transparent)}
.hero:not(.compact)>*{position:relative;z-index:1}

/* Motion is a preference, not a default. */
@media(prefers-reduced-motion:reduce){
  .asp-kpi{transition:none}
  .asp-kpi:hover{transform:none}
}

/* Writing a directory entry by hand. Stacked rather than inline: these are
   sentences a guest will read, not fields to tab through.
   Named `compose` rather than `add` because `asp-dir-add` is a substring of
   the existing `asp-dir-address`, and a class that cannot be searched for
   without false hits is a class that gets edited by accident. */
.asp-dir-compose{margin-top:var(--asp-space-5);padding-top:var(--asp-space-4);border-top:1px solid var(--asp-line)}
.asp-dir-compose label{display:block;margin:var(--asp-space-3) 0 var(--asp-space-1);font-size:13px;font-weight:650}
.asp-dir-compose input,.asp-dir-compose select{width:100%;max-width:34rem;font:inherit;
  font-size:14px;padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line-strong);
  border-radius:var(--asp-radius-sm);background:var(--asp-surface);color:var(--asp-ink)}
.asp-dir-compose input:focus,.asp-dir-compose select:focus{
  outline:2px solid var(--asp-teal-600);outline-offset:1px;border-color:var(--asp-teal-600)}
.asp-dir-compose button{display:block;margin-top:16px}

/* Where you are. Quiet on purpose: it is orientation, not navigation --
   at the weight of the nav it would compete with the page's own heading. */
.asp-trail{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2);
  margin:0 0 var(--asp-space-3);font-size:12.5px;line-height:1.3;color:var(--asp-muted)}
.asp-trail a{color:var(--asp-muted);text-decoration:none;border-radius:var(--asp-radius-xs)}
.asp-trail a:hover{color:var(--asp-ink);text-decoration:underline}
.asp-trail a:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:2px}
.asp-trail [aria-current='page']{color:var(--asp-ink);font-weight:650}
.asp-trail-sep{color:var(--asp-line-strong)}

/* What the package did not carry, and what the rest of it was. Both are
   quiet on purpose: they are context for the figures above, not findings. */
.asp-dash-absent{margin:var(--asp-space-2) var(--asp-space-1) 0;font-size:12.5px;line-height:1.45;color:var(--asp-muted);max-width:70ch}
.asp-dash-other{margin:var(--asp-space-3) 0 0;padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface-soft);max-width:70ch}
.asp-dash-other summary{cursor:pointer;font-size:13.5px;font-weight:650;color:var(--asp-ink)}
.asp-dash-other summary:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:2px}
.asp-dash-other p{margin:var(--asp-space-2) 0 0}
/* The evidence line under a figure carries the whole filename in a title,
   so the visible text can be the part that identifies the report. */
.asp-kpi-note span[title]{border-bottom:1px dotted var(--asp-line-strong)}

/* Catalogue choices carry three separate pieces of information.  Treat them
   as a compact decision card rather than inline label text, so a hotelier can
   scan purpose, operational outcome, and audience without deciphering a
   run-on sentence. */
.asp-catalog-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-4);align-items:start}
.asp-catalog-section{margin:0;min-width:0;height:100%}
.asp-catalog-section h2{margin-bottom:var(--asp-space-4);color:var(--asp-navy-900);font-size:18px}
.asp-catalog-picker .choice,.asp-catalog-picker .asp-catalog-active{display:grid;grid-template-columns:22px minmax(0,1fr);column-gap:var(--asp-space-2);row-gap:var(--asp-space-1);align-items:start;margin:0;padding:var(--asp-space-3) 0;border:0;border-top:1px solid var(--asp-line);border-radius:0;background:transparent;color:var(--asp-ink);box-shadow:none}
.asp-catalog-picker .choice:first-of-type,.asp-catalog-picker .asp-catalog-active:first-of-type{border-top:0;padding-top:0}
.asp-catalog-picker .choice input{grid-column:1;grid-row:1 / span 3;width:20px;min-height:20px;margin:var(--asp-space-1) 0 0}
.asp-catalog-picker .choice>span,.asp-catalog-picker .choice>small,.asp-catalog-picker .asp-catalog-active>span,.asp-catalog-picker .asp-catalog-active>small,.asp-catalog-picker .asp-catalog-active>.btn{grid-column:2;min-width:0}
.asp-catalog-picker .choice b,.asp-catalog-picker .asp-catalog-active b{display:inline;color:var(--asp-navy-900);font-size:14px;line-height:1.35}
.asp-catalog-picker .choice small,.asp-catalog-picker .asp-catalog-active small{display:block;color:var(--asp-muted);font-size:12px;font-weight:500;line-height:1.45}
.asp-catalog-picker .choice small:last-child{color:#49606d}
.asp-catalog-picker .asp-catalog-more{margin:-4px 0 var(--asp-space-3) var(--asp-space-8)}
.asp-catalog-picker .asp-catalog-more summary{cursor:pointer;color:var(--asp-teal-700);font-size:12px;font-weight:650;line-height:1.45}
.asp-catalog-picker .asp-catalog-more summary:hover{color:var(--asp-teal-800)}
.asp-catalog-picker .asp-catalog-more small{display:block;margin-top:4px;color:var(--asp-muted);font-size:12px;font-weight:500;line-height:1.45}
.asp-catalog-picker .asp-catalog-active{grid-template-columns:minmax(0,1fr);padding-top:0}.asp-catalog-picker .asp-catalog-active+.choice,.asp-catalog-picker .asp-catalog-active+.asp-catalog-active{padding-top:var(--asp-space-3)}
.asp-reminders-filter{margin:0 0 var(--asp-space-5)}.asp-reminders-filter .btn{width:auto}
.asp-catalog-picker .asp-catalog-active>.btn{justify-self:start;width:auto;min-height:36px;margin-top:var(--asp-space-1);padding:var(--asp-space-2) var(--asp-space-3);font-size:12px}
.asp-catalog-submit{grid-column:1 / -1;display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-4);margin-top:0}.asp-catalog-submit button{width:auto}

/* One primary next step deserves the full row; keeping it in the inherited
   three-column grid made the home page look unfinished beside a wide blank. */
.asp-home-catalogue-grid{grid-template-columns:minmax(0,1fr);margin:var(--asp-space-5) 0}.asp-home-catalogue{min-height:0;display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:var(--asp-space-4);padding:var(--asp-space-6)}.asp-home-catalogue .icon{margin:0}.asp-home-catalogue h2{margin:0;color:var(--asp-navy-900)}.asp-home-catalogue p{max-width:62ch;margin:var(--asp-space-1) 0 0}.asp-home-catalogue .btn{width:auto;white-space:nowrap}

/* The shared rail is the primary owner navigation on desktop.  Keep the
   existing horizontal section navigation for narrow screens, where it remains
   the accessible full list behind the compact mobile rail. */
@media(min-width:1025px){.asp-side-owner~.asp-col .asp-owner-nav{display:none}}

/* The room board. A bar per count against the rooms the hotel has, because
   these are parts of one whole and a bare number is not readable as one. */
.asp-bars{display:flex;flex-direction:column;gap:var(--asp-space-3);margin-top:4px}
.asp-bar-row{display:grid;grid-template-columns:8.5rem 1fr 3.2rem;align-items:center;gap:var(--asp-space-3)}
.asp-bar-label{font-size:13.5px;color:var(--asp-muted);font-weight:600}
.asp-bar-track{display:block;width:100%;height:10px}
.asp-bar-bed{fill:var(--asp-surface-soft);stroke:var(--asp-line);stroke-width:1}
.asp-bar-fill{fill:var(--asp-teal-600)}
.asp-bar-fill.is-warn{fill:var(--asp-bronze-500)}
.asp-bar-value{text-align:right;font-variant-numeric:tabular-nums;font-size:15px}
@media(max-width:560px){.asp-bar-row{grid-template-columns:7rem 1fr 2.6rem;gap:var(--asp-space-2)}}
@media(max-width:768px){.asp-catalog-picker{grid-template-columns:1fr}.asp-catalog-submit{align-items:stretch;flex-direction:column}.asp-catalog-submit button,.asp-home-catalogue .btn{width:100%}.asp-home-catalogue{grid-template-columns:auto minmax(0,1fr)}.asp-home-catalogue .btn{grid-column:1 / -1}}

/* Counts of people and reservations: one figure each, read across. */
.asp-count-grid{display:grid;gap:var(--asp-space-3);margin-top:4px;
  grid-template-columns:repeat(auto-fit,minmax(8.5rem,1fr))}
.asp-count{padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}
.asp-count b{display:block;font-size:1.75rem;font-weight:800;line-height:1.1;letter-spacing:-.03em;
  font-variant-numeric:tabular-nums;color:var(--asp-ink)}
.asp-count span{display:block;margin-top:var(--asp-space-1);font-size:12.5px;color:var(--asp-muted)}


/* RC4.4.1 owner invitation clarity */
.asp-invite-workspace{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(260px,.9fr);gap:var(--asp-space-4);align-items:start}
.asp-invite-compose,.asp-invite-delivery,.asp-invite-current,.asp-invite-history{margin-top:var(--asp-space-5)}
.asp-invite-compose form{display:grid;gap:var(--asp-space-2)}
.asp-invite-delivery h2{margin:var(--asp-space-4) 0 var(--asp-space-2)}.asp-invite-delivery ol{margin:0;padding-left:var(--asp-space-5);color:var(--asp-muted);display:grid;gap:var(--asp-space-2)}
.asp-invite-row,.asp-invite-history-row{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-4);padding:var(--asp-space-4) 0;border-top:1px solid var(--asp-line)}
.asp-invite-row:first-of-type{border-top:0}.asp-invite-row b,.asp-invite-history-row b{display:block;font-size:14px}.asp-invite-row p,.asp-invite-row span,.asp-invite-history-row span{display:block;margin:var(--asp-space-1) 0 0;color:var(--asp-muted);font-size:12px}
.asp-invite-row-action{display:flex;align-items:center;gap:var(--asp-space-2);flex:none}.asp-invite-row-action .asp-inline-form{margin:0}.asp-invite-row-action .secondary{min-height:36px;padding:var(--asp-space-2) var(--asp-space-3)}
.asp-invite-empty{padding:var(--asp-space-4) 0}.asp-invite-empty p{margin:var(--asp-space-1) 0 0;color:var(--asp-muted);font-size:13px}
.asp-invite-history{padding:0}.asp-invite-history summary{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3);padding:var(--asp-space-5) var(--asp-space-5);cursor:pointer;list-style:none}.asp-invite-history summary::-webkit-details-marker{display:none}.asp-invite-history summary small{display:block;margin-top:var(--asp-space-1);color:var(--asp-muted);font-size:12px;font-weight:500}.asp-invite-history summary>span:last-child{font-size:12px;font-weight:750;color:var(--asp-teal-700)}.asp-invite-history[open] summary>span:last-child{font-size:0}.asp-invite-history[open] summary>span:last-child:after{content:'Hide';font-size:12px}.asp-invite-history-list{padding:0 var(--asp-space-5) var(--asp-space-3)}
@media(max-width:768px){.asp-invite-workspace{grid-template-columns:1fr}.asp-invite-row,.asp-invite-history-row{align-items:flex-start;flex-direction:column;gap:var(--asp-space-2)}.asp-invite-row-action{width:100%;justify-content:space-between}.asp-invite-row-action .asp-inline-form{flex:1}.asp-invite-row-action .secondary{width:100%}.asp-invite-history summary{padding:var(--asp-space-4)}.asp-invite-history-list{padding:0 var(--asp-space-4) var(--asp-space-2)}}


/* RC4.4.2 dashboard content hierarchy */
.asp-dash-v2{display:grid;gap:var(--asp-space-4);padding-bottom:var(--asp-space-1)}
.asp-dash-v2 .hero.compact{background:linear-gradient(135deg,var(--asp-surface) 0%,var(--asp-canvas) 100%);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);padding:var(--asp-space-6);box-shadow:var(--asp-shadow-xs);overflow:visible}
.asp-dash-v2 .hero.compact::after{display:none}
.asp-dash-v2 .hero.compact h1{color:var(--asp-ink);font-family:'Public Sans',-apple-system,'Segoe UI',sans-serif;font-size:clamp(30px,4vw,46px);font-weight:800;letter-spacing:-.052em;line-height:1.06}
.asp-dash-v2 .hero.compact .lead{max-width:700px;color:var(--asp-muted);font-size:15px}
.asp-dash-v2 .hero.compact .eyebrow{color:var(--asp-teal-700)}
.asp-dashboard-hero-row{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--asp-space-6)}
.asp-dashboard-trust{display:inline-flex;align-items:center;gap:var(--asp-space-2);flex:none;margin-top:4px;padding:var(--asp-space-2) var(--asp-space-3);border:1px solid #c9e6dc;border-radius:var(--asp-radius-full);background:var(--asp-good-soft);color:#19754a;font-size:12px;font-weight:800;white-space:nowrap}
.asp-dashboard-trust-dot{display:block;width:7px;height:7px;border-radius:50%;background:#22a861;box-shadow:0 0 0 4px rgba(34,168,97,.10)}
.asp-dash-v2 .hero.compact .mini.muted{color:var(--asp-muted)}
.asp-dash-v2 .asp-dash-picker{margin:var(--asp-space-5) 0 var(--asp-space-2)}.asp-dash-v2 .asp-dash-picker label{color:var(--asp-muted)}
.asp-dash-v2 .asp-dash-picker select{min-width:245px;background:var(--asp-surface);border-color:var(--asp-line-strong);color:var(--asp-ink);box-shadow:var(--asp-shadow-xs)}
.asp-dash-v2 .asp-kpi-grid{grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--asp-space-3);margin:0}
.asp-dash-v2 .card,.asp-dash-v2 .asp-kpi,.asp-dash-v2 .asp-hotel-pulse-card,.asp-dash-v2 .asp-overview-card{background:var(--asp-surface);border:1px solid var(--asp-line);color:var(--asp-ink);box-shadow:var(--asp-shadow-xs)}
.asp-dash-v2 .card:hover,.asp-dash-v2 .asp-hotel-pulse-card:hover,.asp-dash-v2 .asp-overview-card:hover{border-color:var(--asp-teal-500);box-shadow:var(--asp-shadow-sm)}
.asp-dash-v2 .card h2,.asp-dash-v2 .card h3{color:var(--asp-ink)}
.asp-dash-v2 .card .muted,.asp-dash-v2 .card>p{color:var(--asp-muted)}
.asp-dash-v2 .asp-kpi{min-height:162px;padding:var(--asp-space-4) var(--asp-space-4) var(--asp-space-4)}
.asp-dash-v2 .asp-kpi-label{color:var(--asp-muted);font-size:12px}.asp-dash-v2 .asp-kpi-value{color:var(--asp-ink);font-family:'Public Sans',-apple-system,'Segoe UI',sans-serif;font-size:28px;font-weight:800;letter-spacing:-.045em}
.asp-dash-v2 .asp-kpi.is-missing{background:linear-gradient(180deg,var(--asp-surface) 0%,var(--asp-surface) 100%);border-style:solid;border-color:var(--asp-line)}
.asp-dash-v2 .asp-kpi.is-missing .asp-kpi-value{font-size:0;color:var(--asp-muted);margin-top:var(--asp-space-4)}.asp-dash-v2 .asp-kpi.is-missing .asp-kpi-value::after{content:'Awaiting audit';font-size:14px;font-weight:750;letter-spacing:-.01em}
.asp-dash-v2 .asp-kpi-note{color:var(--asp-muted)}
.asp-dash-v2 .asp-hotel-pulse-name,.asp-dash-v2 .asp-overview-card-top b{color:var(--asp-ink)}
.asp-dash-v2 .asp-hotel-pulse-stats b{color:var(--asp-ink)}.asp-dash-v2 .asp-hotel-pulse-stats span{color:var(--asp-muted)}
.asp-dash-v2 .asp-dash-other{background:var(--asp-surface-soft);border-color:var(--asp-line)}.asp-dash-v2 .asp-dash-other summary{color:var(--asp-ink)}
.asp-dash-v2 .pill{background:var(--asp-surface-soft);color:var(--asp-ink)}
.asp-dash-v2 .asp-gauge-track{stroke:var(--asp-line)}.asp-dash-v2 .asp-chart-grid{stroke:var(--asp-line)}.asp-dash-v2 .asp-chart-tick,.asp-dash-v2 .asp-chart-xtick{fill:var(--asp-muted)}.asp-dash-v2 .asp-chart-key{color:var(--asp-muted)}
.asp-dash-v2 a.btn.secondary{border-color:var(--asp-line-strong);color:var(--asp-ink)}
.asp-dash-v2 .asp-ai-idea{background:var(--asp-surface-soft);border-color:var(--asp-line)}.asp-dash-v2 .asp-ai-idea h3,.asp-dash-v2 .asp-ai-step{color:var(--asp-ink)}.asp-dash-v2 .asp-ai-idea p{color:var(--asp-muted)}
@media(max-width:1024px){.asp-dash-v2 .asp-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.asp-dash-v2 .hero.compact{padding:var(--asp-space-5) var(--asp-space-4)}.asp-dashboard-hero-row{flex-direction:column;gap:var(--asp-space-3)}.asp-dash-v2 .asp-kpi-grid{grid-template-columns:1fr}.asp-dash-v2 .asp-dash-picker select{width:100%;min-width:0}.asp-dashboard-trust{margin-top:0}}


/* RC4.4.2 GM recommendation compaction */
.asp-dash-v2 .asp-gm-actions{border-top:3px solid var(--asp-navy-800)}
.asp-dash-v2 .asp-gm-actions .section-head{gap:var(--asp-space-4)}.asp-dash-v2 .asp-gm-actions .section-head>.pill{max-width:240px;text-align:center}
.asp-dash-v2 .asp-gm-action{padding:var(--asp-space-4) var(--asp-space-4)}.asp-dash-v2 .asp-gm-action p{font-size:12.5px;line-height:1.45}.asp-dash-v2 .asp-gm-action p b{color:var(--asp-ink)}
.asp-dash-v2 .asp-gm-action .asp-ai-step{margin-top:var(--asp-space-3);padding-top:var(--asp-space-3);border-top:1px solid var(--asp-line);font-weight:650;color:var(--asp-ink)}
.asp-ai-more{margin-top:var(--asp-space-4);padding-top:var(--asp-space-4);border-top:1px solid var(--asp-line)}.asp-ai-more summary{cursor:pointer;color:var(--asp-teal-700);font-size:13px;font-weight:800}.asp-ai-more .asp-ai-grid{margin-top:var(--asp-space-3)}
@media(max-width:560px){.asp-dash-v2 .asp-gm-actions .section-head{align-items:flex-start;flex-direction:column}.asp-dash-v2 .asp-gm-actions .section-head>.pill{max-width:none}}

/* RC4.8.8 Dashboard operating flow */
.asp-dashboard-flow{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--asp-space-2);margin:var(--asp-space-4) 0 var(--asp-space-5)}
.asp-dashboard-flow a{display:flex;align-items:center;gap:var(--asp-space-2);min-height:54px;padding:var(--asp-space-3) var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);color:var(--asp-ink);text-decoration:none;font-weight:780;box-shadow:0 5px 14px rgba(10,34,64,.05)}
.asp-dashboard-flow b{display:grid;place-items:center;width:24px;height:24px;border-radius:50%;background:var(--asp-teal-100);color:var(--asp-teal-800);font-size:12px}
.asp-dashboard-flow span{display:block;color:var(--asp-muted);font-size:12px;font-weight:650;margin-left:auto}
@media(max-width:560px){.asp-dashboard-flow{grid-template-columns:1fr}.asp-dashboard-flow a{min-height:48px}}


/* RC4.8.9 Dashboard reference snapshot */
.asp-dashboard-reference{max-width:1320px;margin-inline:auto}
.asp-reference-top{padding:var(--asp-space-4) var(--asp-space-5) var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);background:linear-gradient(135deg,var(--asp-surface) 0%,var(--asp-canvas) 100%);box-shadow:0 10px 26px rgba(10,34,64,.05)}
.asp-reference-title{display:flex;gap:var(--asp-space-4);align-items:flex-start;justify-content:space-between}
.asp-reference-title h1{margin:var(--asp-space-1) 0 var(--asp-space-1);font-size:clamp(26px,3.2vw,42px);letter-spacing:-.045em;color:var(--asp-navy-deep)}
.asp-reference-title p{margin:0;color:#436077;font-weight:650}
.asp-reference-trust{display:inline-flex;align-items:center;gap:var(--asp-space-2);white-space:nowrap;padding:var(--asp-space-2) var(--asp-space-3);border-radius:var(--asp-radius-full);background:var(--asp-good-soft);color:#08784f;font-size:12px;font-weight:850}
.asp-reference-trust i,.asp-reference-coverage-dot{display:inline-block;width:8px;height:8px;border-radius:50%;background:#10a66e;box-shadow:0 0 0 3px rgba(16,166,110,.12)}
.asp-reference-picker{display:grid;grid-template-columns:minmax(200px,1.35fr) minmax(175px,.82fr) auto;gap:var(--asp-space-2);align-items:end;margin-top:var(--asp-space-4)}
.asp-reference-picker label{display:grid;gap:var(--asp-space-1);color:#355269;font-size:11px;font-weight:850;letter-spacing:.015em}
.asp-reference-picker select,.asp-reference-picker input{min-height:43px;border:1px solid #cbd9e2;border-radius:var(--asp-radius-sm);background:var(--asp-surface);color:#102c42;font-weight:700}
.asp-reference-picker .btn{min-height:43px;white-space:nowrap}
.asp-reference-date-nav{display:flex;gap:var(--asp-space-3);justify-content:flex-end;align-items:center;margin-top:var(--asp-space-2);color:#63778a;font-size:12px;font-weight:700}
.asp-reference-date-nav a{color:var(--asp-teal-700);text-decoration:none}
.asp-reference-status{margin:var(--asp-space-2) 0 0;color:#587086;font-size:12px;font-weight:650}
.asp-reference-kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--asp-space-3);margin:var(--asp-space-3) 0}
.asp-reference-kpi{display:flex;min-width:0;min-height:148px;flex-direction:column;justify-content:space-between;padding:var(--asp-space-4);border:1px solid #d8e3e9;border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:0 6px 18px rgba(10,34,64,.05);color:#0d2f49;text-decoration:none;transition:transform var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,border-color var(--asp-motion-fast) ease}
.asp-reference-kpi:hover{transform:translateY(-2px);border-color:#85bfc4;box-shadow:0 12px 22px rgba(10,34,64,.1)}
.asp-reference-kpi-label{font-size:12px;font-weight:850;color:#31516a}
.asp-reference-kpi strong{display:block;margin:var(--asp-space-1) 0 0;font-size:clamp(22px,2.25vw,31px);line-height:1.05;letter-spacing:-.045em;color:var(--asp-navy-deep)}
.asp-reference-kpi-note{font-size:11px;color:#647a8c;font-weight:650}
.asp-reference-kpi-trend{display:flex;align-items:end;gap:var(--asp-space-2);min-height:22px}
.asp-reference-kpi-trend em{font-size:10px;font-style:normal;font-weight:800;color:#07845e;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.asp-reference-spark{display:flex;align-items:end;gap:var(--asp-space-1);height:20px;min-width:46px;flex:1}
.asp-reference-spark-bar{display:block;flex:1;min-width:2px;border-radius:2px 2px 0 0;background:linear-gradient(180deg,#0aafb2,#087080)}
.asp-reference-spark-bar.h-1{height:3px}.asp-reference-spark-bar.h-2{height:5px}.asp-reference-spark-bar.h-3{height:7px}.asp-reference-spark-bar.h-4{height:9px}.asp-reference-spark-bar.h-5{height:11px}.asp-reference-spark-bar.h-6{height:13px}.asp-reference-spark-bar.h-7{height:15px}.asp-reference-spark-bar.h-8{height:17px}.asp-reference-spark-bar.h-9{height:19px}.asp-reference-spark-bar.h-10{height:21px}
.asp-reference-spark-empty{font-size:10px;color:#8798a6;font-weight:700}
.asp-reference-kpi.is-missing{background:var(--asp-surface);border-style:dashed}
.asp-reference-kpi.is-missing strong{color:#667e8f}
.asp-reference-coverage{cursor:default;background:linear-gradient(135deg,var(--asp-canvas),var(--asp-surface))}
.asp-reference-coverage-dot{margin-bottom:4px}
.asp-reference-intelligence{margin:var(--asp-space-3) 0;padding:var(--asp-space-4) var(--asp-space-5);border:1px solid var(--asp-line);border-left:4px solid var(--asp-teal-600);border-radius:var(--asp-radius-md);background:linear-gradient(135deg,var(--asp-canvas) 0%,var(--asp-surface) 65%);color:var(--asp-ink);box-shadow:var(--asp-shadow-xs)}
.asp-reference-intelligence .eyebrow{color:var(--asp-teal-700)}
.asp-reference-intelligence-head{display:flex;gap:var(--asp-space-4);justify-content:space-between;align-items:flex-start}
.asp-reference-intelligence h2{margin:var(--asp-space-1) 0 var(--asp-space-1);color:var(--asp-ink);font-size:21px}
.asp-reference-intelligence p{margin:0;color:var(--asp-muted);font-size:13px;font-weight:600}
.asp-reference-intelligence-head a{margin-top:4px;white-space:nowrap;color:var(--asp-teal-700);font-size:12px;font-weight:850;text-decoration:none}
.asp-reference-intelligence-loading{display:grid;grid-template-columns:10px 1fr;gap:var(--asp-space-2) var(--asp-space-2);align-items:center;margin-top:16px;padding:var(--asp-space-3);border-radius:var(--asp-radius-sm);background:rgba(255,255,255,.97);color:#183a4b}
.asp-reference-intelligence-loading span{width:8px;height:8px;border-radius:50%;background:#17a879}.asp-reference-intelligence-loading span:nth-child(2){background:#d6a440}.asp-reference-intelligence-loading span:nth-child(3){background:#4ca6b1}
.asp-reference-intelligence-loading b{grid-column:2;color:#39586a;font-size:12px}.asp-reference-intelligence-loading span:nth-child(3){grid-row:3}.asp-reference-intelligence-loading b:last-child{grid-row:1 / span 3;align-self:center}
.asp-reference-detail{margin:var(--asp-space-5) 0 0;padding:var(--asp-space-1) 0 0;text-align:center}
.asp-reference-detail-heading{display:grid;grid-template-columns:1fr auto 1fr;gap:var(--asp-space-3);align-items:center}
.asp-reference-detail-heading>span{height:1px;background:repeating-linear-gradient(90deg,#b9cbd6 0 5px,transparent 5px 9px)}
.asp-reference-detail h2{margin:0;color:#0b3049;font-size:20px}.asp-reference-detail p{margin:var(--asp-space-1) 0 0;color:#667d8f;font-size:12px;font-weight:650}
.asp-reference-detail-skeleton{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--asp-space-3);margin:var(--asp-space-4) 0}.asp-reference-detail-skeleton i{display:block;height:86px;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:linear-gradient(120deg,var(--asp-canvas) 20%,var(--asp-canvas) 38%,var(--asp-canvas) 53%);background-size:220% 100%;animation:asp-reference-shimmer 2.1s ease infinite}
@keyframes asp-reference-shimmer{to{background-position:-220% 0}}
@media(max-width:1024px){.asp-reference-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.asp-reference-kpi:last-child{grid-column:span 2}.asp-reference-picker{grid-template-columns:1fr 1fr auto}}
@media(max-width:560px){.asp-reference-top{padding:var(--asp-space-4) var(--asp-space-3)}.asp-reference-title{display:block}.asp-reference-trust{margin-top:var(--asp-space-3)}.asp-reference-picker{grid-template-columns:1fr}.asp-reference-picker .btn{width:100%}.asp-reference-date-nav{justify-content:space-between;gap:var(--asp-space-2);font-size:11px}.asp-reference-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-2)}.asp-reference-kpi{min-height:133px;padding:var(--asp-space-3)}.asp-reference-kpi:last-child{grid-column:span 2}.asp-reference-kpi strong{font-size:25px}.asp-reference-intelligence{padding:var(--asp-space-4)}.asp-reference-intelligence-head{display:block}.asp-reference-intelligence-head a{display:inline-block;margin-top:var(--asp-space-3)}.asp-reference-detail-skeleton{grid-template-columns:1fr 1fr}.asp-reference-detail-skeleton i:last-child{display:none}}


/* RC4.4.3 unified hotel operating programs */
.asp-dash-v2 .asp-program-card{min-height:174px;text-decoration:none}.asp-program-parts{display:grid;gap:var(--asp-space-1);margin:var(--asp-space-3) 0 0;padding:0;list-style:none}.asp-program-parts li{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-2);color:var(--asp-ink);font-size:12px;font-weight:700}.asp-program-parts .pill{font-size:10px;white-space:nowrap}.asp-program-overview .asp-overview-grid{align-items:stretch}.asp-system-control-card .section-head{align-items:center}.asp-report-status-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:var(--asp-space-2)}.asp-report-status{padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface-soft)}.asp-report-status b,.asp-report-status span{display:block}.asp-report-status span{margin-top:4px;color:var(--asp-muted);font-size:13px}@media(max-width:560px){.asp-program-parts li{align-items:flex-start;flex-direction:column;gap:var(--asp-space-1)}.asp-system-control-card .section-head{align-items:flex-start}.asp-system-control-card .status-row{width:100%}.asp-system-control-card .status-row .btn{flex:1;text-align:center}}


/* RC4.4.4 verified hotel identity */
.asp-identity-card{align-items:stretch;display:grid;grid-template-columns:minmax(220px,1fr) minmax(220px,.8fr);gap:var(--asp-space-3)}.asp-identity-summary{align-self:center}.asp-identity-card label{margin:0}.asp-identity-card input[type='url']{margin-top:var(--asp-space-2)}.asp-identity-confirm{align-items:flex-start;display:flex!important;gap:var(--asp-space-2);grid-column:2}.asp-identity-confirm input{flex:0 0 auto;margin-top:var(--asp-space-1)}.asp-identity-card button{grid-column:2;justify-self:start}.asp-verified-identity{border-color:color-mix(in srgb,var(--asp-teal) 38%,var(--asp-line))}@media(max-width:768px){.asp-identity-card{grid-template-columns:1fr}.asp-identity-confirm,.asp-identity-card button{grid-column:1}.asp-identity-card button{width:100%}}


/* RC4.4.5 hotelier UX closure */
.asp-dash-v2 .asp-program-card{cursor:default}.asp-dash-v2 .asp-program-parts a{color:var(--asp-ink);text-decoration:none}.asp-dash-v2 .asp-program-parts a:hover,.asp-dash-v2 .asp-program-parts a:focus-visible{color:var(--asp-teal-700);text-decoration:underline}.asp-program-all{display:inline-block;margin-top:var(--asp-space-4);color:var(--asp-teal-700);font-weight:800;text-decoration:none}.asp-program-all:hover,.asp-program-all:focus-visible{text-decoration:underline}.asp-program-card .asp-overview-card-top>a{color:var(--asp-ink);text-decoration:none}.asp-program-card .asp-overview-card-top>a:hover b,.asp-program-card .asp-overview-card-top>a:focus-visible b{color:var(--asp-teal-700);text-decoration:underline}
.asp-home .main>.hero{margin-bottom:var(--asp-space-5);padding:var(--asp-space-8) var(--asp-space-10)}.asp-home-quick-actions{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-6);margin:0 0 var(--asp-space-3);padding:var(--asp-space-5) var(--asp-space-6);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}.asp-home-quick-actions h2{margin:var(--asp-space-1) 0 0;color:var(--asp-navy-900);font-size:20px}.asp-home-quick-actions p{margin:var(--asp-space-1) 0 0}.asp-home-quick-links{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--asp-space-2)}.asp-home-catalogue-grid{margin-top:var(--asp-space-4)}.asp-home-catalogue{padding:var(--asp-space-5) var(--asp-space-6)}.asp-home-catalogue h2{font-size:19px}@media(max-width:768px){.asp-home .main>.hero{padding:var(--asp-space-6) var(--asp-space-5)}.asp-home-quick-actions{align-items:stretch;flex-direction:column;padding:var(--asp-space-5)}.asp-home-quick-links{justify-content:stretch;flex-direction:column}.asp-home-quick-links .btn{width:100%}}

/* RC9.4.1 Lost & Found home and quick log */
.page-lost-found .asp-stage-tabs{display:block;gap:0;padding:0;border:0;background:transparent;overflow:visible}
.asp-lf-needs{margin:0 0 var(--asp-space-4);padding:var(--asp-space-5);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);background:var(--asp-surface);box-shadow:var(--asp-shadow-sm)}
.asp-lf-needs .section-head{align-items:flex-start;margin-bottom:var(--asp-space-3)}
.asp-lf-needs .section-head h2,.asp-lf-board-bar h2{margin:0;color:var(--asp-ink)}
.asp-lf-needs .section-head p{margin:var(--asp-space-1) 0 0}
.asp-lf-needs-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:var(--asp-space-2)}
.asp-lf-need{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3);min-height:calc(var(--asp-space-12) + var(--asp-space-4));padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface-soft);color:var(--asp-ink);text-decoration:none}
.asp-lf-need:hover,.asp-lf-need:focus-visible,.asp-lf-need.is-active{border-color:var(--asp-teal-600);background:var(--asp-teal-100)}
.asp-lf-need span,.asp-lf-need small{display:block}.asp-lf-need small{margin-top:var(--asp-space-1);color:var(--asp-muted);font-weight:500}.asp-lf-need strong{font-size:var(--asp-text-xl);color:var(--asp-teal-800)}
.asp-lf-board-bar{display:flex;align-items:flex-end;justify-content:space-between;gap:var(--asp-space-5);margin:var(--asp-space-4) 0 var(--asp-space-3)}
.asp-lf-board-bar p{margin:var(--asp-space-1) 0 0}.asp-lf-board-bar .filterbar{display:grid;grid-template-columns:minmax(12rem,1fr) minmax(9rem,.55fr) auto;gap:var(--asp-space-2);align-items:end;margin:0}.asp-lf-board-bar .filterbar label{font-size:var(--asp-text-xs);font-weight:700;color:var(--asp-muted)}.asp-lf-board-bar .filterbar label:first-child{grid-column:1}.asp-lf-board-bar .filterbar input{grid-column:1}.asp-lf-board-bar .filterbar label:nth-of-type(2){grid-column:2;grid-row:1}.asp-lf-board-bar .filterbar select{grid-column:2}.asp-lf-board-bar .filterbar button{grid-column:3;grid-row:2}
.asp-lf-card-list{display:grid;gap:var(--asp-space-2)}
.asp-lf-item-card{display:grid;grid-template-columns:calc(var(--asp-space-12) + var(--asp-space-8)) minmax(0,1fr) auto;gap:var(--asp-space-3);align-items:center;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);color:var(--asp-ink);text-decoration:none;transition:border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,transform var(--asp-motion-fast) ease}
.asp-lf-item-card:hover,.asp-lf-item-card:focus-visible{border-color:var(--asp-teal-500);box-shadow:var(--asp-shadow-sm);transform:translateY(-1px)}
.asp-lf-card-photo{display:grid;place-items:center;aspect-ratio:1;border-radius:var(--asp-radius-md);overflow:hidden;background:var(--asp-surface-soft);color:var(--asp-muted);font-size:var(--asp-text-xl)}.asp-lf-card-photo img{width:100%;height:100%;object-fit:cover}.asp-lf-card-main{display:grid;gap:var(--asp-space-1);min-width:0}.asp-lf-card-top{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3)}.asp-lf-card-pills{display:flex;align-items:center;gap:var(--asp-space-1)}.asp-lf-card-top b,.asp-lf-card-place,.asp-lf-card-main .mini{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.asp-lf-card-place{color:var(--asp-ink);font-weight:600}.asp-lf-card-arrow{font-size:var(--asp-text-2xl);color:var(--asp-muted)}
.asp-lf-empty{padding:var(--asp-space-8) var(--asp-space-4);text-align:center}.asp-lf-empty h3{margin:0}.asp-lf-empty p{margin:var(--asp-space-2) 0 0}
.asp-lf-home-tools{margin:0 0 var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}.asp-lf-home-tools>summary{padding:var(--asp-space-3) var(--asp-space-4);cursor:pointer;color:var(--asp-muted);font-weight:700}.asp-lf-home-tools>div{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);padding:0 var(--asp-space-4) var(--asp-space-4)}
.asp-lf-quick{max-width:44rem;margin-inline:auto;padding:var(--asp-space-6)}.asp-lf-quick form{display:grid;gap:var(--asp-space-2)}.asp-lf-quick form label{margin-top:var(--asp-space-3);font-weight:700}.asp-lf-quick form button{justify-self:start;margin-top:var(--asp-space-4)}.asp-lf-quick .mini{margin:0}
@media(max-width:768px){.asp-lf-needs-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.asp-lf-board-bar{align-items:stretch;flex-direction:column}.asp-lf-board-bar .filterbar{width:100%}}
@media(max-width:560px){.asp-lf-needs{padding:var(--asp-space-4)}.asp-lf-needs-grid{grid-template-columns:1fr}.asp-lf-board-bar .filterbar{grid-template-columns:1fr}.asp-lf-board-bar .filterbar label:first-child,.asp-lf-board-bar .filterbar input,.asp-lf-board-bar .filterbar label:nth-of-type(2),.asp-lf-board-bar .filterbar select,.asp-lf-board-bar .filterbar button{grid-column:1;grid-row:auto}.asp-lf-board-bar .filterbar button{width:100%}.asp-lf-item-card{grid-template-columns:calc(var(--asp-space-12) + var(--asp-space-4)) minmax(0,1fr) auto}.asp-lf-card-top{align-items:flex-start;flex-direction:column;gap:var(--asp-space-1)}.asp-lf-card-main .mini{white-space:normal}.asp-lf-quick{padding:var(--asp-space-4)}.asp-lf-quick form button{width:100%}}


/* RC4.7.9 collapsed systems overview */
.asp-program-overview>summary{list-style:none;cursor:pointer;padding:var(--asp-space-1) 0}
.asp-program-overview>summary::-webkit-details-marker{display:none}
.asp-program-overview>summary::after{content:'Show all systems ▾';display:inline-block;margin-top:8px;color:var(--asp-teal-700);font-size:12.5px;font-weight:800}
.asp-program-overview[open]>summary::after{content:'Hide ▴'}
.asp-program-overview>summary h2{margin:0}
.asp-program-overview>summary p{margin:var(--asp-space-1) 0 0}
.asp-overview-toolbar{display:flex;justify-content:flex-end;margin:var(--asp-space-3) 0 var(--asp-space-1)}
.asp-intake-log{margin-top:var(--asp-space-3)}
.asp-intake-log>summary{cursor:pointer;color:var(--asp-teal-700);font-weight:800;font-size:13px;list-style:none}
.asp-intake-log>summary::-webkit-details-marker{display:none}
.asp-intake-log>summary::before{content:'▸ ';display:inline-block}
.asp-intake-log[open]>summary::before{content:'▾ '}
.asp-intake-log>p{margin-top:8px}


/* RC4.8.7 progressive Dashboard */
.asp-dashboard-progressive .asp-dashboard-snapshot-picker{display:flex;align-items:end;flex-wrap:wrap;gap:var(--asp-space-2);margin:var(--asp-space-4) 0 var(--asp-space-2)}
.asp-dashboard-progressive .asp-dashboard-snapshot-picker label{font-size:12px;font-weight:800;color:var(--asp-muted)}
.asp-dashboard-progressive .asp-dashboard-snapshot-picker select,.asp-dashboard-progressive .asp-dashboard-snapshot-picker input{min-height:42px;max-width:270px}
.asp-dashboard-date-nav{display:flex;gap:var(--asp-space-3);align-items:center;flex-wrap:wrap;font-size:12px;font-weight:750;color:var(--asp-muted)}
.asp-dashboard-date-nav a{color:var(--asp-teal-700)}
.asp-dashboard-deferred{min-height:126px;content-visibility:auto;contain-intrinsic-size:auto 180px}
.asp-dashboard-deferred .card{margin:0}
@media(max-width:560px){.asp-dashboard-progressive .asp-dashboard-snapshot-picker{display:grid;grid-template-columns:1fr}.asp-dashboard-progressive .asp-dashboard-snapshot-picker select,.asp-dashboard-progressive .asp-dashboard-snapshot-picker input{width:100%;max-width:none}.asp-dashboard-date-nav{justify-content:space-between}}


/* === RC4.9.6 TOTP MFA EXPERIENCE === */
.asp-mfa-qr{width:min(100%,280px);margin:20px auto;padding:var(--asp-space-4);border:1px solid var(--asp-line);border-radius:16px;background:#fff;box-shadow:0 10px 28px rgba(4,30,52,.08)}
.asp-mfa-qr svg{display:block;width:100%;height:auto}
.asp-mfa-secret{display:block;margin-top:var(--asp-space-3);padding:var(--asp-space-3);border-radius:var(--asp-radius-sm);background:#eef4f5;color:var(--asp-navy-950);font-size:.9rem;line-height:1.55;overflow-wrap:anywhere;user-select:all}
.asp-recovery-codes{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px var(--asp-space-6);padding:16px 16px 16px var(--asp-space-10);border:1px solid var(--asp-line);border-radius:12px;background:#fbfcfc}
.asp-recovery-codes code{font-size:.92rem;letter-spacing:.04em;user-select:all}
@media(max-width:560px){.asp-mfa-qr{width:min(100%,240px);padding:var(--asp-space-3)}.asp-recovery-codes{grid-template-columns:1fr}}


/* === RC4.9.7 PASSWORD RECOVERY === */
.asp-forgot-password{margin:var(--asp-space-4) 0 0;text-align:center;font-size:.92rem}
.asp-forgot-password a{font-weight:700;color:var(--asp-teal,#087f8c)}


/* === RC4.9.8 STAFF OFFBOARDING === */
.asp-offboarding-card{border-left:4px solid var(--asp-gold,#d8a648)}
.asp-check-list{display:grid;gap:var(--asp-space-2);padding-left:var(--asp-space-6)}
button.danger{background:#a93636!important;color:#fff!important}


/* === RC4.9.9 HOTELIER SURFACE CLEANUP === */
.asp-system-help{display:block;margin:var(--asp-space-5) 0;padding:0;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.asp-system-help summary{cursor:pointer;padding:var(--asp-space-4) var(--asp-space-5);color:var(--asp-navy-900);font-weight:800}
.asp-system-help summary:hover{color:var(--asp-teal-700)}
.asp-system-help-body{padding:0 var(--asp-space-5) var(--asp-space-5)}.asp-system-help-body h2{font-size:18px}.asp-system-help-body ol{padding-left:var(--asp-space-6)}


/* === RC5.0.0 GUEST EXPERIENCE PRINT QR === */
.asp-guest-qr-panel{margin-top:var(--asp-space-5)}.asp-qr-print-page{min-height:100vh;display:grid;place-items:center;background:#eef3f6}.asp-guest-qr-card{width:4in;min-height:4in;box-sizing:border-box;padding:.24in;text-align:center;background:#fff;border:.02in solid #113d59;border-radius:.12in;color:#102b43;display:flex;flex-direction:column;align-items:center;justify-content:center;gap:.05in}.asp-guest-qr-logo{width:.38in;height:.38in;object-fit:contain}.asp-guest-qr-kicker{margin:0;color:#087f8c;font-size:10pt;font-weight:800;text-transform:uppercase;letter-spacing:.08em}.asp-guest-qr-card h1{margin:0;font-size:22pt;line-height:1.05}.asp-guest-qr-hotel{margin:0;font-size:10pt;font-weight:700}.asp-guest-qr-code svg{width:1.65in;height:1.65in;display:block}.asp-guest-qr-instruction{margin:.02in 0 0;font-size:10pt;font-weight:700;line-height:1.25}.asp-guest-qr-note{margin:0;font-size:8pt;color:#536878}@media print{@page{size:4in 4in;margin:0}.asp-qr-print-page{background:#fff}.asp-guest-qr-card{border:0;border-radius:0;box-shadow:none}.asp-shell,.asp-side,header,footer{display:none!important}}


/* === RC5.0.1 SCHEMA-DRIVEN SYSTEM REPORTS === */
.asp-report-table-wrap{overflow:auto;border:1px solid var(--asp-line);border-radius:12px}.asp-report-table{width:100%;border-collapse:collapse;min-width:640px}.asp-report-table th,.asp-report-table td{padding:var(--asp-space-3) var(--asp-space-3);border-bottom:1px solid var(--asp-line);text-align:left;vertical-align:top}.asp-report-table th{background:var(--asp-surface-alt);color:var(--asp-navy-900);font-size:13px}.asp-report-table tr:last-child td{border-bottom:0}@media print{.asp-report-hero{padding-top:0}.asp-report-table{min-width:0;font-size:9pt}.asp-report-table th,.asp-report-table td{padding:var(--asp-space-2)}.asp-site-footer,.asp-chat-launcher,.asp-chat-panel,.asp-nav-toggle,.topbar,.asp-side,.status-row,.nav-back{display:none!important}.shell,.main{display:block!important;margin:0!important;padding:0!important;max-width:none!important}}


/* === RC5.0.2 DASHBOARD OPERATING CANVAS === */
.asp-dashboard-reference{max-width:1440px;margin:0 auto;padding-bottom:var(--asp-space-10)}.asp-dashboard-reference .asp-reference-top{position:relative;overflow:hidden;border:1px solid color-mix(in srgb,var(--asp-navy-900) 12%,var(--asp-line));border-radius:var(--asp-radius-lg);padding:var(--asp-space-8);background:linear-gradient(122deg,#ffffff 0%,#f4fbfb 62%,#edf6fb 100%);box-shadow:0 14px 34px rgba(11,45,70,.08)}.asp-dashboard-reference .asp-reference-top:after{content:"";position:absolute;right:-80px;top:-125px;width:300px;height:300px;border-radius:50%;background:radial-gradient(circle,rgba(13,151,162,.15),rgba(13,151,162,0) 68%);pointer-events:none}.asp-dashboard-reference .asp-reference-title{position:relative;z-index:1;display:flex;gap:var(--asp-space-5);align-items:flex-start;justify-content:space-between}.asp-dashboard-reference .asp-reference-title h1{margin:.22rem 0 .35rem;font-size:clamp(30px,3.1vw,46px);letter-spacing:-.045em;line-height:1.02}.asp-dashboard-reference .asp-reference-title p{max-width:760px;margin:0;color:var(--asp-muted);font-size:15px}.asp-dashboard-reference .asp-reference-trust{display:inline-flex;align-items:center;gap:8px;white-space:nowrap;border:1px solid #bfe9da;border-radius:var(--asp-radius-full);padding:8px var(--asp-space-3);background:#edfff7;color:#096c49;font-size:12px;font-weight:800}.asp-dashboard-reference .asp-reference-trust i{width:8px;height:8px;border-radius:50%;background:#16a36a;box-shadow:0 0 0 4px rgba(22,163,106,.13)}.asp-dashboard-reference .asp-reference-picker{position:relative;z-index:1;display:grid;grid-template-columns:minmax(240px,1.4fr) minmax(180px,.72fr) auto;align-items:end;gap:12px;margin:24px 0 var(--asp-space-2)}.asp-dashboard-reference .asp-reference-picker label{display:grid;gap:var(--asp-space-2);color:var(--asp-navy-800);font-size:12px;font-weight:800}.asp-dashboard-reference .asp-reference-picker select,.asp-dashboard-reference .asp-reference-picker input{width:100%;min-height:46px;border-radius:var(--asp-radius-sm);background:rgba(255,255,255,.9)}.asp-dashboard-reference .asp-reference-picker .btn{min-height:46px}.asp-dashboard-reference .asp-reference-date-nav{position:relative;z-index:1;display:flex;gap:12px;justify-content:flex-end;align-items:center;font-size:12px;font-weight:750}.asp-dashboard-reference .asp-reference-date-nav span{color:var(--asp-muted)}.asp-dashboard-reference .asp-reference-status{position:relative;z-index:1;margin:var(--asp-space-3) 0 0;color:var(--asp-muted);font-size:12px}.asp-dashboard-reference .asp-reference-kpi-grid{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:var(--asp-space-4);margin:var(--asp-space-5) 0}.asp-dashboard-reference .asp-reference-kpi{min-height:156px;padding:var(--asp-space-5);border:1px solid var(--asp-line);border-radius:16px;background:var(--asp-surface);box-shadow:0 8px 20px rgba(11,45,70,.055);text-decoration:none;transition:transform var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease,border-color var(--asp-motion-fast) ease}.asp-dashboard-reference a.asp-reference-kpi:hover{transform:translateY(-2px);border-color:#75c7c9;box-shadow:0 14px 28px rgba(11,45,70,.11)}.asp-dashboard-reference .asp-reference-kpi-label{display:block;color:var(--asp-navy-800);font-size:12px;font-weight:850}.asp-dashboard-reference .asp-reference-kpi strong{display:block;margin:12px 0 4px;color:var(--asp-navy-950);font-size:clamp(25px,2.1vw,34px);letter-spacing:-.045em;line-height:1}.asp-dashboard-reference .asp-reference-kpi-note{display:block;color:var(--asp-muted);font-size:11px}.asp-dashboard-reference .asp-reference-kpi-trend{display:flex;min-height:20px;align-items:flex-end;gap:var(--asp-space-1);margin-top:var(--asp-space-3);color:#078b91;font-size:11px;font-style:normal;font-weight:800}.asp-dashboard-reference .asp-reference-kpi-trend em{margin-left:var(--asp-space-1);font-style:normal}.asp-dashboard-reference .asp-reference-intelligence{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,.7fr);gap:var(--asp-space-6);align-items:center;min-height:176px;margin:var(--asp-space-5) 0;padding:var(--asp-space-6) var(--asp-space-8);border:1px solid var(--asp-line);border-left:4px solid var(--asp-teal-600);border-radius:18px;background:linear-gradient(135deg,#f4fbfa 0%,#fff 65%);color:var(--asp-ink);box-shadow:var(--asp-shadow-xs)}.asp-dashboard-reference .asp-reference-intelligence h2{margin:.2rem 0;font-size:25px;color:var(--asp-ink)}.asp-dashboard-reference .asp-reference-intelligence p{margin:0;color:var(--asp-muted)}.asp-dashboard-reference .asp-reference-intelligence a{color:var(--asp-teal-700);font-weight:800}.asp-dashboard-reference .asp-reference-intelligence .eyebrow{color:var(--asp-teal-700)}.asp-dashboard-reference .asp-reference-intelligence-loading{display:flex;align-items:center;justify-content:center;gap:8px;min-height:88px;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:#fff;color:var(--asp-muted);font-size:12px}.asp-dashboard-reference .asp-reference-intelligence-loading span{width:8px;height:8px;border-radius:50%;background:#63e6e9;animation:asp-pulse 1.2s infinite alternate}.asp-dashboard-reference .asp-reference-intelligence-loading span:nth-child(2){animation-delay:.2s}.asp-dashboard-reference .asp-reference-intelligence-loading span:nth-child(3){animation-delay:.4s}.asp-dashboard-reference .asp-reference-detail{padding:var(--asp-space-6);border:1px dashed #9cb9c4;border-radius:18px;background:#fbfdfd}.asp-dashboard-reference .asp-reference-detail-heading{display:flex;align-items:center;gap:12px;text-align:center}.asp-dashboard-reference .asp-reference-detail-heading>span{flex:1;height:1px;background:#c9d9df}.asp-dashboard-reference .asp-reference-detail-heading h2{margin:0;color:var(--asp-navy-950);font-size:19px}.asp-dashboard-reference .asp-reference-detail-heading p{margin:4px 0 0;color:var(--asp-muted);font-size:12px}.asp-dashboard-reference .asp-reference-detail>p{text-align:center;margin:var(--asp-space-5) 0 0}@keyframes asp-pulse{to{opacity:.3;transform:translateY(-4px)}}@media(max-width:1024px){.asp-dashboard-reference .asp-reference-kpi-grid{grid-template-columns:repeat(3,minmax(0,1fr))}.asp-dashboard-reference .asp-reference-intelligence{grid-template-columns:1fr}.asp-dashboard-reference .asp-reference-intelligence-loading{justify-content:flex-start;padding:0 var(--asp-space-5)}}@media(max-width:768px){.asp-dashboard-reference{padding-bottom:var(--asp-space-5)}.asp-dashboard-reference .asp-reference-top{margin-inline:calc(var(--asp-space-1) * -1);border-radius:16px;padding:var(--asp-space-5)}.asp-dashboard-reference .asp-reference-title{display:block}.asp-dashboard-reference .asp-reference-trust{margin-top:var(--asp-space-4)}.asp-dashboard-reference .asp-reference-picker{grid-template-columns:1fr;margin-top:var(--asp-space-5)}.asp-dashboard-reference .asp-reference-date-nav{justify-content:space-between;gap:8px}.asp-dashboard-reference .asp-reference-kpi-grid{grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-3)}.asp-dashboard-reference .asp-reference-kpi{min-height:132px;padding:var(--asp-space-4)}.asp-dashboard-reference .asp-reference-kpi:last-child{grid-column:span 2}.asp-dashboard-reference .asp-reference-intelligence{margin-inline:calc(var(--asp-space-1) * -1);padding:var(--asp-space-5);border-radius:16px}.asp-dashboard-reference .asp-reference-detail{padding:var(--asp-space-5) 12px}.asp-dashboard-reference .asp-reference-detail-heading>span{display:none}}


/* === RC5.0.3 PROGRESSIVE FULL DASHBOARD === */
.asp-dashboard-reference .asp-reference-detail{min-height:220px;box-shadow:0 8px 22px rgba(11,45,70,.04)}
.asp-dashboard-reference .asp-reference-detail-skeleton{display:grid;grid-template-columns:1.18fr .82fr;gap:var(--asp-space-4);margin-top:20px}
.asp-dashboard-reference .asp-reference-detail-skeleton i{display:block;min-height:92px;border-radius:12px;background:linear-gradient(100deg,#eff5f7 20%,#f9fbfc 38%,#eff5f7 58%);background-size:200% 100%;animation:asp-dashboard-shimmer 1.45s infinite linear}
.asp-dashboard-reference .asp-reference-detail-skeleton i:last-child{grid-column:span 2;min-height:56px}
@keyframes asp-dashboard-shimmer{to{background-position:-200% 0}}
@media(max-width:768px){.asp-dashboard-reference .asp-reference-detail-skeleton{grid-template-columns:1fr}.asp-dashboard-reference .asp-reference-detail-skeleton i:last-child{grid-column:auto}}


/* === RC5.0.9 DAILY OPERATING REPORT BRIEFS === */
.asp-daily-brief{background:linear-gradient(135deg,#f7fbfc 0%,#fffdf8 100%)}.asp-daily-brief .section-head{align-items:flex-start;gap:16px}.asp-daily-brief .metrics{margin-top:16px}@media(max-width:768px){.asp-daily-brief .section-head{display:block}.asp-daily-brief .btn{margin-top:12px;width:100%;text-align:center}}


/* === RC5.2.2 PROPERTY OPERATIONAL REPORT === */
.asp-rc522-list{list-style:none;padding:0;margin:0;display:grid;gap:var(--asp-space-3)}.asp-rc522-list li{display:flex;align-items:center;gap:12px;flex-wrap:wrap;padding:12px 0;border-bottom:1px solid var(--asp-line)}.asp-rc522-list li:last-child{border-bottom:0}.asp-rc522-list li>a{min-width:180px}.asp-rc522-list li>span:last-child{color:var(--asp-muted)}.asp-rc522-system{text-decoration:none}.asp-rc522-system h3{margin-top:0}@media print{.asp-rc522-list li{break-inside:avoid}.asp-site-footer,.asp-chat-launcher,.asp-chat-panel,.asp-nav-toggle,.topbar,.asp-side,.status-row{display:none!important}}


/* === RC5.2.3 MFA PUSH APPROVAL === */
.asp-push-waiting-container{text-align:center;padding:var(--asp-space-3) 0}
.asp-push-match-card{margin:24px auto;padding:var(--asp-space-5);border-radius:16px;background:var(--asp-navy-50,#f0f4f8);border:2px dashed var(--asp-navy-200,#cbd5e1);max-width:320px}
.asp-push-match-eyebrow{display:block;font-size:0.8rem;text-transform:uppercase;letter-spacing:0.08em;color:var(--asp-muted,#64748b);font-weight:600;margin-bottom:var(--asp-space-2)}
.asp-push-match-number{font-size:3.5rem;font-weight:800;letter-spacing:0.06em;color:var(--asp-navy-950,#041e34);line-height:1}
.asp-push-status-box{display:flex;align-items:center;justify-content:center;gap:12px;margin:20px 0;font-size:0.95rem;color:var(--asp-navy-800,#1e293b)}
.asp-push-spinner{width:18px;height:18px;border:3px solid var(--asp-navy-200,#cbd5e1);border-top-color:var(--asp-navy-800,#041e34);border-radius:50%;animation:asp-spin 1s linear infinite}
@keyframes asp-spin{to{transform:rotate(360deg)}}
.asp-push-fallback{margin-top:var(--asp-space-8);padding-top:var(--asp-space-5);border-top:1px solid var(--asp-line,#e2e8f0)}
.asp-btn-row{display:flex;gap:var(--asp-space-3);margin-top:16px}
.asp-btn-row button{flex:1}


/* === RC5.2.6 ASSISTANT EYEBROW CONTRAST === */
.intel-glow{margin-bottom:8px;color:var(--asp-teal-700);font-size:11px;font-weight:800;letter-spacing:.13em;text-transform:uppercase;font-family:'Public Sans',-apple-system,'Segoe UI',sans-serif}
.hero:not(.compact) .intel-glow{color:var(--asp-teal-100);letter-spacing:.14em;font-size:11px;font-weight:800}


/* === RC5.2.6 CHAT LAUNCHER COMPACT FOOTPRINT === */
.asp-chat-launcher{width:48px;min-width:48px;height:48px;min-height:48px;padding:0;border-radius:50%}
.asp-chat-launcher-label,.asp-chat-launcher-label-short{display:none}
.asp-chat-launcher:before{content:"\1F4AC";font-size:19px;line-height:1}
@media(max-width:560px){
  .asp-chat-launcher{width:48px;min-width:48px;height:48px;min-height:48px;padding:0}
}


/* === RC5.2.6 MOBILE CHAT LAUNCHER CLEARANCE === */
@media(max-width:560px){
  /* Bottom bar (~64px) + the floating launcher's own height (~56px) + a
     14px gap, so scrolled content never sits under either one. */
  .asp-col{padding-bottom:calc(64px + var(--asp-space-16) + var(--asp-space-4))}
}


/* === RC5.2.6 EMPTY STATE VERTICAL CENTERING === */
.main:has(> .system-grid > .card.empty-state:only-child){display:flex;flex-direction:column}
.main:has(> .system-grid > .card.empty-state:only-child) > .system-grid{margin-top:auto;margin-bottom:auto}


/* === RC5.3.0 CONNECTIONS COMING SOON === */
.asp-connections-coming-soon{margin-top:16px}
.connection-card.is-coming-soon{opacity:.72}
.connection-card.is-coming-soon h3{color:inherit}

/* RC5.5.1 workspace shell + account menu */
/* Icon-rail collapse only where the rail is a real column: below 1025px the
   rail is already a wrapping row, and below 561px a fixed phone bottom bar --
   an unscoped 68px width squeezes both into a broken stub. */
@media(min-width:1025px){
.asp-side.asp-side-compact{width:68px;flex:0 0 68px;padding-left:var(--asp-space-2);padding-right:var(--asp-space-2)}
.asp-side.asp-side-compact .asp-side-brand{padding-left:var(--asp-space-1);padding-right:var(--asp-space-1);justify-content:center}
.asp-side.asp-side-compact .asp-side-brand span{display:none}
.asp-side.asp-side-compact .asp-side-heading{display:none}
.asp-side.asp-side-compact .asp-side-link{justify-content:center;padding:var(--asp-space-2)}
.asp-side.asp-side-compact .asp-side-link span{display:none}
.asp-side.asp-side-compact .asp-side-more span{display:none}
}
.asp-workspace-header{display:flex;align-items:center;gap:var(--asp-space-6);min-width:0;flex:1}
.asp-workspace-title{color:var(--asp-surface);font-size:17px;font-weight:800;letter-spacing:-.02em;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:32ch}
.asp-workspace-tabs{display:flex;align-items:center;gap:var(--asp-space-1);min-width:0}
.asp-workspace-tab{padding:8px var(--asp-space-4);border-radius:var(--asp-radius-sm);color:rgba(255,255,255,.62);font-size:13.5px;font-weight:700;text-decoration:none;white-space:nowrap}
.asp-workspace-tab:hover{color:var(--asp-surface);background:rgba(255,255,255,.08)}
.asp-workspace-tab.is-active{color:var(--asp-surface);background:rgba(255,255,255,.14)}
@media(max-width:768px){.asp-workspace-title{max-width:16ch}.asp-workspace-tab{padding:8px var(--asp-space-3);font-size:12.5px}}
@media(max-width:560px){.asp-workspace-header{gap:var(--asp-space-2)}.asp-workspace-title{display:none}}
.asp-account-menu{position:relative;flex:0 0 auto}
.asp-account-trigger{display:flex;align-items:center;gap:4px;padding:var(--asp-space-2);border:0;border-radius:var(--asp-radius-sm);background:transparent;color:rgba(255,255,255,.85);cursor:pointer}
.asp-account-trigger:hover{background:rgba(255,255,255,.08)}
.asp-account-trigger .asp-side-icon{width:20px;height:20px;opacity:1}
.asp-account-caret{width:13px;height:13px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:.7}
.asp-account-panel{position:absolute;top:calc(100% + 8px);right:0;min-width:200px;background:var(--asp-surface,#fff);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);box-shadow:var(--asp-shadow-lg);padding:var(--asp-space-2);z-index:70}
.asp-account-panel .asp-side-link{color:var(--asp-ink);padding:var(--asp-space-2) var(--asp-space-3);font-size:13.5px}
.asp-account-panel .asp-side-link:hover{background:var(--asp-canvas,#f4f3ef);color:var(--asp-ink)}
.asp-account-panel .asp-side-link.is-active{background:var(--asp-canvas,#f4f3ef);box-shadow:none}

/* RC5.5.2 stage tabs + workflow buttons */
.asp-stage-tabs{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin:0 0 var(--asp-space-2);scroll-margin-top:84px}
.asp-stage-tab{display:inline-flex;align-items:center;gap:var(--asp-space-2);padding:var(--asp-space-2) 12px;border:1px solid var(--asp-line);border-radius:var(--asp-radius-full);background:var(--asp-surface,#fff);color:var(--asp-ink);font-size:13px;font-weight:650;line-height:1.2;text-decoration:none;white-space:nowrap}
.asp-stage-tab:hover{border-color:var(--asp-line-strong);background:var(--asp-canvas,#f4f3ef);color:var(--asp-ink)}
.asp-stage-tab.is-active{background:var(--asp-navy-900);border-color:var(--asp-navy-900);color:var(--asp-surface,#fff)}
.asp-stage-count{display:inline-block;min-width:20px;padding:0 var(--asp-space-2);border-radius:var(--asp-radius-full);background:rgba(0,0,0,.07);font-size:11.5px;font-weight:800;line-height:18px;text-align:center;font-variant-numeric:tabular-nums}
.asp-stage-tab.is-active .asp-stage-count{background:rgba(255,255,255,.2)}
.asp-stage-tab:focus-visible{outline:2px solid var(--asp-teal-100);outline-offset:2px}
.asp-workflow{margin:var(--asp-space-3) 0;padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-canvas,#f4f3ef)}
.asp-workflow-current{display:flex;align-items:center;gap:var(--asp-space-2);margin-bottom:var(--asp-space-2)}
.asp-workflow-actions{display:flex;flex-wrap:wrap;gap:8px}
.asp-workflow-btn{margin:0}
.asp-workflow-more{flex:1 1 100%;margin:0}
.asp-workflow-more>summary{cursor:pointer;font-size:13px;font-weight:650;color:var(--asp-ink-2,#4a5560);padding:var(--asp-space-2) 0;list-style:none}
.asp-workflow-more>summary::-webkit-details-marker{display:none}
.asp-workflow-more>summary::before{content:'\25B8';display:inline-block;margin-right:var(--asp-space-2)}
.asp-workflow-more[open]>summary::before{content:'\25BE'}
.asp-workflow-more>.asp-workflow-actions{margin-top:8px}
@media(max-width:560px){.asp-workflow-actions .asp-workflow-btn{flex:1 1 100%}}
/* Phones: one swipeable chip row instead of a stack of full-width pills. */
@media(max-width:560px){.asp-stage-tabs{flex-wrap:nowrap;overflow-x:auto;scrollbar-width:none;max-width:100%;padding-bottom:var(--asp-space-1)}.asp-stage-tabs::-webkit-scrollbar{display:none}.asp-stage-tab{min-height:38px;flex:0 0 auto}}

/* RC5.5.3 named reports */
.asp-report-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:var(--asp-space-2)}
.asp-report-card{display:flex;flex-direction:column;gap:var(--asp-space-1);min-width:0;padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface,#fff);color:var(--asp-ink);text-decoration:none;transition:border-color var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease}
.asp-report-card:hover{border-color:var(--asp-teal-600);box-shadow:var(--asp-shadow-xs);color:var(--asp-ink)}
.asp-report-card:focus-visible{outline:2px solid var(--asp-teal-600);outline-offset:2px}
.asp-report-card-head{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-2)}
.asp-report-card b{font-size:14.5px;line-height:1.3;letter-spacing:-.01em}
.asp-report-count{flex:0 0 auto;min-width:28px;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-full);background:var(--asp-navy-900);color:var(--asp-surface,#fff);font-size:13px;font-weight:800;line-height:20px;text-align:center;font-variant-numeric:tabular-nums}
.asp-report-card small{color:var(--asp-muted);font-size:12.5px;line-height:1.45}

/* RC5.5.5 role-shaped housekeeping board */
.asp-shift-card{border-color:var(--asp-teal-600)}
.asp-shift-list{display:grid;gap:8px}
.asp-shift-row{display:flex;align-items:center;gap:var(--asp-space-3);padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface,#fff)}
.asp-shift-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--asp-space-1)}
.asp-shift-main b{font-size:15px;line-height:1.25;letter-spacing:-.01em}
.asp-shift-main .mini{color:var(--asp-muted)}
.asp-shift-act{margin:0;flex:0 0 auto}
.asp-shift-act button{margin:0;min-width:104px}
@media(max-width:560px){
  .asp-shift-row{flex-wrap:wrap;gap:var(--asp-space-2)}
  .asp-shift-main{flex:1 1 100%}
  .asp-shift-act{flex:1 1 100%}
  .asp-shift-act button{width:100%;min-height:48px}
}

/* RC5.5.6 phone-first shift layout */
@media(max-width:560px){
  /* The role section is no longer hoisted above the page title here. It
     used to be flex-ordered first on phones, and the owner saw a "My work"
     card floating above the breadcrumb and heading, belonging to no page.
     Since 2026-09-19 the section is placed straight under the heading in
     the page itself (rc555 _rc555_under_heading), so the phone shows the
     same order as the desktop and nothing here reorders it. */
  /* A thumb in gloves needs more than 38px. */
  .asp-stage-tab{min-height:44px}
  .asp-shift-act button{min-height:48px}
  .asp-shift-row{padding:var(--asp-space-3) var(--asp-space-3) var(--asp-space-4)}
}

/* RC5.5.9 your day on a phone */
@media(max-width:560px){
  /* At 375px "Ready for inspection" plus "Open ->" leaves the arrow under
     the chat launcher. The whole row is already a link, so the words are
     repeating what tapping it does -- drop them and let the stage read.
     Scoped to the day card so My Tasks and the Inbox keep theirs. */
  .asp-shift-card .system-row .status-row .mini{display:none}
  .asp-shift-card .system-row{gap:var(--asp-space-3)}
}

/* RC5.6.0 housekeeping room card */
.asp-room-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--asp-space-3);margin-bottom:var(--asp-space-3)}
.asp-room-fact{display:flex;flex-direction:column;gap:var(--asp-space-1);padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}
.asp-room-fact b{font-size:15px;line-height:1.3}
.asp-room-clock{margin:0 0 var(--asp-space-3);font-size:15px}
.asp-room-clock b{font-size:22px;letter-spacing:-.02em}
.asp-room-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-3)}
.asp-room-problem{margin-top:var(--asp-space-4);border-top:1px solid var(--asp-line);padding-top:var(--asp-space-3)}
.asp-room-problem summary{cursor:pointer;font-weight:650}
.asp-room-problem input[type=text]{max-width:520px}
/* A row leads with the room number; what kind of clean it is, and the stage
   when the stage says something, sit beside it as labels. */
.asp-shift-chips{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);justify-content:flex-end;flex:0 0 auto}
.asp-shift-stage{background:var(--asp-ground,#f5f7fb);color:var(--asp-muted)}
@media(max-width:560px){
  .asp-shift-chips{justify-content:flex-start;flex:1 1 100%}
}
@media(max-width:560px){
  .asp-room-facts{grid-template-columns:1fr 1fr}
  .asp-room-actions{flex-direction:column}
  .asp-room-actions .asp-shift-act{width:100%}
  .asp-room-actions button{width:100%;min-height:52px}
}

/* RC5.6.1 on the floor */
.asp-floor-card{border-color:var(--asp-gold,#d8a648)}
.asp-floor-card .section-head{align-items:center;gap:var(--asp-space-3)}
.metric .mini{display:block;color:var(--asp-muted);margin-top:var(--asp-space-1)}
@media(max-width:560px){
  .asp-floor-card .section-head{flex-direction:column;align-items:flex-start}
  .asp-floor-card .section-head .btn{width:100%}
}

/* RC5.6.2 money withheld note */
.asp-money-withheld{margin:var(--asp-space-3) 0 0;max-width:62ch}

/* RC5.6.6 account menu in the header */
.asp-header-account{margin-left:auto;display:flex;align-items:center;flex:0 0 auto;position:relative}
.asp-header-account .asp-account-menu{margin:0}
.asp-header-account .asp-account-trigger{display:flex;align-items:center;gap:var(--asp-space-2);padding:var(--asp-space-2);border-radius:var(--asp-radius-full)}
.asp-header-account .asp-account-panel{right:0;left:auto}
/* Below 1025px the rail hides every side-link label (icons only). The
   panel's items reuse .asp-side-link, so on a phone the open menu showed
   two bare icons and no words. The More sheet already carries this same
   override; the dropdown needs it too, at every width. */
.asp-account-panel .asp-side-link span{display:inline}
/* A face, not a thumbnail of a room: round, cropped, never stretched. */
.asp-account-face{width:28px;height:28px;border-radius:50%;object-fit:cover;display:block;
  border:1px solid rgba(255,255,255,.35)}
@media(max-width:560px){
  .asp-header-account{margin-left:auto}
  .asp-account-face{width:26px;height:26px}
}

/* RC5.6.9 department search fits a phone */
@media(max-width:560px){
  .asp-area-search{flex-wrap:wrap}
  .asp-area-search input{flex:1 1 100%;min-height:44px}
  .asp-area-search button{flex:1 1 100%;width:100%;min-height:44px}
  /* Line items (banquet orders, invoices): the table already scrolls
     sideways in its wrapper, but nothing gave its inputs a floor, so at
     375px the quantity box was 26px wide and the description 81px. Give
     each column a usable minimum and let the wrapper scroll. */
  .asp-line-items{min-width:600px}
  .asp-line-items input[name$='_description']{min-width:180px}
  .asp-line-items input[name$='_quantity']{min-width:64px}
  .asp-line-items input[name$='_unit_price'],.asp-line-items input[name$='_amount']{min-width:96px}
  .asp-line-items select{min-width:140px}
}

/* RC5.7.1 one code for the whole stay */
/* The ask block now sits directly under the navy header rather than at the
   foot of the page, so it loses the divider that separated it from the last
   section and gains the weight of a primary action. */
.asp-dir-ask-lead{margin:0;padding:var(--asp-space-5) var(--asp-space-5) var(--asp-space-4);border-top:0;background:var(--asp-surface)}
.asp-dir-ask-lead .mini{margin:var(--asp-space-3) 0 0;text-align:center;max-width:30rem}
.asp-dir-ask-primary{display:block;width:100%;min-width:0;box-sizing:border-box;min-height:48px;line-height:1.4;padding:var(--asp-space-4) var(--asp-space-4);font-size:1.02rem}
@media(min-width:561px){.asp-dir-ask-primary{display:inline-block;width:auto;min-width:16rem}}

/* RC5.7.2 guest code print ready */
/* The mark was 0.38in on a 4in card, which read as an afterthought rather
   than as the hotel's software. Matches the press PDF at 0.66in. */
.asp-guest-qr-logo{width:.66in;height:.66in}

/* RC5.7.3 hotel brand assets */
.asp-brand-assets-panel{margin-top:var(--asp-space-5)}
.asp-brand-asset{padding:var(--asp-space-4) 0;border-top:1px solid var(--asp-line)}
.asp-brand-asset h3{margin:0 0 8px;font-size:1rem}
.asp-brand-asset-preview{max-width:220px;max-height:72px;object-fit:contain;display:block;
  margin:0 0 var(--asp-space-3);background:var(--asp-surface);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-sm);padding:var(--asp-space-2)}
.asp-brand-asset-preview.wide{max-width:320px;max-height:120px;object-fit:cover}
.asp-consent{display:flex;gap:8px;align-items:flex-start;margin:var(--asp-space-3) 0 var(--asp-space-2);
  font-size:.92rem;line-height:1.4}
.asp-consent input{margin-top:var(--asp-space-1);flex:0 0 auto}
.asp-asset-remove{display:inline-block;margin:0 0 var(--asp-space-3)}
.asp-asset-remove .btn{padding:var(--asp-space-2) 12px;font-size:.88rem}
/* The guest's own page: the hotel's mark leads, above its name. */
.asp-dir-banner{width:100%;height:clamp(120px,28vw,220px);object-fit:cover;display:block}
/* Dark artwork gets its own white bar above the hero -- the ground almost
   every brand mark is drawn for. Light artwork sits inside the hero. */
.asp-dir-logobar{background:#fff;padding:20px var(--asp-space-5);display:flex;
  justify-content:center;align-items:center}
.asp-dir-logo{max-width:min(78%,300px);max-height:84px;object-fit:contain;display:block}
.asp-dir-head .asp-dir-logo{margin:0 0 var(--asp-space-5);max-height:72px}
@media(max-width:560px){
  .asp-dir-logobar{padding:16px var(--asp-space-4)}
  .asp-dir-logo{max-height:68px}
  .asp-dir-head .asp-dir-logo{max-height:60px}
}

/* RC5.7.4 desktop reading measure */
/* Tuned by measuring real wrapped lines -- text length divided by the number
   of lines it actually wrapped to -- not by assuming a glyph width. The `ch`
   unit here is about 0.61em while prose averages nearer 0.5em per character,
   so a cap in `ch` reads roughly 20% longer than it sounds: 78ch measured 111
   characters. 60ch lands the median inside the comfortable band. */
@media(min-width:561px){
  .asp-system-help-body{max-width:60ch}
  .asp-brand-assets-panel p,
  .asp-guest-qr-panel p{max-width:60ch}
  /* Loose prose anywhere in a card: the intro line under a section heading
     and the small print under a control. Both are sentences, not layout.

     Written with the child combinator first, which was the mistake: the
     standard card puts its intro paragraph inside section-head > div, two
     levels down, so the rule missed the single most common paragraph in
     the product. Measured again on 2026-09-24 at 1440px and the guest
     experience page still had a line of 287 characters -- worse than
     anything the original pass found. Matched by descent now, at any
     depth. A max-width never stretches anything, so a paragraph already
     inside a narrow column is unaffected. */
  main p.muted,
  main p.mini,
  main p.hint,
  main p.asp-su-note{max-width:64ch}
  /* A lead is set larger, so the same cap in `ch` holds more characters --
     measured 78 where the body copy beside it measured 72. Its own, tighter
     number rather than one cap pretending every size reads alike. */
  main p.lead{max-width:58ch}
}


/* === RC5.7.5 DEPARTMENT BOARD DISCLOSURE === */
.asp-department-board{margin:var(--asp-space-3) 0}
.asp-department-board>summary{cursor:pointer;padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:#fbfcfc;color:var(--asp-teal-800);font-size:13px;font-weight:750}
.asp-department-board[open]>summary{margin-bottom:var(--asp-space-2)}

/* RC5.7.6 token consolidation */
/* 20 padding and 7 radius declarations moved onto tokens, by
   exact value only -- see the stage for why the rest were not. */


/* === RC5.7.9 READABLE COLOUR (WCAG AA) === */
/* Four tokens used across 16 declarations and defined nowhere. A var()
   with no fallback and no definition invalidates its whole declaration,
   so none of the 16 has ever applied. Values come from what the codebase
   already states, not from invention. */
:root{
  --asp-teal-800:#095f66;        /* 12 colour declarations; 7.39:1 on white, 6.58:1 on teal-100 */
  --asp-teal:#087f8c;            /* the fallback var(--asp-teal,#087f8c) already used in this file */
  --asp-surface-alt:#f8f9fd;     /* the existing soft surface; report th text lands at 16.64:1 */
  --asp-teal-500:#0e9ba4;        /* no precedent anywhere: aliases teal-600 rather than invent a step */
}
/* Text that states a status. Both are colour-only tokens, so this is a
   legibility change and not a design one. */
:root{--asp-good:#0a6b57;--asp-warn:#8a5a10}
/* Three rules put light text on a flat teal-600 ground, all at 3.36:1: the
   primary button, the assistant avatar and the guest follow-up button. The
   token itself is left alone -- its other 43 uses are borders, outlines,
   fills and strokes, which are non-text and correct at 3:1 -- so only the
   three text-bearing grounds move. The button needed no new colour either:
   teal-700 was already its hover state and already 5.10:1, so the rest
   state takes the value the design had and hover steps to teal-800. */
.btn,button,.asp-chat-avatar,.asp-guest-follow{background:var(--asp-teal-700)}
.btn:hover,button:hover{background:var(--asp-teal-800)}
/* 10px bold count on red: 3.91:1 -> 5.55:1. */
.asp-side-link .asp-nav-badge{background:#c9252b}


/* === RC5.8.0 FOCUS YOU CAN SEE === */
/* WCAG 1.4.11 asks 3:1 of a focus indicator. These seven were painted
   through 28-34% alpha and landed between 1.12:1 and 1.62:1; the same teal
   at full opacity is 4.95:1, so the repair is opacity, not a new colour.
   The platform-wide default is first because it is the one that decides
   what a keyboard user sees almost everywhere. */
:where(a,button,input,select,textarea,[tabindex]):focus-visible{outline:3px solid var(--asp-teal-700);outline-offset:2px}
button.choice-option:focus-visible{outline:3px solid var(--asp-teal-700)}
input[type='checkbox']:focus-visible{outline:2px solid var(--asp-teal-700)}
.setting-switch input[type='checkbox']:focus-visible{outline:2px solid var(--asp-teal-700)}
.asp-permission-card:has(input:focus-visible){outline:2px solid var(--asp-teal-700)}
.asp-budget-presets input:focus-visible+span{outline:2px solid var(--asp-teal-700)}
/* Pale teal is right on the navy sidebar, where the same token scores
   16.41:1. The stage tabs sit on a light card, where it is 1.12:1. */
.asp-stage-tab:focus-visible{outline:2px solid var(--asp-teal-700)}

/* RC5.8.1: spacing snapped to the scale */

/* RC5.8.2: three breakpoints */


/* === RC5.8.3 TWO KNOWN DEFECTS === */
/* A section heading is a row with its controls on the right, and only
   became a column at 560px. Between 561 and 768 the row survived without
   the width for it, so a board's three buttons wrapped into a column
   beside the heading instead of below it. Same treatment the phone
   already had, starting one breakpoint earlier. */
@media(max-width:768px){
  .section-head{align-items:flex-start;flex-direction:column;gap:var(--asp-space-2)}
  .section-head .status-row{width:100%}
}


/* === RC5.8.4 STAGE FILTER === */
/* The container keeps its name: seven stages and four test files locate the
   board through .asp-stage-tabs, and RC5.5.7 and RC5.7.5 both position
   their role sections relative to it. */
.asp-stage-tabs{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin:0 0 var(--asp-space-3)}
.asp-stage-filter{display:flex;align-items:center;gap:var(--asp-space-2);flex-wrap:wrap;width:100%}
.asp-stage-filter>label{font-size:12px;font-weight:750;letter-spacing:.04em;text-transform:uppercase;color:var(--asp-muted)}
.asp-stage-filter select{min-height:44px;min-width:16rem;max-width:100%;margin:0;flex:0 1 auto}
.asp-stage-filter .btn,.asp-stage-filter button{min-height:44px;width:auto}
@media(max-width:560px){
  .asp-stage-filter{gap:var(--asp-space-1)}
  .asp-stage-filter select{flex:1 1 100%;min-width:0}
  .asp-stage-filter button{flex:1 1 100%;width:100%}
}


/* === RC5.8.5 ONE SETTINGS BUTTON === */
/* A plain span is one flex item, so the row's gap fell between the span and
   the next button and not between the two buttons inside it -- 0px then
   8px. display:contents promotes its children to direct flex items, so they
   take the same gap as everything else. The element stays in the DOM, so
   RC4.4.3's "have I already inserted these" marker still works. */
.asp-system-control-links{display:contents}


/* === RC5.8.8 DEPARTMENT STAGE COUNTS === */
/* Sits under each system's own line in the department list. Wraps rather
   than scrolls: a department head is reading the whole row at once, and a
   sideways scroller hides exactly the pile they are looking for. */
.asp-dept-stages{display:flex;flex-wrap:wrap;gap:var(--asp-space-1);margin:var(--asp-space-2) 0 0;width:100%}
.asp-dept-stage{display:inline-flex;align-items:center;gap:var(--asp-space-1);min-height:32px;padding:var(--asp-space-1) var(--asp-space-2);border:1px solid var(--asp-line);border-radius:var(--asp-radius-full);background:var(--asp-surface);color:var(--asp-ink);font-size:12px;font-weight:650;text-decoration:none}
.asp-dept-stage:hover,.asp-dept-stage:focus-visible{border-color:var(--asp-teal-600);color:var(--asp-teal-800)}
.asp-dept-stage.is-attention{border-color:var(--asp-warn);color:var(--asp-warn);background:var(--asp-warn-soft)}
@media(max-width:560px){.asp-dept-stage{min-height:38px}}

/* === RC5.9.1 ONE FILTER ONE BUTTON === */
/* The stage select now lives in the filter bar. It keeps the sizing it had
   in its own row -- a 44px target and a readable minimum width -- so this
   is the same control in a new place, not a restyled one. */
.filterbar>label[for='asp-stage-select']{font-size:12px;font-weight:750;
  letter-spacing:.04em;text-transform:uppercase;color:var(--asp-muted)}
.filterbar #asp-stage-select{min-height:44px;min-width:14rem;max-width:100%;margin:0}

/* === RC5.9.2 SYSTEMS IN THE NAVIGATION === */
/* Nothing restyled: these are ordinary side links in an ordinary group. The
   only rule here is a long-name guard, because "Maintenance & Asset
   Management" is half again as long as anything else in the rail and must
   not push the rail wider or spill out of it. */
.asp-side-mine .asp-side-link span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}

/* === RC5.9.4 DEPARTMENT REPORTS === */
/* One row per report, on the existing card shape. The hotel's own is marked
   by its border rather than by a colour fill, so it reads as first among
   equals rather than as a warning. */
.asp-dept-reports{display:flex;flex-direction:column;gap:var(--asp-space-2)}
.asp-dept-report{display:flex;align-items:center;justify-content:space-between;
  gap:var(--asp-space-3);min-height:44px;padding:var(--asp-space-3) var(--asp-space-4);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);color:var(--asp-ink);text-decoration:none}
.asp-dept-report:hover{border-color:var(--asp-teal-600)}
.asp-dept-report.is-hotel{border-color:var(--asp-teal-600)}
.asp-dept-report-name{font-weight:650;min-width:0;overflow-wrap:anywhere}
.asp-dept-report-go{color:var(--asp-teal-700);font-weight:650;white-space:nowrap;flex:none}

/* === RC5.9.5 SETTINGS AND REPORTS OWN PAGE === */
/* Two header controls shaped like the account trigger beside them, so they
   read as part of that group rather than as something bolted on. */
.asp-header-tools{display:flex;align-items:center;gap:var(--asp-space-2);margin-left:auto}
.asp-header-tools+.asp-header-account{margin-left:var(--asp-space-2)}
.asp-header-tool{display:grid;place-items:center;width:36px;height:36px;
  border-radius:var(--asp-radius-full);color:inherit;flex:none}
.asp-header-tool svg{width:18px;height:18px;fill:none;stroke:currentColor;
  stroke-width:1.7;stroke-linecap:round;stroke-linejoin:round}
.asp-header-tool:hover{background:rgba(255,255,255,.12)}
/* teal-800, not teal-600: white on teal-600 is 3.36:1, below AA. RC5.7.9
   added this darker step for exactly this pairing after finding it on the
   primary button, the assistant avatar and the guest follow-up button. */
.asp-header-tool.is-live{background:var(--asp-teal-800);color:#fff}
/* The back row is an ordinary side link. No button treatment: the rail is
   not restyled on these pages, only relisted. */
.asp-side-back{font-weight:700}
@media(max-width:560px){
  .asp-header-tool{width:32px;height:32px}
  .asp-header-tool svg{width:16px;height:16px}
}

/* === RC6.0.0 ONE CHAT BOX === */
.asp-chat-pick{flex:1;min-width:0}
.asp-chat-who{display:flex;align-items:center;gap:var(--asp-space-2);width:100%;
  min-height:32px;padding:var(--asp-space-1) var(--asp-space-2);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface);color:var(--asp-ink);
  font-weight:700;font-size:13px;cursor:pointer}
.asp-chat-who-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;text-align:left}
.asp-chat-who svg{width:14px;height:14px;flex:none;fill:none;stroke:currentColor;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round;opacity:.6}
.asp-chat-finish{width:30px;height:30px;flex:none;display:grid;place-items:center;
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);color:var(--asp-muted);cursor:pointer}
.asp-chat-finish svg{width:14px;height:14px;fill:none;stroke:currentColor;
  stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.asp-chat-menu{position:absolute;left:var(--asp-space-3);right:var(--asp-space-3);
  top:52px;z-index:9;background:var(--asp-surface);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);box-shadow:0 18px 44px rgba(9,14,26,.24);
  max-height:16rem;overflow-y:auto;padding:var(--asp-space-1)}
.asp-chat-group{font-size:10px;letter-spacing:.1em;text-transform:uppercase;
  color:var(--asp-muted);margin:var(--asp-space-2) var(--asp-space-2) var(--asp-space-1)}
.asp-chat-none{font-size:12px;color:var(--asp-muted);margin:0 var(--asp-space-2) var(--asp-space-2)}
.asp-chat-item{display:flex;align-items:center;gap:var(--asp-space-2);width:100%;
  min-height:36px;padding:var(--asp-space-1) var(--asp-space-2);border:0;background:none;
  color:var(--asp-ink);font-size:13px;text-align:left;cursor:pointer;
  border-radius:var(--asp-radius-sm)}
.asp-chat-item:hover{background:var(--asp-surface-soft)}
.asp-chat-item.is-on{background:var(--asp-teal-100);color:var(--asp-teal-800)}
.asp-chat-item-name{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;
  white-space:nowrap;font-weight:650}
.asp-chat-item-when{font-size:10px;color:var(--asp-muted);flex:none}
.asp-chat-new .asp-chat-item-name{color:var(--asp-teal-700)}
.asp-chat-back .asp-chat-item-name{color:var(--asp-muted)}
.asp-chat-subject-form{display:flex;gap:var(--asp-space-2);padding:0 var(--asp-space-2) var(--asp-space-2)}
.asp-chat-subject-form input{flex:1;min-width:0;min-height:36px;padding:0 var(--asp-space-2);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);font-size:13px;color:var(--asp-ink)}
.asp-chat-subject-form button{flex:none;width:auto;white-space:nowrap}
.asp-chat-unread{background:#c9252b;color:#fff;border-radius:var(--asp-radius-full);
  font-size:10px;font-weight:800;padding:0 var(--asp-space-1);min-width:18px;
  text-align:center;flex:none}
.asp-chat-all{display:block;padding:var(--asp-space-2);font-size:12px;font-weight:700;
  color:var(--asp-teal-700);border-top:1px solid var(--asp-line)}
.asp-chat-count{position:absolute;transform:translate(18px,-6px);background:#c9252b;
  color:#fff;border-radius:var(--asp-radius-full);font-size:11px;font-weight:800;
  min-width:20px;height:20px;display:grid;place-items:center;padding:0 var(--asp-space-1);
  z-index:2;pointer-events:none}
/* Name and time UNDER the bubble: above, they compete with the message. */
.asp-chat-line{display:flex;flex-direction:column;gap:var(--asp-space-1);margin:0 0 var(--asp-space-3)}
.asp-chat-line.mine{align-items:flex-end}
.asp-chat-bubble{max-width:86%;padding:var(--asp-space-2) var(--asp-space-3);
  border-radius:var(--asp-radius-lg);background:var(--asp-surface-soft);
  border:1px solid var(--asp-line);font-size:13px;line-height:1.45;overflow-wrap:anywhere}
.asp-chat-line.mine .asp-chat-bubble{background:var(--asp-teal-700);border-color:var(--asp-teal-700);color:#fff}
.asp-chat-meta{font-size:10px;color:var(--asp-muted);padding:0 var(--asp-space-1)}
.asp-chat-meta b{font-weight:500;color:var(--asp-ink)}

/* === RC6.0.3 ALL CONVERSATIONS PAGE === */
.asp-conv-list{display:flex;flex-direction:column;gap:var(--asp-space-2)}
.asp-conv-row{display:flex;align-items:center;justify-content:space-between;
  gap:var(--asp-space-3);flex-wrap:wrap;min-height:44px;
  padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.asp-conv-main{display:flex;align-items:center;gap:var(--asp-space-2);min-width:0;flex:1}
.asp-conv-main b{font-weight:650;overflow-wrap:anywhere}
.asp-conv-open{color:inherit;text-decoration:none;min-width:0}
.asp-conv-open:hover b,.asp-conv-open:focus-visible b{text-decoration:underline}
.asp-conv-side{display:flex;align-items:center;gap:var(--asp-space-3);flex:none}
.asp-conv-state{font-size:12px;font-weight:700;color:var(--asp-teal-700)}
.asp-conv-state.is-closed{color:var(--asp-muted)}
.asp-conv-when{font-size:12px;color:var(--asp-muted);white-space:nowrap}
.asp-conv-unread{background:#c9252b;color:#fff;border-radius:var(--asp-radius-full);
  font-size:11px;font-weight:800;padding:0 var(--asp-space-1);min-width:18px;
  text-align:center;flex:none}
.asp-conv-reopen{margin:0}

/* === RC6.0.4 CHAT BOX ACTIONS === */
/* Beside the send button, same size, same shape -- they are peers of it,
   not a toolbar of their own. 44px targets: this is used on a phone with
   one hand while the other is holding something. */
.asp-chat-clip,.asp-chat-work{width:44px;height:44px;flex:none;display:grid;
  place-items:center;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);color:var(--asp-ink);cursor:pointer}
.asp-chat-clip:hover,.asp-chat-work:hover{border-color:var(--asp-teal-600);
  color:var(--asp-teal-700)}
.asp-chat-clip svg,.asp-chat-work svg{width:18px;height:18px;fill:none;
  stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}

/* === RC6.0.6 THE MORNING BRIEF === */
.asp-brief-list{display:flex;flex-direction:column;gap:var(--asp-space-2)}
.asp-brief-line{display:flex;align-items:center;justify-content:space-between;
  gap:var(--asp-space-3);min-height:44px;padding:var(--asp-space-3) var(--asp-space-4);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);color:var(--asp-ink);text-decoration:none}
.asp-brief-line:hover{border-color:var(--asp-teal-600)}
.asp-brief-area{font-weight:650;min-width:0;overflow-wrap:anywhere}
.asp-brief-count{font-weight:800;font-variant-numeric:tabular-nums;flex:none;
  color:var(--asp-warn-700,#8a5a10)}

/* === RC6.0.9 A PHOTO LOOKS LIKE A PHOTO === */
.asp-chat-files{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);max-width:86%}
.asp-chat-line.mine .asp-chat-files{justify-content:flex-end}
.asp-chat-photo{padding:0;border:1px solid var(--asp-line);background:none;
  border-radius:var(--asp-radius-md);overflow:hidden;cursor:zoom-in;line-height:0}
.asp-chat-photo img{display:block;max-width:220px;max-height:220px;
  width:auto;height:auto;object-fit:cover}
.asp-chat-file{display:inline-flex;align-items:center;min-height:44px;
  padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);color:var(--asp-ink);
  background:var(--asp-surface);text-decoration:none;overflow-wrap:anywhere}
.asp-photo-viewer{position:fixed;inset:0;z-index:9999;display:flex;
  align-items:center;justify-content:center;padding:var(--asp-space-4);
  background:rgba(0,0,0,.82)}
.asp-photo-viewer img{max-width:100%;max-height:100%;object-fit:contain;
  border-radius:var(--asp-radius-md)}
.asp-photo-close{position:absolute;top:calc(var(--asp-space-4) + env(safe-area-inset-top,0px));right:var(--asp-space-4);
  min-height:44px;min-width:44px;padding:0 var(--asp-space-4);
  border:1px solid rgba(255,255,255,.5);border-radius:var(--asp-radius-md);
  background:rgba(0,0,0,.5);color:#fff;font-weight:650;cursor:pointer}
@media (prefers-reduced-motion:reduce){.asp-photo-viewer{transition:none}}


/* RC6.1.2 the ledger */
.asp-ledger{max-width:1180px;margin:0 auto;padding:var(--asp-space-6) var(--asp-space-5) var(--asp-space-8)}
.asp-ledger-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--asp-space-6);padding-bottom:var(--asp-space-4);border-bottom:3px double var(--asp-ink);margin-bottom:var(--asp-space-5)}
.asp-ledger-head h1{margin:0;color:var(--asp-ink);font-size:28px;font-weight:700;letter-spacing:-.015em}
.asp-ledger-who{min-width:0}
.asp-ledger-when{margin-top:4px;color:var(--asp-muted);font-size:13px}
.asp-ledger-when b{color:var(--asp-ink);font-weight:650}
.asp-ledger-step{display:flex;align-items:center;gap:var(--asp-space-2);flex:none}
.asp-ledger-step a{display:grid;place-items:center;width:44px;height:40px;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-xs);background:var(--asp-surface);color:var(--asp-ink);text-decoration:none}
.asp-ledger-filed{display:flex;align-items:center;gap:8px;height:40px;padding:0 16px;border-radius:var(--asp-radius-xs);font-size:12.5px;font-weight:650}
.asp-ledger-filed.is-all{background:var(--asp-good-soft);border:1px solid var(--asp-good);color:var(--asp-good)}
.asp-ledger-filed.is-some{background:var(--asp-warn-soft);border:1px solid var(--asp-warn);color:var(--asp-warn)}
.asp-ledger-sec{margin:0 0 var(--asp-space-6)}
.asp-ledger-sec-top{display:flex;align-items:baseline;justify-content:space-between;gap:var(--asp-space-4);margin-bottom:var(--asp-space-2)}
.asp-ledger-sec-top h2{display:flex;align-items:center;gap:8px;margin:0;color:var(--asp-ink);font-size:13px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.asp-ledger-mark{display:grid;place-items:center;width:26px;height:26px;flex:none;border-radius:var(--asp-radius-sm);background:var(--sec-fill,var(--asp-surface-soft));color:var(--sec-ink,var(--asp-navy-800))}
.asp-ledger-sec.s-perf{--sec-ink:var(--asp-teal-700);--sec-fill:var(--asp-teal-100)}
.asp-ledger-sec.s-act{--sec-ink:var(--asp-bronze-600);--sec-fill:var(--asp-bronze-100)}
.asp-ledger-sec.s-flow{--sec-ink:var(--asp-navy-800);--sec-fill:var(--asp-surface-soft)}
.asp-ledger-sec.s-guests{--sec-ink:var(--asp-teal-700);--sec-fill:var(--asp-teal-100)}
.asp-ledger-sec.s-house{--sec-ink:var(--asp-navy-800);--sec-fill:var(--asp-surface-soft)}
.asp-ledger-sec.s-owed{--sec-ink:var(--asp-warn);--sec-fill:var(--asp-warn-soft)}
.asp-ledger-sec.s-paid{--sec-ink:var(--asp-good);--sec-fill:var(--asp-good-soft)}
.asp-ledger-sec.s-rest{--sec-ink:var(--asp-muted);--sec-fill:var(--asp-surface-soft)}
.asp-ledger-note{color:var(--asp-muted);font-size:12.5px}
.asp-ledger-rules{border-top:2px solid var(--asp-ink)}
.asp-ledger-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--asp-space-4);padding:12px 0;border-bottom:1px solid var(--asp-line)}
.asp-ledger-row dt,.asp-ledger-label{color:var(--asp-ink);font-size:14px}
.asp-ledger-row.is-strong .asp-ledger-label{font-weight:650}
.asp-ledger-sub{color:var(--asp-muted);font-size:12.5px}
.asp-ledger-fig{font-size:15px;font-weight:600;font-variant-numeric:tabular-nums;color:var(--asp-ink)}
.asp-ledger-row.is-strong .asp-ledger-fig{font-size:17px;font-weight:700}
.asp-ledger-fig.is-bad{color:var(--asp-bad)}
.asp-ledger-fig.is-warn{color:var(--asp-warn)}
.asp-ledger-fig.is-good{color:var(--asp-good)}
/* No figure may push the page sideways on a phone. A ruled row is a flex
   line, and a flex item will not shrink below its content unless told to --
   so one long unbroken number (a 64-digit misread, 29 Sept) widened the row,
   the column and the page. Both sides may shrink and wrap; the label keeps
   at least a third of the line. */
.asp-ledger-row>*{min-width:0}
.asp-ledger-label{flex:1 1 auto;overflow-wrap:anywhere}
.asp-ledger-fig{flex:0 1 auto;max-width:66%;text-align:right;overflow-wrap:anywhere;word-break:break-word}
.asp-ledger-fig.is-unread{color:var(--asp-muted);font-size:13px;font-weight:500;font-style:italic}
.asp-ledger-bar-fig,.asp-kpi-now{overflow-wrap:anywhere;word-break:break-word}
.asp-ledger-tabs{display:flex;justify-content:flex-end}
.asp-ledger-tabs>span{display:flex;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-xs);overflow:hidden}
.asp-ledger-tab{min-height:36px;display:grid;place-items:center;padding:0 16px;border-right:1px solid var(--asp-line);background:var(--asp-surface);color:var(--asp-ink);font-size:13px;font-weight:600;text-decoration:none}
.asp-ledger-tab.is-live{background:var(--asp-navy-900);color:#fff}
.asp-ledger-band{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-top:2px solid var(--asp-ink);border-bottom:1px solid var(--asp-line)}
.asp-ledger-band .asp-kpi{display:block;padding:var(--asp-space-5);border-right:1px solid var(--asp-line);color:inherit;text-decoration:none}
.asp-ledger-band .asp-kpi:last-child{border-right:0}
.asp-kpi-name{display:block;color:var(--asp-muted);font-size:11.5px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}
.asp-kpi-now{display:block;margin-top:4px;color:var(--asp-ink);font-size:34px;font-weight:700;letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.asp-kpi-mtd{display:block;color:var(--asp-muted);font-size:12.5px}
.asp-kpi-mtd b{color:var(--asp-ink);font-weight:650}
.asp-kpi-trend{display:block;margin-top:12px}
.asp-ledger-spark{display:block;width:100%;height:30px}
.asp-ledger-spark rect{fill:var(--asp-teal-600)}
.asp-ledger-spark rect.is-last{fill:var(--asp-teal-700)}
.asp-kpi-trend small,.asp-kpi-none{display:block;margin-top:8px;color:var(--asp-muted);font-size:11.5px}
/* space-8, not space-7: there is no --asp-space-7 token anywhere in
   this stylesheet, so the column gap resolved to nothing and the two
   columns' figures sat hard against the other column's labels. An
   undefined custom property fails silently -- it does not fall back
   to a sane default, it drops the declaration. */
.asp-ledger-two{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--asp-space-8)}
.asp-ledger-two>div{min-width:0}
.asp-ledger-act{display:flex;gap:var(--asp-space-4);padding:12px 0;border-bottom:1px solid var(--asp-line)}
.asp-ledger-act-n{flex:none;width:22px;color:var(--asp-bronze-600);font-size:17px;font-weight:700;font-variant-numeric:tabular-nums}
.asp-ledger-act-body{min-width:0;flex-grow:1}
.asp-ledger-act-body b{display:block;color:var(--asp-ink);font-size:15px;font-weight:650}
.asp-ledger-act-why{margin-top:4px;color:var(--asp-muted);font-size:13px}
.asp-ledger-act-next{margin-top:4px;color:var(--asp-ink);font-size:13px}
.asp-ledger-act-pri{flex:none;font-size:11px;font-weight:700;letter-spacing:.08em;color:var(--asp-muted)}
.asp-ledger-act-pri.is-high{color:var(--asp-warn)}
.asp-ledger-bar{display:flex;align-items:center;gap:var(--asp-space-4);padding:8px 0;border-bottom:1px solid var(--asp-line)}
.asp-ledger-bar-name{width:104px;flex:none;font-size:14px}
.asp-ledger-bar-track{flex-grow:1;display:block;height:8px;border-radius:4px;background:var(--asp-line);overflow:hidden}
.asp-ledger-bar-fill{display:block;height:8px;border-radius:4px;background:var(--asp-teal-700)}
.asp-ledger-bar-fill.is-dirty{background:var(--asp-warn)}
.asp-ledger-bar-fig{width:42px;flex:none;text-align:right;font-size:15px;font-weight:600;font-variant-numeric:tabular-nums}
.asp-ledger-quiet{padding:8px 0;border-bottom:1px solid var(--asp-line);color:var(--asp-muted);font-size:12.5px}
.asp-ledger-flag{display:inline-flex;align-items:center;gap:8px;padding:4px 12px;border-radius:var(--asp-radius-full);font-size:11.5px;font-weight:700}
.asp-ledger-flag.is-good{background:var(--asp-good-soft);color:var(--asp-good)}
.asp-ledger-flag.is-watch{background:var(--asp-warn-soft);color:var(--asp-warn)}
.asp-ledger-source{margin:0 0 8px;color:var(--asp-muted);font-size:12px}
.asp-ledger-prov{margin:0 0 var(--asp-space-6)}
.asp-ledger-prov .asp-dash-absent{margin:0 0 8px;font-size:12px}
.asp-ledger-prov>:last-child{margin-bottom:0}
.asp-ledger-kept{margin-top:var(--asp-space-6)}
.asp-ledger-filing{margin-top:var(--asp-space-6);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.asp-ledger-filing>summary{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--asp-space-3);padding:var(--asp-space-4) var(--asp-space-5);cursor:pointer;list-style:none}
.asp-ledger-filing>summary::-webkit-details-marker{display:none}
.asp-ledger-filing-name{color:var(--asp-ink);font-size:14px;font-weight:650}
.asp-ledger-filing-hint{color:var(--asp-muted);font-size:12.5px}
.asp-ledger-filing[open]>summary{border-bottom:1px solid var(--asp-line)}
.asp-ledger-filing-body{padding:var(--asp-space-5)}
.asp-ledger-bar-fill.w0{width:0%}.asp-ledger-bar-fill.w5{width:5%}.asp-ledger-bar-fill.w10{width:10%}.asp-ledger-bar-fill.w15{width:15%}.asp-ledger-bar-fill.w20{width:20%}.asp-ledger-bar-fill.w25{width:25%}.asp-ledger-bar-fill.w30{width:30%}.asp-ledger-bar-fill.w35{width:35%}.asp-ledger-bar-fill.w40{width:40%}.asp-ledger-bar-fill.w45{width:45%}.asp-ledger-bar-fill.w50{width:50%}.asp-ledger-bar-fill.w55{width:55%}.asp-ledger-bar-fill.w60{width:60%}.asp-ledger-bar-fill.w65{width:65%}.asp-ledger-bar-fill.w70{width:70%}.asp-ledger-bar-fill.w75{width:75%}.asp-ledger-bar-fill.w80{width:80%}.asp-ledger-bar-fill.w85{width:85%}.asp-ledger-bar-fill.w90{width:90%}.asp-ledger-bar-fill.w95{width:95%}.asp-ledger-bar-fill.w100{width:100%}
@media(max-width:1024px){.asp-ledger-band{grid-template-columns:repeat(2,minmax(0,1fr))}.asp-ledger-two{grid-template-columns:1fr}}
@media(max-width:560px){.asp-ledger-band{grid-template-columns:1fr}.asp-ledger-head{flex-direction:column;gap:var(--asp-space-3)}}


/* RC6.1.6 market pulse */
.asp-mp{--mp-ink:var(--asp-navy-800);--mp-fill:var(--asp-surface-soft)}
.asp-mp-today{--mp-ink:var(--asp-bad);--mp-fill:var(--asp-bad-soft)}
.asp-mp-demand{--mp-ink:var(--asp-good);--mp-fill:var(--asp-good-soft)}
.asp-mp-watch{--mp-ink:var(--asp-navy-800);--mp-fill:var(--asp-surface-soft)}
.asp-mp-warn{--mp-ink:var(--asp-warn);--mp-fill:var(--asp-warn-soft)}
.asp-mp-eyebrow{display:flex;align-items:center;gap:8px;margin:var(--asp-space-8) 0 var(--asp-space-3);color:var(--asp-muted);font-size:11.5px;font-weight:700;letter-spacing:.18em;text-transform:uppercase}
.asp-mp-brief{margin-bottom:var(--asp-space-6)}
.asp-mp-brief-top{display:flex;align-items:baseline;justify-content:space-between;flex-wrap:wrap;gap:var(--asp-space-4);padding-bottom:var(--asp-space-3);border-bottom:1px solid var(--asp-line)}
.asp-mp-day{color:var(--asp-muted);font-size:12px;font-weight:700;letter-spacing:.14em;text-transform:uppercase}
.asp-mp-sky{display:inline-flex;align-items:center;gap:8px;color:var(--asp-muted);font-size:12.5px}
.asp-mp-sky b{color:var(--asp-ink);font-variant-numeric:tabular-nums}
.asp-mp-counts{margin:var(--asp-space-3) 0 0;color:var(--asp-muted);font-size:14px}
.asp-mp-counts b{color:var(--asp-ink);font-variant-numeric:tabular-nums}
.asp-mp-lead{display:flex;align-items:flex-start;gap:var(--asp-space-3);margin-top:var(--asp-space-4);padding:var(--asp-space-4);border-left:4px solid var(--mp-ink,var(--asp-navy-800));border-radius:var(--asp-radius-md);background:var(--mp-fill,var(--asp-surface-soft))}
.asp-mp-lead svg{color:var(--mp-ink,var(--asp-navy-800));}
.asp-mp-lead-body{min-width:0}
.asp-mp-lead-body p{margin:0;font-size:15px;font-weight:650;line-height:1.35}
.asp-mp-lead-body span{display:block;margin-top:4px;color:var(--asp-muted);font-size:12.5px}
.asp-mp-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(250px,1fr));gap:var(--asp-space-4)}
.asp-mp-wins{display:grid;grid-template-columns:repeat(auto-fit,minmax(210px,1fr));gap:var(--asp-space-4)}
.asp-mp-cards{display:grid;grid-template-columns:repeat(auto-fit,minmax(310px,1fr));gap:var(--asp-space-4)}
.asp-mp-panel{padding:var(--asp-space-4);border:1px solid var(--asp-line);border-top:3px solid var(--mp-ink,var(--asp-navy-800));border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}
.asp-mp-panel-top{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-2)}
.asp-mp-panel-name{display:inline-flex;align-items:center;gap:8px;color:var(--mp-ink,var(--asp-navy-800))}
.asp-mp-panel-name b{color:var(--asp-ink);font-size:14px}
.asp-mp-count{color:var(--mp-ink,var(--asp-navy-800));font-size:26px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.asp-mp-win .asp-mp-count{font-size:22px}
.asp-mp-means{margin:4px 0 0;color:var(--asp-muted);font-size:12px}
.asp-mp-empty{margin:var(--asp-space-3) 0 0;color:var(--asp-muted);font-size:12.5px}
.asp-mp-list{margin:var(--asp-space-2) 0 0;padding:0;list-style:none}
.asp-mp-list li{display:flex;align-items:flex-start;gap:8px;padding:8px 0;border-top:1px solid var(--asp-line);font-size:13px}
.asp-mp-list li svg{color:var(--mp-ink,var(--asp-navy-800));}
.asp-mp-list li span{min-width:0}
.asp-mp-list li small{display:block;color:var(--asp-muted);font-size:11.5px}
.asp-mp-more{margin:8px 0 0;color:var(--asp-muted);font-size:11.5px}
.asp-mp-when{margin-top:4px;color:var(--asp-good);font-size:11.5px;font-weight:650}
.asp-mp-note{margin:var(--asp-space-3) 0 0;color:var(--asp-muted);font-size:12px}
.asp-mp-card{display:flex;flex-direction:column;gap:var(--asp-space-3);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-left:4px solid var(--mp-ink,var(--asp-navy-800));border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}
.asp-mp-card h3{margin:0;font-size:15.5px;line-height:1.35}
.asp-mp-card-top{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--asp-space-2)}
.asp-mp-why{margin:4px 0 0;color:var(--asp-muted);font-size:12.8px}
.asp-mp-pill{display:inline-flex;align-items:center;gap:8px;padding:4px 12px;border-radius:var(--asp-radius-full);background:var(--mp-fill,var(--asp-surface-soft));color:var(--mp-ink,var(--asp-navy-800));font-size:11px;font-weight:700;letter-spacing:.09em;text-transform:uppercase;white-space:nowrap}
.asp-mp-fields{margin:0}
.asp-mp-row{display:flex;justify-content:space-between;gap:var(--asp-space-3);padding:8px 0;border-top:1px solid var(--asp-line)}
.asp-mp-row dt{flex:0 0 auto;padding-top:0;color:var(--asp-muted);font-size:10px;font-weight:700;letter-spacing:.1em;text-transform:uppercase}
.asp-mp-row dd{min-width:0;margin:0;text-align:right;font-size:12.5px}
.asp-mp-row dd.asp-mp-known{font-weight:650}
.asp-mp-row dd.asp-mp-unknown{color:var(--asp-warn)}
.asp-mp-acts{display:flex;align-items:center;flex-wrap:wrap;gap:var(--asp-space-3)}
.asp-mp-src{display:inline-flex;align-items:center;gap:8px;font-size:12.5px;font-weight:600}
.asp-mp-foot{display:flex;align-items:center;gap:8px;margin:0;color:var(--asp-muted);font-size:11px}
.asp-mp-cover{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--asp-space-4);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-left:4px solid var(--mp-ink,var(--asp-navy-800));border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.asp-mp-cover span.asp-mp-says{min-width:0;text-align:right;color:var(--asp-muted);font-size:12.5px}
@media(max-width:768px){.asp-mp-brief-top{gap:var(--asp-space-2)}.asp-mp-row{flex-direction:column;gap:4px}.asp-mp-row dd{text-align:left}.asp-mp-cover span.asp-mp-says{text-align:left}}


/* RC6.1.7 conditions card */
.asp-mp-sky-card{padding:var(--asp-space-4);border:1px solid var(--asp-line);border-top:3px solid var(--asp-teal-600);border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}
.asp-mp-sky-top{display:flex;align-items:center;gap:var(--asp-space-4)}
.asp-mp-sky-top svg{flex:0 0 auto;color:var(--asp-teal-600)}
.asp-mp-sky-now{display:flex;flex-direction:column;min-width:0}
.asp-mp-sky-temp{color:var(--asp-ink);font-size:34px;font-weight:700;line-height:1;font-variant-numeric:tabular-nums}
.asp-mp-sky-cond{margin-top:4px;color:var(--asp-muted);font-size:13px}
.asp-mp-sky-rows{margin:var(--asp-space-3) 0 0}
.asp-mp-sky-rows div{display:flex;justify-content:space-between;gap:var(--asp-space-3);padding:8px 0;border-top:1px solid var(--asp-line);font-size:12.5px}
.asp-mp-sky-rows dt{color:var(--asp-muted)}
.asp-mp-sky-rows dd{margin:0;font-weight:650;font-variant-numeric:tabular-nums}
.asp-mp-sky-miss{display:flex;align-items:flex-start;gap:12px;padding:var(--asp-space-4);border:1px solid var(--asp-line);border-top:3px solid var(--asp-warn);border-radius:var(--asp-radius-md);background:var(--asp-warn-soft);color:var(--asp-warn);font-size:12.5px}
.asp-mp-sky-miss svg{flex:0 0 auto;}
.asp-mp-tpl{display:flex;align-items:center;flex-wrap:wrap;gap:var(--asp-space-3);margin-top:var(--asp-space-3)}
.asp-mp-tpl p{flex:1 1 100%;margin:0;color:var(--asp-muted);font-size:12px}


/* RC6.1.8 market pulse sources */
.asp-mp-src-wrap{padding:var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}
.asp-mp-cov{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--asp-space-3);padding-bottom:var(--asp-space-3);border-bottom:1px solid var(--asp-line)}
.asp-mp-cov-says{min-width:0;color:var(--asp-muted);font-size:12.5px;text-align:right}
.asp-mp-feeds{margin:0;padding:0;list-style:none}
.asp-mp-feed{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--asp-space-3);padding:12px 0;border-bottom:1px solid var(--asp-line)}
.asp-mp-feed:last-child{border-bottom:0}
.asp-mp-feed-name{display:flex;flex-direction:column;min-width:0;gap:4px}
.asp-mp-feed-name b{color:var(--asp-ink);font-size:13.5px;font-weight:650;line-height:1.35}
.asp-mp-tags{display:flex;align-items:center;flex-wrap:wrap;gap:8px}
.asp-mp-tag{display:inline-flex;align-items:center;gap:4px;padding:4px 8px;border-radius:var(--asp-radius-full);background:var(--asp-surface-soft);color:var(--asp-muted);font-size:10.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;white-space:nowrap}
.asp-mp-state{display:inline-flex;align-items:center;gap:8px;padding:4px 12px;border-radius:var(--asp-radius-full);font-size:11.5px;font-weight:650;white-space:nowrap}
.asp-mp-state-ok{background:var(--asp-good-soft);color:var(--asp-good)}
.asp-mp-state-quiet{background:var(--asp-surface-soft);color:var(--asp-muted)}
.asp-mp-state-bad{background:var(--asp-bad-soft);color:var(--asp-bad)}
.asp-mp-none{margin:var(--asp-space-4) 0 0;color:var(--asp-muted);font-size:13px}
.asp-mp-add{display:grid;grid-template-columns:repeat(auto-fit,minmax(190px,1fr));gap:var(--asp-space-3);margin-top:var(--asp-space-4);padding-top:var(--asp-space-4);border-top:1px solid var(--asp-line)}
.asp-mp-add h3{grid-column:1/-1;margin:0;font-size:13px;font-weight:700;letter-spacing:.12em;text-transform:uppercase;color:var(--asp-muted)}
.asp-mp-add label{display:block;margin-bottom:4px;color:var(--asp-muted);font-size:11.5px;font-weight:650}
.asp-mp-add input,.asp-mp-add select{width:100%}
.asp-mp-add .asp-mp-add-go{display:flex;align-items:flex-end}
.asp-mp-add .asp-mp-add-go .btn{width:100%}
.asp-mp-add-note{grid-column:1/-1;margin:0;color:var(--asp-muted);font-size:12px}
@media(max-width:768px){.asp-mp-cov-says{text-align:left}.asp-mp-feed{align-items:flex-start}}


/* RC6.1.9 watched phrases */
.asp-mp-watchlist{padding:var(--asp-space-4);border:1px solid var(--asp-line);border-top:3px solid var(--asp-bronze-500);border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:var(--asp-shadow-xs)}
.asp-mp-watch-lead{margin:0 0 var(--asp-space-3);color:var(--asp-muted);font-size:12.8px}
.asp-mp-chips{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin:0 0 var(--asp-space-3);padding:0;list-style:none}
.asp-mp-chip{display:inline-flex;align-items:center;gap:8px;padding:8px 8px 8px 12px;border:1px solid var(--asp-line-strong);border-radius:var(--asp-radius-full);background:var(--asp-bronze-100)}
.asp-mp-chip b{color:var(--asp-ink);font-size:12.5px;font-weight:650}
.asp-mp-chip small{color:var(--asp-bronze-600);font-size:11px;font-weight:650;white-space:nowrap}
.asp-mp-chip form{display:flex;margin:0}
.asp-mp-chip button{display:flex;align-items:center;justify-content:center;width:22px;height:22px;padding:0;border:0;border-radius:var(--asp-radius-full);background:transparent;color:var(--asp-muted);cursor:pointer;font-size:15px;line-height:1}
.asp-mp-chip button:hover,.asp-mp-chip button:focus-visible{background:var(--asp-bad-soft);color:var(--asp-bad)}
.asp-mp-watch-add{display:grid;grid-template-columns:minmax(0,2fr) minmax(0,1fr) auto;gap:var(--asp-space-3);align-items:end;padding-top:var(--asp-space-3);border-top:1px solid var(--asp-line)}
.asp-mp-watch-add label{display:block;margin-bottom:4px;color:var(--asp-muted);font-size:11.5px;font-weight:650}
.asp-mp-watch-add input,.asp-mp-watch-add select{width:100%}
.asp-mp-watch-add .btn{width:100%}
.asp-mp-watch-note{grid-column:1/-1;margin:0;color:var(--asp-muted);font-size:12px}
.asp-mp-watch-warn{grid-column:1/-1;margin:0;color:var(--asp-warn);font-size:12px;font-weight:650}
@media(max-width:768px){.asp-mp-watch-add{grid-template-columns:1fr}}

/* === RC6.2.0 REPORT LIBRARY === */
/* The report sheet reads like a printed report: the hotel, the report's name,
   what it was asked and when, then the table. Every value comes from the
   design tokens, with a fallback, because an unresolved custom property
   silently invalidates its whole declaration. */
.asp-report-group{margin-top:var(--asp-space-6,24px)}
.asp-report-group h2{margin:0 0 var(--asp-space-1,4px)}
.asp-report-tag{flex:0 0 auto;padding:4px 8px;border-radius:var(--asp-radius-full,999px);
  border:1px solid var(--asp-line,#d9dee5);color:var(--asp-muted,#5b6472);font-size:12px;font-weight:700}
.asp-report-head{padding-bottom:var(--asp-space-4,16px);margin-bottom:var(--asp-space-4,16px);
  border-bottom:2px solid var(--asp-teal-700,#0f6e72)}
.asp-report-hotel{margin:0;color:var(--asp-muted,#5b6472);font-weight:700;font-size:13px;
  letter-spacing:.02em;text-transform:uppercase}
.asp-report-head h1{margin:var(--asp-space-1,4px) 0}
.asp-report-params{display:grid;grid-template-columns:max-content 1fr;gap:var(--asp-space-1,4px) var(--asp-space-4,16px);
  margin:var(--asp-space-3,12px) 0 0;font-size:14px}
.asp-report-params dt{font-weight:700;color:var(--asp-ink,#1b2330)}
.asp-report-params dd{margin:0;min-width:0;overflow-wrap:anywhere}
.asp-report-actions{margin:0 0 var(--asp-space-4,16px)}
.asp-report-count-line{margin:0 0 var(--asp-space-2,8px);color:var(--asp-muted,#5b6472);font-weight:700}
.asp-report-empty{padding:var(--asp-space-5,20px);border:1px dashed var(--asp-line,#d9dee5);
  border-radius:var(--asp-radius-md,12px);color:var(--asp-muted,#5b6472);text-align:center}
.asp-report-table tfoot td{font-weight:800;border-top:2px solid var(--asp-line,#d9dee5)}
.asp-report-summary{max-width:480px;margin-bottom:var(--asp-space-4,16px)}
.asp-report-summary .asp-report-table{min-width:0}
.asp-report-dates{display:grid;grid-template-columns:1fr 1fr;gap:var(--asp-space-3,12px);align-items:end}
.asp-report-dates .mini{grid-column:1/-1;margin:0}
.asp-report-share{display:flex;gap:var(--asp-space-2,8px);align-items:center;margin:var(--asp-space-3,12px) 0}
.asp-report-people{margin:0 0 var(--asp-space-4,16px)}
.asp-report-people summary{cursor:pointer;font-weight:700;min-height:44px;display:flex;align-items:center}
.asp-report-recipient{display:grid;grid-template-columns:minmax(120px,1fr) 2fr;gap:var(--asp-space-3,12px);
  align-items:center;padding:var(--asp-space-1,4px) 0}
.asp-report-dept{margin-top:var(--asp-space-6,24px)}
.asp-report-dept h2{margin:0 0 var(--asp-space-2,8px)}
.asp-report-system{border:1px solid var(--asp-line,#d9dee5);border-radius:var(--asp-radius-md,12px);
  margin:0 0 var(--asp-space-2,8px);background:var(--asp-surface,#fff)}
.asp-report-system summary{display:flex;justify-content:space-between;gap:var(--asp-space-3,12px);
  align-items:center;min-height:44px;padding:var(--asp-space-2,8px) var(--asp-space-4,16px);cursor:pointer;font-weight:700}
.asp-report-system summary small{color:var(--asp-muted,#5b6472);font-weight:600;white-space:nowrap}
.asp-report-system .asp-report-list{padding:0 var(--asp-space-4,16px) var(--asp-space-4,16px)}
.asp-report-delete{margin-top:var(--asp-space-3,12px)}
@media(max-width:560px){
  .asp-report-params{grid-template-columns:1fr}
  .asp-report-params dd{margin-bottom:var(--asp-space-2,8px)}
  .asp-report-recipient{grid-template-columns:1fr}
  .asp-report-dates{grid-template-columns:1fr}
}
@media print{
  .asp-report-actions,.asp-report-save,.asp-report-delete,.asp-header-tools{display:none!important}
  .asp-report-sheet{border:0!important;box-shadow:none!important;padding:0!important}
}

/* === RC6.2.1 FILING DRAWER === */
.asp-ledger-filing-part{margin:0 0 var(--asp-space-6,24px)}
.asp-ledger-filing-part:last-child{margin-bottom:0}
.asp-ledger-filing-part h2{font-size:18px;margin:0 0 var(--asp-space-2,8px)}

/* === RC6.2.2 LEDGER RANGE AND PORTFOLIO === */
.asp-ledger-controls{display:flex;flex-wrap:wrap;gap:var(--asp-space-3,12px);align-items:center;
  margin-top:var(--asp-space-3,12px);width:100%}
.asp-ledger-picker,.asp-ledger-range{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px);align-items:center;margin:0}
.asp-ledger-picker label,.asp-ledger-range label{font-weight:700;font-size:13px;margin:0}
.asp-ledger-picker select,.asp-ledger-range input{width:auto;min-height:36px;margin:0}
@media(max-width:560px){
  .asp-ledger-picker,.asp-ledger-range{width:100%}
  .asp-ledger-picker select,.asp-ledger-range input{flex:1 1 auto}
}

/* === RC6.2.4 STUDIO SHELL === */
/* The owner's chosen direction (Option C, 2026-09-21), across the whole
   signed-in product: one brand, each department its own colour and icon.
   Scoped to a main that carries the Studio marker as its first child, so no
   page's own structure changes. */
.asp-studio-mark{display:none}

.main:has(>.asp-studio-mark) .hero.compact{background:transparent;border:0;box-shadow:none;padding-left:0;padding-right:0}
.main:has(>.asp-studio-mark) .hero .eyebrow{color:var(--asp-dept,#0b7a82)}
.asp-studio-hero{display:flex;align-items:center;gap:var(--asp-space-5,20px)}
.asp-studio-icon{flex:none;width:64px;height:64px;border-radius:20px;background:#fff;color:var(--asp-dept,#0b7a82);
  display:flex;align-items:center;justify-content:center;box-shadow:0 10px 30px -14px var(--asp-dept,#0b7a82)}
.asp-studio-hero h1{letter-spacing:-.02em;font-size:32px;line-height:1.15;margin:0}
.asp-studio-hero .lead{font-size:15px;margin-top:var(--asp-space-1,4px)}
.asp-studio-hero .btn{white-space:nowrap}
.asp-studio-hero .btn:not(.secondary):not(.ghost){background:var(--asp-dept,#0b7a82);border-color:var(--asp-dept,#0b7a82);
  border-radius:14px;min-height:48px;padding-left:var(--asp-space-6,24px);padding-right:var(--asp-space-6,24px)}
.main:has(>.asp-studio-mark) .metrics{gap:var(--asp-space-3,12px)}
.main:has(>.asp-studio-mark) .metric{background:#fff;border:0;border-radius:18px;box-shadow:0 8px 24px -18px #0d1420}
.main:has(>.asp-studio-mark) .card{border:0;border-radius:24px;box-shadow:0 20px 50px -34px #0d1420}
.main:has(>.asp-studio-mark) .filterbar{border:0;background:transparent;padding:0;box-shadow:none}
.main:has(>.asp-studio-mark) .filterbar input,.main:has(>.asp-studio-mark) .filterbar select{border-radius:22px;min-height:44px}
.main:has(>.asp-studio-mark) .filterbar button{border-radius:22px;min-height:44px;background:var(--asp-navy-900,#0d1420);color:#fff;border-color:var(--asp-navy-900,#0d1420)}
.main:has(>.asp-studio-mark) .system-row{border-radius:16px;border:1px solid transparent;background:var(--asp-surface-alt,#f8f9fd);
  margin-top:var(--asp-space-2,8px);transition:box-shadow var(--asp-motion-fast) ease,border-color var(--asp-motion-fast) ease}
.main:has(>.asp-studio-mark) .system-row:hover{background:#fff;border-color:var(--asp-dept,#0b7a82);box-shadow:0 10px 30px -18px var(--asp-dept,#0b7a82)}
.main:has(>.asp-studio-mark) .system-row:focus-visible{outline:2px solid var(--asp-dept,#0b7a82);outline-offset:2px}
.main:has(>.asp-studio-mark) .asp-trail a{color:var(--asp-muted,#5b6a7e)}
.main:has(>.asp-studio-mark) details.asp-system-help{background:transparent;border:0;box-shadow:none}
.main:has(>.asp-studio-mark) details.asp-system-help>summary{display:inline-flex;align-items:center;min-height:44px;padding:0 var(--asp-space-4,16px);
  border-radius:22px;background:#fff;font-weight:700;cursor:pointer;box-shadow:0 6px 18px -14px #0d1420}
.main:has(>.asp-studio-mark) details.asp-system-help[open]>summary{margin-bottom:var(--asp-space-3,12px)}
.main:has(>.asp-studio-mark) details.asp-system-help>.asp-system-help-body{background:#fff;border-radius:20px;padding:var(--asp-space-5,20px)}
@media(max-width:560px){
  .asp-studio-hero{flex-wrap:wrap}
  .asp-studio-icon{width:48px;height:48px;border-radius:16px}
}

/* === RC6.2.5 REPORTS WORK LIKE A PMS === */
.asp-report-controls{display:flex;flex-direction:column;gap:var(--asp-space-3,12px);
  padding:var(--asp-space-4,16px);margin:0 0 var(--asp-space-4,16px);border-radius:var(--asp-radius-md,12px);
  background:var(--asp-surface-alt,#f8f9fd)}
.asp-report-controls-row{display:flex;flex-wrap:wrap;gap:var(--asp-space-3,12px);align-items:flex-end}
.asp-report-controls-row>div{min-width:160px}
.asp-report-controls .btn{align-self:flex-start}
.asp-report-cols summary{cursor:pointer;font-weight:700;min-height:44px;display:flex;align-items:center}
.asp-report-col-list{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px) var(--asp-space-4,16px);padding:var(--asp-space-2,8px) 0}
.asp-report-col{display:flex;align-items:center;gap:var(--asp-space-2,8px);font-weight:500}
.asp-report-sort{color:inherit;text-decoration:none;display:inline-flex;gap:var(--asp-space-1,4px)}
.asp-report-sort:hover{text-decoration:underline}
.asp-report-grouprow td{font-weight:800;background:var(--asp-surface-alt,#f8f9fd)}
.asp-report-subtotal td{font-weight:700;border-top:1px solid var(--asp-line,#e3e8ef)}
@media(max-width:560px){.asp-report-controls-row>div{min-width:100%}}

/* === RC6.2.6 STUDIO RECORD BESIDE THE LIST === */
@media(min-width:1025px){
  .main:has(>.asp-split-detail){display:grid;grid-template-columns:minmax(0,1fr) minmax(420px,44%);
    column-gap:var(--asp-space-6,24px);align-items:start;max-width:none}
  .main:has(>.asp-split-detail)>*:not(.asp-split-detail){grid-column:1}
  .main>.asp-split-detail{grid-column:2;grid-row:1 / span 40;position:sticky;top:var(--asp-space-4,16px);
    max-height:calc(100vh - 96px);overflow:auto}
}
.asp-split-detail{background:#fff;border-radius:24px;padding:var(--asp-space-5,20px);
  box-shadow:0 20px 50px -30px #0d1420;margin-bottom:var(--asp-space-6,24px)}
.asp-split-detail .grid.two{grid-template-columns:minmax(0,1fr)}
.asp-split-detail .card{box-shadow:none;border:1px solid var(--asp-line,#e3e8ef)}
.asp-split-detail .hero{padding:0;margin:0 0 var(--asp-space-3,12px);background:transparent;border:0;box-shadow:none}
.asp-split-detail .hero h1{font-size:24px}
.asp-split-bar{display:flex;justify-content:space-between;gap:var(--asp-space-2,8px);margin-bottom:var(--asp-space-4,16px)}
/* Beside a record the list column is narrower, so the figures size to it
   rather than spilling out of their tiles. */
.main:has(>.asp-split-detail) .metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr))}
.main:has(>.asp-split-detail) .metric b{font-size:24px;overflow-wrap:anywhere}
.system-row.is-open{background:#fff;border-color:var(--asp-dept,#0b7a82);box-shadow:0 10px 30px -18px var(--asp-dept,#0b7a82)}
@media(max-width:1024px){
  .main:has(>.asp-split-detail){display:flex;flex-direction:column}
  .main>.asp-split-detail{order:-1}
}

/* === RC6.2.7 STUDIO SIGNATURE VIEWS === */
.asp-sig-fold{margin:var(--asp-space-4,16px) 0 var(--asp-space-5,20px)}
.asp-sig-fold>.asp-signature{margin-top:var(--asp-space-3,12px)}
.asp-sig-summary{list-style:none;cursor:pointer;display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2,8px);
  padding:var(--asp-space-3,12px) var(--asp-space-4,16px);border-radius:20px;background:#fff;border:1px solid var(--asp-line,#e3e8ef)}
.asp-sig-summary::-webkit-details-marker{display:none}
.asp-sig-summary>b{font-size:15px;margin-right:var(--asp-space-1,4px)}
.asp-sig-summary:focus-visible{outline:2px solid var(--asp-dept,#0b7a82);outline-offset:2px}
.asp-sig-chip{display:inline-flex;align-items:center;gap:var(--asp-space-1,4px);padding:var(--asp-space-2,8px) var(--asp-space-3,12px);border-radius:999px;font-size:13px;font-weight:700}
.asp-sig-chip em{font-style:normal;font-weight:800}
.asp-sig-chip.is-plain{color:#334155;background:#f1f4f8}.asp-sig-chip.is-soon{color:#b45309;background:#fdf3e7}
.asp-sig-chip.is-late{color:#b91c1c;background:#fdecec}.asp-sig-chip.is-good{color:#166534;background:#e8f5ec}
.asp-sig-toggle{margin-left:auto;display:inline-flex;align-items:center;padding:var(--asp-space-2,8px) var(--asp-space-4,16px);border-radius:999px;
  border:1px solid var(--asp-line,#e3e8ef);font-size:13px;font-weight:700;color:var(--asp-ink,#111a26)}
.asp-sig-fold[open] .asp-sig-show,.asp-sig-fold:not([open]) .asp-sig-hide{display:none}
.asp-signature{margin-bottom:var(--asp-space-5,20px)}
.asp-grid-keys{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px);margin:0 0 var(--asp-space-4,16px)}
.asp-grid-key{display:inline-flex;gap:var(--asp-space-1,4px);align-items:center;padding:var(--asp-space-1,4px) var(--asp-space-3,12px);
  border:1px solid;border-radius:999px;font-size:13px}
.asp-floor{display:flex;gap:var(--asp-space-4,16px);align-items:flex-start;padding:var(--asp-space-2,8px) 0}
.asp-floor-name{flex:none;width:64px;font-size:12px;font-weight:800;letter-spacing:.05em;color:var(--asp-muted,#5b6a7e);padding-top:var(--asp-space-3,12px)}
.asp-floor-rooms{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px)}
.asp-room{width:76px;min-height:64px;box-sizing:border-box;border:1.5px solid;border-radius:14px;padding:var(--asp-space-2,8px);
  display:flex;flex-direction:column;justify-content:space-between;text-decoration:none}
.asp-room b{font-size:15px}.asp-room span{font-size:11px;opacity:.85;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.asp-room:focus-visible,.asp-pipe-card:focus-visible{outline:2px solid var(--asp-dept,#0b7a82);outline-offset:2px}
.asp-room.is-assigned,.asp-grid-key.is-assigned{color:#475569;background:#f1f4f8;border-color:#475569}.asp-sig-chip.is-assigned{color:#475569;background:#f1f4f8}.asp-room.is-progress,.asp-grid-key.is-progress{color:#b45309;background:#fdf3e7;border-color:#b45309}.asp-sig-chip.is-progress{color:#b45309;background:#fdf3e7}.asp-room.is-ready,.asp-grid-key.is-ready{color:#1d4ed8;background:#eaf0fd;border-color:#1d4ed8}.asp-sig-chip.is-ready{color:#1d4ed8;background:#eaf0fd}.asp-room.is-inspected,.asp-grid-key.is-inspected{color:#166534;background:#e8f5ec;border-color:#166534}.asp-sig-chip.is-inspected{color:#166534;background:#e8f5ec}.asp-room.is-out,.asp-grid-key.is-out{color:#b91c1c;background:#fdecec;border-color:#b91c1c}.asp-sig-chip.is-out{color:#b91c1c;background:#fdecec}.asp-room.is-dnd,.asp-grid-key.is-dnd{color:var(--asp-neutral-ink);background:var(--asp-surface-hover);border-color:var(--asp-neutral-ink)}.asp-sig-chip.is-dnd{color:var(--asp-neutral-ink);background:var(--asp-surface-hover)}.asp-room.is-noservice,.asp-grid-key.is-noservice{color:#0f766e;background:#e6f3f2;border-color:#0f766e}.asp-sig-chip.is-noservice{color:#0f766e;background:#e6f3f2}
.asp-pipe{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--asp-space-3,12px)}
.asp-pipe-col{background:var(--asp-surface-alt,#f8f9fd);border-radius:16px;padding:var(--asp-space-3,12px);display:flex;flex-direction:column;gap:var(--asp-space-2,8px)}
.asp-pipe-head{display:flex;justify-content:space-between;font-size:13px;font-weight:700;padding:0 var(--asp-space-1,4px)}
.asp-pipe-card{display:flex;flex-direction:column;gap:var(--asp-space-1,4px);background:#fff;border-radius:12px;padding:var(--asp-space-3,12px);
  text-decoration:none;color:var(--asp-ink,#111a26);border:1px solid var(--asp-line,#e3e8ef)}
.asp-pipe-card:hover{border-color:var(--asp-dept,#0b7a82)}
.asp-pipe-value{font-variant-numeric:tabular-nums;font-weight:800;color:var(--asp-dept,#0b7a82)}

/* === RC6.2.9 STUDIO VIEWS EVERY SYSTEM === */
.asp-sig-group{padding:var(--asp-space-2,8px) 0}
.asp-sig-group-head{display:flex;justify-content:space-between;align-items:center;gap:var(--asp-space-3,12px);
  font-size:13px;font-weight:700;margin-bottom:var(--asp-space-2,8px)}
.asp-sig-sum{font-variant-numeric:tabular-nums;font-weight:800;color:var(--asp-dept,#0b7a82)}
.asp-sig-tiles,.asp-sig-gauges,.asp-sig-waters{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:var(--asp-space-2,8px)}
.asp-sig-tile,.asp-sig-gauge,.asp-sig-water{display:flex;flex-direction:column;gap:var(--asp-space-1,4px);padding:var(--asp-space-3,12px);
  border:1px solid var(--asp-line,#e3e8ef);border-radius:12px;background:#fff;color:var(--asp-ink,#111a26);text-decoration:none}
.asp-sig-tile b,.asp-sig-gauge b,.asp-sig-water b{font-size:14px}
.asp-sig-tile span,.asp-sig-gauge span{font-size:12px}
.asp-sig-tile em,.asp-sig-water em{font-style:normal;font-size:12px;font-weight:700}
.asp-sig-tile:hover,.asp-sig-gauge:hover,.asp-sig-water:hover{border-color:var(--asp-dept,#0b7a82)}
.asp-sig-tile:focus-visible,.asp-sig-gauge:focus-visible,.asp-sig-water:focus-visible{outline:2px solid var(--asp-dept,#0b7a82);outline-offset:2px}
.asp-gauge{display:block;height:8px;border-radius:999px;background:#e3e8ef;overflow:hidden}
.asp-gauge-wide{width:160px;color:var(--asp-dept,#0b7a82)}
.asp-gauge-fill{display:block;height:100%;border-radius:999px;background:currentColor}
.asp-sig-readings{display:grid;grid-template-columns:repeat(auto-fill,minmax(96px,1fr));gap:var(--asp-space-2,8px);margin-top:var(--asp-space-2,8px)}
.asp-sig-readings span{display:flex;flex-direction:column}
.asp-sig-readings small{font-size:11px;opacity:.85}
.asp-sig-readings b{font-size:16px}
.asp-sig-tile.is-plain,.asp-sig-gauge.is-plain,.asp-sig-water.is-plain{color:#475569;background:#f1f4f8;border-color:#475569}.asp-sig-tile.is-soon,.asp-sig-gauge.is-soon,.asp-sig-water.is-soon{color:#b45309;background:#fdf3e7;border-color:#b45309}.asp-sig-tile.is-late,.asp-sig-gauge.is-late,.asp-sig-water.is-late{color:#b91c1c;background:#fdecec;border-color:#b91c1c}.asp-sig-tile.is-good,.asp-sig-gauge.is-good,.asp-sig-water.is-good{color:#166534;background:#e8f5ec;border-color:#166534}.asp-sig-tile.is-muted,.asp-sig-gauge.is-muted,.asp-sig-water.is-muted{color:#5b6a7e;background:#f4f6f9;border-color:#5b6a7e}.asp-gauge-fill.asp-w-0{width:0%}.asp-gauge-fill.asp-w-1{width:10%}.asp-gauge-fill.asp-w-2{width:20%}.asp-gauge-fill.asp-w-3{width:30%}.asp-gauge-fill.asp-w-4{width:40%}.asp-gauge-fill.asp-w-5{width:50%}.asp-gauge-fill.asp-w-6{width:60%}.asp-gauge-fill.asp-w-7{width:70%}.asp-gauge-fill.asp-w-8{width:80%}.asp-gauge-fill.asp-w-9{width:90%}.asp-gauge-fill.asp-w-10{width:100%}

/* === RC6.3.0 STUDIO DEPARTMENT PAGE === */
.asp-studio-area{display:grid;grid-template-columns:auto minmax(0,1fr) auto;column-gap:var(--asp-space-5,20px);row-gap:var(--asp-space-2,8px);align-items:center}
.asp-studio-area>.asp-studio-area-icon{grid-column:1;grid-row:1 / span 3}
.asp-studio-area>.eyebrow,.asp-studio-area>h1,.asp-studio-area>.lead,.asp-studio-area>.metrics{grid-column:2;margin:0}
.asp-studio-area>h1{font-size:32px;letter-spacing:-.02em;line-height:1.15}
.asp-studio-area>.btn{grid-column:3;grid-row:1 / span 2;align-self:start;border-radius:14px;min-height:48px;background:var(--asp-dept,#0b7a82);border-color:var(--asp-dept,#0b7a82);color:#fff}
.asp-studio-area>.metrics{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px)}
.asp-studio-area>.metrics .metric{display:inline-flex;align-items:baseline;gap:var(--asp-space-1,4px);padding:var(--asp-space-1,4px) var(--asp-space-3,12px);
  border-radius:999px;box-shadow:none;min-height:0}
.asp-studio-area>.metrics .metric b{font-size:15px}
.asp-studio-area>.metrics .metric span{font-size:13px}
.asp-studio-area>.asp-area-search{grid-column:1 / -1;max-width:none;margin-top:var(--asp-space-3,12px)}
.asp-studio-area>.asp-area-search input{min-height:48px;border-radius:24px;border-color:transparent;padding-left:var(--asp-space-5,20px);box-shadow:0 8px 24px -20px #0d1420}
.asp-studio-area>.asp-area-search button{min-height:48px;border-radius:24px;padding-left:var(--asp-space-6,24px);padding-right:var(--asp-space-6,24px);background:var(--asp-dept,#0b7a82)}
.main:has(>.asp-studio-mark) .asp-area-parts-summary{display:grid;grid-template-columns:repeat(auto-fit,minmax(300px,1fr));gap:var(--asp-space-4,16px);margin:var(--asp-space-5,20px) 0}
.main:has(>.asp-studio-mark) .asp-area-parts-summary li{display:flex;flex-direction:column;align-items:stretch;gap:var(--asp-space-2,8px);padding:var(--asp-space-5,20px);
  background:rgba(255,255,255,.75);border:0;border-radius:22px}
.main:has(>.asp-studio-mark) .asp-area-parts-summary li>a{margin:0;padding:0;font-size:16px;font-weight:800;color:var(--asp-ink,#111a26)}
.main:has(>.asp-studio-mark) .asp-area-parts-summary li>a:hover{background:transparent;color:var(--asp-dept,#0b7a82)}
.main:has(>.asp-studio-mark) .asp-area-parts-summary li{justify-content:flex-start}
.main:has(>.asp-studio-mark) .asp-area-parts-summary .asp-dept-stages{gap:var(--asp-space-2,8px);margin-top:var(--asp-space-1,4px)}
.main:has(>.asp-studio-mark) .asp-area-parts-summary li .asp-dept-stage{background:#fff;margin:0;padding:var(--asp-space-1,4px) var(--asp-space-3,12px);font-size:13px}
.main:has(>.asp-studio-mark) .asp-area-tabs{border:0;border-radius:999px;background:rgba(255,255,255,.65);padding:var(--asp-space-1,4px)}
.main:has(>.asp-studio-mark) .asp-area-tab{border-radius:999px;padding:var(--asp-space-2,8px) var(--asp-space-4,16px)}
.main:has(>.asp-studio-mark) .asp-area-tab.is-active{color:var(--asp-dept,#0b7a82)}
/* One rhythm down the page, and the record counts as one slim line -- the
   approved mockup's summary line -- instead of big tiles crowding the
   buttons above them. The same numbers, the same order. */
.main:has(>.asp-studio-mark)>.metrics{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px);margin:var(--asp-space-4,16px) 0}
.main:has(>.asp-studio-mark)>.metrics .metric{display:inline-flex;align-items:baseline;gap:var(--asp-space-2,8px);min-height:0;
  padding:var(--asp-space-2,8px) var(--asp-space-4,16px);border-radius:999px;box-shadow:none;background:rgba(255,255,255,.8)}
.main:has(>.asp-studio-mark)>.metrics .metric b{font-size:16px;line-height:1.2}
.main:has(>.asp-studio-mark)>.metrics .metric span{font-size:13px}
.main:has(>.asp-studio-mark)>.asp-part-scope{margin:var(--asp-space-4,16px) 0 var(--asp-space-2,8px)}
.main:has(>.asp-studio-mark)>.status-row{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px);margin:0 0 var(--asp-space-2,8px)}
.main:has(>.asp-studio-mark)>.asp-area-tabs{margin:0 0 var(--asp-space-2,8px)}
.main:has(>.asp-studio-mark)>.card,.main:has(>.asp-studio-mark)>section.card,.main:has(>.asp-studio-mark)>details.card{margin:var(--asp-space-5,20px) 0}
@media(max-width:768px){
  .asp-studio-area{grid-template-columns:auto minmax(0,1fr)}
  .asp-studio-area>.btn{grid-column:1 / -1;grid-row:auto;justify-self:start}
  .main:has(>.asp-studio-mark) .asp-area-parts-summary{grid-template-columns:minmax(0,1fr)}
}

/* === RC6.3.1 DEPARTMENTS OPEN IN THE SIDE BAR === */
.asp-side-dept>summary{list-style:none;cursor:pointer}
.asp-side-dept>summary::-webkit-details-marker{display:none}
.asp-side-chev{width:14px;height:14px;margin-left:auto;flex:none;fill:none;stroke:currentColor;stroke-width:2.2;stroke-linecap:round;stroke-linejoin:round;transition:transform var(--asp-motion-fast) ease}
.asp-side-dept[open]>summary .asp-side-chev{transform:rotate(90deg)}
.asp-side-sub{display:flex;flex-direction:column;gap:var(--asp-space-1,4px);margin:var(--asp-space-1,4px) 0 var(--asp-space-2,8px) var(--asp-space-5,20px);padding-left:12px;border-left:2px solid rgba(255,255,255,.18)}
.asp-side-sublink{display:block;padding:var(--asp-space-2,8px) var(--asp-space-3,12px);border-radius:8px;font-size:13px;line-height:1.3;color:#c7d2e3;text-decoration:none}
.asp-side-sublink:hover{background:rgba(255,255,255,.08);color:#fff}
.asp-side-sublink{display:flex;align-items:center;gap:var(--asp-space-2,8px)}
.asp-side-badge{margin-left:auto;min-width:22px;height:22px;padding:0 var(--asp-space-2,8px);box-sizing:border-box;border-radius:999px;background:#f59e0b;color:#1f1300;font-size:12px;font-weight:800;line-height:22px;text-align:center;flex:none}
.asp-side-link .asp-side-badge+.asp-side-chev{margin-left:var(--asp-space-2,8px)}
.asp-side-sublink.is-active{background:rgba(255,255,255,.14);color:#fff;font-weight:700}
/* Tablets only (561-1024px): the side bar is a row of icons, so a
   department opens as a dropdown under its icon rather than pushing the row
   apart. NOT max-width:1024px alone -- that range also covers phones, and
   .asp-side{position:relative} here silently overrode the phone bar's own
   position:fixed a few lines below, so the bottom bar drifted into normal
   document flow instead of staying glued to the viewport on a phone.
   Found from the owner's own screenshots, 2026-09-22: the bar sat wherever
   it fell in the page instead of pinned to the bottom of the screen. */
@media(min-width:561px) and (max-width:1024px){
  .asp-side{position:relative;z-index:80}
  .asp-side-nav .asp-side-dept{position:relative}
  .asp-side-nav .asp-side-dept>summary .asp-side-chev,.asp-side-nav .asp-side-dept>summary .asp-side-badge{display:none}
  .asp-side-nav .asp-side-dept>.asp-side-sub{position:absolute;left:0;top:calc(100% + 4px);z-index:70;min-width:220px;margin:0;
    padding:var(--asp-space-2,8px);border:0;border-radius:14px;background:var(--asp-navy-950,#0b1220);box-shadow:0 20px 50px -20px #000}
}
/* Phones: the bar keeps only its fixed destinations; departments open in
   full inside the More sheet, where there is room for their lists. */
@media(max-width:560px){
  .asp-side-nav .asp-side-dept{display:none}
  .asp-more-panel-nav .asp-side-dept{display:block}
  .asp-more-panel-nav .asp-side-dept>summary{color:var(--asp-ink,#111a26)}
  .asp-more-panel-nav .asp-side-dept>summary span{display:inline}
  .asp-more-panel-nav .asp-side-dept>summary .asp-side-chev,.asp-more-panel-nav .asp-side-dept>summary .asp-side-badge{display:inline-block}
  .asp-more-panel-nav .asp-side-sub{position:static;border-left-color:var(--asp-line,#e3e8ef);background:transparent;box-shadow:none}
  .asp-more-panel-nav .asp-side-sublink{color:var(--asp-ink,#111a26);min-height:44px;display:flex;align-items:center}
  .asp-more-panel-nav .asp-side-sublink.is-active{background:var(--asp-teal-100,#e4f5f5);color:var(--asp-teal-700,#0b7a82)}
}
.asp-side-sublink:focus-visible,.asp-side-dept>summary:focus-visible{outline:2px solid var(--asp-teal-600,#0b7a82);outline-offset:2px;box-shadow:0 0 0 4px #fff}

/* === RC6.3.2 EVERY SETTING UNDER THE GEAR === */
.asp-gear{position:relative;display:inline-flex}
.asp-gear>summary{list-style:none;cursor:pointer}
.asp-gear>summary::-webkit-details-marker{display:none}
.asp-gear-menu{position:absolute;right:0;top:calc(100% + 8px);z-index:60;width:340px;max-width:calc(100vw - 32px);box-sizing:border-box;
  /* The menu opens below the header's gear icon and grows downward with no
     floor of its own -- on a short phone in standalone/PWA mode (no browser
     chrome eating into the viewport) a full Hotel setup + You list can run
     past the bottom of the screen and under the fixed phone nav bar
     (.asp-side, @media(max-width:560px)) instead of stopping above it.
     90px covers the header's own height plus this menu's own top gap; 64px
     is the phone nav bar's height (padding + icon + label, see .asp-side);
     env(safe-area-inset-bottom) is the home-indicator gesture strip, itself
     zero until viewport-fit=cover is present on the page's viewport meta
     tag (customer_web.py's page()). Same convention as .asp-more-panel.
     .topbar's own padding-top grows by env(safe-area-inset-top) (see
     rc430's base stylesheet), which pushes this menu's anchor point down
     by that same amount -- subtracted again here, or a tall status-bar
     inset alone (with no bottom inset at all) was measured pushing the
     menu's own bottom edge past the nav bar's top edge undetected.
     Real iOS Safari still cut the menu off after all of the above, on a
     real device, because `100vh` on mobile Safari does not reliably equal
     the actual visible viewport -- this whole formula was only ever
     verified against Chromium with a simulated safe-area override, which
     does not reproduce that specific, well-documented Safari behaviour.
     `100dvh` (dynamic viewport height) is the unit that actually tracks
     what's visible; declared a second time so it overrides `100vh` only
     in browsers that understand it; the `100vh` line above stays as the
     fallback for the very few that don't. */
  max-height:calc(100vh - 90px - env(safe-area-inset-top,0px) - 64px - env(safe-area-inset-bottom,0px));overflow-y:auto;overscroll-behavior:contain;
  max-height:calc(100dvh - 90px - env(safe-area-inset-top,0px) - 64px - env(safe-area-inset-bottom,0px));
  padding:var(--asp-space-2,8px) var(--asp-space-2,8px) calc(var(--asp-space-2,8px) + env(safe-area-inset-bottom,0px));border-radius:20px;background:#fff;color:var(--asp-ink,#111a26);
  box-shadow:0 30px 70px -30px #0d1420,0 0 0 1px var(--asp-line,#e3e8ef)}
.asp-gear-head{margin:0;padding:var(--asp-space-3,12px) var(--asp-space-4,16px) var(--asp-space-1,4px);font-size:11px;font-weight:800;
  letter-spacing:.1em;text-transform:uppercase;color:var(--asp-muted,#5b6a7e)}
.asp-gear-item{display:flex;flex-direction:column;gap:var(--asp-space-1,4px);padding:var(--asp-space-2,8px) var(--asp-space-4,16px);border-radius:12px;
  color:var(--asp-ink,#111a26);text-decoration:none}
.asp-gear-item b{font-size:14px}
.asp-gear-item span{font-size:12.5px;color:var(--asp-muted,#5b6a7e)}
.asp-gear-item:hover,.asp-gear-item.is-active{background:var(--asp-surface-alt,#f4f7fb)}
.asp-gear-item:focus-visible,.asp-gear>summary:focus-visible{outline:2px solid var(--asp-teal-600,#0b7a82);outline-offset:2px}

/* === RC6.3.3 STUDIO PAGES === */
.main:has(>.asp-studio-mark) .system-row{align-items:center;gap:var(--asp-space-4,16px);margin-left:0;margin-right:0;
  padding:var(--asp-space-3,12px) var(--asp-space-4,16px);border:1px solid transparent;border-bottom-color:transparent;background:rgba(255,255,255,.55)}
.asp-row-avatar{flex:none;width:40px;height:40px;border-radius:12px;display:flex;align-items:center;justify-content:center;
  background:var(--asp-dept-tint,#eef7f7);color:var(--asp-dept,#0b7a82);font-weight:800;font-size:15px}
.main:has(>.asp-studio-mark) .system-row-main b{font-size:15px}
.main:has(>.asp-studio-mark) .system-row .status-row{align-items:center}
.main:has(>.asp-studio-mark) .system-row .status-row .pill{background:#fff;border:1px solid var(--asp-line,#e3e8ef);color:var(--asp-ink,#111a26);
  border-radius:999px;padding:var(--asp-space-1,4px) var(--asp-space-3,12px);font-size:12px;font-weight:700}
.asp-studio-hero{flex-wrap:wrap}
.asp-studio-hero>div:not(.asp-studio-icon){flex:1 1 440px;min-width:0}
.main:has(>.asp-studio-mark) .system-row .status-row .mini{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* === RC6.3.5 REPORTS ROUND 2 PART 1 === */
.asp-report-favorite,.asp-report-resend{display:inline-block;margin:0 var(--asp-space-2,8px) var(--asp-space-2,8px) 0}
.asp-report-filter-list{flex-direction:column;align-items:stretch}
.asp-report-filter-list label{display:flex;flex-direction:column;gap:var(--asp-space-1,4px);align-items:stretch;
  font-weight:500;flex:0 0 auto}
.asp-report-filter-list input{min-height:36px;padding:0 var(--asp-space-2,8px);border:1px solid var(--asp-line,#d9dee5);
  border-radius:var(--asp-radius-sm,8px);font-size:13px;color:var(--asp-ink,#1b2330)}
.asp-report-chart{width:100%;margin-top:var(--asp-space-3,12px)}
.asp-report-chart .asp-chart svg{width:100%;height:auto}

/* === RC6.3.7 DASHBOARD CONTROLS FIT A PHONE === */
@media(max-width:560px){
  .asp-ledger-sec-top{flex-wrap:wrap}
  .asp-ledger-note{flex:1 1 100%;width:100%}
  .asp-ledger-tabs{width:100%;justify-content:flex-start}
  .asp-ledger-tabs>span{flex-wrap:wrap;overflow:visible}
  .asp-ledger-controls{width:100%}
}

/* === RC6.3.8 REPORTS ROUND 2 PART 2 === */
.asp-report-table tr.asp-report-highlight td{background:#fff7d6}

/* === RC6.4.6 WHERE THE FIGURES CAME FROM === */
.asp-rc646-link{display:inline-block;margin:var(--asp-space-1,4px) 0 var(--asp-space-2,8px)}
.asp-rc646-pick{display:flex;flex-wrap:wrap;gap:var(--asp-space-2,8px);align-items:flex-end;margin-bottom:var(--asp-space-3,12px)}
.asp-rc646-figures td.num{text-align:right;white-space:nowrap;font-variant-numeric:tabular-nums}
.asp-rc646-figures code{white-space:pre-wrap;word-break:break-word;font-size:12px}

/* === RC6.4.8 SCHEDULING CALENDAR === */
.asp-rc648-head h1{margin:0 0 .5rem}
.asp-rc648-week{display:flex;flex-wrap:wrap;gap:.4rem;align-items:center}
.asp-rc648-range{font-weight:600;margin:0 .35rem}
.asp-rc648-tool{display:inline}
.asp-rc648-grid{overflow-x:auto;margin-top:1rem}
.asp-rc648-table{width:100%;border-collapse:collapse;font-size:.92rem}
.asp-rc648-table th,.asp-rc648-table td{border:1px solid var(--line,#dcdcdc);vertical-align:top;padding:.35rem}
.asp-rc648-table thead th{text-align:center;white-space:nowrap}
.asp-rc648-table thead th span{display:block;font-size:.75rem;text-transform:uppercase;letter-spacing:.04em}
.asp-rc648-table tbody th{text-align:left;min-width:11rem}
.asp-rc648-table .is-today{background:rgba(120,160,255,.10)}
.asp-rc648-who{display:block;font-weight:600}
.asp-rc648-total{display:block;margin-top:.2rem;font-size:.8rem}
.asp-rc648-cost{display:inline-block;margin-left:.35rem;font-size:.78rem;opacity:.75}
.asp-rc648-chip{display:block;border-radius:.4rem;padding:.3rem .4rem;margin-bottom:.25rem;
  background:rgba(60,140,90,.12);text-decoration:none;color:inherit}
.asp-rc648-chip.is-draft{background:rgba(160,160,160,.18);border:1px dashed var(--line,#bbb)}
.asp-rc648-chip.is-changed{background:rgba(220,160,40,.18)}
.asp-rc648-time{display:block;font-weight:600;white-space:nowrap}
.asp-rc648-dept,.asp-rc648-note{display:block;font-size:.76rem;opacity:.8}
.asp-rc648-tag{display:inline-block;font-size:.68rem;text-transform:uppercase;letter-spacing:.05em;opacity:.75}
.asp-rc648-away{display:block;font-size:.76rem;font-weight:600;opacity:.7}
.asp-rc648-add{display:inline-block;padding:0 .35rem;border-radius:.3rem;text-decoration:none;
  border:1px solid var(--line,#ccc);opacity:.6}
.asp-rc648-add:hover{opacity:1}
.asp-rc648-empty{text-align:center;padding:1.2rem}
.asp-rc648-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(11rem,1fr));gap:.6rem}
.asp-rc648-fields label{display:flex;flex-direction:column;font-size:.85rem;gap:.2rem}
.asp-rc648-fields .asp-rc648-check{flex-direction:row;align-items:center;gap:.4rem}
.asp-rc648-fields .asp-rc648-wide{grid-column:1/-1}
.asp-rc648-actions{grid-column:1/-1;display:flex;gap:.5rem}
.asp-rc648-delete{margin-top:.6rem}
.asp-rc648-print{font-family:system-ui,sans-serif;padding:1rem}
.asp-rc648-day{margin-bottom:1rem;break-inside:avoid}
.asp-rc648-day h2{font-size:1rem;margin:0 0 .3rem;border-bottom:1px solid #999}
@media (max-width:768px){.asp-rc648-table{font-size:.82rem}.asp-rc648-table tbody th{min-width:8rem}.asp-rc648-week .btn,.asp-rc648-week button{width:auto;min-height:40px;padding:.3rem .7rem}.asp-rc648-week{gap:.3rem}.asp-rc648-range{order:-1;flex:1 0 100%;margin:0 0 .2rem}}

/* === RC6.4.9 OPEN SHIFTS === */
.asp-rc649-row{background:rgba(120,120,120,.06)}
.asp-rc649-open{border:1px dashed var(--line,#bbb);border-radius:.4rem;padding:.3rem .4rem;margin-bottom:.3rem}
.asp-rc649-state{display:block;font-size:.76rem;opacity:.8}
.asp-rc649-act{display:inline-block;margin:.2rem .2rem 0 0}
.asp-rc649-act button{font-size:.76rem;padding:.15rem .45rem}

/* === RC6.5.0 PRESETS AND WEEK TEMPLATES === */
.asp-rc650-ticks{display:flex;flex-wrap:wrap;gap:.5rem 1rem}
.asp-rc650-ticks label{font-size:.85rem}
.asp-rc648-table input[type=text],.asp-rc648-table input:not([type]){width:100%;min-width:6rem;font-size:.85rem}

/* === RC6.5.1 SHIFT SWAPS === */
.asp-rc651-swap{display:block;font-size:.76rem;font-weight:600;opacity:.85}
.asp-rc651-offer{margin:.15rem 0 .35rem}
.asp-rc651-offer button{font-size:.72rem;padding:.12rem .4rem}

/* === RC6.5.2 CLOCK IN AND OUT === */
.asp-rc652-worked{display:block;font-size:.76rem;font-weight:600;opacity:.85}

/* === RC6.5.3 PAYROLL AGAINST BUDGET === */
.asp-rc653-line{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;margin:.4rem 0 0;font-size:.9rem}
.asp-rc653-bar{display:inline-block;position:relative;width:8rem;height:.5rem;border-radius:.25rem;
  background:rgba(120,120,120,.22);overflow:hidden}
.asp-rc653-fill{display:block;height:100%;background:var(--asp-teal-700,#0E3A42)}
.asp-rc653-bar.is-close .asp-rc653-fill{background:#96620A}
.asp-rc653-bar.is-over .asp-rc653-fill{background:#A8231C}
.asp-rc653-fill[data-width='0']{width:0}
.asp-rc653-fill[data-width='1']{width:1%}
.asp-rc653-fill[data-width='2']{width:2%}
.asp-rc653-fill[data-width='3']{width:3%}
.asp-rc653-fill[data-width='4']{width:4%}
.asp-rc653-fill[data-width='5']{width:5%}
.asp-rc653-fill[data-width='6']{width:6%}
.asp-rc653-fill[data-width='7']{width:7%}
.asp-rc653-fill[data-width='8']{width:8%}
.asp-rc653-fill[data-width='9']{width:9%}
.asp-rc653-fill[data-width='10']{width:10%}
.asp-rc653-fill[data-width='11']{width:11%}
.asp-rc653-fill[data-width='12']{width:12%}
.asp-rc653-fill[data-width='13']{width:13%}
.asp-rc653-fill[data-width='14']{width:14%}
.asp-rc653-fill[data-width='15']{width:15%}
.asp-rc653-fill[data-width='16']{width:16%}
.asp-rc653-fill[data-width='17']{width:17%}
.asp-rc653-fill[data-width='18']{width:18%}
.asp-rc653-fill[data-width='19']{width:19%}
.asp-rc653-fill[data-width='20']{width:20%}
.asp-rc653-fill[data-width='21']{width:21%}
.asp-rc653-fill[data-width='22']{width:22%}
.asp-rc653-fill[data-width='23']{width:23%}
.asp-rc653-fill[data-width='24']{width:24%}
.asp-rc653-fill[data-width='25']{width:25%}
.asp-rc653-fill[data-width='26']{width:26%}
.asp-rc653-fill[data-width='27']{width:27%}
.asp-rc653-fill[data-width='28']{width:28%}
.asp-rc653-fill[data-width='29']{width:29%}
.asp-rc653-fill[data-width='30']{width:30%}
.asp-rc653-fill[data-width='31']{width:31%}
.asp-rc653-fill[data-width='32']{width:32%}
.asp-rc653-fill[data-width='33']{width:33%}
.asp-rc653-fill[data-width='34']{width:34%}
.asp-rc653-fill[data-width='35']{width:35%}
.asp-rc653-fill[data-width='36']{width:36%}
.asp-rc653-fill[data-width='37']{width:37%}
.asp-rc653-fill[data-width='38']{width:38%}
.asp-rc653-fill[data-width='39']{width:39%}
.asp-rc653-fill[data-width='40']{width:40%}
.asp-rc653-fill[data-width='41']{width:41%}
.asp-rc653-fill[data-width='42']{width:42%}
.asp-rc653-fill[data-width='43']{width:43%}
.asp-rc653-fill[data-width='44']{width:44%}
.asp-rc653-fill[data-width='45']{width:45%}
.asp-rc653-fill[data-width='46']{width:46%}
.asp-rc653-fill[data-width='47']{width:47%}
.asp-rc653-fill[data-width='48']{width:48%}
.asp-rc653-fill[data-width='49']{width:49%}
.asp-rc653-fill[data-width='50']{width:50%}
.asp-rc653-fill[data-width='51']{width:51%}
.asp-rc653-fill[data-width='52']{width:52%}
.asp-rc653-fill[data-width='53']{width:53%}
.asp-rc653-fill[data-width='54']{width:54%}
.asp-rc653-fill[data-width='55']{width:55%}
.asp-rc653-fill[data-width='56']{width:56%}
.asp-rc653-fill[data-width='57']{width:57%}
.asp-rc653-fill[data-width='58']{width:58%}
.asp-rc653-fill[data-width='59']{width:59%}
.asp-rc653-fill[data-width='60']{width:60%}
.asp-rc653-fill[data-width='61']{width:61%}
.asp-rc653-fill[data-width='62']{width:62%}
.asp-rc653-fill[data-width='63']{width:63%}
.asp-rc653-fill[data-width='64']{width:64%}
.asp-rc653-fill[data-width='65']{width:65%}
.asp-rc653-fill[data-width='66']{width:66%}
.asp-rc653-fill[data-width='67']{width:67%}
.asp-rc653-fill[data-width='68']{width:68%}
.asp-rc653-fill[data-width='69']{width:69%}
.asp-rc653-fill[data-width='70']{width:70%}
.asp-rc653-fill[data-width='71']{width:71%}
.asp-rc653-fill[data-width='72']{width:72%}
.asp-rc653-fill[data-width='73']{width:73%}
.asp-rc653-fill[data-width='74']{width:74%}
.asp-rc653-fill[data-width='75']{width:75%}
.asp-rc653-fill[data-width='76']{width:76%}
.asp-rc653-fill[data-width='77']{width:77%}
.asp-rc653-fill[data-width='78']{width:78%}
.asp-rc653-fill[data-width='79']{width:79%}
.asp-rc653-fill[data-width='80']{width:80%}
.asp-rc653-fill[data-width='81']{width:81%}
.asp-rc653-fill[data-width='82']{width:82%}
.asp-rc653-fill[data-width='83']{width:83%}
.asp-rc653-fill[data-width='84']{width:84%}
.asp-rc653-fill[data-width='85']{width:85%}
.asp-rc653-fill[data-width='86']{width:86%}
.asp-rc653-fill[data-width='87']{width:87%}
.asp-rc653-fill[data-width='88']{width:88%}
.asp-rc653-fill[data-width='89']{width:89%}
.asp-rc653-fill[data-width='90']{width:90%}
.asp-rc653-fill[data-width='91']{width:91%}
.asp-rc653-fill[data-width='92']{width:92%}
.asp-rc653-fill[data-width='93']{width:93%}
.asp-rc653-fill[data-width='94']{width:94%}
.asp-rc653-fill[data-width='95']{width:95%}
.asp-rc653-fill[data-width='96']{width:96%}
.asp-rc653-fill[data-width='97']{width:97%}
.asp-rc653-fill[data-width='98']{width:98%}
.asp-rc653-fill[data-width='99']{width:99%}
.asp-rc653-fill[data-width='100']{width:100%}

/* === RC6.5.6 A FULL DAY'S CREDITS === */
.asp-rc656-target{display:inline-flex;align-items:center;gap:.35rem;margin-left:.5rem;font-size:.78rem;opacity:.85}
.asp-rc656-target input{width:5rem;min-height:auto;padding:.1rem .3rem}

/* === RC6.5.7 ONE ROOM ONE FLOW === */
.asp-rc657-stamp{margin:.15rem 0;font-size:.9rem}
.asp-rc657-correct{margin:.35rem 0 .6rem;font-size:.85rem}
.asp-rc657-correct summary{cursor:pointer;opacity:.75}

/* === RC6.5.8 START THE DAY AGAIN === */
.asp-rc658-reset{display:inline-flex;align-items:center;gap:.5rem;flex-wrap:wrap;margin-left:.5rem}

/* === RC6.6.2 A TABLET'S MENU HAS NAMES === */
/* The icon-only band used to hide each link's text with display:none, which
   hides it from a screen reader too -- and every icon beside it is
   aria-hidden, so all twenty-five links read as unnamed. Hidden from the eye,
   not from the ear. In its own band rather than back in the 1024px block:
   position:absolute would otherwise have leaked down onto the phone, where
   these same spans are deliberately shown under the icons. Scoped to the bar
   so the "More" sheet and the account panel, which show their text, are
   untouched. A span that is already decorative -- the one link drawn with a
   character rather than an icon -- keeps its character. */
@media(min-width:561px) and (max-width:1024px){
  .asp-side-nav .asp-side-link span:not([aria-hidden]){position:absolute;width:1px;height:1px;
    padding:0;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}
}

/* === RC6.7.3 PEOPLE AND JOBS ARE ONE SUBJECT === */
.asp-subnav{display:flex;flex-wrap:wrap;gap:4px;margin:0 0 8px;padding:4px;
  border:1px solid var(--asp-line);border-radius:12px;background:var(--asp-surface-soft)}
.asp-subnav-link{padding:8px 16px;border-radius:9px;color:var(--asp-muted);
  font-size:13px;font-weight:800;text-decoration:none;min-height:38px;
  display:inline-flex;align-items:center}
.asp-subnav-link:hover,.asp-subnav-link:focus-visible{color:var(--asp-teal-700)}
.asp-subnav-link.is-active{background:var(--asp-surface);color:var(--asp-navy-900);
  box-shadow:0 1px 2px rgba(17,26,38,.08)}

/* === RC6.7.4 A PAY RANGE READS AS ONE THING === */
.asp-rc674-pay{display:grid;grid-template-columns:auto 1fr auto 1fr auto 1fr;gap:8px;align-items:center}
.asp-rc674-pay label{margin:0;white-space:nowrap}
.asp-rc674-pay input,.asp-rc674-pay select{margin:0}
@media(max-width:560px){.asp-rc674-pay{grid-template-columns:auto 1fr}}

/* === RC6.7.5 A CAREERS PAGE READS AS A LIST OF JOBS, AND (RC6.8.4) A JOB
   HAS A PAGE WORTH READING === Both pages share this block because rc684
   is a direct edit to an existing stage's output, not a new one, and this
   is the one overlay script in the pair that already touches the CSS
   asset (rc430_production.py's CSS_ASSET_VERSION hash below covers both).
   Built almost entirely from tokens and classes the rest of the app
   already has -- .hero, .eyebrow, .lead, .pill, .card, .btn -- so a guest
   page reads as the same brand system as the signed-in app, just wider. */
.pill.teal{background:var(--asp-teal-100);border-color:#bfe6e5;color:var(--asp-teal-700)}
.pill.on-navy{background:rgba(255,255,255,.1);border-color:rgba(63,217,209,.4);color:var(--asp-teal-glow)}
.asp-job-where{margin:0 0 8px;color:var(--asp-teal-100);font-weight:800;letter-spacing:.06em;
  text-transform:uppercase;font-size:12px}
.asp-job-pills{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0 24px}
.asp-job-apply{display:inline-flex;min-height:var(--asp-control);padding:var(--asp-space-3) var(--asp-space-6);
  border-radius:var(--asp-radius-sm);background:#8f692b;color:white;font-weight:750;
  font-size:15px;text-decoration:none;box-shadow:0 10px 24px rgba(169,124,51,.32);
  transition:filter var(--asp-motion-fast) ease,transform var(--asp-motion-fast) ease}
.asp-job-apply:hover{filter:brightness(.93);color:white;transform:translateY(-1px)}
.asp-job-layout{display:grid;grid-template-columns:minmax(0,1fr) 320px;gap:var(--asp-space-8);
  align-items:start;margin-top:var(--asp-space-8)}
.asp-job-content{min-width:0;max-width:68ch}
.asp-job-panel{display:grid;gap:var(--asp-space-4);position:sticky;top:98px}
.asp-job-pay-card{border-top:3px solid var(--asp-bronze-500)}
.asp-job-pay-card b{display:block;color:var(--asp-navy-900);font-size:26px;letter-spacing:-.02em}
.asp-job-pay-card span{display:block;margin-top:4px;color:var(--asp-muted);font-size:12px}
.asp-job-facts{display:grid;gap:0}
.asp-job-fact{display:flex;justify-content:space-between;gap:var(--asp-space-3);padding:8px 0;
  border-bottom:1px solid var(--asp-line)}
.asp-job-fact:last-child{border-bottom:0}
.asp-job-fact span{color:var(--asp-muted);font-size:11.5px;font-weight:750;letter-spacing:.03em;
  text-transform:uppercase}
.asp-job-fact b{color:var(--asp-navy-900);font-weight:700;font-size:13.5px;text-align:right}
.asp-job-posted{color:var(--asp-muted);font-size:12.5px}
.asp-job-posted p{margin:0}
.asp-job-posted a{display:block;margin-top:8px;font-weight:700}
.asp-careers-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));
  gap:var(--asp-space-4);margin-top:var(--asp-space-6)}
.asp-careers-card{display:flex;flex-direction:column;gap:8px}
.asp-careers-card h2{margin:0;font-size:18px}
.asp-careers-card-where{margin:0;color:var(--asp-muted);font-size:12.5px;font-weight:700}
.asp-careers-card-pills{display:flex;flex-wrap:wrap;gap:8px;margin:4px 0}
.asp-careers-card-pay{margin:4px 0 8px;color:var(--asp-navy-900);font-weight:750;font-size:13.5px}
.asp-careers-card .btn{margin-top:auto;align-self:flex-start}
@media(max-width:1024px){.asp-job-layout{grid-template-columns:1fr}.asp-job-panel{position:static;top:auto}}

/* === RC6.7.6 WHERE AN ANSWER CAME FROM, AND THE APPLY PAGE READS AS A REAL
   APPLICATION === A candidate lands here straight from "Apply for this
   job" (RC6.8.4), so the page opens with that job page's own navy hero --
   .hero, .eyebrow, .asp-job-where, .asp-job-pills and .pill.on-navy carry
   it with no new rule of their own, the same classes RC6.7.5/RC6.8.4
   already defined. Below the hero this is no longer the narrow centred
   guest-card shell: it is the app's own wide .main plus .card/.form-card
   sections, and the plain label/input/textarea the signed-in app's own
   forms already render (label{...}, input,select,textarea,.field{...} in
   the base sheet) -- so only the width, the résumé step's own emphasis and
   the step badges are new here. Still one column throughout: a form filled
   in top to bottom, not a document read beside a reference panel. */
.asp-guest-read{margin:16px 0 4px;padding:12px;border-radius:10px;
  background:var(--asp-teal-100,#e4f5f5);color:var(--asp-teal-700,#0b7a82);
  font-size:13px;font-weight:700}
.asp-apply-page .main{max-width:800px}
.asp-apply-resume-card{border:2px dashed var(--asp-teal-600);background:var(--asp-surface-alt)}
.asp-apply-resume-card button.secondary{margin-top:var(--asp-space-3)}
.asp-apply-step{margin:0 0 var(--asp-space-2)}
.asp-apply-form h2{margin:0 0 var(--asp-space-3);font-size:19px}

/* === RC6.7.8 A LONG CHECKLIST FOLDS SHUT === */
.asp-checklist-fold{margin:16px 0;border:1px solid var(--asp-line);border-radius:12px;
  background:var(--asp-surface-soft)}
.asp-checklist-fold>summary{cursor:pointer;padding:16px;color:var(--asp-navy-900);
  font-weight:800;min-height:44px;display:flex;align-items:center}
.asp-checklist-fold>summary:hover,.asp-checklist-fold>summary:focus-visible{color:var(--asp-teal-700)}
.asp-checklist-fold[open]>summary{border-bottom:1px solid var(--asp-line)}
.asp-checklist-fold .table-wrap,.asp-checklist-fold .mini{margin:0;padding:16px}

/* === RC6.8.1 ROOMS TODAY, AT A GLANCE === */
.asp-rooms-today-row{display:flex;flex-wrap:wrap;align-items:baseline;gap:8px;
  padding:12px 0;border-top:1px solid var(--asp-line)}
.asp-rooms-today-row:first-of-type{border-top:0}
.asp-rooms-today-row b{font-size:14px}
.asp-rooms-today-list{color:var(--asp-muted);font-size:13px;
  font-variant-numeric:tabular-nums;flex:1 1 220px;min-width:0}

/* === RC6.8.3 AN ADDRESS YOU CAN ACTUALLY COPY === */
.asp-feed-row{margin:16px 0 0;padding:16px 0 0;border-top:1px solid var(--asp-line)}
.asp-feed-head{display:flex;flex-wrap:wrap;align-items:center;gap:12px;margin-bottom:8px}
.asp-feed-head b{font-size:15px}
.asp-feed-url{width:100%;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:12.5px;cursor:text}
.asp-feed-mail{margin-top:12px}
.asp-feed-mail>summary{cursor:pointer;color:var(--asp-teal-700);font-weight:700;
  font-size:13px;min-height:38px;display:flex;align-items:center}
.asp-feed-mail textarea{width:100%;margin-top:8px;font-size:13px}
.asp-feed-warn{margin:12px 0;padding:12px 16px;border-radius:10px;
  background:var(--asp-amber-50,#fdf3e3);color:#7a4b12;font-size:14px;line-height:1.55}

/* === RC6.8.5 THIS MONTH AGAINST LAST YEAR === */
.asp-vs-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:12px;
  margin:4px 0 8px}
.asp-vs-cell{padding:12px 16px;border:1px solid var(--asp-line);border-radius:12px;
  background:var(--asp-surface-soft)}
.asp-vs-cell b{display:block;font-size:22px;line-height:1.15;
  font-variant-numeric:tabular-nums;color:var(--asp-navy-900)}
.asp-vs-cell span{display:block;margin-top:4px;color:var(--asp-muted);font-size:12.5px}
.asp-vs-good{color:var(--asp-green-700,#1c7c54)!important}
.asp-vs-bad{color:var(--asp-red-700,#a8231c)!important}

/* === RC6.8.7 A PHONE NUMBER YOU CAN RING === */
.asp-reach{display:inline-block;margin:4px 0 8px;font-size:13px;font-weight:700}

/* === RC6.9.0 WHO THIS WEEK PUTS INTO OVERTIME === */
.asp-rc690-list{margin:8px 0 0;padding-left:20px}
.asp-rc690-list li{margin:4px 0;font-size:13px}

/* === RC6.9.2 AN URGENT JOB LOOKS URGENT === */
.system-row .asp-rc692-urgency{margin-left:8px;flex:0 0 auto}

/* === RC6.9.3 A ROOM OUT OF ORDER CAN COME BACK === */
.asp-rc693-list{margin:8px 0 0;padding:0;list-style:none}
.asp-rc693-list li{display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  justify-content:space-between;padding:12px 0;border-top:1px solid var(--asp-line)}
.asp-rc693-list li:first-child{border-top:0}
.asp-rc693-form{margin:0}

/* === RC6.9.7 ASSIGNMENTS BY DAY === */
.asp-rc697-table{width:100%;border-collapse:collapse;font-size:14px}
.asp-rc697-table th{text-align:left;padding:8px 12px;font-size:12px;
  letter-spacing:.04em;text-transform:uppercase;color:var(--asp-muted);
  border-bottom:1px solid var(--asp-line)}
.asp-rc697-table td{padding:12px;border-bottom:1px solid var(--asp-line)}

/* === RC6.9.8 THE ROOM NUMBER IS THE HEADING === */
.asp-hk-row{display:flex;align-items:center;gap:16px}
.asp-hk-body{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;
  align-items:flex-start;gap:4px}
.asp-hk-room{font-size:20px;font-weight:800;letter-spacing:-.01em;
  font-variant-numeric:tabular-nums;line-height:1.1}
.asp-hk-task{align-self:flex-start;padding:4px 12px;border-radius:999px;
  font-size:12px;font-weight:700;line-height:1.5;border:1px solid transparent}
.asp-hk-go{background:#e6f6ec;color:#12683c;border-color:#bfe6cd}
.asp-hk-soon{background:#fdf1de;color:#8a5200;border-color:#f3d9ac}
.asp-hk-in{background:#e8f1fb;color:#1a4c86;border-color:#c5dbf3}
.asp-hk-quiet{background:#f1f3f5;color:#4a5560;border-color:#dde2e7}
.asp-hk-stop{background:#fdeaea;color:#992020;border-color:#f3c9c9}

/* === RC6.9.9 THE INVOICE BESIDE ITS FIGURES === */
/* The record page lays its cards out in a generic two-column grid, so this
   card was handed ONE of those columns and then split that in half again --
   260px columns on a 1651px screen, measured live on the owner's own
   invoice. The scan beside its figures needs the whole row, so take it. On
   a page that is not a grid this is simply ignored. */
.asp-rc699-split{display:grid;grid-template-columns:1fr 1fr;gap:20px;
  align-items:start;grid-column:1/-1}
@media (max-width:1024px){.asp-rc699-split{grid-template-columns:1fr}}
/* The form keeps every input inside itself; only its layout is borrowed by
   the grid, so a corrected quantity still submits. */
.asp-rc699-split form{display:contents}
.asp-rc699-fields{min-width:0}
.asp-rc699-lines{grid-column:1/-1;min-width:0}
.asp-rc699-scan{border:1px solid var(--asp-line);border-radius:12px;
  background:#fff;overflow:hidden}
.asp-rc699-bar{display:flex;flex-wrap:wrap;gap:8px;align-items:center;
  justify-content:space-between;padding:12px;border-bottom:1px solid var(--asp-line)}
/* Capped: a full sheet of paper pushed every figure off the screen. */
.asp-rc699-page{height:320px;overflow:hidden;background:#f7f8fa}
.asp-rc699-page img,.asp-rc699-page object{display:block;width:100%;height:100%;
  object-fit:contain;border:0}
.asp-rc699-none{padding:16px;border:1px dashed var(--asp-line);border-radius:12px}

/* === RC7.0.1 A DATE THAT CANNOT BE RIGHT === */
.asp-rc701-date{background:#fdf1de;border:1px solid #f3d9ac;color:#7a5200}
.asp-rc701-date b{color:#5e3f00}

/* === RC7.0.2 A GROUPED REPORT DRAWS ITSELF === */
.asp-rc702-chart{margin:0 0 20px;padding:16px;border:1px solid var(--asp-line);
  border-radius:12px;background:var(--asp-surface)}
.asp-rc702-chart figcaption{margin:0 0 12px;font-size:12px;color:var(--asp-muted)}
.asp-rc702-chart svg{display:block;width:100%;height:auto}
.asp-rc702-bar{fill:#1a4c86}
.asp-rc702-name{fill:#4a5560;font-size:12px}
.asp-rc702-value{fill:#12161c;font-size:12px;font-weight:700}

/* === RC7.0.3 THE CODE IN THE ROOM OPENS THE HOTEL === */
.asp-gd-page{max-width:480px;margin:0 auto;background:#f6f7f9;color:#12161c;
  font-size:15px;padding:0 0 24px}
.asp-gd-hero{position:relative;height:172px;overflow:hidden;
  background:linear-gradient(140deg,#1d4f8f 0%,#2f6fb5 40%,#7fa8cf 100%)}
.asp-gd-wash{position:absolute;inset:0;
  background:linear-gradient(180deg,rgba(6,14,26,.05),rgba(6,14,26,.72))}
.asp-gd-herotext{position:absolute;left:16px;right:16px;bottom:12px}
.asp-gd-herotext h1{margin:0 0 4px;font-size:24px;line-height:1.15;color:#fff;
  letter-spacing:-.02em;text-shadow:0 1px 12px rgba(0,0,0,.45)}
.asp-gd-herotext p{margin:0;font-size:13px;color:#eef3fa;
  text-shadow:0 1px 8px rgba(0,0,0,.45)}
.asp-gd-strip{display:flex;background:#fff;border-bottom:1px solid #e4e8ee}
.asp-gd-cell{flex:1 1 0;padding:12px 8px;text-align:center;
  border-right:1px solid #e4e8ee;display:flex;flex-direction:column;gap:4px;min-width:0}
.asp-gd-cell:last-child{border-right:0}
.asp-gd-cell b{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:#68717e}
.asp-gd-cell span{font-size:14px;font-weight:700;overflow-wrap:anywhere}
.asp-gd-small{font-size:12px !important;font-weight:600 !important;color:#0b4da2}
.asp-gd-block{background:#fff;margin:8px 0 0;padding:16px;
  border-top:1px solid #e4e8ee;border-bottom:1px solid #e4e8ee}
.asp-gd-block h2{margin:0;font-size:17px;letter-spacing:-.01em}
.asp-gd-sub{margin:4px 0 12px;font-size:13px;color:#68717e}
.asp-gd-said{margin:0 0 12px;padding:12px;border-radius:12px;background:#fdf1de;
  border:1px solid #f3d9ac;color:#7a5200;font-size:13px}
.asp-gd-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.asp-gd-tileform{margin:0;display:contents}
.asp-gd-tile{font:inherit;width:100%;height:100%;display:flex;flex-direction:column;
  align-items:center;justify-content:center;gap:8px;padding:16px 4px;
  border:1px solid #e4e8ee;border-radius:12px;background:#fbfcfd;color:#12161c;
  font-size:12px;font-weight:600;line-height:1.25;text-align:center;min-height:88px}
.asp-gd-ico{color:#0b4da2}
.asp-gd-own{margin:16px 0 0;display:block}
.asp-gd-own label{display:block;font-size:13px;font-weight:700;margin:0 0 8px}
.asp-gd-own textarea{width:100%;font:inherit;font-size:14px;border:1px solid #cfd6df;
  border-radius:12px;padding:12px}
.asp-gd-own button{width:100%;margin-top:12px;background:#0b4da2;color:#fff;
  font-weight:700;font-size:15px;border-radius:12px;padding:12px;border:0}
.asp-gd-mini{margin:8px 0 0;font-size:12px;color:#68717e;text-align:center}
.asp-gd-back{display:inline-block;margin:16px 0 0;font-size:14px;font-weight:700;
  color:#0b4da2}
.asp-gd-folds{background:#fff;margin:8px 0 0;border-top:1px solid #e4e8ee;
  border-bottom:1px solid #e4e8ee}
.asp-gd-fold{border-bottom:1px solid #f0f2f5}
.asp-gd-fold:last-child{border-bottom:0}
.asp-gd-row{display:flex;align-items:center;gap:12px;padding:16px;cursor:pointer;
  list-style:none}
.asp-gd-row::-webkit-details-marker{display:none}
.asp-gd-rowicon{flex:none;width:40px;height:40px;border-radius:12px;background:#eef3fa;
  display:flex;align-items:center;justify-content:center}
.asp-gd-rowtext{flex:1 1 auto;min-width:0;display:flex;flex-direction:column;gap:4px}
.asp-gd-rowtext b{font-size:15px}
.asp-gd-rowtext span{font-size:12px;color:#68717e}
.asp-gd-count{flex:none;font-size:12px;font-weight:700;color:#0b4da2;background:#eef3fa;
  border-radius:999px;padding:4px 12px}
.asp-gd-foldbody{padding:0 16px 16px}
.asp-gd-item{padding:12px 0;border-bottom:1px solid #f0f2f5}
.asp-gd-item:last-child{border-bottom:0}
.asp-gd-item b{display:block;font-size:14px}
.asp-gd-item span{display:block;font-size:13px;color:#68717e;margin-top:4px}
.asp-gd-foot{padding:16px;text-align:center}
.asp-gd-call{display:block;background:#0b4da2;color:#fff;font-weight:700;font-size:15px;
  border-radius:12px;padding:12px}
.asp-gd-foot p{margin:12px 0 0;font-size:12px;color:#68717e}

/* === RC7.0.5 A SECRET THAT EXPIRES SAYS WHEN === */
.asp-rc705-row{display:flex;flex-wrap:wrap;gap:12px;align-items:center;
  justify-content:space-between;padding:12px 0;border-bottom:1px solid var(--asp-line)}
.asp-rc705-row:last-of-type{border-bottom:0}
.asp-rc705-main{min-width:0;display:flex;flex-direction:column;gap:4px}
.asp-rc705-main b{font-size:15px}
.asp-rc705-state{display:flex;flex-wrap:wrap;gap:8px;align-items:center}

/* === RC7.0.6 WHAT ASP WORKS READ FROM THAT FILE === */
.asp-rc706-table{width:100%;border-collapse:collapse;font-size:13px}
.asp-rc706-table th{text-align:left;padding:8px 12px;font-size:12px;
  letter-spacing:.04em;text-transform:uppercase;color:var(--asp-muted);
  border-bottom:1px solid var(--asp-line)}
.asp-rc706-table td{padding:8px 12px;border-bottom:1px solid var(--asp-line);
  vertical-align:top}
.asp-rc706-line{white-space:nowrap;color:var(--asp-muted);font-size:12px}
.asp-rc706-raw{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;
  font-size:12px;overflow-wrap:anywhere}
.asp-rc706-value{text-align:right;font-variant-numeric:tabular-nums;font-weight:700;
  white-space:nowrap}
.asp-rc706-zero td{background:#fdf1de}
.asp-rc706-files{margin:8px 0 0;padding-left:20px;font-size:13px}
.asp-rc706-files li{margin:4px 0}

/* === RC7.0.9 A LOW SCORE NEVER GOES PUBLIC === */
.asp-rc709-review{display:block;background:#0b4da2;color:#fff;font-weight:700;
  border-radius:12px;padding:12px;text-align:center;text-decoration:none}

/* === RC7.1.0 THE PAGE A GUEST LANDS ON === */
.asp-j-said{background:#e6f6ec;border:1px solid #bfe6cd;color:#12683c;
  border-radius:12px;padding:12px;font-size:14px;margin:0 0 16px}

/* === RC7.1.3 WHO IS ARRIVING AND WHEN THEY SAID === */
.asp-rc713-table{width:100%;border-collapse:collapse;font-size:14px}
.asp-rc713-table th{text-align:left;padding:8px 12px;font-size:12px;
  letter-spacing:.04em;text-transform:uppercase;color:var(--asp-muted);
  border-bottom:1px solid var(--asp-line)}
.asp-rc713-table td{padding:12px;border-bottom:1px solid var(--asp-line)}

/* === RC7.1.4 A PLACE THAT SLIPPED IS MENTIONED === */
.asp-rc714-list{margin:8px 0 0;padding-left:20px;font-size:14px}
.asp-rc714-list li{margin:4px 0}

/* === RC7.1.6 SEE THE MAILS BEFORE A GUEST DOES === */
.asp-rc716-note{background:#fffaf0;border-color:#f3d9ac}
.asp-rc716-frame{border:1px solid var(--asp-line);border-radius:12px;padding:16px;
  background:#fff;overflow-x:auto}
.asp-rc716-frame h3{margin:16px 0 8px;font-size:15px}

/* === RC7.1.7 A WAY INTO THE NEW PAGES === */
.asp-rc717-ways{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));
  gap:12px}
.asp-rc717-way{display:flex;flex-direction:column;gap:4px;padding:16px;
  border:1px solid var(--asp-line);border-radius:12px;background:var(--asp-surface);
  text-decoration:none;color:inherit}
.asp-rc717-way b{font-size:15px}
.asp-rc717-way span{font-size:13px;color:var(--asp-muted)}

/* === RC7.1.8 A TIME A GUEST CAN PICK === */
/* 16px is the floor that stops iOS zooming the whole page when the control
   is focused, and the height is a thumb target rather than a text field. */
.asp-guest-card select{width:100%;font:inherit;font-size:16px;padding:16px 12px;
  line-height:1.5;border:1px solid #cfd6df;border-radius:12px;background:#fff;
  color:#12161c}
/* Browsers that let a page space the rows of an open list do; a phone draws
   its own picker and ignores this, which is the operating system's call and
   not something worth fighting. */
.asp-guest-card select option{padding:12px;line-height:1.8}

/* === RC7.2.0 A PICKER WE CAN ACTUALLY SPACE === */
.asp-j-pick{border:1px solid #cfd6df;border-radius:12px;background:#fff;
  overflow:hidden}
.asp-j-summary{display:flex;align-items:center;justify-content:space-between;
  padding:16px;font-size:16px;font-weight:600;color:#12161c;cursor:pointer;
  list-style:none}
.asp-j-summary::-webkit-details-marker{display:none}
.asp-j-chev{color:#68717e;font-size:12px}
.asp-j-list{max-height:320px;overflow-y:auto;border-top:1px solid #e4e8ee}
/* The whole point of this stage: a row a thumb can hit and an eye can
   separate from the one under it. */
/* Two classes deep, because `.asp-guest-card label` already sets
   display:block and a margin -- a single class ties on specificity and
   loses on order, which put every radio on its own line above its time. */
.asp-j-list .asp-j-row{display:flex;align-items:center;gap:12px;padding:16px;
  margin:0;border-bottom:1px solid #f0f2f5;font-size:16px;font-weight:500;
  color:#12161c;cursor:pointer}
.asp-j-list .asp-j-row:last-child{border-bottom:0}
.asp-j-list .asp-j-row.is-picked{background:#eef3fa;font-weight:700}
.asp-j-list .asp-j-row input{flex:none;width:20px;height:20px;margin:0}
.asp-j-list .asp-j-row span{flex:1 1 auto}

/* === RC7.2.1 WHO IS LEAVING AND WHEN === */
/* That room is free now, which is the most actionable line on the page. */
.asp-rc721-gone td{background:#e6f6ec}

/* === RC7.2.2 ONE CODE ASKS FOR THE ROOM AND THE NAME === */
/* "(optional)" has to read as a permission, not as small print somebody
   feels they are being tested on. */
.asp-guest-optional{font-weight:400;color:#5a6472;font-size:.88em}

/* === RC7.2.3 MOVE A ROOM TO SOMEONE ELSE === */
/* One column per housekeeper, scrolling sideways on a phone rather than
   squeezing six names into a width that fits none of them. */
.asp-rc723-grid{display:flex;gap:var(--asp-space-4);overflow-x:auto;
  padding-bottom:var(--asp-space-2)}
.asp-rc723-col{flex:0 0 15rem;min-width:0}
.asp-rc723-col h3{margin:0;font-size:1rem}
.asp-rc723-tiles{list-style:none;margin:var(--asp-space-2) 0 0;padding:0;
  display:flex;flex-direction:column;gap:var(--asp-space-2)}
.asp-rc723-tile{border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);
  padding:var(--asp-space-3);background:var(--asp-surface)}
/* Greyed, not hidden: a board that disagrees with the floor sends a
   supervisor looking for a room that simply vanished. */
.asp-rc723-busy{opacity:.6;background:var(--asp-surface-soft)}
/* The PMS did not take the last thing we told it about this room. Said on
   the tile, quietly, with the reason -- a supervisor reading the board is
   who would notice the desk cannot sell a room standing clean. */
.asp-rc723-unsynced{display:block;margin-top:var(--asp-space-1);
  font-size:11.5px;font-weight:600;color:var(--asp-warn)}
/* The reason belongs under the room number, not welded onto the end of it. */
.asp-rc723-tile .mini{display:block;margin-top:var(--asp-space-1)}
.asp-rc723-move{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);
  align-items:center;margin-top:var(--asp-space-2)}
.asp-rc723-move select{flex:1 1 7rem;min-width:0}
.asp-rc723-said{margin:0 0 var(--asp-space-3);font-weight:600}
/* Drag states. The tap form underneath is the feature; these only exist so
   a drag on a tablet looks like it is doing something. */
.asp-rc723-tile[draggable='true']{cursor:grab}
.asp-rc723-lifting{opacity:.5}
.asp-rc723-over{outline:2px dashed var(--asp-teal-700);outline-offset:var(--asp-space-1)}
/* 1025, not 1024: the canonical set pairs max-width:1024 with
   min-width:1025 so no screen is matched by both. */
@media(min-width:1025px){.asp-rc723-col{flex:1 1 0}}

/* === RC7.2.4 WHERE THE HOTEL MAILS ITS ARRIVALS === */
/* The address is the one thing on this card somebody has to copy exactly,
   so it gets to be the thing you cannot miss. */
.asp-rc724-address{margin:0 0 var(--asp-space-3)}
.asp-rc724-address code{display:block;padding:var(--asp-space-3);
  background:var(--asp-surface-soft);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-sm);word-break:break-all;font-size:.95rem}
.asp-rc724-state{margin:0 0 var(--asp-space-4);font-weight:600}
.asp-rc724-state.ok{color:var(--asp-good)}
.asp-rc724-how{margin:0 0 var(--asp-space-4);padding-left:var(--asp-space-5)}
.asp-rc724-how li{margin-bottom:var(--asp-space-2)}

/* === RC7.2.5 A CARD FOR EVERY CATEGORY === */
/* align-items:start so a short card is not stretched to the tallest one in
   its row, which left dead white space the owner spotted at once. */
.asp-gd2-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));
  gap:var(--asp-space-4);align-items:start;margin-top:var(--asp-space-4)}
.asp-gd2-cat{border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);overflow:hidden}
.asp-gd2-cathead{padding:var(--asp-space-4);border-bottom:1px solid var(--asp-line);
  background:var(--asp-surface-soft)}
.asp-gd2-cathead h3{margin:0;font-size:1rem}
.asp-gd2-cathead p{margin:var(--asp-space-1) 0 0;font-size:13px;color:var(--asp-muted)}
.asp-gd2-count{float:right;font-size:12px;font-weight:700;color:var(--asp-muted);
  font-variant-numeric:tabular-nums}
/* Yellow until somebody has put it in front of a guest. */
.asp-gd2-count.is-waiting{color:var(--asp-warn)}
.asp-gd2-cathead.is-waiting{background:#fbead0}
.asp-gd2-list{list-style:none;margin:0;padding:0}
.asp-gd2-item{padding:var(--asp-space-4);border-bottom:1px solid var(--asp-line)}
.asp-gd2-item:last-child{border-bottom:0}
.asp-gd2-item.is-waiting{background:#fdf3dd;box-shadow:inset 4px 0 0 var(--asp-warn)}
.asp-gd2-divider{padding:var(--asp-space-2) var(--asp-space-4);
  background:var(--asp-surface-soft);border-top:1px solid var(--asp-line);
  border-bottom:1px solid var(--asp-line);font-size:11px;font-weight:700;
  letter-spacing:.08em;text-transform:uppercase;color:var(--asp-muted)}
.asp-gd2-top{display:flex;gap:var(--asp-space-3);align-items:baseline;
  justify-content:space-between}
.asp-gd2-name{font-weight:700;min-width:0}
.asp-gd2-rating{font-size:13px;color:var(--asp-muted);text-align:right;
  font-variant-numeric:tabular-nums}
.asp-gd2-row{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);
  align-items:center;justify-content:space-between;margin-top:var(--asp-space-3)}
.asp-gd2-move{display:flex;gap:var(--asp-space-2);flex:1 1 100%}
.asp-gd2-move select{flex:1 1 auto;min-width:0;font:inherit;font-size:13px;
  padding:var(--asp-space-2);border:1px solid var(--asp-line-strong);
  border-radius:var(--asp-radius-xs);background:var(--asp-surface)}
.asp-gd2-movego{font:inherit;font-size:13px;font-weight:600;padding:var(--asp-space-2) var(--asp-space-3);
  border:1px solid var(--asp-line-strong);background:var(--asp-surface);
  color:var(--asp-muted);border-radius:var(--asp-radius-xs);cursor:pointer}
.asp-gd2-acts{display:flex;gap:var(--asp-space-2);flex:0 0 auto;
  align-items:center;flex-wrap:wrap}
.asp-gd2-acts .asp-inline-form{display:inline-flex;margin:0}
.asp-gd2-ok{border:1px solid var(--asp-good);color:var(--asp-good);
  background:var(--asp-good-soft);border-radius:var(--asp-radius-full);
  padding:var(--asp-space-1) var(--asp-space-3);font-size:12px;font-weight:700;white-space:nowrap}
.asp-gd2-tick,.asp-gd2-drop{font:inherit;font-size:13px;font-weight:600;
  padding:var(--asp-space-2) var(--asp-space-3);border-radius:var(--asp-radius-xs);cursor:pointer;
  white-space:nowrap}
.asp-gd2-tick{border:1px solid var(--asp-teal-700);background:var(--asp-teal-700);
  color:#fff}
.asp-gd2-drop{border:1px solid var(--asp-line-strong);background:var(--asp-surface);
  color:var(--asp-muted)}
.asp-gd2-empty{padding:var(--asp-space-5) var(--asp-space-4);
  color:var(--asp-muted);font-size:13px}
/* The row above the cards: hotel on the left, actions on the right, every
   action the same height on one baseline. Measured before this, on the
   owner's own screen: 46px, 110px and 60px tall at three different tops,
   because the longest label wrapped to three lines in a 78px button. */
.asp-owner-list-row:has(form[action='/app/directory/publish']){
  align-items:center;flex-wrap:wrap;gap:var(--asp-space-3)}
.asp-owner-list-row:has(form[action='/app/directory/publish']) .asp-inline-form{
  margin:0;align-items:center;flex-wrap:wrap}
.asp-owner-list-row:has(form[action='/app/directory/publish']) .btn{
  min-height:44px;display:inline-flex;align-items:center;white-space:nowrap}
/* The sentence about the missing key belongs under the button, not wedged
   beside it making that one form twice as tall as its neighbours. */
.asp-owner-list-row form[action='/app/directory/find-places']{
  flex-direction:column;align-items:flex-start}
.asp-owner-list-row form[action='/app/directory/find-places'] .mini{
  margin-top:var(--asp-space-2);max-width:22rem}
/* Hidden once the shared script binds the dropdown to submit itself; a
   browser with no JavaScript keeps a button that works. */
.asp-gd2-move.is-live .asp-gd2-movego{display:none}

/* === RC7.2.6 A CHECKLIST SOMEBODY FINISHES === */
.asp-su-top{display:flex;flex-wrap:wrap;gap:var(--asp-space-6);
  align-items:flex-end;justify-content:space-between;
  padding-bottom:var(--asp-space-5);border-bottom:1px solid var(--asp-line)}
.asp-su-score{min-width:0}
.asp-su-score b{display:block;font-size:2rem;line-height:1.05;
  letter-spacing:-.02em;font-variant-numeric:tabular-nums}
.asp-su-score span{display:block;margin-top:var(--asp-space-1);color:var(--asp-muted);
  font-size:13.5px}
.asp-su-bar{width:100%;max-width:22rem;height:6px;border-radius:999px;
  background:var(--asp-line);overflow:hidden;margin-top:var(--asp-space-3)}
/* The width is a class, not a style attribute: style-src 'self' discards
   every inline style, so a style='width:40%' bar is always empty. */
.asp-su-bar i{display:block;height:100%;background:var(--asp-teal-700);
  border-radius:999px}
.asp-su-fill-0{width:0%}
.asp-su-fill-1{width:10%}
.asp-su-fill-2{width:20%}
.asp-su-fill-3{width:30%}
.asp-su-fill-4{width:40%}
.asp-su-fill-5{width:50%}
.asp-su-fill-6{width:60%}
.asp-su-fill-7{width:70%}
.asp-su-fill-8{width:80%}
.asp-su-fill-9{width:90%}
.asp-su-fill-10{width:100%}
.asp-su-next{flex:0 0 auto;text-align:right;max-width:20rem}
.asp-su-next span{display:block;font-size:10.5px;letter-spacing:.12em;
  text-transform:uppercase;color:var(--asp-muted);margin-bottom:4px}
.asp-su-next b{display:block;font-size:14px;margin-bottom:var(--asp-space-3)}
.asp-su-group{margin-top:var(--asp-space-6)}
.asp-su-glabel{font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;
  color:var(--asp-muted);margin:0 0 var(--asp-space-3)}
.asp-su-glabel i{font-style:normal;color:var(--asp-line-strong);margin:0 8px}
.asp-su-row{display:flex;gap:var(--asp-space-4);align-items:center;
  padding:var(--asp-space-4) var(--asp-space-5);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);margin-bottom:var(--asp-space-2);
  box-shadow:var(--asp-shadow-xs)}
/* Only what is genuinely stopping something working gets the amber rule. */
.asp-su-row.is-blocking{border-left:3px solid var(--asp-warn)}
.asp-su-row.is-done,.asp-su-row.is-aside{background:transparent;
  box-shadow:none;border-style:dashed}
.asp-su-row.is-aside{opacity:.7}
.asp-su-dot{flex:0 0 auto;width:9px;height:9px;border-radius:50%;
  background:var(--asp-line-strong)}
.asp-su-row.is-blocking .asp-su-dot{background:var(--asp-warn)}
.asp-su-row.is-done .asp-su-dot{background:var(--asp-good)}
.asp-su-body{flex:1 1 auto;min-width:0}
.asp-su-body b{display:block;font-size:15px;line-height:1.35}
.asp-su-body p{margin:var(--asp-space-1) 0 0;font-size:13.5px;color:var(--asp-muted);
  max-width:62ch}
.asp-su-act{flex:0 0 auto;display:flex;align-items:center;
  gap:var(--asp-space-4);flex-wrap:wrap}
.asp-su-act .asp-inline-form{margin:0}
.asp-su-act .btn{min-height:40px;display:inline-flex;align-items:center;
  white-space:nowrap}
/* Specific enough to beat the app's own button styling, which otherwise
   gives this a pale panel that reads as a rendering fault. */
.asp-su-act button.asp-su-skip{font:inherit;font-size:13px;
  color:var(--asp-muted);background:none;background-color:transparent;
  border:0;box-shadow:none;padding:0;min-height:0;cursor:pointer;
  white-space:nowrap;border-radius:0}
.asp-su-act button.asp-su-skip:hover{color:var(--asp-ink);
  text-decoration:underline;background:none}
.asp-su-doneword{font-size:12.5px;font-weight:600;color:var(--asp-good);
  white-space:nowrap}
.asp-su-note{margin-top:var(--asp-space-6);padding-top:var(--asp-space-4);
  border-top:1px solid var(--asp-line);font-size:13px;
  color:var(--asp-muted);max-width:66ch}
.asp-su-note b{color:var(--asp-ink)}
@media (max-width:768px){
  .asp-su-row{flex-wrap:wrap}
  .asp-su-next{text-align:left}
}

/* RC7.2.7 -- the Guest experience page as a numbered path. */
.asp-ge-step{margin:0 0 var(--asp-space-6)}
.asp-ge-head{display:flex;gap:var(--asp-space-4);align-items:baseline;
  margin:0 0 var(--asp-space-3)}
.asp-ge-n{flex:0 0 auto;width:24px;height:24px;border-radius:50%;
  display:grid;place-items:center;font-size:12px;font-weight:700;
  background:var(--asp-teal-700);color:#fff;
  font-variant-numeric:tabular-nums}
/* A step that is off is still numbered, and the number still has to be
   readable: white on --asp-line-strong measured 1.50:1 against a required
   4.5, which rc579's sweep caught. Quiet is a soft ground with a ring, not
   pale text nobody can make out. */
.asp-ge-step.is-off .asp-ge-n{background:var(--asp-surface-soft);
  color:var(--asp-muted);box-shadow:inset 0 0 0 1px var(--asp-line-strong)}
.asp-ge-head h2{margin:0;font-size:1.15rem}
.asp-ge-head p{margin:var(--asp-space-1) 0 0;font-size:13.5px;color:var(--asp-muted);
  max-width:72ch}
.asp-ge-body{padding-left:calc(var(--asp-space-6) + var(--asp-space-4))}
.asp-ge-body>section.card{margin:0 0 var(--asp-space-3)}
.asp-ge-folded>summary{cursor:pointer;font-size:13px;
  color:var(--asp-muted);padding:0 0 var(--asp-space-3)}
.asp-ge-folded>summary:hover{color:var(--asp-ink)}
.asp-ge-ref{margin-top:var(--asp-space-6)}
.asp-ge-ref>summary{cursor:pointer;font-size:13.5px;color:var(--asp-muted);
  padding:var(--asp-space-3) 0;border-top:1px solid var(--asp-line)}
.asp-ge-ref>summary:hover{color:var(--asp-ink)}
/* The three filters on Guest tickets had no rule at all, so they stacked
   into a column and pushed the card's own heading below them. */
.asp-inline-filters{display:flex;flex-wrap:wrap;align-items:center;
  gap:var(--asp-space-2);margin:0;align-self:flex-start;flex:0 0 auto}
/* The app's base rule gives every select width:100%, which is what turned
   three filters into a column. */
.asp-inline-filters select{width:auto;min-width:9.5rem;margin:0;
  min-height:38px;padding-top:var(--asp-space-2);
  padding-bottom:var(--asp-space-2)}
@media (max-width:560px){
  .asp-ge-body{padding-left:0}
  .asp-inline-filters{width:100%}
  .asp-inline-filters select{flex:1 1 9rem;min-width:0}
}

/* === RC7.2.8 CONNECT YOUR PMS === */
.asp-pms-row{padding:var(--asp-space-4) 0;border-top:1px solid var(--asp-line)}
.asp-pms-row.is-on{border-top:0;padding-top:0}
.asp-pms-who{display:flex;flex-wrap:wrap;align-items:center;
  gap:var(--asp-space-3)}
.asp-pms-who b{font-size:15px}
.asp-pms-row p.mini{max-width:66ch}
.asp-pms-form{display:grid;gap:var(--asp-space-3);max-width:34rem;
  margin-top:var(--asp-space-3)}
.asp-pms-form label{display:grid;gap:var(--asp-space-1);font-size:13px;
  font-weight:600}
.asp-pms-form input,.asp-pms-form select{margin:0}
.asp-pms-trouble{margin:var(--asp-space-4) 0;padding:var(--asp-space-4);
  border:1px solid var(--asp-warn);border-radius:var(--asp-radius-md);
  background:var(--asp-surface-soft)}
.asp-pms-trouble ul{margin:var(--asp-space-2) 0 0;padding-left:var(--asp-space-5)}
.asp-pms-trouble li{font-size:13.5px}
.asp-pms-refused{margin:var(--asp-space-3) 0 0;padding:var(--asp-space-3)
  var(--asp-space-4);border-left:3px solid var(--asp-warn);
  background:var(--asp-surface-soft);font-size:13.5px}
.asp-pms-group{margin:var(--asp-space-6) 0 var(--asp-space-1);
  padding-top:var(--asp-space-4);border-top:1px solid var(--asp-line-strong);
  font-size:15px}

/* === RC7.3.1 WHAT THIS HOTEL SELLS === */
.asp-sells-row{display:flex;flex-wrap:wrap;gap:var(--asp-space-4);
  align-items:flex-end;padding:var(--asp-space-4) 0;
  border-top:1px solid var(--asp-line)}
.asp-sells-what{flex:1 1 16rem;min-width:0}
.asp-sells-what b{font-size:15px}
.asp-sells-what p{margin:var(--asp-space-1) 0 0;max-width:52ch}
.asp-sells-set{display:flex;flex-wrap:wrap;align-items:flex-end;
  gap:var(--asp-space-3);margin:0}
.asp-sells-set label.mini{display:grid;gap:var(--asp-space-1);font-weight:600}
.asp-sells-set input[type='text']{width:7rem;margin:0}
.asp-sells-on{display:flex;align-items:center;gap:var(--asp-space-2);
  font-size:13px;font-weight:600;white-space:nowrap}
.asp-sells-on input{width:auto;margin:0}
.asp-sells-row.is-off .asp-sells-what b{color:var(--asp-muted)}
.asp-sells-why{flex:1 1 100%;margin:0}
.asp-sells-refused{margin:var(--asp-space-3) 0 0;padding:var(--asp-space-3)
  var(--asp-space-4);border-left:3px solid var(--asp-warn);
  background:var(--asp-surface-soft);font-size:13.5px}
@media (max-width:560px){
  .asp-sells-set{width:100%}
  .asp-sells-set input[type='text']{width:100%}
}

/* === RC7.3.2 SOMEBODY SAYS YES OR NO === */
.asp-asked-row{padding:var(--asp-space-4) 0;
  border-top:1px solid var(--asp-line)}
.asp-asked-who{display:flex;flex-wrap:wrap;align-items:center;
  gap:var(--asp-space-3)}
.asp-asked-who b{font-size:15px}
.asp-asked-what{margin:var(--asp-space-2) 0 var(--asp-space-3);
  font-size:13.5px;max-width:68ch}
.asp-asked-decide{display:flex;flex-wrap:wrap;align-items:flex-end;
  gap:var(--asp-space-3);margin:0}
.asp-asked-decide label.mini{display:grid;gap:var(--asp-space-1);
  flex:1 1 20rem;font-weight:600}
.asp-asked-decide input[type='text']{margin:0}
@media (max-width:560px){
  .asp-asked-decide .btn{flex:1 1 auto;text-align:center}
}

/* === RC7.3.3 THE GUEST ASKS FOR IT === */
.asp-ask-row{padding:var(--asp-space-4) 0;
  border-top:1px solid var(--asp-line)}
.asp-ask-top{display:flex;flex-wrap:wrap;align-items:baseline;
  justify-content:space-between;gap:var(--asp-space-2)}
.asp-ask-price{font-weight:700;font-variant-numeric:tabular-nums}
.asp-ask-detail{margin:var(--asp-space-1) 0 0;font-size:14px;
  color:var(--asp-muted)}
.asp-ask-state{margin:var(--asp-space-2) 0 0;font-size:14px;font-weight:600}
.asp-ask-row form{margin:var(--asp-space-3) 0 0}

/* === RC7.3.4 STILL TO PUT ON A FOLIO === */
.asp-folio-row{padding:var(--asp-space-4) 0;
  border-top:1px solid var(--asp-line)}
.asp-folio-price{font-weight:700;font-variant-numeric:tabular-nums;
  margin-left:auto}

/* === RC7.3.5 ACROSS YOUR HOTELS === */
.asp-across-row{display:flex;flex-wrap:wrap;align-items:center;
  gap:var(--asp-space-3);padding:var(--asp-space-4) 0;
  border-top:1px solid var(--asp-line)}
.asp-across-row.is-current{background:var(--asp-surface-soft);
  margin:0 calc(-1 * var(--asp-space-4));padding-left:var(--asp-space-4);
  padding-right:var(--asp-space-4)}
.asp-across-who{display:grid;gap:var(--asp-space-1);flex:0 0 14rem}
.asp-across-who b{font-size:15px}
.asp-across-chips{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);
  flex:1 1 20rem;min-width:0}
.asp-across-chip{display:inline-block;padding:var(--asp-space-1) var(--asp-space-3);
  border:1px solid var(--asp-line-strong);border-radius:999px;font-size:13px;
  font-weight:600;white-space:nowrap}
.asp-across-chip.is-urgent{border-color:var(--asp-warn)}
.asp-across-open{margin:0;flex:none}
@media (max-width:560px){
  .asp-across-who{flex:1 1 100%}
  .asp-across-open{flex:1 1 100%}
  .asp-across-open .btn{width:100%;text-align:center}
}

/* === RC7.3.6 MINUTES: ONE RULE, ONE SCREEN === */
.asp-minutes-factors label{display:grid;gap:var(--asp-space-1);
  margin:0 0 var(--asp-space-3)}
.asp-minutes-factors input[type='number']{max-width:10rem}

/* === RC7.5.5 SMALL PRINT MEASURE === */
@media(min-width:561px){
  main p.mini,
  .asp-pms-row p.mini,
  .asp-mp-watch-lead,
  .asp-mp-watch-note,
  .asp-mp-empty,
  .asp-mp-none,
  .asp-mp-add-note{max-width:60ch}
}

/* === RC7.6.7 STUDIO THE LIST AND THE RECORD SIDE BY SIDE === */
/* The drawings: the header runs the full width; only the list and the record
   sit side by side below it -- a 440px list, the record beside it. */
.asp-split{display:flex;flex-direction:column;gap:var(--asp-space-5,20px)}
.asp-split-list{display:flex;flex-direction:column;gap:var(--asp-space-4,16px);min-width:0}
.asp-split-empty{display:none}
@media(min-width:1025px){
  .asp-split{display:grid;grid-template-columns:minmax(0,440px) minmax(0,1fr);
    column-gap:var(--asp-space-6,24px);align-items:start}
  .asp-split>.asp-split-detail,.asp-split>.asp-split-empty{position:sticky;top:var(--asp-space-4,16px);
    max-height:calc(100vh - 96px);overflow:auto;margin-bottom:0}
  .asp-split-empty{display:flex;flex-direction:column;justify-content:center;gap:var(--asp-space-1,4px);
    min-height:320px;padding:var(--asp-space-6,24px);border:1px dashed var(--asp-dept,#0b7a82);
    border-radius:24px;background:#ffffff80;text-align:center}
  .asp-split-empty-title{margin:0;font-weight:650;font-size:18px;color:var(--asp-ink,#172033)}
}
@media(max-width:1024px){
  .asp-split>.asp-split-detail{order:-1}
}

/* === RC7.6.8 STUDIO THE BOARD READS LIKE ITS DRAWING === */
/* T9: the department tints as drawn. */










/* T1: the figures are one line under the title. */
.main:has(>.asp-studio-mark) .asp-studio-hero .metrics{display:flex;flex-wrap:wrap;align-items:baseline;gap:0;
  margin:var(--asp-space-1,4px) 0 0;padding:0;background:transparent;border:0;box-shadow:none}
.main:has(>.asp-studio-mark) .asp-studio-hero .metric{display:inline-flex;align-items:baseline;gap:.3em;
  padding:0;margin:0;min-height:0;background:transparent;border:0;border-radius:0;box-shadow:none}
.main:has(>.asp-studio-mark) .asp-studio-hero .metric b{display:inline;font-size:15px;font-weight:600;
  line-height:1.4;letter-spacing:0;color:var(--asp-ink,#111a26)}
.main:has(>.asp-studio-mark) .asp-studio-hero .metric span{display:inline;margin:0;font-size:15px;font-weight:400;
  letter-spacing:0;text-transform:lowercase;color:var(--asp-ink,#111a26)}
.main:has(>.asp-studio-mark) .asp-studio-hero .metric+.metric::before{content:"\00b7";margin:0 .45em;
  color:var(--asp-muted,#556274)}
.main:has(>.asp-studio-mark) .asp-studio-hero .lead{font-size:13.5px;color:var(--asp-muted,#556274);max-width:720px}
/* T6: a board's own cards, two to a row, straight under the masthead. */
.asp-board-cards{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;grid-auto-flow:row dense}
@media(min-width:1025px){
  .asp-board-cards{grid-template-columns:repeat(2,minmax(0,1fr))}
  .asp-board-cards.is-one{grid-template-columns:minmax(0,1fr)}
  .asp-board-cards>.asp-rc723-card{grid-column:1 / -1}
}
.main:has(>.asp-studio-mark) .asp-board-cards>.card{margin:0;min-width:0;border-radius:22px;padding:24px;
  box-shadow:0 18px 40px -32px #0d1420}
.asp-board-cards>.card h2,.asp-board-cards>details.card>summary{margin:0;font-size:18px;font-weight:700}
.asp-board-cards>details.card>summary{cursor:pointer}
/* T2: the list's title, stage, search and Filter in one bar; the rows on the tint. */
.asp-board-bar{position:relative;display:flex;flex-wrap:wrap;align-items:center;gap:12px}
.asp-board-bar>.section-head{display:block;margin:0 12px 0 0;padding:0}
.asp-board-bar>.section-head h2{margin:0;font-size:20px}
.asp-board-bar>.section-head .muted,.asp-board-bar>.section-head .status-row:empty{display:none}
.asp-board-bar>.asp-stage-tabs:empty{position:absolute;top:0;left:0;width:1px;height:1px;margin:0;padding:0}
.main:has(>.asp-studio-mark) .asp-board-bar>.filterbar{flex:1 1 auto;display:flex;flex-wrap:wrap;align-items:center;
  gap:8px;margin:0;padding:0}
.asp-board-bar>.filterbar label{order:1;margin:0}
.asp-board-bar>.filterbar select{order:2}
.main:has(>.asp-studio-mark) .asp-board-bar>.filterbar input[name='search']{order:3;margin-left:auto;width:260px;
  min-width:0;max-width:100%;min-height:42px;border-radius:21px;border-color:transparent;padding-left:40px;
  background:#fff url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 24 24' fill='none' stroke='%23556274' stroke-width='1.8' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6'/%3E%3Cpath d='M20 20l-4.5-4.5'/%3E%3C/svg%3E") no-repeat 16px center}
.main:has(>.asp-studio-mark) .asp-board-bar>.filterbar select{min-height:42px;border-radius:21px;border-color:transparent;
  background-color:#ffffffa6}
.main:has(>.asp-studio-mark) .asp-board-bar>.filterbar button{order:4;min-height:42px;border-radius:21px;padding:0 16px}
.asp-board-bar>.filterbar .loading-note{order:5;flex-basis:100%;margin:0}
.main:has(>.asp-studio-mark) .asp-split-list>.card{display:flex;flex-direction:column;gap:8px;margin:0;padding:0;
  background:transparent;border:0;border-radius:0;box-shadow:none}
.main:has(>.asp-studio-mark) .asp-split-list .system-row{align-items:center;gap:12px;margin:0;padding:12px 16px;
  background:#ffffff8c}
.main:has(>.asp-studio-mark) .asp-split-list .system-row.is-open,
.main:has(>.asp-studio-mark) .asp-split-list .system-row:hover{background:#fff}
.main:has(>.asp-studio-mark) .asp-split-list .system-row .pill{padding:4px 12px;border-radius:10px;font-size:12px;
  font-weight:700;letter-spacing:0}
/* A job's urgency sits with its stage, after the name, as the drawn row reads. */
.main:has(>.asp-studio-mark) .asp-split-list .system-row>.asp-rc692-urgency{order:1;margin-left:0}
.main:has(>.asp-studio-mark) .asp-split-list .system-row>.status-row{order:2}
.main:has(>.asp-studio-mark) .asp-split-list .system-row .pill:not(.bad):not(.warn):not(.good){background:#fff;
  color:var(--asp-ink,#111a26);border:1px solid var(--asp-line,#e3e8ef)}
/* T5: help, the system's guide and the platform guide as three buttons. */
.asp-guidance{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px;margin-top:8px}
.main:has(>.asp-studio-mark) .asp-guidance>details.asp-system-help{margin:0}
.asp-guidance>details[open]{flex-basis:100%}
.main:has(>.asp-studio-mark) .asp-guidance>details.asp-system-help>summary,
.main:has(>.asp-studio-mark) .asp-guidance>.btn{display:inline-flex;align-items:center;min-height:46px;margin:0;
  padding:0 16px;border-radius:14px;border:1px solid var(--asp-line,#e3e8ef);background:#fff;
  color:var(--asp-ink,#111a26);font-weight:700;font-size:14px;box-shadow:none}
@media(max-width:560px){
  .main:has(>.asp-studio-mark) .asp-board-bar>.filterbar input[name='search']{margin-left:0;width:100%}
}

/* === RC7.7.0 STUDIO THE RECORD BESIDE THE LIST READS LIKE ITS DRAWING === */
.asp-split-detail[data-asp-studio-panel]{display:flex;flex-direction:column;gap:16px;padding:24px;border-radius:24px}
.asp-split-detail[data-asp-studio-panel]>*{margin:0}
.asp-split-detail[data-asp-studio-panel]>.asp-split-bar{justify-content:flex-start;margin:0}
.asp-split-detail[data-asp-studio-panel]>.asp-split-bar .btn{min-height:46px;margin:0;padding:0 16px;border-radius:14px;
  border:1px solid var(--asp-line,#e3e8ef);background:#fff;color:var(--asp-ink,#111a26);font-weight:700;font-size:14px}
/* The title, with the record's number as a chip beside it. */
.asp-split-detail[data-asp-studio-panel]>.hero .eyebrow{display:none}
.asp-split-detail[data-asp-studio-panel]>.hero .hero-actions{display:block}
.asp-split-detail[data-asp-studio-panel]>.hero .hero-actions>div{display:flex;flex-wrap:wrap;align-items:flex-start;
  justify-content:space-between;gap:12px}
.asp-split-detail[data-asp-studio-panel]>.hero h1{margin:0;font-size:26px;letter-spacing:-.01em;line-height:1.2}
.asp-split-detail[data-asp-studio-panel]>.hero .status-row{margin:0;gap:8px}
.asp-split-detail[data-asp-studio-panel]>.hero .status-row .pill{padding:4px 12px;border-radius:14px;font-size:13px;font-weight:800;
  border:0;background:#f8f9fd;color:var(--asp-ink,#111a26)}
.asp-split-detail[data-asp-studio-panel]>.hero .status-row .pill:first-child{color:var(--asp-dept,#0b7a82)}
/* The fields card is the panel itself; its heading stays for screen readers. */
.asp-split-detail[data-asp-studio-panel] .grid.two{display:flex;flex-wrap:wrap;align-items:flex-start;gap:8px}
.asp-split-detail[data-asp-studio-panel] .grid.two>*{min-width:0}
.asp-split-detail[data-asp-studio-panel] .grid.two>.card:first-child{flex:1 1 100%;padding:0;margin:0;border:0;
  box-shadow:none;background:transparent}
.asp-split-detail[data-asp-studio-panel] .grid.two>.card:first-child>h2{position:absolute;width:1px;height:1px;
  overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
/* A card a system adds inside the fields (Housekeeping's "Something needs
   fixing in this room") reads as a small panel section, not a page heading. */
.asp-split-detail[data-asp-studio-panel] .grid.two>.card:first-child>section.card{margin:0 0 16px;padding:12px 16px;
  border:1px solid var(--asp-line,#e3e8ef);border-radius:14px;background:#f8f9fd;box-shadow:none}
.asp-split-detail[data-asp-studio-panel] .grid.two>.card:first-child>section.card>h2{margin:0 0 4px;font-size:15px;font-weight:800}
/* The stage moves, in their own row above the fields. */
.asp-split-detail[data-asp-studio-panel] .asp-workflow{grid-column:1 / -1;margin:0 0 8px;padding:0;border:0;background:transparent}
.asp-split-detail[data-asp-studio-panel] .asp-workflow-current{position:absolute;width:1px;height:1px;overflow:hidden;
  clip:rect(0 0 0 0);white-space:nowrap}
.asp-split-detail[data-asp-studio-panel] .asp-workflow-btn{min-height:46px;padding:0 20px;border-radius:14px;
  font-weight:700;font-size:14.5px;border:1px solid var(--asp-line,#e3e8ef);background:#fff;color:var(--asp-ink,#111a26)}
.asp-split-detail[data-asp-studio-panel] .asp-workflow>.asp-workflow-actions>.asp-workflow-btn:first-child{
  background:var(--asp-dept,#0b7a82);border-color:var(--asp-dept,#0b7a82);color:#fff;
  box-shadow:0 12px 24px -14px var(--asp-dept,#0b7a82)}
.asp-split-detail[data-asp-studio-panel] .asp-workflow-more>summary{display:inline-flex;align-items:center;min-height:36px;
  padding:0 16px;border-radius:18px;background:#f8f9fd;font-weight:700}
/* The fields, as tiles two to a row. Every field stays an input. */
.asp-split-detail[data-asp-studio-panel] form[action$='/update']{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,210px),1fr));
  gap:12px;align-items:start}
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>.asp-field,
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>[data-asp-record-type-field]{display:flex;flex-direction:column;
  gap:4px;min-width:0;margin:0;padding:8px 12px;border-radius:14px;background:#f8f9fd}
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>.asp-field:has(textarea,.table-wrap,details),
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>[data-asp-record-type-field]:has(textarea){grid-column:1 / -1}
.asp-split-detail[data-asp-studio-panel] form[action$='/update'] .asp-field>label,
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>[data-asp-record-type-field]>label{margin:0;font-size:11.5px;
  font-weight:700;color:var(--asp-muted,#556274)}
.asp-split-detail[data-asp-studio-panel] form[action$='/update'] .asp-field :is(input,select,textarea),
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>[data-asp-record-type-field] :is(input,select,textarea){
  width:100%;min-width:0;margin:0;min-height:40px;border-radius:10px;font-size:15px;font-weight:600;background:#fff}
.asp-split-detail[data-asp-studio-panel] form[action$='/update'] .asp-field .mini,
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>[data-asp-record-type-field] .mini{margin:0;font-size:11.5px}
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>button[type='submit']:not(.sr-only){grid-column:1 / -1;
  justify-self:start;min-height:46px;margin:4px 0 0;padding:0 16px;border-radius:14px;border:1px solid var(--asp-line,#e3e8ef);
  background:#fff;color:var(--asp-ink,#111a26);font-weight:700;box-shadow:none}
.asp-split-detail[data-asp-studio-panel] form[action$='/update']>.loading-note{grid-column:1 / -1}
/* History as a chip under the fields; it opens in place. */
.asp-split-detail[data-asp-studio-panel] .asp-panel-history{margin:0;padding:0;border:0;box-shadow:none;background:transparent}
.asp-split-detail[data-asp-studio-panel] .asp-panel-history>summary{display:inline-flex;align-items:center;min-height:36px;
  padding:0 16px;border-radius:18px;background:#f8f9fd;font-size:13px;font-weight:700;cursor:pointer;list-style:none}
.asp-split-detail[data-asp-studio-panel] .asp-panel-history>summary::-webkit-details-marker{display:none}
.asp-split-detail[data-asp-studio-panel] .asp-panel-history[open]>summary{margin-bottom:12px}
/* Linked records, Comments and anything else below: plain sections under a rule. */
.asp-split-detail[data-asp-studio-panel]>.footer-note{display:none}
.asp-split-detail[data-asp-studio-panel]>:is(section,div,details).card,
.asp-split-detail[data-asp-studio-panel]>.qr-box{padding:12px 0 0;border:0;border-top:1px solid var(--asp-line,#e3e8ef);
  border-radius:0;box-shadow:none;background:transparent}
.asp-split-detail[data-asp-studio-panel]>:is(section,div).card>h2,
.asp-split-detail[data-asp-studio-panel]>details.card>summary{margin:0 0 8px;font-size:14px;font-weight:800}
.asp-split-detail[data-asp-studio-panel]>details.card.technical form button[type='submit']{min-height:46px;border-radius:14px;
  background:var(--asp-dept,#0b7a82);border-color:var(--asp-dept,#0b7a82);color:#fff}
@media(max-width:560px){
  .asp-split-detail[data-asp-studio-panel]{padding:16px}
  .asp-split-detail[data-asp-studio-panel] form[action$='/update']{grid-template-columns:minmax(0,1fr)}
}

/* === RC7.7.1 STUDIO EVERY HOTEL PAGE OPENS ON ITS MASTHEAD === */
.main:has(>.asp-studio-mark)>.hero.asp-studio-area{background:transparent;border:0;box-shadow:none;padding-left:0;padding-right:0}
.asp-studio-area>.asp-studio-area-icon .asp-side-icon{width:30px;height:30px;flex:0 0 30px;opacity:1;fill:none;
  stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.asp-studio-area>.lead{max-width:720px}
/* Home's header was drawn dark, with white type and a ring behind it; as a
   Studio masthead it sits on the page's tint, so its type is the page's own. */
.main:has(>.asp-studio-mark)>.hero.asp-studio-area>h1{color:var(--asp-ink,#111a26)}
.main:has(>.asp-studio-mark)>.hero.asp-studio-area>.lead{color:var(--asp-muted,#556274)}
.main:has(>.asp-studio-mark)>.hero.asp-studio-area::before,
.main:has(>.asp-studio-mark)>.hero.asp-studio-area::after{content:none;display:none}
/* Home, the Inbox: two to a row on a wide screen. */
.asp-home-grid,.asp-page-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:16px;align-items:start}
.asp-home-grid>*,.asp-page-grid>*{margin:0;min-width:0}
.asp-home-grid>.asp-home-catalogue-grid{grid-template-columns:minmax(0,1fr);gap:16px}
@media(min-width:1025px){
  .asp-home-grid,.asp-page-grid{grid-template-columns:repeat(2,minmax(0,1fr))}
  .asp-home-grid>:last-child:nth-child(odd),.asp-page-grid>:last-child:nth-child(odd){grid-column:1 / -1}
}
/* The Inbox's tabs, as one bar. */
.main:has(>.asp-studio-mark)>.hero.asp-studio-area+.status-row{display:flex;flex-wrap:wrap;gap:8px;padding:4px;
  border-radius:22px;background:#ffffffa6;align-self:flex-start}
/* Settings: Security, with the note about whose settings these are, beside Profile. */
.asp-settings-side{display:flex;flex-direction:column;gap:var(--asp-space-5,20px);min-width:0}
.asp-settings-side>.card{margin:0}
/* Market Pulse is Sales; Scheduling is People -- the same tint and accent
   their side-bar departments wear (the tints as RC7.6.8 draws them). */
.main:has(>.asp-dept-sales) .asp-mp .btn:not(.secondary):not(.ghost){background:var(--asp-dept,#1d4ed8);
  border-color:var(--asp-dept,#1d4ed8)}

/* === RC7.7.2 STUDIO THE SIDE BAR AS DRAWN === */

@media(min-width:1025px){
  .asp-side:not(.asp-side-compact){width:272px;flex:0 0 272px;padding:16px 12px;gap:4px}
  .asp-side:not(.asp-side-compact) .asp-side-brand{padding:4px 8px 12px}
  .asp-side:not(.asp-side-compact) .asp-side-brand small{font-size:12px;color:#9fb0c8;letter-spacing:0}
  .asp-side:not(.asp-side-compact) .asp-side-heading{margin:0;padding:16px 12px 8px;font-size:11px;font-weight:700;
    letter-spacing:.1em;color:#8a9bb4}
  .asp-side:not(.asp-side-compact) .asp-side-link{min-height:40px;padding:0 12px;gap:12px;border-radius:10px;font-size:14px;
    font-weight:500;color:#c7d2e3}
  .asp-side:not(.asp-side-compact) .asp-side-link.is-active{background:rgba(255,255,255,.1);color:#fff;font-weight:700;box-shadow:none}
  .asp-side:not(.asp-side-compact) .asp-side-dept[open]>summary.asp-side-link{background:rgba(255,255,255,.1);color:#fff;
    font-weight:700;box-shadow:none}
  .asp-side:not(.asp-side-compact) .asp-side-dept>.asp-side-sub{display:flex;flex-direction:column;gap:4px;margin:4px 0 8px 20px;
    padding-left:12px;border-left:2px solid var(--asp-side-dept,#0b7a82)}
  .asp-side:not(.asp-side-compact) .asp-side-sublink{display:flex;align-items:center;min-height:34px;padding:0 12px;
    border-radius:8px;font-size:13.5px;color:#b8c5d8}
  .asp-side:not(.asp-side-compact) .asp-side-sublink.is-active{background:var(--asp-side-dept,#0b7a82);color:#fff;font-weight:700}
  .asp-side:not(.asp-side-compact) .asp-side-dot{flex:none;width:8px;height:8px;margin-left:auto;border-radius:4px;
    background:var(--asp-side-dept,#0b7a82)}
  .asp-side:not(.asp-side-compact) .asp-nav-badge{position:static;margin-left:auto;min-width:22px;height:22px;padding:0 8px;
    border-radius:11px;background:#f59e0b;color:#1f1300;font-size:12px;font-weight:800;line-height:22px;text-align:center}
  /* A wider side bar leaves the record beside the list room to breathe
     on a smaller laptop: the list gives way before the record does. */
  .asp-split{grid-template-columns:minmax(280px,440px) minmax(360px,1fr)}
}
@media(max-width:1024px){.asp-side-dot{display:none}}

/* === RC7.7.3 STUDIO THE PHONE MENU AS DRAWN === */
@media(max-width:560px){
  .asp-more-sheet .asp-more-panel{top:0;bottom:0;max-height:none;height:100%;border-radius:0;background:#0d1420;
    color:#c7d2e3;box-shadow:none;padding:0 12px calc(16px + env(safe-area-inset-bottom,0px))}
  .asp-more-sheet .asp-more-panel-head{padding:calc(16px + env(safe-area-inset-top,0px)) 8px 12px;border-bottom:0}
  .asp-more-sheet .asp-more-panel-head b{color:#fff;font-size:17px}
  .asp-more-sheet .asp-more-close{flex:none;width:40px;height:40px;min-height:40px;border-radius:20px;border:0;
    background:rgba(255,255,255,.1);color:#fff;font-size:20px}
  /* On a phone every button is full width; these two sit in the header. */
  .asp-more-sheet .asp-notification-mute{flex:none;width:auto;min-height:36px;height:36px;padding:0 12px;border-radius:18px;
    border-color:rgba(255,255,255,.2);background:transparent;color:#c7d2e3;font-size:13px}
  .asp-more-sheet .asp-more-panel-nav .asp-side-heading{padding:16px 16px 8px;margin:0;font-size:11px;letter-spacing:.1em;
    font-weight:700;color:#8a9bb4}
  .asp-more-sheet .asp-more-panel-nav .asp-side-link,
  .asp-more-sheet .asp-more-panel-nav .asp-side-dept>summary{min-height:48px;padding:0 16px;gap:12px;border-radius:12px;
    font-size:15px;color:#c7d2e3}
  .asp-more-sheet .asp-more-panel-nav .asp-side-link:hover{background:rgba(255,255,255,.07);color:#fff}
  .asp-more-sheet .asp-more-panel-nav .asp-side-link.is-active,
  .asp-more-sheet .asp-more-panel-nav .asp-side-dept[open]>summary{background:rgba(255,255,255,.1);color:#fff;font-weight:700}
  .asp-more-sheet .asp-more-panel-nav .asp-side-sub{display:flex;flex-direction:column;gap:4px;margin:0 0 8px 24px;
    padding-left:12px;border-left:2px solid var(--asp-side-dept,#0b7a82)}
  .asp-more-sheet .asp-more-panel-nav .asp-side-sublink{min-height:48px;padding:0 12px;border-radius:12px;font-size:14.5px;
    color:#b8c5d8}
  .asp-more-sheet .asp-more-panel-nav .asp-side-sublink.is-active{background:var(--asp-side-dept,#0b7a82);color:#fff;font-weight:700}
  .asp-more-sheet .asp-more-panel-nav .asp-side-dot{flex:none;width:8px;height:8px;margin-left:auto;border-radius:4px;
    background:var(--asp-side-dept,#0b7a82);display:inline-block}
  .asp-more-sheet .asp-more-panel-nav .asp-nav-badge,.asp-more-sheet .asp-more-panel-nav .asp-guest-badge{position:static;
    margin-left:auto;min-width:22px;height:22px;padding:0 8px;border-radius:11px;background:#f59e0b;color:#1f1300;
    font-size:12px;font-weight:800;line-height:22px;box-shadow:none;border:0}
}

/* === RC7.7.4 STUDIO THE HEADER ROW AS DRAWN === */
@media(min-width:561px){
  /* The row takes the page's own tint (the column behind it wears it). */
  .asp-col:has(>.main>.asp-studio-mark)>.topbar{background:inherit;color:var(--asp-ink,#111a26);border-bottom:0;
    box-shadow:none;min-height:72px}
  /* The back button was drawn for the dark bar (white on translucent
     white); on the page's own light tint that is unreadable (found by
     the Owner Control screen certification pass, 27 Sept: 1.09:1 contrast on
     /owner/ai-worklist). Match the other round tools beside it instead. */
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .nav-back{background:#fff!important;
    border-color:var(--asp-line,#e3e8ef)!important;color:var(--asp-ink,#111a26)!important}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .nav-back:hover{background:#f8f9fd!important;
    border-color:var(--asp-line,#e3e8ef)!important}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-workspace-title{color:var(--asp-ink,#111a26)}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-workspace-header:has(>.asp-trail)>.asp-workspace-title{position:absolute;
    width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}
  /* The header's own nav rules (white links, pushed right, folded away on a
     tablet) were written for the old link row; the trail is not that. */
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-workspace-header>.asp-trail{display:flex;flex:0 1 auto;order:0;
    flex-wrap:wrap;justify-content:flex-start;align-items:center;gap:8px;margin:0;padding:0;border:0;font-size:13px;
    color:var(--asp-muted,#556274);min-width:0}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-workspace-header>.asp-trail a{padding:0;border-radius:4px;
    background:none;color:var(--asp-muted,#556274);font-size:13px;font-weight:500}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-workspace-header>.asp-trail a:hover{background:none;
    color:var(--asp-ink,#111a26);text-decoration:underline}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-workspace-header>.asp-trail [aria-current='page']{
    color:var(--asp-ink,#111a26);font-weight:700}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-property-switch-label{color:var(--asp-muted,#556274)}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-property-switch select{min-height:40px;border-radius:20px;
    border:1px solid var(--asp-line,#e3e8ef);background-color:#fff;color:var(--asp-ink,#111a26)}
  /* The tools, as round white buttons; the account button in the brand teal. */
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-header-tool{width:40px;height:40px;border:1px solid var(--asp-line,#e3e8ef);
    background:#fff;color:var(--asp-ink,#111a26)}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-header-tool:hover{background:#f8f9fd;color:var(--asp-ink,#111a26)}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-header-tool.is-live{border-color:var(--asp-teal-800,#0a5f66);
    background:var(--asp-teal-800,#0a5f66);color:#fff}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-account-trigger{min-height:40px;padding:0 12px;border-radius:20px;
    background:#0b7a82;color:#fff}
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-account-trigger:hover{background:#0a5f66;color:#fff}
}
@media(max-width:560px){
  .topbar .asp-workspace-header>.asp-trail{display:none}
}

/* === RC7.7.5 STUDIO FINISHING TOUCHES === */
.asp-due-chips{display:flex;flex-wrap:wrap;gap:8px;margin:0 0 12px}
.asp-due-chips~h3{position:absolute;width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* === RC7.7.9b EVERY SCREEN HOLDS AND READS === */
.asp-studio-area>p{grid-column:2}
.asp-reference-spark-empty,.asp-reference-detail p{color:var(--asp-muted)}
main summary,.asp-su-skip{min-height:24px}
.asp-footer-legal a{display:inline-block;padding-block:4px}

/* === RC7.8.6 SOMEBODY ELSE CHANGED IT FIRST === */
.asp-rc784-differ{list-style:none;margin:0 0 var(--asp-space-4);padding:0;display:grid;gap:var(--asp-space-2)}
.asp-rc784-choices{display:flex;flex-wrap:wrap;gap:var(--asp-space-3);align-items:center}
.asp-rc784-choices form{margin:0}

/* === RC7.8.8 A SHIFT PASSES DOWN WHAT IS STILL OPEN === */
.asp-passdown-list{list-style:none;margin:0 0 var(--asp-space-4);padding:0;display:grid;gap:var(--asp-space-3)}
.asp-passdown-list li{display:flex;gap:var(--asp-space-3);align-items:flex-start;justify-content:space-between}
.asp-passdown-list p{margin:var(--asp-space-1) 0 0}
.asp-passdown-form{display:grid;gap:var(--asp-space-2)}

/* === RC7.8.12 REVENUE NOTES FROM THE DASHBOARD === */
.asp-revenue-notes{list-style:none;margin:0 0 var(--asp-space-4);padding:0;display:grid;gap:var(--asp-space-2)}
.asp-revenue-notes li{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center}

/* === RC7.8.17 EVERY SCREEN HOLDS, SECOND PASS === */
.asp-footer-col a{padding-block:var(--asp-space-1)}

/* === RC7.8.18 A WON LEAD BECOMES A SIGNED CONTRACT === */
.asp-contract-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center;margin-block:var(--asp-space-3)}
.asp-contract-link{display:flex;gap:var(--asp-space-2);align-items:center;margin-block:var(--asp-space-1) var(--asp-space-2)}
.asp-contract-link input{flex:1;min-width:0;margin:0}
.asp-contract-cancel{margin:0}
.asp-contract-more{margin-top:var(--asp-space-3)}
.asp-contract-more summary{cursor:pointer;font-weight:600}
.asp-contract-versions{margin:var(--asp-space-2) 0 0;padding-left:var(--asp-space-5)}
.asp-contract-lines{display:grid;gap:var(--asp-space-2)}
.asp-contract-line,.asp-contract-dates{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:var(--asp-space-3)}
.asp-contract-line.two,.asp-contract-dates{grid-template-columns:repeat(2,minmax(0,1fr))}
.asp-contract-form .card{max-width:52rem}
.asp-sign-card{max-width:50rem;padding:0;overflow:hidden}
/* The signing page's own letterhead -- the same dark-navy-with-teal
   language as the signed-in app's own header band, scaled to a document:
   ASP Works letterhead across the top of the card, then the card's usual
   padding restored one level in so the band can bleed to the card's own
   rounded corners. */
.asp-sign-letterhead{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:var(--asp-space-2) var(--asp-space-4);padding:var(--asp-space-3) var(--asp-space-6);
  background:var(--asp-navy-900)}
.asp-sign-brand{color:var(--asp-surface);font-weight:800;letter-spacing:.08em;font-size:.8rem;text-transform:uppercase}
.asp-sign-letterhead-tag{color:#9fb0c9;font-size:.72rem;font-weight:700;letter-spacing:.06em;text-transform:uppercase}
.asp-sign-body{padding:var(--asp-space-8) var(--asp-space-6) var(--asp-space-6)}
.asp-sign-heading{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2) var(--asp-space-3);margin:0 0 var(--asp-space-1)}
.asp-sign-heading h1{margin:0}
.asp-contract-doc{margin-block:var(--asp-space-4)}
/* One card per heading (Between / The stay or The rate / Terms /
   Acceptance) -- a contract read top to bottom as one grey wall of text is
   exactly what this replaces. */
.asp-contract-section{margin:0 0 var(--asp-space-5);padding:var(--asp-space-5) var(--asp-space-6);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:var(--asp-surface)}
.asp-contract-section:last-of-type{margin-bottom:0}
.asp-contract-doc h2{font-size:1.05rem;margin:0 0 var(--asp-space-3);color:var(--asp-teal-700)}
.asp-contract-doc h3{font-size:.95rem;margin:0 0 var(--asp-space-1)}
.asp-contract-doc p{margin:0 0 var(--asp-space-2)}
.asp-contract-doc p:last-child{margin-bottom:0}
.asp-contract-meta{margin:0 0 var(--asp-space-5);padding:var(--asp-space-3) var(--asp-space-4);
  border-radius:var(--asp-radius-sm);background:var(--asp-surface-alt)}
.asp-contract-meta .asp-contract-pairs{display:flex;flex-wrap:wrap;gap:var(--asp-space-1) var(--asp-space-8);margin:0}
.asp-contract-meta .asp-contract-pairs div{display:flex;gap:var(--asp-space-1);grid-template-columns:none}
.asp-contract-pairs{margin:0;display:grid;gap:var(--asp-space-1)}
.asp-contract-pairs div{display:grid;grid-template-columns:8.5rem minmax(0,1fr);gap:var(--asp-space-2)}
.asp-contract-pairs dt{font-weight:600;color:var(--asp-muted)}
.asp-contract-pairs dd{margin:0}
.asp-contract-table-wrap{overflow-x:auto;border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm)}
.asp-contract-table{width:100%;border-collapse:collapse;font-variant-numeric:tabular-nums;margin:0}
.asp-contract-table th,.asp-contract-table td{padding:var(--asp-space-1) var(--asp-space-2);border-bottom:1px solid var(--asp-line);text-align:right}
.asp-contract-table th{font-size:.8rem;color:var(--asp-muted);background:var(--asp-surface-alt)}
.asp-contract-table th:first-child,.asp-contract-table td:first-child{text-align:left}
.asp-contract-table tfoot td{font-weight:700;border-bottom:0}
.asp-contract-note{font-size:.85rem;color:var(--asp-muted)}
/* Each clause (Cut-off date, Billing, Cancellation, ...) as its own bar
   rather than a run of h3/p pairs; Cancellation gets the teal accent since
   it is the one term a signer most needs to be able to find again. */
.asp-contract-clause{margin:0 0 var(--asp-space-4);padding-left:var(--asp-space-4);border-left:3px solid var(--asp-line-strong)}
.asp-contract-clause:last-child{margin-bottom:0}
.asp-contract-clause-cancellation{border-left-color:var(--asp-teal-700);background:var(--asp-surface-alt);
  padding:var(--asp-space-3) var(--asp-space-4);border-radius:0 var(--asp-radius-sm) var(--asp-radius-sm) 0}
/* The signing controls read as a separate panel from the agreement above
   them -- reading and acting are two different jobs. */
.asp-sign-panel{margin-top:var(--asp-space-6);padding:var(--asp-space-6);border-radius:var(--asp-radius-sm);
  background:var(--asp-surface-alt);border:1px solid var(--asp-line)}
.asp-sign-form{margin-top:0;padding-top:0;border-top:0}
.asp-sign-legal{margin-top:var(--asp-space-4)}
.asp-sign-pad{display:grid;gap:var(--asp-space-2);margin-block:var(--asp-space-3)}
.asp-sign-hint{margin:0;font-weight:600}
.asp-sign-canvas{display:block;width:100%;max-width:100%;aspect-ratio:3/1;background:var(--asp-surface);border:2px dashed var(--asp-line-strong);border-radius:var(--asp-radius-sm);touch-action:none;cursor:crosshair}
.asp-sign-pad.is-signed .asp-sign-canvas{border-style:solid}
.asp-sign-pad.is-missing .asp-sign-canvas{border-color:var(--asp-bad)}
.asp-sign-pad.is-missing .asp-sign-hint{color:var(--asp-bad)}
.asp-sign-pad-actions{display:flex;justify-content:flex-end}
/* Two classes deep: the guest page's own `.asp-guest-card button` and
   `label` rules make every button a full-width teal block and every label
   a bold block, which put Clear on a par with Sign and the tick box on top
   of the consent's first word. */
.asp-sign-pad .asp-sign-pad-actions button{width:auto;margin:0;padding:var(--asp-space-2) var(--asp-space-4);background:var(--asp-surface);color:var(--asp-teal-700);border:1px solid var(--asp-line-strong);font-size:.9rem;font-weight:600}
.asp-sign-pad .asp-sign-pad-actions button:hover{background:var(--asp-surface-alt);color:var(--asp-teal-700)}
.asp-sign-form .asp-sign-consent{display:flex;gap:var(--asp-space-3);align-items:flex-start;font-weight:400;margin:var(--asp-space-4) 0 0}
.asp-sign-form .asp-sign-consent input{flex:none;width:1.25rem;height:1.25rem;margin:var(--asp-space-1) 0 0;padding:0}
@media(max-width:560px){.asp-contract-line,.asp-contract-line.two,.asp-contract-dates{grid-template-columns:1fr}.asp-contract-pairs div{grid-template-columns:1fr;gap:0}
.asp-contract-section{padding:var(--asp-space-4)}.asp-sign-panel{padding:var(--asp-space-4)}.asp-sign-body{padding:var(--asp-space-6) var(--asp-space-4) var(--asp-space-4)}
.asp-sign-letterhead{padding:var(--asp-space-3) var(--asp-space-4)}.asp-contract-meta .asp-contract-pairs{gap:var(--asp-space-1) var(--asp-space-4)}}

/* === RC7.8.19 EVERY SCREEN HOLDS, THIRD PASS === */
.asp-guest-card .asp-guest-foot{color:var(--asp-muted)}
.asp-rc657-correct summary{padding-block:var(--asp-space-2)}

/* === RC7.8.20 WHO CAN SEE WHAT SAYS WHAT IS TRUE === */
.asp-owner-list-row>div{min-width:0}
.asp-owner-list-row b{overflow-wrap:anywhere}
.asp-access-grant{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center;justify-content:space-between;padding-block:var(--asp-space-1)}
.asp-access-grant form{margin:0}

/* === RC7.9.0 THE GUIDES LIVE IN THE APP === */
.asp-guides-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-3)}
.asp-guides-card{display:flex;flex-direction:column;gap:var(--asp-space-1);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);text-decoration:none;color:var(--asp-ink);background:var(--asp-surface)}
.asp-guides-card:hover{border-color:var(--asp-teal-700)}
.asp-guides-card:focus-visible{outline:2px solid var(--asp-teal-700);outline-offset:2px}
.asp-guide-bar{margin-bottom:var(--asp-space-3)}
@media(max-width:560px){.asp-guides-list{grid-template-columns:1fr}}

/* === RC8.2.2 QUICK CLOCK OUT === */
.asp-rc822-clockout{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;
  gap:.75rem;font-weight:600}
.asp-rc822-clockout p{margin:0}
.asp-rc822-clockout .asp-rc821-clock-form{margin:0}

/* === RC8.2.4 THE SIGNUP AND PAY PAGES SHOW THEIR STEPS ===
   A legible two-step indicator for the public signup funnel, styled with
   the intro panel's own dark-on-navy tokens (it always sits inside
   .asp-auth-intro, never on a light background). And the two per-hotel
   fieldsets in signup step two reading as their own grouped card instead
   of the zero-border reset every <fieldset> gets above -- scoped to
   .asp-auth-card so nothing outside these auth-adjacent pages is touched. */
.asp-step-indicator{display:flex;align-items:center;gap:var(--asp-space-2);margin:0 0 var(--asp-space-5)}
.asp-step{display:flex;align-items:center;gap:var(--asp-space-2);color:rgba(255,255,255,.45);font-size:12px;font-weight:700;letter-spacing:.02em}
.asp-step-num{display:flex;align-items:center;justify-content:center;width:22px;height:22px;border-radius:var(--asp-radius-full);border:1px solid rgba(255,255,255,.35);font-size:11px;font-weight:800;flex:none}
.asp-step.is-current{color:var(--asp-surface)}
.asp-step.is-current .asp-step-num{background:var(--asp-teal-glow);border-color:var(--asp-teal-glow);color:var(--asp-navy-900)}
.asp-step.is-done .asp-step-num{background:rgba(63,217,209,.18);border-color:var(--asp-teal-glow);color:var(--asp-teal-glow)}
.asp-step-connector{width:28px;height:1px;background:rgba(255,255,255,.25);flex:none}
@media(max-width:560px){.asp-step-label{display:none}.asp-step-connector{width:16px}}
.asp-auth-card fieldset{margin:0 0 var(--asp-space-4);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface-soft)}
.asp-auth-card fieldset legend{padding:0 var(--asp-space-1);font-weight:700;font-size:13px;color:var(--asp-navy-900)}

/* === RC8.2.5 SIGN-IN AND RECOVERY MATCH THE PUBLIC DESIGN === */
/* .asp-inline-alert only ever had its -error modifier styled (see the base
   rule a few lines above this one in asp-works.css); a plain status/success
   use -- forgot-password's "check your email", reset's "password changed",
   MFA's "authenticator is active" -- rendered with no fill at all. The
   :not() keeps this from ever touching an element that also carries
   -error, regardless of source order, so the existing error styling is
   untouched. Colours are this app's own --asp-good tokens; the border and
   text shades are custom-darkened for contrast against the soft fill, the
   same way .asp-inline-alert-error already darkens --asp-bad for its own
   text instead of using the raw token. */
.asp-inline-alert:not(.asp-inline-alert-error){border-color:#bfe3d3;background:var(--asp-good-soft);color:#0b6b57}

/* === RC8.2.6 GUEST PUBLIC PAGES MATCH THE APPROVED LOOK === */
/* /d/ -- the directory already used the approved tokens; past phone width
   it only ever stacked in one column. Above the tablet breakpoint the
   section cards (Wi-Fi & TV, each listing group, Emergency procedures) flow
   two across instead of down a long empty column; the header, gallery,
   facts strip, the "Ask for something" lead and the footer keep the full
   width regardless. */
@media(min-width:1025px){
  .asp-dir-page{max-width:840px;display:grid;grid-template-columns:1fr 1fr;column-gap:var(--asp-space-6)}
  .asp-dir-head,.asp-dir-gallery,.asp-dir-facts,.asp-dir-ask,.asp-dir-foot{grid-column:1/-1}
  .asp-dir-section,.asp-dir-emergency{align-self:start}
}

/* /r/ -- give RC7.0.3's own page its own presentation instead of the
   short-form shell's: no second plain-text repeat of the hotel name above
   its own hero, and the same desktop card treatment .asp-dir-page already
   gets. Scoped with :has() so every OTHER page `_rc440_guest_page` renders
   (the short forms it was built for) is completely unaffected. */
.asp-guest-card:has(>.asp-gd-page){padding:0;background:transparent;box-shadow:none;border-radius:0;max-width:560px}
.asp-guest-card:has(>.asp-gd-page)>h1{display:none}
@media(min-width:561px){
  .asp-gd-page{margin-top:24px;border-radius:var(--asp-radius-lg);overflow:hidden;box-shadow:var(--asp-shadow-lg)}
}
/* RC7.0.3 shipped its own literal blue. Same selectors, same specificity,
   appended after -- these win the cascade and bring it onto the shared
   navy/teal tokens the rest of the guest surface uses. */
.asp-gd-hero{background:linear-gradient(140deg,var(--asp-navy-900) 0%,#2f6fb5 45%,#7fa8cf 100%)}
.asp-gd-small{color:var(--asp-teal-700)}
.asp-gd-ico{color:var(--asp-teal-700)}
.asp-gd-own button{background:var(--asp-teal-700)}
.asp-gd-own button:hover{background:#0b656d}
.asp-gd-own button:focus-visible{outline:2px solid var(--asp-navy-900);outline-offset:2px}
.asp-gd-call{background:var(--asp-teal-700)}
.asp-gd-call:hover{background:#0b656d}
/* .asp-gd-call sits in the light footer, not on the dark hero, so its ring
   needs the dark token .asp-guest-card button:focus-visible already uses on
   a light background -- a white ring here measured 1.00:1, invisible. */
.asp-gd-call:focus-visible{outline:3px solid var(--asp-navy-900);outline-offset:2px}
.asp-gd-rowicon{background:var(--asp-teal-100)}
.asp-gd-count{color:var(--asp-teal-700);background:var(--asp-teal-100)}
.asp-gd-tile:hover{border-color:var(--asp-teal-600)}
.asp-gd-tile:focus-visible{outline:2px solid var(--asp-teal-700);outline-offset:2px}

/* === RC8.3.0 ADD TO HOME SCREEN DISCOVERABILITY === */
.asp-pwa-banner{display:flex;align-items:flex-start;gap:var(--asp-space-3);padding:var(--asp-space-3) var(--asp-space-4);background:linear-gradient(120deg,var(--asp-navy-950),var(--asp-navy-900));color:#fff;border-bottom:1px solid var(--asp-teal-700)}
.asp-pwa-banner[hidden]{display:none}
.asp-pwa-banner-body{flex:1;min-width:0}
.asp-pwa-banner-title{margin:0 0 var(--asp-space-2);font-size:13.5px;font-weight:700;color:#fff}
.asp-pwa-banner-steps{margin:0;padding-left:var(--asp-space-5);display:flex;flex-wrap:wrap;gap:var(--asp-space-1) var(--asp-space-3);list-style:decimal;font-size:12.5px;color:#dce6f0}
.asp-pwa-banner-steps li{white-space:nowrap}
.asp-pwa-banner-steps b{color:var(--asp-teal-glow)}
.asp-pwa-banner-dismiss{flex:0 0 auto;width:32px;height:32px;min-width:32px;min-height:32px;padding:0;border:1px solid rgba(255,255,255,.3);border-radius:var(--asp-radius-full);background:rgba(255,255,255,.08);color:#fff;font-size:18px;line-height:1;box-shadow:none}
.asp-pwa-banner-dismiss:hover{background:rgba(255,255,255,.18);color:#fff}
@media(max-width:560px){.asp-pwa-banner-steps{flex-direction:column;gap:var(--asp-space-1)}}
.asp-install-steps{margin:0 0 var(--asp-space-2);padding-left:var(--asp-space-5)}
.asp-install-steps li{margin:0 0 var(--asp-space-2)}
[data-asp-install-sections] section{margin:0 0 var(--asp-space-4)}
[data-asp-install-sections] section[hidden]{display:none}
[data-asp-install-android-button][hidden],[data-asp-install-android-fallback][hidden],[data-asp-install-android-note][hidden]{display:none}

/* === RC8.3.4 FIRST-LOGIN ROLE TOUR === */
.asp-tour-modal{max-width:440px}
.asp-tour-body{display:flex;flex-direction:column;gap:var(--asp-space-4)}
.asp-tour-dots{display:flex;gap:var(--asp-space-1);justify-content:center}
.asp-tour-dot{width:6px;height:6px;border-radius:var(--asp-radius-full);background:var(--asp-line-strong);display:inline-block}
.asp-tour-dot[aria-current='true']{background:var(--asp-teal-600)}
.asp-tour-step .eyebrow{color:var(--asp-teal-700);font-size:var(--asp-text-2xs);font-weight:600;letter-spacing:.06em;text-transform:uppercase;margin:0 0 var(--asp-space-1)}
.asp-tour-step h2{font-size:var(--asp-text-lg);margin:0 0 var(--asp-space-2)}
.asp-tour-step p{font-size:var(--asp-text-base);color:var(--asp-ink);margin:0 0 var(--asp-space-3);line-height:1.5}
.asp-tour-cta{margin-top:var(--asp-space-2)}
.asp-modal-actions.asp-tour-actions{justify-content:space-between;align-items:center}
.asp-tour-actions-right{display:flex;gap:var(--asp-space-2)}
@media(max-width:560px){
  .asp-tour-modal{width:calc(100vw - 24px)}
  .asp-modal-actions.asp-tour-actions{flex-wrap:wrap;gap:var(--asp-space-2)}
  .asp-tour-actions-right{width:100%;justify-content:flex-end}
}

/* RC8.4.3 quick count */
.asp-count-notice{margin:0 0 var(--asp-space-3);padding:var(--asp-space-2) var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface-soft);color:var(--asp-navy-900);font-weight:650}
.asp-count-list{display:grid;gap:8px;margin-bottom:var(--asp-space-3)}
.asp-count-row{display:flex;align-items:center;gap:var(--asp-space-3);padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface,#fff)}
.asp-count-main{flex:1;min-width:0;display:flex;flex-direction:column;gap:var(--asp-space-1)}
.asp-count-main b{font-size:15px;line-height:1.25;letter-spacing:-.01em}
.asp-count-main .mini{color:var(--asp-muted)}
.asp-count-input{width:88px;flex:0 0 auto;text-align:right;font-variant-numeric:tabular-nums}
.asp-count-save{width:100%;min-height:48px}
@media(max-width:560px){
  .asp-count-row{flex-wrap:wrap;gap:var(--asp-space-2)}
  .asp-count-main{flex:1 1 100%}
  .asp-count-input{flex:1 1 100%;width:auto;min-height:48px;text-align:left;font-size:16px}
}

/* RC8.6.0 persistent hotel indicator */
/* Same seam and margin-left:auto placement as rc544's own
   .asp-property-switch-inline -- the two never render together (see this
   stage's own handler guard), so they safely share one visual slot. */
.asp-hotel-indicator{display:flex;align-items:center;gap:var(--asp-space-1);margin-left:auto;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-sm);color:rgba(255,255,255,.8);font-size:12px;font-weight:700;letter-spacing:-.005em;max-width:240px}
.asp-hotel-indicator-icon{width:15px;height:15px;flex:0 0 15px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round;opacity:.75}
.asp-hotel-indicator-name{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
@media(max-width:768px){.asp-hotel-indicator{margin-left:0;max-width:none;width:100%}}

/* RC8.7.3 alert emails per person */
.asp-alert-prefs h3{margin:var(--asp-space-4) 0 var(--asp-space-1);font-size:15px}
.asp-alert-pref{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--asp-space-2) var(--asp-space-4);padding:var(--asp-space-3) 0;border-top:1px solid var(--asp-line)}
.asp-alert-pref-name{font-weight:650;flex:1 1 240px}
.asp-alert-pref-choice{display:flex;flex-wrap:wrap;gap:var(--asp-space-4)}
.asp-alert-pref-choice label{display:inline-flex;align-items:center;gap:var(--asp-space-2);margin:0;font-weight:500;white-space:nowrap}
.asp-alert-prefs form button{margin-top:var(--asp-space-4)}
.asp-alert-prefs-saved{background:var(--asp-good-soft);border:1px solid var(--asp-good-border);color:var(--asp-good);border-radius:12px;padding:var(--asp-space-3);margin:0 0 var(--asp-space-4)}
@media(max-width:560px){.asp-alert-pref{flex-direction:column;align-items:flex-start}}

/* === RC8.7.4 PHONE LINES, TAP TO EDIT === */
/* The summary line exists for the phone only; above 768px the line-item
   and checklist tables are exactly the tables they were. */
.asp-line-items tr.asp-li-sum{display:none}
/* The signed contract's phone statement line; never shown on the desktop
   table (the PDF is drawn separately and never reads this). */
.asp-contract-table .asp-contract-calc{display:none}
@media(max-width:768px){
  /* Invoice line items and the room-inspection checklist: one line each,
     tap to edit. Every control stays in the one row it always lived in. */
  .table-wrap:has(> .asp-line-items tr.asp-li-sum){overflow:visible;border:0;border-radius:0;background:transparent}
  .asp-line-items:has(tr.asp-li-sum){display:block;width:100%;min-width:0}
  .asp-line-items:has(tr.asp-li-sum) thead{position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
  .asp-line-items:has(tr.asp-li-sum) tbody{display:block}
  .asp-line-items tr.asp-li-sum{display:block;margin-top:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
  .asp-line-items tr.asp-li-sum:first-child{margin-top:0}
  .asp-line-items tr.asp-li-sum:has(details[open]){border-bottom:0;border-radius:var(--asp-radius-md) var(--asp-radius-md) 0 0}
  .asp-line-items tr.asp-li-sum>td{display:block;padding:0;border:0;background:transparent}
  .asp-li-toggle{margin:0;padding:0;border:0;background:transparent}
  .asp-li-toggle>summary{list-style:none;cursor:pointer;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:var(--asp-space-1) var(--asp-space-2);align-items:center;min-height:44px;padding:var(--asp-space-3);border-radius:var(--asp-radius-md);color:var(--asp-ink)}
  .asp-li-toggle>summary::-webkit-details-marker{display:none}
  .asp-li-toggle>summary:focus-visible{outline:3px solid var(--asp-teal-600);outline-offset:2px}
  .asp-li-name{font-weight:700;overflow-wrap:anywhere}
  .asp-li-name .pill{font-weight:650}
  .asp-li-amt{font-weight:800;font-variant-numeric:tabular-nums;text-align:right;white-space:nowrap}
  .asp-li-amt .pill{margin:0}
  .asp-li-sub{grid-column:1 / -1;display:flex;flex-wrap:wrap;gap:var(--asp-space-1);align-items:center;color:var(--asp-muted);font-size:var(--asp-text-xs);font-variant-numeric:tabular-nums}
  .asp-li-sub .pill{min-height:0;margin:0;padding:0 var(--asp-space-2)}
  .asp-li-note{overflow:hidden;max-width:100%;text-overflow:ellipsis;white-space:nowrap}
  .asp-li-add{color:var(--asp-teal-700)}
  .pill.asp-li-gl{background:var(--asp-teal-100);border-color:var(--asp-teal-border-soft);color:var(--asp-teal-800)}
  .asp-li-chev{display:inline-block;color:var(--asp-teal-700);font-size:var(--asp-text-base);font-weight:700;line-height:1;transition:transform var(--asp-motion-fast)}
  .asp-li-toggle[open] .asp-li-chev{transform:rotate(90deg)}
  .asp-line-items tr.asp-li-sum+tr.asp-li-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-2);padding:0 var(--asp-space-3) var(--asp-space-3);border:1px solid var(--asp-line);border-top:0;border-radius:0 0 var(--asp-radius-md) var(--asp-radius-md);background:var(--asp-surface)}
  .asp-line-items tr.asp-li-sum:not(:has(details[open]))+tr.asp-li-fields{display:none}
  .asp-line-items tr.asp-li-sum+tr.asp-li-fields:hover{background:var(--asp-surface)}
  .asp-line-items .asp-li-fields>td{display:block;min-width:0;padding:0;border:0;background:transparent;text-align:left}
  .asp-line-items .asp-li-fields>td[data-li-label]::before{content:attr(data-li-label);display:block;margin-bottom:var(--asp-space-1);color:var(--asp-muted);font-size:var(--asp-text-xs);font-weight:700}
  .asp-line-items .asp-li-fields>td:has(input[name$='_description']),.asp-line-items .asp-li-fields>td:has(select[name$='_gl_account_id']),.asp-line-items .asp-li-fields>td:has(input[name$='_remove']),.asp-line-items .asp-li-check>td{grid-column:1 / -1}
  .asp-line-items .asp-li-fields>td:empty,.asp-line-items .asp-li-check>td:first-child{display:none}
  .asp-line-items .asp-li-fields input,.asp-line-items .asp-li-fields select{width:100%;min-width:0;margin:0}
  .asp-line-items .asp-li-fields input[type='checkbox']{width:auto;flex:none;margin-right:var(--asp-space-2)}
  .asp-line-items .asp-li-fields select[name$='_gl_account_id']:has(>option[value='']:checked){border-color:var(--asp-warn);background-color:var(--asp-warn-soft)}
  .asp-line-items .asp-li-fields label.mini{display:flex;align-items:center;gap:0;min-height:44px;margin:0;color:var(--asp-bad);font-size:var(--asp-text-sm);font-weight:600}
  .asp-line-items .asp-li-fields label.mini::after{content:"\00a0this line"}

  /* The signed contract: one statement line per room type, the total in a
     tinted bar. Read-only; the same cells as the desktop table. */
  .asp-contract-table-wrap{overflow:visible;border:0;border-radius:0}
  .asp-contract-table{display:block}
  .asp-contract-table thead{position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
  .asp-contract-table tbody{display:block;padding:0 var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
  .asp-contract-table tr{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:0 var(--asp-space-2);align-items:center}
  .asp-contract-table tbody tr{padding:var(--asp-space-2) 0;border-bottom:1px solid var(--asp-line)}
  .asp-contract-table tbody tr:last-child{border-bottom:0}
  .asp-contract-table td{display:none;padding:0;border:0;text-align:left}
  .asp-contract-table td:first-child{display:block;grid-column:1;grid-row:1;font-weight:700;text-align:left}
  .asp-contract-table td:nth-last-child(2){display:block;grid-column:2;grid-row:1 / span 2;font-weight:800;text-align:right;white-space:nowrap}
  .asp-contract-table .asp-contract-calc{display:block;grid-column:1;grid-row:2;color:var(--asp-muted);font-size:var(--asp-text-xs)}
  .asp-contract-table tfoot{display:block;margin-top:var(--asp-space-3)}
  .asp-contract-table tfoot tr{padding:var(--asp-space-3);border:1px solid var(--asp-teal-border-soft);border-radius:var(--asp-radius-md);background:var(--asp-teal-100);color:var(--asp-ink)}
  .asp-contract-table tfoot td:first-child{display:none}
  .asp-contract-table tfoot .asp-contract-calc{grid-row:1;color:var(--asp-ink);font-size:inherit;font-weight:800}
  .asp-contract-table tfoot td:nth-last-child(2){grid-row:1}
}

/* RC8.7.5 Lost & Found desk */
.asp-pipe-card .asp-lf-unclaimed-tag{display:inline-block;margin-top:var(--asp-space-1);font-style:normal;font-size:12px;font-weight:700;color:var(--asp-bronze-800)}
.asp-lf-box{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--asp-space-2) var(--asp-space-3);align-items:end;margin:0 0 var(--asp-space-3)}
.asp-lf-box button{grid-column:1/-1;justify-self:start}
.asp-lf-check{display:flex;align-items:center;gap:var(--asp-space-2);font-weight:600}
.asp-lf-check input{width:auto}
.asp-lf-facts{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:var(--asp-space-3);margin:0 0 var(--asp-space-4);padding:var(--asp-space-3) var(--asp-space-4);background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}
.asp-lf-facts dt{font-size:var(--asp-text-xs);font-weight:700;letter-spacing:.04em;text-transform:uppercase;color:var(--asp-muted)}
.asp-lf-facts dd{margin:var(--asp-space-1) 0 0;font-weight:600;color:var(--asp-ink);overflow-wrap:anywhere}
.asp-lf-ship-actions{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--asp-space-3)}
.asp-lf-ship-actions form{margin:0}
.asp-lf-ship-actions .asp-lf-box{flex-basis:100%}
.asp-lf-tag{display:grid;justify-items:center;gap:var(--asp-space-2);max-width:340px;margin:0 auto var(--asp-space-4);padding:var(--asp-space-5) var(--asp-space-4);background:var(--asp-surface);border:2px dashed var(--asp-line-strong);border-radius:var(--asp-radius-lg);text-align:center}
.asp-lf-tag-qr{display:block;width:220px;max-width:100%;height:auto}
.asp-lf-tag-hotel{font-size:var(--asp-text-xs);font-weight:700;letter-spacing:.06em;text-transform:uppercase;color:var(--asp-muted)}
.asp-lf-tag-id{font-size:var(--asp-text-2xl);font-weight:800;letter-spacing:.02em;color:var(--asp-ink);font-variant-numeric:tabular-nums}
.asp-lf-tag-name{font-size:var(--asp-text-lg);font-weight:700;color:var(--asp-ink);overflow-wrap:anywhere}
.asp-lf-tag-meta,.asp-lf-tag-hint{font-size:var(--asp-text-sm);color:var(--asp-muted)}
.asp-lf-tag-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--asp-space-3)}
.asp-lf-tags-sheet{display:flex;flex-wrap:wrap;justify-content:center;gap:var(--asp-space-4)}
.asp-lf-tags-sheet .asp-lf-tag{margin:0;flex:0 1 300px}
@media print{body *{visibility:hidden!important}.asp-lf-tag,.asp-lf-tag *{visibility:visible!important}.asp-lf-tag{position:absolute;left:0;top:0;margin:0;width:3.5in;border:1px solid var(--asp-ink)}.asp-lf-tag-hint{display:none}.asp-lf-tags-sheet{position:absolute;left:0;top:0;display:block;width:100%}.asp-lf-tags-sheet .asp-lf-tag{position:static;display:inline-grid;margin:.1in;break-inside:avoid;vertical-align:top}}

/* === RC8.8.5 ONE GENERAL QR === */
/* The guest page leads with the room card's one-tap buttons. The lead block
   is a centred flex column (RC4.4.0/RC5.7.1); the grid stretches across it
   and reuses RC7.0.3's tile look (with RC8.2.6's token colours). */
.asp-rc885-ask h2{margin:0;font-size:var(--asp-text-lg);color:var(--asp-navy-900);text-align:center}
.asp-rc885-ask .mini{margin:var(--asp-space-1) 0 var(--asp-space-4)}
.asp-rc885-grid{align-self:stretch;width:100%;max-width:36rem;margin:0 auto}
.asp-rc885-grid .asp-gd-tile{text-decoration:none;color:var(--asp-navy-900);box-sizing:border-box}
@media(min-width:561px){.asp-rc885-grid{grid-template-columns:repeat(4,1fr)}}
/* The short form behind a button, in RC7.0.3's page. */
.asp-rc885-form label{margin:var(--asp-space-4) 0 var(--asp-space-1)}
.asp-rc885-form label:first-of-type{margin-top:0}
.asp-rc885-form input{width:100%;box-sizing:border-box}
.asp-rc885-req{color:var(--asp-bad)}

/* RC8.9.6 PUBLIC PAGES (folded in: one stylesheet per page) */
/* ==========================================================================
   ASP Works public pages (RC8.9.6) -- the guest pages' design system, worn by
   ASP Works' own public pages: sign in, Owner Control sign in, forgot/reset
   password, staff invitations, signup, Terms, Privacy, 404 and the
   server-error page. Owner-approved batch 3, 2026-09-29.

   Loaded AFTER /assets/asp-works.css, and only on those pages. Everything is
   scoped under body.pp, so no signed-in screen changes.
   - No inline style= anywhere (CSP style-src 'self'); classes only.
   - Spacing from the --asp-space-N tokens asp-works.css defines.
   - Breakpoints: min-width 561px and 1025px only.
   - Fonts: Fraunces (display) and Inter (text), self-hosted under
     /assets/fonts when their files are in build_patches/rc896/assets/fonts
     (the @font-face rules above this comment are then written by the build);
     otherwise the Georgia / system-sans fallbacks in the stacks below.
   ========================================================================== */

/* ---- the shared guest & public design system ---- */
:root{
  /* type */
  --pp-font-display:'Fraunces',Georgia,'Iowan Old Style','Times New Roman',serif;
  --pp-font-text:'Inter','Public Sans',-apple-system,'Segoe UI',system-ui,sans-serif;
  --pp-text-xs:12px;--pp-text-sm:14px;--pp-text-base:16px;--pp-text-md:18px;
  --pp-text-lg:22px;--pp-text-xl:28px;--pp-text-2xl:34px;--pp-text-3xl:44px;

  /* restrained palette: warm paper, near-black ink, one accent */
  --pp-paper:#f6f3ec;--pp-surface:#ffffff;--pp-sunk:#faf8f3;
  --pp-ink:#1a1f1c;--pp-ink-soft:#434b46;--pp-muted:#5f6661;  /* was #767d78: 3.98:1 on --pp-sunk failed WCAG AA (test_rc579) */
  --pp-line:#e7e1d4;--pp-line-strong:#d3cbbb;
  --pp-accent:#0d5c61;           /* no-logo fallback: ASP Works deep teal */
  --pp-accent-2:#b4873d;         /* secondary (the gold in most hotel marks) */
  --pp-accent-ink:#ffffff;

  --pp-success:#1f7a4d;--pp-success-soft:#e7f3ec;
  --pp-warn:#8a5d0c;--pp-warn-soft:#fbf2df;
  --pp-danger:#a3372b;--pp-danger-soft:#fbebe8;

  --pp-radius-sm:10px;--pp-radius-md:14px;--pp-radius-lg:20px;--pp-radius-xl:28px;--pp-radius-full:999px;
  --pp-shadow-card:0 1px 2px rgba(26,31,28,.04),0 18px 40px -22px rgba(26,31,28,.28);
  --pp-shadow-lift:0 1px 2px rgba(26,31,28,.06),0 10px 24px -14px rgba(26,31,28,.35);
  --pp-control:52px;
  --pp-page-max:520px;
  /* Defaults for the tints body.pp re-derives below, so every var() here
     resolves even where body.pp's own definitions don't apply. */
  --pp-accent-soft:color-mix(in srgb,var(--pp-accent) 9%,#ffffff);
  --pp-accent-line:color-mix(in srgb,var(--pp-accent) 28%,#ffffff);
  --pp-accent-deep:color-mix(in srgb,var(--pp-accent) 82%,#000000);
  --pp-ink-brand:#0f1b1d;
}

/* Accent tints are derived on <body> (not :root) so a hotel theme that sets
   --pp-accent on body.pp.pp-hotel recolours every tint too. */
body.pp{
  --pp-accent-soft:color-mix(in srgb,var(--pp-accent) 9%,#ffffff);
  --pp-accent-line:color-mix(in srgb,var(--pp-accent) 28%,#ffffff);
  --pp-accent-deep:color-mix(in srgb,var(--pp-accent) 82%,#000000);
}

/* ---------- page ground ---------- */
body.pp{margin:0;background:var(--pp-paper);color:var(--pp-ink);font-family:var(--pp-font-text);
  font-size:var(--pp-text-base);line-height:1.55;-webkit-font-smoothing:antialiased;min-height:100vh}
body.pp *{box-sizing:border-box}
body.pp a{color:var(--pp-accent);text-underline-offset:3px;text-decoration-thickness:1px}

/* the one column every guest page lives in */
body.pp .asp-guest-card,body.pp .pp-page{background:var(--pp-surface);max-width:none;width:100%;margin:0;
  border-radius:0;box-shadow:none;border:0;padding:var(--asp-space-6) var(--asp-space-5) var(--asp-space-8);
  min-height:100vh;color:var(--pp-ink)}
@media (min-width:561px){
  body.pp{padding:var(--asp-space-12) var(--asp-space-6)}
  body.pp .asp-guest-card,body.pp .pp-page{max-width:var(--pp-page-max);margin:0 auto;min-height:0;
    border-radius:var(--pp-radius-xl);border:1px solid var(--pp-line);box-shadow:var(--pp-shadow-card);
    padding:var(--asp-space-10) var(--asp-space-10) var(--asp-space-8)}
}
@media (min-width:1025px){body.pp{padding:var(--asp-space-16) var(--asp-space-8)}}

/* ---------- hotel header: logo leads, ASP Works stays quiet ---------- */
body.pp .pp-brand{display:flex;align-items:center;justify-content:center;gap:var(--asp-space-3);
  padding:0 0 var(--asp-space-5);margin:0 0 var(--asp-space-6);border-bottom:1px solid var(--pp-line)}
body.pp .pp-brand-logo{display:block;max-height:76px;max-width:280px;width:auto;height:auto}
@media (min-width:561px){body.pp .pp-brand-logo{max-height:96px;max-width:340px}}
body.pp .pp-brand--text{flex-direction:column;gap:var(--asp-space-1)}
body.pp .pp-brand-name{font-family:var(--pp-font-display);font-size:var(--pp-text-lg);font-weight:500;
  letter-spacing:-.01em;color:var(--pp-ink);line-height:1.2;text-align:center}
body.pp .pp-brand-sub{font-size:var(--pp-text-xs);letter-spacing:.14em;text-transform:uppercase;color:var(--pp-muted)}
body.pp .pp-brand-asp{display:block;width:22px;height:22px;opacity:.8}

/* ---------- type ---------- */
body.pp h1,body.pp .asp-guest-card h1{text-shadow:none;font-family:var(--pp-font-display);font-weight:500;
  font-size:var(--pp-text-2xl);line-height:1.12;letter-spacing:-.015em;color:var(--pp-ink);
  margin:0 0 var(--asp-space-3)}
@media (min-width:561px){body.pp h1,body.pp .asp-guest-card h1{font-size:var(--pp-text-3xl)}}
body.pp h2{font-family:var(--pp-font-display);font-weight:500;font-size:var(--pp-text-lg);line-height:1.25;
  letter-spacing:-.01em;margin:var(--asp-space-8) 0 var(--asp-space-2);color:var(--pp-ink)}
body.pp p{margin:0 0 var(--asp-space-4);color:var(--pp-ink-soft)}
body.pp b,body.pp strong{color:var(--pp-ink);font-weight:600}
body.pp .mini,body.pp .pp-note{font-size:var(--pp-text-sm);color:var(--pp-muted);line-height:1.5}
body.pp .pp-eyebrow{display:block;font-size:var(--pp-text-xs);font-weight:600;letter-spacing:.14em;
  text-transform:uppercase;color:var(--pp-accent);margin:0 0 var(--asp-space-2)}
body.pp .pp-lead{font-size:var(--pp-text-md);color:var(--pp-ink-soft);line-height:1.5}
body.pp .sr-only,body.pp .pp-sr{position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;
  clip:rect(0,0,0,0);white-space:nowrap;border:0}

/* ---------- form controls ---------- */
body.pp label{display:block;font-size:var(--pp-text-sm);font-weight:600;color:var(--pp-ink);
  margin:var(--asp-space-5) 0 var(--asp-space-2)}
body.pp .asp-guest-optional{font-weight:400;color:var(--pp-muted)}
body.pp input:not([type=radio]):not([type=checkbox]):not([type=hidden]):not([type=file]),
body.pp select,body.pp textarea{width:100%;min-height:var(--pp-control);font:inherit;font-size:var(--pp-text-base);
  color:var(--pp-ink);background:var(--pp-surface);border:1px solid var(--pp-line-strong);
  border-radius:var(--pp-radius-md);padding:var(--asp-space-3) var(--asp-space-4);
  transition:border-color var(--asp-motion-fast),box-shadow var(--asp-motion-fast);appearance:none;box-shadow:none}
body.pp textarea{min-height:120px;resize:vertical;line-height:1.5}
body.pp input:focus,body.pp select:focus,body.pp textarea:focus{outline:none;border-color:var(--pp-accent);
  box-shadow:0 0 0 4px var(--pp-accent-soft)}
body.pp input::placeholder,body.pp textarea::placeholder{color:var(--pp-muted)}
body.pp input[type=file]{width:100%;font:inherit;font-size:var(--pp-text-sm);padding:var(--asp-space-5);
  border:1.5px dashed var(--pp-line-strong);border-radius:var(--pp-radius-md);background:var(--pp-sunk)}

/* buttons: one primary per screen, the rest quiet */
body.pp button,body.pp .btn,body.pp .pp-btn{display:flex;align-items:center;justify-content:center;
  gap:var(--asp-space-2);width:100%;min-height:54px;margin:var(--asp-space-6) 0 0;
  padding:var(--asp-space-3) var(--asp-space-6);border:1px solid var(--pp-accent);
  border-radius:var(--pp-radius-md);background:var(--pp-accent);color:var(--pp-accent-ink);
  font:inherit;font-size:var(--pp-text-base);font-weight:600;letter-spacing:.005em;text-decoration:none;
  box-shadow:0 1px 0 rgba(255,255,255,.12) inset,0 8px 18px -10px var(--pp-accent);cursor:pointer;
  transition:background var(--asp-motion-fast),transform .05s}
body.pp button:hover,body.pp .btn:hover{background:var(--pp-accent-deep)}
body.pp button:active{transform:translateY(1px)}
body.pp button.secondary,body.pp .pp-btn--quiet{background:var(--pp-surface);color:var(--pp-accent);
  border-color:var(--pp-accent-line);box-shadow:none}
body.pp button.secondary:hover,body.pp .pp-btn--quiet:hover{background:var(--pp-accent-soft)}

/* ---------- surfaces ---------- */
body.pp .pp-card{background:var(--pp-surface);border:1px solid var(--pp-line);border-radius:var(--pp-radius-lg);
  padding:var(--asp-space-5)}
body.pp .pp-card--sunk{background:var(--pp-sunk)}
body.pp .pp-divider{height:1px;background:var(--pp-line);border:0;margin:var(--asp-space-6) 0}

/* key/value summary - the checkout-grade card */
body.pp .pp-summary{background:var(--pp-sunk);border:1px solid var(--pp-line);border-radius:var(--pp-radius-lg);
  padding:var(--asp-space-5);margin:var(--asp-space-5) 0}
body.pp .pp-summary-row{display:flex;justify-content:space-between;align-items:baseline;gap:var(--asp-space-4);
  padding:var(--asp-space-2) 0;font-size:var(--pp-text-sm);color:var(--pp-ink-soft)}
body.pp .pp-summary-row b{font-weight:600;color:var(--pp-ink);text-align:right}
body.pp .pp-summary-total{border-top:1px solid var(--pp-line);margin-top:var(--asp-space-2);
  padding-top:var(--asp-space-3);font-size:var(--pp-text-base);color:var(--pp-ink)}
body.pp .pp-summary-total b{font-size:var(--pp-text-md)}

/* steps: where the guest is in a short flow */
body.pp .pp-steps{display:flex;list-style:none;margin:0 0 var(--asp-space-6);padding:0;gap:var(--asp-space-2)}
body.pp .pp-steps li{flex:1;font-size:var(--pp-text-xs);font-weight:600;color:var(--pp-muted);
  padding-top:var(--asp-space-3);border-top:3px solid var(--pp-line);letter-spacing:.02em}
body.pp .pp-steps li.is-done{color:var(--pp-ink-soft);border-top-color:var(--pp-accent-line)}
body.pp .pp-steps li.is-current{color:var(--pp-accent);border-top-color:var(--pp-accent)}

/* confirmation: a calm, finished moment */
body.pp .pp-confirm{text-align:center;padding:var(--asp-space-4) 0 var(--asp-space-2)}
body.pp .pp-confirm-icon{display:flex;align-items:center;justify-content:center;width:72px;height:72px;
  margin:0 auto var(--asp-space-5);border-radius:var(--pp-radius-full);background:var(--pp-success-soft);
  color:var(--pp-success)}
body.pp .pp-confirm-icon svg{width:34px;height:34px}
body.pp .pp-confirm-icon--wait{background:var(--pp-accent-soft);color:var(--pp-accent)}
body.pp .pp-confirm-icon--stop{background:var(--pp-warn-soft);color:var(--pp-warn)}
body.pp .pp-confirm + h1,body.pp .pp-center{text-align:center}

/* status tracker: received -> on it -> done */
body.pp .pp-track{display:grid;grid-template-columns:repeat(3,1fr);list-style:none;margin:var(--asp-space-6) 0;
  padding:0;position:relative}
body.pp .pp-track li{position:relative;text-align:center;font-size:var(--pp-text-xs);font-weight:600;
  color:var(--pp-muted);padding-top:var(--asp-space-8)}
body.pp .pp-track li::before{content:"";position:absolute;top:0;left:calc(50% - 9px);width:18px;height:18px;margin-left:0;
  border-radius:var(--pp-radius-full);background:var(--pp-surface);border:2px solid var(--pp-line-strong);z-index:1}
body.pp .pp-track li::after{content:"";position:absolute;top:8px;left:-50%;width:100%;height:2px;background:var(--pp-line)}
body.pp .pp-track li:first-child::after{display:none}
body.pp .pp-track li.is-done::before{background:var(--pp-accent);border-color:var(--pp-accent)}
body.pp .pp-track li.is-done::after,body.pp .pp-track li.is-current::after{background:var(--pp-accent)}
body.pp .pp-track li.is-current::before{border-color:var(--pp-accent);box-shadow:0 0 0 5px var(--pp-accent-soft)}
body.pp .pp-track li.is-done,body.pp .pp-track li.is-current{color:var(--pp-ink)}

/* notes and alerts */
body.pp .asp-guest-note,body.pp .pp-alert{background:var(--pp-warn-soft);color:var(--pp-warn);
  border:1px solid color-mix(in srgb,var(--pp-warn) 22%,#ffffff);border-radius:var(--pp-radius-md);
  padding:var(--asp-space-3) var(--asp-space-4);font-size:var(--pp-text-sm);font-weight:500}
body.pp .pp-alert--ok{background:var(--pp-success-soft);color:var(--pp-success);
  border-color:color-mix(in srgb,var(--pp-success) 22%,#ffffff)}

/* trust line under money */
body.pp .pp-trust{display:flex;align-items:center;justify-content:center;gap:var(--asp-space-2);
  font-size:var(--pp-text-xs);color:var(--pp-muted);margin:var(--asp-space-4) 0 0;text-align:center}
body.pp .pp-trust svg{width:14px;height:14px;flex:none}

/* chips */
body.pp .pp-chip{display:inline-flex;align-items:center;gap:var(--asp-space-1);padding:var(--asp-space-1) var(--asp-space-3);
  border-radius:var(--pp-radius-full);background:var(--pp-accent-soft);color:var(--pp-accent-deep);
  font-size:var(--pp-text-xs);font-weight:600}
body.pp .pp-chip--ok{background:var(--pp-success-soft);color:var(--pp-success)}
body.pp .pp-chip--wait{background:var(--pp-warn-soft);color:var(--pp-warn)}
body.pp .pp-chip--no{background:var(--pp-sunk);color:var(--pp-muted)}

/* ---------- quiet footer: powered by ASP Works ---------- */
body.pp .asp-guest-foot,body.pp .pp-powered{display:flex;align-items:center;justify-content:center;
  gap:var(--asp-space-2);margin:var(--asp-space-10) 0 0;padding-top:var(--asp-space-5);
  border-top:1px solid var(--pp-line);font-size:var(--pp-text-xs);letter-spacing:.02em;text-transform:none;
  color:var(--pp-muted);font-weight:500}
body.pp .pp-powered-mark{width:16px;height:16px;display:block;opacity:.75;filter:grayscale(1)}

/* ---- ASP Works' own public pages ---- */
body.pp.pp-asp{
  /* Owner, 30 Sept: the login page must look like the rest of the platform.
     ASP Works' own public pages (login, owner login, signup, legal, errors)
     wear the signed-in app's tokens -- its typeface, canvas, ink, lines and
     teal -- instead of the guest pages' warm-paper editorial look. */
  --pp-font-display:'Public Sans',-apple-system,'Segoe UI Variable','Segoe UI',ui-sans-serif,system-ui,sans-serif;
  --pp-font-text:'Public Sans',-apple-system,'Segoe UI Variable','Segoe UI',ui-sans-serif,system-ui,sans-serif;
  --pp-paper:var(--asp-canvas);--pp-sunk:var(--asp-surface-alt);
  --pp-ink:var(--asp-ink);--pp-muted:var(--asp-muted);
  --pp-line:var(--asp-line);--pp-line-strong:var(--asp-line-strong);
  --pp-accent:var(--asp-teal-700);      /* the app's own teal */
  --pp-ink-brand:#0f1b1d;               /* the logo's near-black, used for the owner console only */
  padding:0;background:var(--pp-paper);min-height:100vh}
body.pp.pp-asp .shell{min-height:100vh;display:flex;flex-direction:column;background:transparent}

/* ---------- top bar: light, quiet, logo leads ---------- */
body.pp.pp-asp .topbar{position:static;display:flex;align-items:center;gap:var(--asp-space-3);
  width:100%;max-width:1200px;margin:0 auto;min-height:64px;padding:var(--asp-space-3) var(--asp-space-5);
  background:transparent;border:0;box-shadow:none;color:var(--pp-ink)}
@media (min-width:1025px){body.pp.pp-asp .topbar{min-height:76px;padding:var(--asp-space-4) var(--asp-space-8)}}
body.pp.pp-asp .topbar .brand{flex:0 0 auto;gap:var(--asp-space-2);order:1}
body.pp.pp-asp .topbar .brand-mark{width:30px;height:30px;flex:0 0 30px}
body.pp.pp-asp .topbar .brand-mark img{width:30px;height:30px;display:block}
body.pp.pp-asp .topbar .brand-wordmark{color:var(--pp-ink);font-family:var(--pp-font-text);font-size:var(--pp-text-md);
  font-weight:700;letter-spacing:-.02em}
body.pp.pp-asp .topbar .brand-context{display:none}
body.pp.pp-asp .topbar .nav-back{order:0;width:auto;min-height:36px!important;margin:0;padding:var(--asp-space-1) var(--asp-space-2)!important;
  border:0!important;background:transparent!important;color:var(--pp-muted)!important;box-shadow:none!important;
  font-size:var(--pp-text-sm);font-weight:500;border-radius:var(--pp-radius-sm)}
body.pp.pp-asp .topbar .nav-back:hover{color:var(--pp-ink)!important;background:var(--pp-sunk)!important}
body.pp.pp-asp .pp-topbar-aside{order:2;margin-left:auto;display:flex;align-items:center;gap:var(--asp-space-2);
  font-size:var(--pp-text-sm);color:var(--pp-muted);white-space:nowrap}
body.pp.pp-asp .pp-topbar-aside a{font-weight:600;text-decoration:none;color:var(--pp-ink);padding:var(--asp-space-2) var(--asp-space-3);
  border:1px solid var(--pp-line-strong);border-radius:var(--pp-radius-full);background:var(--pp-surface)}
body.pp.pp-asp .pp-topbar-aside a:hover{border-color:var(--pp-ink)}
body.pp.pp-asp .pp-aside-text{display:none}
@media (min-width:561px){body.pp.pp-asp .pp-aside-text{display:inline}}
body.pp.pp-asp .pp-chip--ink{background:var(--pp-ink-brand);color:var(--pp-surface)}

/* ---------- main column ---------- */
body.pp.pp-asp .main{width:100%;max-width:none;margin:0;flex:1;padding:var(--asp-space-6) var(--asp-space-4) var(--asp-space-12)}
@media (min-width:561px){body.pp.pp-asp .main{padding:var(--asp-space-10) var(--asp-space-6) var(--asp-space-16)}}

/* ---------- shared type overrides (asp-works.css sets heavier ones) ---------- */
body.pp.pp-asp h1,body.pp.pp-asp .lead,body.pp.pp-asp .pp-lead{text-wrap:balance}
body.pp.pp-asp h1{font-family:var(--pp-font-display);font-weight:500;letter-spacing:-.02em;color:var(--pp-ink)}
body.pp.pp-asp .eyebrow{font-family:var(--pp-font-text);font-size:var(--pp-text-xs);font-weight:600;letter-spacing:.14em;
  color:var(--pp-accent);margin:0 0 var(--asp-space-3)}
body.pp.pp-asp .lead{font-size:var(--pp-text-base);line-height:1.6;color:var(--pp-ink-soft);max-width:none}
body.pp.pp-asp .mini{font-size:var(--pp-text-sm)}
body.pp.pp-asp .pp-sr{position:absolute;width:1px;height:1px;padding:0;margin:0;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
body.pp.pp-asp .pp-ico{width:24px;height:24px;display:block;flex:none}
body.pp.pp-asp .pp-ico-sm{width:16px;height:16px}

/* ---------- card + form ---------- */
body.pp.pp-asp .asp-auth-card{margin:0;width:100%;max-width:none;justify-self:auto;background:var(--pp-surface);
  border:1px solid var(--pp-line);border-top:1px solid var(--pp-line);border-radius:var(--pp-radius-lg);
  box-shadow:var(--pp-shadow-card);padding:var(--asp-space-6) var(--asp-space-5)}
@media (min-width:561px){body.pp.pp-asp .asp-auth-card{padding:var(--asp-space-8) var(--asp-space-8) var(--asp-space-6)}}
body.pp.pp-asp .asp-auth-card form{margin:0}
body.pp.pp-asp .asp-auth-card form > label:first-of-type,
body.pp.pp-asp .asp-auth-card form > input[type=hidden] + label{margin-top:0}
body.pp.pp-asp .asp-auth-card h2.pp-card-title{font-size:var(--pp-text-lg);margin:0 0 var(--asp-space-1)}
body.pp.pp-asp .pp-card-sub{font-size:var(--pp-text-sm);color:var(--pp-muted);margin:0 0 var(--asp-space-2)}
body.pp.pp-asp .asp-auth-card h2.pp-card-title + form > label:first-of-type,body.pp.pp-asp .pp-card-sub + form > label:first-of-type{margin-top:var(--asp-space-5)}
body.pp.pp-asp .asp-auth-card label{margin:var(--asp-space-5) 0 var(--asp-space-2);font-size:var(--pp-text-sm);color:var(--pp-ink)}
body.pp.pp-asp .asp-auth-card input:not([type=radio]):not([type=checkbox]):not([type=hidden]){min-height:48px;margin:0;border-radius:var(--pp-radius-sm)}
body.pp.pp-asp .asp-auth-card button,body.pp.pp-asp .asp-auth-card .btn,
body.pp.pp-asp .pp-state .btn{min-height:50px;border-radius:var(--pp-radius-sm);margin-top:var(--asp-space-6);
  background:var(--pp-accent);border-color:var(--pp-accent);color:var(--pp-accent-ink);font-weight:600;
  box-shadow:0 1px 0 rgba(255,255,255,.14) inset,0 1px 2px rgba(13,92,97,.25);text-decoration:none}
body.pp.pp-asp .asp-auth-card button:hover,body.pp.pp-asp .asp-auth-card .btn:hover,body.pp.pp-asp .pp-state .btn:hover{background:var(--pp-accent-deep)}
body.pp.pp-asp input[aria-invalid=true]{border-color:var(--pp-danger)!important;box-shadow:0 0 0 4px var(--pp-danger-soft)!important}
body.pp.pp-asp .pp-field-hint{margin:var(--asp-space-2) 0 0;font-size:var(--pp-text-xs);color:var(--pp-muted);line-height:1.5}
body.pp.pp-asp .pp-field-error{display:flex;align-items:flex-start;gap:var(--asp-space-1);margin:var(--asp-space-2) 0 0;
  font-size:var(--pp-text-sm);font-weight:500;color:var(--pp-danger);line-height:1.4}
body.pp.pp-asp .pp-field-error .pp-ico{transform:translateY(1px)}
body.pp.pp-asp .pp-card-foot{margin:var(--asp-space-5) 0 0;padding-top:var(--asp-space-5);border-top:1px solid var(--pp-line);
  text-align:center;font-size:var(--pp-text-sm);color:var(--pp-muted)}
body.pp.pp-asp .pp-forgot{margin:var(--asp-space-4) 0 0;text-align:center;font-size:var(--pp-text-sm)}
body.pp.pp-asp .pp-forgot a{font-weight:600;text-decoration:none}
body.pp.pp-asp .pp-forgot + .pp-card-foot{margin-top:var(--asp-space-5)}
body.pp.pp-asp .pp-consent{margin:var(--asp-space-3) 0 0;font-size:var(--pp-text-xs);color:var(--pp-muted);text-align:center}
body.pp.pp-asp .pp-trustline{display:flex;align-items:center;justify-content:center;gap:var(--asp-space-2);
  margin:var(--asp-space-4) 0 0;font-size:var(--pp-text-xs);color:var(--pp-muted);text-align:center}
body.pp.pp-asp .pp-trustline .pp-ico{color:var(--pp-success)}

/* alerts: one shape, three tones */
body.pp.pp-asp .asp-inline-alert{display:flex;align-items:flex-start;gap:var(--asp-space-2);margin:0 0 var(--asp-space-5);
  padding:var(--asp-space-3) var(--asp-space-4);border-radius:var(--pp-radius-sm);font-size:var(--pp-text-sm);
  font-weight:500;line-height:1.45;border:1px solid var(--pp-accent-line);background:var(--pp-accent-soft);color:var(--pp-accent-deep)}
body.pp.pp-asp .asp-inline-alert .pp-ico{transform:translateY(1px)}
body.pp.pp-asp .asp-inline-alert-error,body.pp.pp-asp .pp-alert-error{background:var(--pp-danger-soft);color:var(--pp-danger);
  border-color:color-mix(in srgb,var(--pp-danger) 24%,#fff)}
body.pp.pp-asp .pp-alert-warn{background:var(--pp-warn-soft);color:var(--pp-warn);border-color:color-mix(in srgb,var(--pp-warn) 24%,#fff)}
body.pp.pp-asp .pp-alert-warn a{color:inherit;font-weight:600}

/* loading note stays hidden until asp-works-ui.js marks the form .is-submitting */
body.pp.pp-asp .loading-note{text-align:center;font-size:var(--pp-text-xs);color:var(--pp-muted)}

/* trust chips */
body.pp.pp-asp .asp-trust-list{display:flex;flex-wrap:wrap;gap:var(--asp-space-2) var(--asp-space-4);margin:var(--asp-space-5) 0 0}
body.pp.pp-asp .asp-trust-list span{display:inline-flex;align-items:center;gap:var(--asp-space-2);padding:0;border:0;
  background:none;color:var(--pp-ink-soft);font-size:var(--pp-text-sm);font-weight:500;border-radius:0}
body.pp.pp-asp .asp-trust-list span::before{content:"";width:6px;height:10px;margin:0 var(--asp-space-1) var(--asp-space-1) 0;
  border:solid var(--pp-success);border-width:0 2px 2px 0;transform:rotate(45deg);flex:none}

/* footnote (asp-works.css hides .footer-note; the proposal shows a single calm line) */
body.pp.pp-asp .footer-note.pp-footnote{display:flex;align-items:center;justify-content:center;gap:var(--asp-space-2);
  margin:var(--asp-space-8) auto 0;font-size:var(--pp-text-xs);color:var(--pp-muted);text-align:center}

/* ---------- layout: pp-auth (one centred column) ---------- */
body.pp.pp-auth .asp-auth-layout{display:block;min-height:0;max-width:440px;margin:0 auto;padding:0}
@media (min-width:561px){body.pp.pp-auth .asp-auth-layout{padding-top:var(--asp-space-6)}}
body.pp.pp-auth .asp-auth-intro{background:none;box-shadow:none;border-radius:0;padding:0;margin:0 0 var(--asp-space-8);
  color:var(--pp-ink);text-align:center;overflow:visible}
body.pp.pp-auth .asp-auth-intro::after,body.pp.pp-split .asp-auth-intro::after{display:none}
body.pp.pp-auth .asp-auth-intro h1{font-size:var(--pp-text-2xl);line-height:1.1;margin:0 0 var(--asp-space-3);color:var(--pp-ink)}
@media (min-width:561px){body.pp.pp-auth .asp-auth-intro h1{font-size:40px}}
body.pp.pp-auth .asp-auth-intro .lead{color:var(--pp-ink-soft)}
body.pp.pp-auth .asp-auth-intro .eyebrow{color:var(--pp-accent)}
body.pp.pp-auth .asp-trust-list{justify-content:center}
body.pp.pp-auth .pp-label-row{display:flex;align-items:baseline;justify-content:space-between}

/* owner console: same page, ink accent so staff know where they are */
body.pp.page-owner-sign-in .asp-auth-card{border-top:3px solid var(--pp-ink-brand)}
body.pp.page-owner-sign-in .asp-auth-card button{background:var(--pp-ink-brand);border-color:var(--pp-ink-brand)}
body.pp.page-owner-sign-in .asp-auth-intro .eyebrow{color:var(--pp-ink-soft)}

/* ---------- layout: pp-state (link used / expired / not found / 404 / 500) ---------- */
body.pp.pp-asp .pp-state{max-width:480px;margin:0 auto;padding-top:var(--asp-space-4)}
@media (min-width:561px){body.pp.pp-asp .pp-state{padding-top:var(--asp-space-10)}}
body.pp.pp-asp .pp-state-card{background:var(--pp-surface);border:1px solid var(--pp-line);border-radius:var(--pp-radius-lg);
  box-shadow:var(--pp-shadow-card);padding:var(--asp-space-8) var(--asp-space-5) var(--asp-space-6);text-align:center}
@media (min-width:561px){body.pp.pp-asp .pp-state-card{padding:var(--asp-space-12) var(--asp-space-10) var(--asp-space-8)}}
body.pp.pp-asp .pp-state-icon{display:flex;align-items:center;justify-content:center;width:56px;height:56px;
  margin:0 auto var(--asp-space-5);border-radius:var(--pp-radius-md);background:var(--pp-accent-soft);color:var(--pp-accent)}
body.pp.pp-asp .pp-state-icon .pp-ico{width:28px;height:28px}
body.pp.pp-asp .pp-state-icon--warn{background:var(--pp-warn-soft);color:var(--pp-warn)}
body.pp.pp-asp .pp-state-icon--ok{background:var(--pp-success-soft);color:var(--pp-success)}
body.pp.pp-asp .pp-state h1{font-size:28px;line-height:1.15;margin:0 0 var(--asp-space-3)}
@media (min-width:561px){body.pp.pp-asp .pp-state h1{font-size:var(--pp-text-2xl)}}
body.pp.pp-asp .pp-state .pp-lead{font-size:var(--pp-text-base);color:var(--pp-ink-soft);margin:0 0 var(--asp-space-3)}
body.pp.pp-asp .pp-state .mini{margin:0}
body.pp.pp-asp .pp-actions{display:flex;flex-direction:column;gap:var(--asp-space-3);margin-top:var(--asp-space-6)}
body.pp.pp-asp .pp-actions .btn,body.pp.pp-asp .pp-actions .pp-btn{margin:0;min-height:50px;border-radius:var(--pp-radius-sm)}
body.pp.pp-asp .pp-btn--quiet{display:flex;align-items:center;justify-content:center;background:var(--pp-surface);
  color:var(--pp-ink);border:1px solid var(--pp-line-strong);font-weight:600;text-decoration:none;box-shadow:none}
body.pp.pp-asp .pp-btn--quiet:hover{border-color:var(--pp-ink);background:var(--pp-surface)}
body.pp.pp-asp .pp-state-help{margin:var(--asp-space-6) 0 0;padding-top:var(--asp-space-5);border-top:1px solid var(--pp-line);
  font-size:var(--pp-text-sm);color:var(--pp-muted)}
body.pp.pp-asp .pp-path{display:flex;align-items:center;justify-content:center;flex-wrap:wrap;gap:var(--asp-space-2);
  margin:var(--asp-space-5) 0 0;padding:var(--asp-space-3) var(--asp-space-4);background:var(--pp-sunk);
  border:1px solid var(--pp-line);border-radius:var(--pp-radius-sm);font-size:var(--pp-text-xs);color:var(--pp-muted)}
body.pp.pp-asp .pp-path code{font-family:ui-monospace,'SF Mono',Consolas,monospace;font-size:var(--pp-text-sm);color:var(--pp-ink);word-break:break-all}
body.pp.pp-asp .pp-help{list-style:none;margin:var(--asp-space-6) 0 0;padding:var(--asp-space-5) 0 0;border-top:1px solid var(--pp-line);
  display:grid;gap:var(--asp-space-4);text-align:left}
body.pp.pp-asp .pp-help li{display:grid;gap:var(--asp-space-1);font-size:var(--pp-text-sm);color:var(--pp-muted)}
body.pp.pp-asp .pp-help b{color:var(--pp-ink);font-weight:600}

/* ---------- layout: pp-split (signup, pay link) ---------- */
body.pp.pp-split .asp-auth-layout{display:grid;grid-template-columns:1fr;gap:var(--asp-space-8);min-height:0;
  max-width:1120px;margin:0 auto;padding:0;align-items:start}
@media (min-width:1025px){body.pp.pp-split .asp-auth-layout{grid-template-columns:minmax(0,1fr) 480px;gap:var(--asp-space-16);
  padding-top:var(--asp-space-8)}}
body.pp.pp-split .asp-auth-intro{background:none;box-shadow:none;border-radius:0;padding:0;color:var(--pp-ink);overflow:visible}
@media (min-width:1025px){body.pp.pp-split .asp-auth-intro{padding-top:var(--asp-space-4);position:sticky;top:var(--asp-space-8)}}
body.pp.pp-split .asp-auth-intro h1{font-size:var(--pp-text-2xl);line-height:1.08;margin:var(--asp-space-5) 0 var(--asp-space-4);color:var(--pp-ink)}
@media (min-width:561px){body.pp.pp-split .asp-auth-intro h1{font-size:52px}}
body.pp.pp-split .asp-auth-intro .lead{font-size:var(--pp-text-base);max-width:520px}
@media (min-width:561px){body.pp.pp-split .asp-auth-intro .lead{font-size:var(--pp-text-md)}}
body.pp.pp-split .asp-auth-intro .eyebrow{color:var(--pp-accent)}

/* signup progress */
body.pp.pp-split .asp-step-indicator{display:flex;align-items:center;gap:var(--asp-space-3);margin:0}
body.pp.pp-split .asp-step{display:inline-flex;align-items:center;gap:var(--asp-space-2);font-size:var(--pp-text-sm);
  font-weight:600;color:var(--pp-muted);background:none;padding:0;border:0}
body.pp.pp-split .asp-step-num{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;
  border-radius:var(--pp-radius-full);border:1.5px solid var(--pp-line-strong);background:var(--pp-surface);
  color:var(--pp-muted);font-size:var(--pp-text-xs);font-weight:700}
body.pp.pp-split .asp-step-label{display:inline;color:inherit}
body.pp.pp-split .asp-step.is-current{color:var(--pp-ink)}
body.pp.pp-split .asp-step.is-current .asp-step-num{background:var(--pp-accent);border-color:var(--pp-accent);color:#fff}
body.pp.pp-split .asp-step.is-done{color:var(--pp-ink-soft)}
body.pp.pp-split .asp-step.is-done .asp-step-num{background:var(--pp-accent-soft);border-color:var(--pp-accent-line);color:var(--pp-accent)}
body.pp.pp-split .asp-step-connector{width:40px;height:1.5px;background:var(--pp-line-strong);border:0;margin:0}

/* what happens next */
body.pp.pp-split .pp-next{list-style:none;counter-reset:n;margin:var(--asp-space-8) 0 0;padding:0;display:none;
  gap:var(--asp-space-5);max-width:520px}
@media (min-width:1025px){body.pp.pp-split .pp-next{display:grid}}
body.pp.pp-split .pp-next li{counter-increment:n;display:grid;grid-template-columns:32px 1fr;column-gap:var(--asp-space-3);
  row-gap:0;font-size:var(--pp-text-sm);color:var(--pp-muted)}
body.pp.pp-split .pp-next li::before{content:counter(n);grid-row:span 2;display:flex;align-items:center;justify-content:center;
  width:32px;height:32px;border-radius:var(--pp-radius-sm);background:var(--pp-surface);border:1px solid var(--pp-line);
  color:var(--pp-ink);font-family:var(--pp-font-display);font-size:var(--pp-text-base)}
body.pp.pp-split .pp-next b{color:var(--pp-ink);font-size:var(--pp-text-base);font-weight:600}
body.pp.pp-split .asp-trust-list{margin-top:var(--asp-space-6)}
@media (min-width:1025px){body.pp.pp-split .asp-trust-list{margin-top:var(--asp-space-8);padding-top:var(--asp-space-6);
  border-top:1px solid var(--pp-line);max-width:520px}}

/* step 2: each hotel is one tidy row - name and rooms side by side under a ruled heading */
body.pp.pp-split fieldset.pp-hotel{display:grid;grid-template-columns:minmax(0,1fr) 104px;column-gap:var(--asp-space-3);
  margin:var(--asp-space-6) 0 0;padding:var(--asp-space-3) 0 0;border:0;border-top:1px solid var(--pp-line);background:none;min-width:0}
body.pp.pp-split fieldset.pp-hotel legend{padding:0 var(--asp-space-3) 0 0;margin:0;font-size:var(--pp-text-xs);font-weight:600;
  letter-spacing:.12em;text-transform:uppercase;color:var(--pp-muted)}
body.pp.pp-split fieldset.pp-hotel label{margin:var(--asp-space-2) 0 var(--asp-space-2);font-size:var(--pp-text-sm);grid-row:1;grid-column:1}
body.pp.pp-split fieldset.pp-hotel label[for*=rooms]{grid-column:2}
body.pp.pp-split fieldset.pp-hotel input{grid-row:2;grid-column:1}
body.pp.pp-split fieldset.pp-hotel input[name^=prop_rooms]{grid-column:2}
body.pp.pp-split fieldset.pp-hotel .pp-field-error{grid-column:1 / -1;grid-row:3}
body.pp.pp-split .asp-auth-card h2.pp-card-title + form fieldset.pp-hotel:first-of-type{margin-top:var(--asp-space-5)}

/* plan choice: three cards instead of a dropdown */
body.pp.pp-split fieldset.pp-plans{margin:var(--asp-space-6) 0 0;padding:0;border:0;background:none}
body.pp.pp-split fieldset.pp-plans legend{padding:0;margin:0 0 var(--asp-space-2);font-size:var(--pp-text-sm);font-weight:600;color:var(--pp-ink)}
body.pp.pp-split .pp-plan-grid{display:grid;grid-template-columns:1fr;gap:var(--asp-space-2)}
body.pp.pp-split label.pp-plan{position:relative;display:grid;grid-template-columns:1fr auto;align-items:center;column-gap:var(--asp-space-3);
  margin:0;padding:var(--asp-space-3) var(--asp-space-4) var(--asp-space-3) 48px;border:1px solid var(--pp-line-strong);
  border-radius:var(--pp-radius-md);background:var(--pp-surface);cursor:pointer;font-weight:400}
body.pp.pp-split label.pp-plan input{position:absolute;left:var(--asp-space-4);top:calc(50% - 9px);width:18px;height:18px;min-height:0;padding:0;margin:0;
  accent-color:var(--pp-accent)}
body.pp.pp-split label.pp-plan:has(input:checked){border-color:var(--pp-accent);box-shadow:0 0 0 3px var(--pp-accent-soft);
  background:color-mix(in srgb,var(--pp-accent) 3%,#fff)}
body.pp.pp-split .pp-plan-top{display:flex;align-items:center;gap:var(--asp-space-2);font-size:var(--pp-text-base);color:var(--pp-ink)}
body.pp.pp-split .pp-plan-top .pp-chip{white-space:nowrap;padding:0 var(--asp-space-2)}
body.pp.pp-split .pp-plan-top b{font-weight:600}
body.pp.pp-split .pp-plan-sub{grid-row:2;font-size:var(--pp-text-xs);color:var(--pp-muted)}
body.pp.pp-split .pp-plan-price{grid-column:2;grid-row:1 / span 2;font-size:var(--pp-text-xs);color:var(--pp-muted);text-align:right}
body.pp.pp-split .pp-plan-price b{font-family:var(--pp-font-display);font-size:var(--pp-text-lg);font-weight:500;color:var(--pp-ink)}
body.pp.pp-split .pp-plans .pp-field-hint{margin-top:var(--asp-space-2)}

/* pay link summary */
body.pp.pp-split .asp-auth-intro .pp-summary{max-width:440px;background:var(--pp-surface);margin:var(--asp-space-6) 0 0}
body.pp.pp-split .pp-summary-total b{font-family:var(--pp-font-display);font-size:var(--pp-text-xl);font-weight:500}
body.pp.pp-split .pp-summary-total small{font-family:var(--pp-font-text);font-size:var(--pp-text-sm);color:var(--pp-muted);font-weight:400}

/* ---------- layout: pp-legal ---------- */
body.pp.pp-legal .asp-legal-wrap{max-width:1080px;margin:0 auto}
body.pp.pp-legal .asp-legal-hero{padding:var(--asp-space-4) 0 var(--asp-space-8);border-bottom:1px solid var(--pp-line);margin:0 0 var(--asp-space-8)}
@media (min-width:1025px){body.pp.pp-legal .asp-legal-hero{padding:var(--asp-space-8) 0 var(--asp-space-10)}}
body.pp.pp-legal .asp-legal-hero h1{font-size:var(--pp-text-3xl);line-height:1.05;margin:0 0 var(--asp-space-3)}
@media (min-width:1025px){body.pp.pp-legal .asp-legal-hero h1{font-size:60px}}
body.pp.pp-legal .asp-legal-meta{font-size:var(--pp-text-sm);color:var(--pp-muted);margin:0}
body.pp.pp-legal .pp-legal-body{display:grid;grid-template-columns:1fr;gap:var(--asp-space-6)}
@media (min-width:1025px){body.pp.pp-legal .pp-legal-body{grid-template-columns:240px minmax(0,1fr);column-gap:var(--asp-space-16);align-items:start}
  body.pp.pp-legal .pp-toc{grid-row:1 / span 2;position:sticky;top:var(--asp-space-6)}}
body.pp.pp-legal .pp-toc-box{background:var(--pp-surface);border:1px solid var(--pp-line);border-radius:var(--pp-radius-md);padding:var(--asp-space-3) var(--asp-space-4)}
@media (min-width:1025px){body.pp.pp-legal .pp-toc-box{background:none;border:0;padding:0}}
body.pp.pp-legal .pp-toc summary{list-style:none}
body.pp.pp-legal .pp-toc summary::-webkit-details-marker{display:none}
body.pp.pp-legal .pp-toc summary{font-size:var(--pp-text-xs);font-weight:600;letter-spacing:.14em;text-transform:uppercase;color:var(--pp-muted);cursor:pointer}
body.pp.pp-legal .pp-toc ol{list-style:none;margin:var(--asp-space-3) 0 0;padding:0;display:grid;gap:var(--asp-space-1)}
body.pp.pp-legal .pp-toc ol a{display:block;padding:var(--asp-space-1) var(--asp-space-3);border-left:2px solid var(--pp-line);
  font-size:var(--pp-text-sm);color:var(--pp-ink-soft);text-decoration:none;line-height:1.4}
body.pp.pp-legal .pp-toc ol li:first-child a{border-left-color:var(--pp-accent);color:var(--pp-ink);font-weight:600}
body.pp.pp-legal .pp-toc-other{margin:var(--asp-space-5) 0 0;font-size:var(--pp-text-sm);color:var(--pp-muted)}
body.pp.pp-legal .asp-legal-card{margin:0;padding:0;border:0;background:none;max-width:680px}
body.pp.pp-legal .asp-legal-callout{margin:0 0 var(--asp-space-8);padding:var(--asp-space-5);border:0;border-radius:var(--pp-radius-md);
  background:var(--pp-surface);box-shadow:inset 0 0 0 1px var(--pp-line);font-size:var(--pp-text-md);line-height:1.55;color:var(--pp-ink)}
body.pp.pp-legal .asp-legal-card h2{display:flex;gap:var(--asp-space-3);align-items:baseline;font-size:var(--pp-text-lg);
  margin:var(--asp-space-10) 0 var(--asp-space-3);scroll-margin-top:var(--asp-space-6)}
body.pp.pp-legal .pp-num{font-family:var(--pp-font-text);font-size:var(--pp-text-sm);font-weight:600;color:var(--pp-accent);min-width:20px}
body.pp.pp-legal .asp-legal-card p,body.pp.pp-legal .asp-legal-card li{font-size:var(--pp-text-base);line-height:1.75;color:var(--pp-ink-soft)}
body.pp.pp-legal .pp-legal-end{display:grid;gap:var(--asp-space-1);max-width:680px;margin:var(--asp-space-10) 0 0;padding:var(--asp-space-5);
  background:var(--pp-surface);border:1px solid var(--pp-line);border-radius:var(--pp-radius-md);font-size:var(--pp-text-sm);color:var(--pp-muted)}
@media (min-width:1025px){body.pp.pp-legal .pp-legal-end{grid-column:2}}
body.pp.pp-legal .pp-legal-end b{color:var(--pp-ink);font-weight:600;font-size:var(--pp-text-base)}

/* ---------- footer: one quiet band instead of a second homepage ---------- */
body.pp.pp-asp .asp-site-footer{margin-top:auto;background:transparent;border-top:1px solid var(--pp-line);color:var(--pp-muted);content-visibility:visible}
body.pp.pp-asp .asp-footer-inner{max-width:1200px;width:100%;margin:0 auto;padding:var(--asp-space-6) var(--asp-space-5)}
@media (min-width:1025px){body.pp.pp-asp .asp-footer-inner{padding:var(--asp-space-6) var(--asp-space-8)}}
body.pp.pp-asp .asp-footer-top{display:flex;flex-direction:column;gap:var(--asp-space-4)}
@media (min-width:561px){body.pp.pp-asp .asp-footer-top{flex-direction:row;align-items:center;justify-content:space-between}}
body.pp.pp-asp .asp-footer-brand p,body.pp.pp-asp .asp-footer-contact,body.pp.pp-asp .asp-footer-col h3{display:none}
body.pp.pp-asp .asp-footer-brandline{min-height:0;gap:var(--asp-space-2)}
body.pp.pp-asp .asp-footer-brandline img{width:22px;height:22px;filter:grayscale(1);opacity:.7}
body.pp.pp-asp .asp-footer-wordmark{font-family:var(--pp-font-text);font-size:var(--pp-text-sm);font-weight:600;color:var(--pp-ink-soft);letter-spacing:0}
/* the three columns repeat Terms/Privacy three times - show each link once */
body.pp.pp-asp .asp-footer-cols{display:flex;flex-wrap:wrap;gap:var(--asp-space-2) var(--asp-space-5);margin:0}
body.pp.pp-asp .asp-footer-col{display:contents}
body.pp.pp-asp .asp-footer-col:nth-child(1),body.pp.pp-asp .asp-footer-col:nth-child(2){display:none}
body.pp.pp-asp .asp-footer-col a{font-size:var(--pp-text-sm);color:var(--pp-muted);text-decoration:none;padding:0;margin:0}
body.pp.pp-asp .asp-footer-col a:hover{color:var(--pp-ink)}
body.pp.pp-asp .asp-footer-bottom{margin:var(--asp-space-4) 0 0;padding:var(--asp-space-4) 0 0;border-top:1px solid var(--pp-line);
  font-size:var(--pp-text-xs);color:var(--pp-muted);flex-direction:row;align-items:center}
body.pp.pp-asp .asp-footer-legal{display:none}

/* App-matched headings on ASP Works' own pages: the app sets its headings in
   Public Sans at a firm weight, not a light display serif. */
body.pp.pp-asp h1,body.pp.pp-asp h2,body.pp.pp-asp h3{font-family:var(--pp-font-text);font-weight:700;letter-spacing:-.01em}

/* RC9.4.0 Lost & Found, calm */
.asp-lf-now{display:grid;gap:var(--asp-space-3);margin:0 0 var(--asp-space-4);padding:var(--asp-space-4) var(--asp-space-5);background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);box-shadow:var(--asp-shadow-sm)}
.asp-lf-steps{display:flex;margin:0;padding:0;list-style:none;counter-reset:lf}
.asp-lf-steps li{position:relative;flex:1 1 0;display:grid;justify-items:center;gap:var(--asp-space-2);min-width:0;font-size:var(--asp-text-xs);font-weight:600;color:var(--asp-muted);text-align:center}
.asp-lf-steps li::before{content:"";position:absolute;top:7px;left:calc(-50% + 9px);right:calc(50% + 9px);height:2px;background:var(--asp-line)}
.asp-lf-steps li:first-child::before{display:none}
.asp-lf-steps li.is-done::before,.asp-lf-steps li.is-now::before{background:var(--asp-teal-600)}
.asp-lf-dot{position:relative;z-index:1;width:16px;height:16px;border-radius:50%;background:var(--asp-surface);border:2px solid var(--asp-line-strong)}
.asp-lf-steps li.is-done .asp-lf-dot{background:var(--asp-teal-600);border-color:var(--asp-teal-600)}
.asp-lf-steps li.is-now .asp-lf-dot{border-color:var(--asp-teal-600);box-shadow:0 0 0 4px var(--asp-teal-glow)}
.asp-lf-steps li.is-now{color:var(--asp-ink);font-weight:700}
.asp-lf-next{margin:0;font-size:var(--asp-text-lg);font-weight:600;line-height:1.45;color:var(--asp-ink);text-wrap:balance}
.asp-lf-more{display:grid;margin:var(--asp-space-4) 0;background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);overflow:hidden}
.asp-lf-fold{border-top:1px solid var(--asp-line)}
.asp-lf-fold:first-child{border-top:0}
.asp-lf-fold>summary{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3);min-height:52px;padding:var(--asp-space-3) var(--asp-space-5);cursor:pointer;list-style:none;font-weight:700;color:var(--asp-ink)}
.asp-lf-fold>summary::-webkit-details-marker{display:none}
.asp-lf-fold>summary::after{content:"";flex:0 0 auto;width:8px;height:8px;margin-left:var(--asp-space-2);border-right:2px solid var(--asp-muted);border-bottom:2px solid var(--asp-muted);transform:rotate(45deg);transition:transform var(--asp-motion-fast) ease}
.asp-lf-fold[open]>summary::after{transform:rotate(-135deg)}
.asp-lf-fold>summary:hover{background:var(--asp-surface-soft)}
.asp-lf-fold-title{flex:1 1 auto}
.asp-lf-fold-note{font-size:var(--asp-text-sm);font-weight:500;color:var(--asp-muted)}
.asp-lf-fold-body{padding:0 var(--asp-space-5) var(--asp-space-5)}
.asp-lf-fold-body>.card{margin:0;padding:0;background:transparent;border:0;box-shadow:none}
.asp-lf-fold-body>.card>h2:first-child,.asp-lf-fold-body>.card>h3:first-child{display:none}
.asp-lf-fold-body .qr-box{margin:0}
.asp-lf-rare{align-self:center}
.asp-lf-rare>summary{display:inline-flex;align-items:center;min-height:44px;padding:0 var(--asp-space-3);cursor:pointer;list-style:none;font-weight:600;color:var(--asp-muted);border-radius:var(--asp-radius-md)}
.asp-lf-rare>summary::-webkit-details-marker{display:none}
.asp-lf-rare>summary::after{content:"";width:6px;height:6px;margin-left:var(--asp-space-2);border-right:2px solid currentColor;border-bottom:2px solid currentColor;transform:rotate(45deg)}
.asp-lf-rare>summary:hover{color:var(--asp-ink);background:var(--asp-surface-soft)}
.asp-lf-rare[open]{flex-basis:100%}
.asp-lf-rare-body{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--asp-space-3);margin-top:var(--asp-space-3);padding:var(--asp-space-4);background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}
.asp-lf-rare-body form{margin:0}
@media (max-width:560px){.asp-lf-now{padding:var(--asp-space-4)}.asp-lf-steps li{font-size:11px}.asp-lf-fold>summary{padding:var(--asp-space-3) var(--asp-space-4)}.asp-lf-fold-body{padding:0 var(--asp-space-4) var(--asp-space-4)}}

/* === RC9.4.3 COMPACT MAINTENANCE SCHEDULER === */
/* The scheduler stays open as drawn.  Only its wide-screen shape changes;
   the precise action suffix limits these rules to this one operational form. */
@media(min-width:1025px){
  form[action$='/generate-room-inspections']{display:grid;grid-template-columns:minmax(220px,1.35fr) minmax(150px,.65fr) auto;
    column-gap:var(--asp-space-3);row-gap:var(--asp-space-2);align-items:end;margin-top:var(--asp-space-5)}
  form[action$='/generate-room-inspections']>label{margin:0;align-self:end}
  form[action$='/generate-room-inspections']>label:first-of-type{grid-column:1;grid-row:1}
  form[action$='/generate-room-inspections']>select[name='room_type_id']{grid-column:1;grid-row:2;margin:0}
  form[action$='/generate-room-inspections']>label:nth-of-type(2){grid-column:2;grid-row:1}
  form[action$='/generate-room-inspections']>input[name='frequency_days']{grid-column:2;grid-row:2;margin:0}
  form[action$='/generate-room-inspections']>button[type='submit']{grid-column:3;grid-row:2;margin:0;white-space:nowrap}
}

/* === RC9.4.5 NATURAL CATALOGUE CARD HEIGHTS === */
/* A combined department can be taller than its neighbour.  At wide desktop
   sizes balanced columns remove empty grid rows while every card stays whole.
   Tablet and phone layouts keep the established responsive grid. */
@media(min-width:1025px){
  .asp-catalog-picker{display:block;column-count:2;column-gap:var(--asp-space-4)}
  .asp-catalog-section{display:inline-block;width:100%;height:auto;margin:0 0 var(--asp-space-4);break-inside:avoid}
  .asp-catalog-submit{column-span:all}
}

/* === RC9.4.9 ACTIVE CATALOGUE NAME LINKS === */
.asp-catalog-picker .asp-catalog-active>span,
.asp-catalog-picker .asp-catalog-active>small{grid-column:1}
.asp-catalog-open{display:inline-flex;align-items:center;min-height:24px;color:var(--asp-navy-900);text-decoration:none;text-underline-offset:3px}
.asp-catalog-open:hover{text-decoration:underline}
.asp-catalog-open:focus-visible{border-radius:var(--asp-radius-sm);outline:3px solid var(--asp-teal-600);outline-offset:3px}

/* === RC9.5.0 CATALOGUE AUDIENCE LINES === */
.asp-catalog-picker .asp-catalog-audience{margin:-4px 0 var(--asp-space-3) var(--asp-space-8);color:var(--asp-muted);font-size:12px;font-weight:500;line-height:1.45}
.asp-catalog-picker .asp-catalog-audience>span{color:var(--asp-navy-700);font-weight:750}


/* RC9.5.4 dashboard truth and header contrast */
.asp-ledger-prov{display:grid;gap:var(--asp-space-2);margin:0 0 var(--asp-space-6);
  padding:var(--asp-space-3) var(--asp-space-4);border:1px solid var(--asp-bronze-border);
  border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.asp-ledger-prov .asp-dash-absent,.asp-ledger-prov .asp-audit-check{
  margin:0;font-size:var(--asp-text-xs);line-height:1.5}
@media(min-width:561px){
  .asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-hotel-indicator{
    min-height:var(--asp-space-10);padding:0 var(--asp-space-3);border:1px solid var(--asp-line);
    border-radius:var(--asp-radius-full);background:var(--asp-surface);color:var(--asp-ink)}
}


/* RC9.5.5 polished file pickers */
.asp-file-picker{position:relative;display:flex;align-items:center;gap:var(--asp-space-3);
  width:100%;min-height:72px;margin:var(--asp-space-1) 0 var(--asp-space-3);
  padding:var(--asp-space-3);border:1px dashed var(--asp-line-strong);
  border-radius:var(--asp-radius-md);background:var(--asp-surface-soft);
  transition:border-color var(--asp-motion-fast) ease,background var(--asp-motion-fast) ease,box-shadow var(--asp-motion-fast) ease}
.asp-file-picker:hover,.asp-file-picker.is-dragging{border-color:var(--asp-teal-600);background:var(--asp-teal-100)}
.asp-file-picker.is-focused{border-color:var(--asp-teal-700);box-shadow:0 0 0 3px var(--asp-teal-100)}
.asp-file-picker.has-file{border-style:solid;border-color:var(--asp-teal-600);background:var(--asp-surface)}
.asp-file-trigger.btn{flex:0 0 auto;margin:0;box-shadow:none}
.asp-file-status{min-width:0;overflow:hidden;color:var(--asp-muted);font-size:var(--asp-text-sm);
  font-weight:650;line-height:1.45;text-overflow:ellipsis;white-space:nowrap}
.asp-file-picker.has-file .asp-file-status{color:var(--asp-ink)}
.asp-file-native{position:absolute!important;width:1px!important;height:1px!important;
  min-width:1px!important;min-height:1px!important;margin:0!important;padding:0!important;
  border:0!important;opacity:0!important;overflow:hidden!important;
  pointer-events:none!important}
@media(max-width:560px){
  .asp-file-picker{align-items:stretch;flex-direction:column}
  .asp-file-trigger.btn{width:100%}
  .asp-file-status{text-align:center;white-space:normal}
}


/* RC9.5.6 compact authenticated mobile footer */
@media(max-width:560px){
  .role-customer .asp-footer-top,.role-owner .asp-footer-top{display:none}
  .role-customer .asp-site-footer,.role-owner .asp-site-footer{margin-top:var(--asp-space-4)}
  .role-customer .asp-footer-inner,.role-owner .asp-footer-inner{
    padding:var(--asp-space-4) var(--asp-space-4)
      calc(80px + env(safe-area-inset-bottom,0px))}
  .role-customer .asp-footer-bottom,.role-owner .asp-footer-bottom{
    align-items:center;justify-content:space-between;flex-direction:row;
    flex-wrap:wrap;gap:var(--asp-space-2) var(--asp-space-4)}
}


/* RC9.5.7 progressive hiring questions */
.asp-hiring-questions{display:grid;gap:var(--asp-space-3);margin:var(--asp-space-3) 0 var(--asp-space-5)}
.asp-hiring-question{display:grid;gap:var(--asp-space-1)}
.asp-hiring-question[hidden]{display:none!important}
.asp-hiring-question-label{margin:0;color:var(--asp-ink);font-size:var(--asp-text-xs);font-weight:750}
.asp-hiring-question>input{margin:0}
.asp-hiring-question-add.btn{justify-self:start;width:auto;margin:0;box-shadow:none}
@media(max-width:560px){.asp-hiring-question-add.btn{justify-self:stretch;width:100%}}


/* RC9.5.8 stable authenticated mobile footer */
@media(max-width:560px){
  .role-customer .asp-site-footer,.role-owner .asp-site-footer{
    content-visibility:visible;contain-intrinsic-size:none}
}


/* RC9.5.9 progressive mobile line items */
@media(max-width:768px){
  .asp-line-items tr.asp-li-sum.asp-li-pending{display:none}
}


/* RC9.6.0 calm invoice optional connections */
.asp-invoice-connections{margin:var(--asp-space-4) 0}
.asp-invoice-connections-body{display:grid;gap:var(--asp-space-3)}
.asp-invoice-connections-body>p{margin:0}
.asp-invoice-connection-list{display:grid;gap:0;margin:0;padding:0;list-style:none}
.asp-invoice-connection-list>li{display:grid;gap:var(--asp-space-1);padding:var(--asp-space-3) 0;border-top:1px solid var(--asp-line)}
.asp-invoice-connection-list>li:first-child{padding-top:0;border-top:0}
.asp-invoice-connection-list strong{color:var(--asp-ink);font-size:var(--asp-text-sm);font-weight:700}
.asp-invoice-connection-list span{color:var(--asp-muted);font-size:var(--asp-text-xs);line-height:1.5}


/* RC9.6.1 financial setup starts with the file */
.asp-finance-start>p{max-width:70ch}
.asp-finance-start>.btn{margin-right:var(--asp-space-2)}
.asp-finance-alternatives-body{display:grid;gap:var(--asp-space-5)}
.asp-finance-alternative+.asp-finance-alternative{padding-top:var(--asp-space-5);border-top:1px solid var(--asp-line)}
.asp-finance-alternative>h2{margin-top:0}
.asp-finance-alternatives-body>.mini{margin:0}
.asp-finance-recommended-action{display:grid;gap:var(--asp-space-1);align-items:start}
.asp-finance-recommended-action>span{max-width:30ch;color:var(--asp-muted);font-size:var(--asp-text-xs);line-height:1.5}
.asp-studio-hero>.asp-coa-tools{flex-basis:100%;margin:0}
.asp-coa-tools-body{display:flex;flex-wrap:wrap;gap:var(--asp-space-2)}
.asp-coa-tools-body>.btn{margin:0}
@media(max-width:560px){
  .asp-finance-start>.btn{width:100%;margin-right:0}
  .asp-finance-recommended-action{width:100%}
  .asp-finance-recommended-action>.btn{width:100%}
  .asp-coa-tools-body{display:grid}
  .asp-coa-tools-body>.btn{width:100%}
}


/* RC9.6.2 empty systems start with the real work */
.asp-system-recommended-action{display:grid;gap:var(--asp-space-1);align-items:start}
.asp-system-recommended-action>span{max-width:34ch;color:var(--asp-muted);font-size:var(--asp-text-xs);line-height:1.5}
.asp-studio-hero>.asp-system-start-alternatives{flex-basis:100%;margin:0}
.asp-system-start-tools{display:flex;flex-wrap:wrap;gap:var(--asp-space-2)}
.asp-system-start-tools>.btn{margin:0}
@media(max-width:560px){
  .asp-system-recommended-action{width:100%}
  .asp-system-recommended-action>.btn{width:100%}
  .asp-system-start-tools{display:grid}
  .asp-system-start-tools>.btn{width:100%}
}

/* RC9.8.8 number headings */
.asp-rc646-figures th.num{text-align:right}


/* === RC10.3.5 ROUND B3 === */

/* F-BR08: the fields on the sign-in and public pages show where the keyboard is */
body.pp input:focus-visible,body.pp select:focus-visible,body.pp textarea:focus-visible{
  outline:3px solid var(--pp-ink,var(--asp-navy-900));outline-offset:2px}

/* F-BR10: a focused control is never left under the phone's fixed bottom bar */
@media(max-width:560px){
  html{scroll-padding-bottom:calc(var(--asp-space-16) + var(--asp-space-6) + env(safe-area-inset-bottom,0px))}
}

/* F-BR12: a hiring pipeline row wraps rather than squeezing the applicant's name */
.asp-owner-list-row:has(form[action$='/stage']){flex-wrap:wrap}
.asp-owner-list-row:has(form[action$='/stage'])>div:first-child{flex:1 1 220px;min-width:0}
.asp-owner-list-row:has(form[action$='/stage']) .asp-invite-row-action{flex:0 1 auto;width:auto;flex-wrap:wrap}
.asp-owner-list-row:has(form[action$='/stage']) .asp-invite-row-action .secondary{width:auto}
.asp-owner-list-row:has(form[action$='/stage']) select{min-width:0;max-width:100%}

/* F-BR11: long codes break, wide tables scroll inside their own box, never the page */
main code{overflow-wrap:anywhere;word-break:break-all}
@media(max-width:560px){
  main .card:has(>table),main .section:has(>.card>table){overflow-x:auto}
  main .card>table th{white-space:normal}
}

/* F-BR07: the guest email preview, without inline styles */
.asp-rc716-frame{color:var(--asp-ink);line-height:1.6}
.asp-rc716-frame table{border-collapse:collapse}
.asp-rc716-frame td,.asp-rc716-frame th{padding:var(--asp-space-2) var(--asp-space-3);text-align:left}
.asp-rc716-frame h1{margin:var(--asp-space-4) 0 var(--asp-space-3);font-size:var(--asp-text-2xl);line-height:1.2}
.asp-rc716-frame a.asp-rc716-button{display:inline-block;padding:var(--asp-space-4) var(--asp-space-8);
  border-radius:var(--asp-radius-sm);background:var(--asp-teal-800);color:var(--asp-surface);font-weight:700;
  text-decoration:none}
.asp-rc716-frame a.asp-rc716-button:focus-visible{outline:3px solid var(--asp-navy-900);outline-offset:2px}

/* Hotel settings and the dead-button note */
.asp-rc1035-readonly{margin:var(--asp-space-3) 0}
.asp-rc1035-spaced{margin-top:var(--asp-space-4)}
.asp-rc1035-section{margin:0 0 var(--asp-space-4)}
.asp-rc1035-section>summary{cursor:pointer;font-weight:800;font-size:var(--asp-text-md);padding:var(--asp-space-3) var(--asp-space-4);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);min-height:44px;box-sizing:border-box}
.asp-rc1035-section[open]>summary{border-bottom-left-radius:0;border-bottom-right-radius:0}
.asp-rc1035-section>.card,.asp-rc1035-section>div>.card{margin-top:0;border-top-left-radius:0;border-top-right-radius:0}
.asp-rc1035-more{margin:var(--asp-space-4) 0}
.asp-rc1035-more>summary{cursor:pointer;font-weight:700;min-height:44px;box-sizing:border-box;padding-block:var(--asp-space-3)}
.asp-rc1035-cancel,.asp-rc1035-cancelled{margin-bottom:var(--asp-space-4)}
.asp-rc1035-pager{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--asp-space-3);
  padding:var(--asp-space-3) 0}

/* MOB-005 / MOB-006: the room page and Home put the one thing to do first */
@media(max-width:560px){
  .asp-room-card>.section-head{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
  .asp-room-card .asp-room-actions{padding-right:var(--asp-space-10)}
  .asp-room-card .asp-room-facts{margin-top:var(--asp-space-4)}
  .asp-rc1035-day-first .hero .lead{display:none}
  .asp-rc1035-day-first .hero{padding-block:var(--asp-space-3)}
}

/* MOB-017: names under the tablet menu's icons */
@media(min-width:561px) and (max-width:1024px){
  .asp-side-nav .asp-side-link{flex-direction:column;align-items:center;justify-content:center;gap:var(--asp-space-1);
    min-width:72px;min-height:56px;padding:var(--asp-space-2) var(--asp-space-2)}
  .asp-side-nav .asp-side-link span:not([aria-hidden]):not(.asp-nav-badge):not(.asp-guest-badge){position:static;width:auto;height:auto;clip-path:none;
    overflow:visible;white-space:normal;text-align:center;font-size:var(--asp-text-xs);line-height:1.15}
  .asp-side-nav .asp-side-link span:is(.asp-nav-badge,.asp-guest-badge){position:absolute;top:2px;right:4px;width:auto;
    height:16px;min-width:16px;clip-path:none;overflow:visible;margin:0;padding:0 var(--asp-space-1)}
}

/* MOB-008 / MOB-013: a phone, and a tablet used by touch, get 44 px targets and form text Safari will not zoom into */
@media(max-width:560px),(pointer:coarse){
  .asp-header-tools .asp-header-tool,.asp-col:has(>.main>.asp-studio-mark)>.topbar .asp-header-tool{width:44px;height:44px}
  .main:has(>.asp-studio-mark) .asp-board-bar>.filterbar :is(input,select,button){min-height:44px}
  .asp-site-footer a{display:inline-flex;align-items:center;min-height:44px;padding-inline:var(--asp-space-2)}
  main :where(a.btn,button,.btn,input[type=submit]){min-height:44px}
  main button.secondary,main button[type=submit],main .asp-workflow-more>summary,main .asp-rc657-correct>summary{min-height:44px}
  main :where(details>summary){min-height:44px;box-sizing:border-box;padding-block:var(--asp-space-3)}
  main :where(input[type=checkbox],input[type=radio]){width:44px;height:44px}
  main :where(input:not([type=checkbox]):not([type=radio]):not([type=hidden]):not([type=file]),select,textarea){min-height:44px}
  .asp-area-tab{min-height:44px;display:inline-flex;align-items:center}
  main :where(.system-row,.asp-owner-list-row>div:first-child a){min-height:44px}
  /* A control under 16px makes iPhone Safari zoom the page when it takes focus. One rule, so no component can undo it. */
  input:not([type=checkbox]):not([type=radio]):not([type=range]):not([type=file]):not([type=hidden]):not([type=color]),
  select,textarea{font-size:16px!important}
}
/* MOB-016: on a phone the section's Save stays in reach, above the bottom bar */
@media(max-width:560px){
  .asp-rc1035-section form>button[type=submit],.asp-rc1035-short-form>button[type=submit]{position:sticky;
    bottom:calc(var(--asp-space-16) + var(--asp-space-2) + env(safe-area-inset-bottom,0px));z-index:5;
    width:calc(100% - var(--asp-space-10));            /* the assistant button keeps the right-hand corner */
    box-shadow:0 0 0 var(--asp-space-2) var(--asp-surface)}
}


/* === RC10.4.3 THE DOCUMENT ON THE PAGE === */
.asp-docview-split{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);gap:var(--asp-space-6);
  align-items:start}
.asp-docview-details{min-width:0}
@media (max-width:1024px){.asp-docview-split{grid-template-columns:minmax(0,1fr)}}
.asp-docview{display:flex;flex-direction:column;gap:var(--asp-space-3);min-width:0}
.asp-docview-head h2{margin:0}
.asp-docview-head p{margin:var(--asp-space-1) 0 0;overflow-wrap:anywhere}
.asp-docview-bar{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center;justify-content:space-between}
.asp-docview-tools{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center}
.asp-docview-tools[hidden]{display:none}
.asp-docview-bar .btn{width:auto;min-height:44px;min-width:44px;margin:0;display:inline-flex;align-items:center;
  justify-content:center;white-space:nowrap}
.asp-docview-tools .btn[aria-disabled='true']{opacity:.55;cursor:not-allowed}
.asp-docview-page{height:75vh;overflow:auto;border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);
  background:var(--asp-surface-soft)}
.asp-docview-sheet{width:100%;margin:0 auto}
.asp-docview-sheet[data-docview-level='50']{width:50%}
.asp-docview-sheet[data-docview-level='75']{width:75%}
.asp-docview-sheet[data-docview-level='125']{width:125%}
.asp-docview-sheet[data-docview-level='150']{width:150%}
.asp-docview-sheet[data-docview-level='200']{width:200%}
.asp-docview-sheet[data-docview-level='300']{width:300%}
.asp-docview-picture{display:block;width:100%;height:auto;background:var(--asp-surface)}
.asp-docview-frame{display:block;width:100%;height:calc(75vh - 2px);border:0;background:var(--asp-surface)}
.asp-docview-more{margin:0}
.asp-docview-text{max-height:75vh;overflow:auto;padding:var(--asp-space-4);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-sm);background:var(--asp-surface);overflow-wrap:anywhere}
.asp-docview-text p{margin:0 0 var(--asp-space-2);max-width:70ch}
/* The invoice: RC6.9.9's split card keeps its grid (its form is display:contents); the document sits between the
   fields and the line items, so a phone reads fields, document, lines and a computer has it beside the fields. */
@media (min-width:1025px){
  .asp-rc699-split .asp-rc699-fields{grid-column:1;grid-row:1}
  .asp-rc699-split .asp-docview{grid-column:2;grid-row:1}
  .asp-rc699-split .asp-rc699-lines{grid-row:2}
}
/* A hired person's record: the details and the résumé side by side above 1024 px, one column below. */
@media (max-width:1024px){.grid.two.asp-docview-beside{grid-template-columns:minmax(0,1fr)}}
/* A kept document that is not a picture, in a record's Photos card. */
.asp-doc-tile{display:flex;flex-direction:column;align-items:flex-start;gap:var(--asp-space-2);min-width:0;
  padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface-soft)}
.asp-doc-tile-kind{font-weight:700}
.asp-doc-tile-name{overflow-wrap:anywhere}
.asp-doc-tile .btn{width:auto;min-height:44px;min-width:44px;margin:0}

/* === RC10.6.0 UI SYSTEM V2 (HARBOR INK) === */
/* The owner's approved direction (2026-10-08): navy rail, one teal primary, a bronze rule under page titles, flat white
   panels with a thin outline, 24 px page titles, 8 px radius, Public Sans, figures set in tabular numerals. One colour for
   the whole product: departments are told apart by their name and icon, never by a page wash or a button colour.
   Light only for now; every colour below is a role (surface, ink, line, primary ...) so a dark set can be added later
   by redefining the roles in one place. Written as the LAST layer: it re-points the classes the product already uses
   (nothing is renamed) at the tokens, and it never styles the rail, top bar, phone bar or More sheet.
   Rules: tokens only (the one place a hex appears is the token block just below); the product's four breakpoints
   (560 / 768 / 1024 / 1280) only; public and guest pages (body.pp, body.asp-guest) are left to their own phase. */

/* ---- 1. Colour and size roles ------------------------------------------------------------------------------------- */
:root{
  --asp-ink-2:#3a4759;
  --asp-surface-hover:#eef3f7;
  --asp-line-control:#7b8a9e;
  --asp-teal-800:#096970;
  --asp-primary:var(--asp-teal-700);
  --asp-primary-hover:var(--asp-teal-800);
  --asp-on-primary:#ffffff;
  --asp-bronze-700:#7a5a1e;
  --asp-good-ink:#0a6e58;
  --asp-warn-ink:#8a5300;
  --asp-info:#1d5ea6;
  --asp-info-soft:#eaf2fb;
  --asp-focus:#0b7a82;
  --asp-focus-on-dark:#3fd9d1;
  --asp-disabled-bg:#eef1f5;
  --asp-rail-ink:#c3cedc;
  --asp-neutral-ink:#4a5d78;
  --asp-text-metric:24px;
  --asp-scrim:rgba(7,11,18,.48);
  --asp-dialog-width:480px;
  --asp-dialog-width-wide:640px;
  --asp-drawer-width:420px;
  --asp-page-narrow:720px;
  --asp-page-wide:1600px;
}
/* One product colour: the department hues are gone, so anything that still reads --asp-dept gets the primary. */
:root{--asp-dept:var(--asp-primary);--asp-dept-tint:var(--asp-canvas);--asp-side-dept:var(--asp-primary)}
/* Values the approved look changes, for the signed-in product only. */
body:not(.pp):not(.asp-guest){
  --asp-radius-xs:4px;
  --asp-radius-sm:6px;
  --asp-radius-md:8px;
  --asp-radius-lg:12px;
  --asp-control:40px;
  --asp-text-2xl:24px;
  --asp-shadow-xs:none;
  --asp-shadow-sm:0 1px 3px rgba(17,26,38,.08);
  --asp-shadow-md:0 6px 16px rgba(17,26,38,.10);
  --asp-shadow-lg:0 16px 40px rgba(17,26,38,.16);
  --asp-line-strong:var(--asp-line-control);
  --asp-teal-600:var(--asp-primary);
  font-variant-numeric:tabular-nums;
}
@media (max-width:768px){body:not(.pp):not(.asp-guest){--asp-control:44px}}

/* ---- 2. Page title, page header, bronze rule ---------------------------------------------------------------------- */
body:not(.pp):not(.asp-guest) h1{font-size:var(--asp-text-2xl);font-weight:600;line-height:1.25;letter-spacing:0;
  max-width:none;text-wrap:balance}
body:not(.pp):not(.asp-guest) .main h1,
body:not(.pp):not(.asp-guest) .main .asp-studio-area>h1,
body:not(.pp):not(.asp-guest) .main .asp-studio-hero h1{font-size:var(--asp-text-2xl);font-weight:600;line-height:1.25;
  letter-spacing:0;margin:0 0 var(--asp-space-2);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main h2,
body:not(.pp):not(.asp-guest) .main h3{font-weight:600;letter-spacing:0;color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .section-head h2{font-size:var(--asp-text-lg);font-weight:600;letter-spacing:0}
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) h1,
  body:not(.pp):not(.asp-guest) .main h1,
  body:not(.pp):not(.asp-guest) .main .asp-studio-area>h1,
  body:not(.pp):not(.asp-guest) .main .asp-studio-hero h1{font-size:calc(var(--asp-text-2xl) - 2px)}
}
/* The page header: flat, no gradient, no glow, no icon tile; a bronze rule under the block. */
body:not(.pp):not(.asp-guest) .main>.hero,
body:not(.pp):not(.asp-guest) .main>.hero.compact,
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark)>.hero.compact{
  background:transparent;border:0;border-radius:0;box-shadow:none;overflow:visible;color:var(--asp-ink);
  margin:0 0 var(--asp-space-5);padding:0 0 var(--asp-space-4);
  border-bottom:2px solid var(--asp-bronze-600)}
body:not(.pp):not(.asp-guest) .main>.hero::before,
body:not(.pp):not(.asp-guest) .main>.hero::after{display:none}
body:not(.pp):not(.asp-guest) .main>.hero .lead,
body:not(.pp):not(.asp-guest) .main>.hero p{max-width:70ch;margin:0;color:var(--asp-ink-2);font-size:var(--asp-text-base);line-height:1.5}
body:not(.pp):not(.asp-guest) .main>.hero .eyebrow{margin:0 0 var(--asp-space-1);color:var(--asp-muted);font-size:var(--asp-text-xs);
  font-weight:600;letter-spacing:0;text-transform:none}
body:not(.pp):not(.asp-guest) .main .asp-studio-icon{display:none}
body:not(.pp):not(.asp-guest) .main .asp-studio-area{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2) var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-studio-area>.eyebrow,
body:not(.pp):not(.asp-guest) .main .asp-studio-area>h1,
body:not(.pp):not(.asp-guest) .main .asp-studio-area>.lead{flex:1 1 100%;margin:0}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero{display:flex;flex-wrap:wrap;align-items:flex-start;gap:var(--asp-space-2) var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero>div:not(.asp-studio-icon){flex:1 1 360px;min-width:0}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .metrics{display:flex;flex-wrap:wrap;gap:0 var(--asp-space-3);margin:0 0 var(--asp-space-1)}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .metric{padding:0;border:0;background:transparent;min-height:0;display:inline-flex;
  align-items:baseline;gap:var(--asp-space-1)}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .metric b{font-size:var(--asp-text-base);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .metric span{font-size:var(--asp-text-base);text-transform:none;letter-spacing:0;color:var(--asp-ink-2)}
body:not(.pp):not(.asp-guest) .main{padding-top:var(--asp-space-6)}
body:not(.pp):not(.asp-guest) .eyebrow{letter-spacing:0;text-transform:none;font-weight:600}

/* ---- 3. One page ground and flat panels --------------------------------------------------------------------------- */
/* The department washes are removed from the stylesheet; this keeps any page ground that is still tinted plain. */
body:not(.pp):not(.asp-guest) .main,
body:not(.pp):not(.asp-guest) .asp-col,
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark){background:var(--asp-canvas)}
body:not(.pp):not(.asp-guest) .card:not(.asp-dash-v2 .card),
body:not(.pp):not(.asp-guest) .system-card,
body:not(.pp):not(.asp-guest) .choice-option,
body:not(.pp):not(.asp-guest) .intel-card,
body:not(.pp):not(.asp-guest) .asp-capability-card,
body:not(.pp):not(.asp-guest) .asp-owner-metric,
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark) .asp-board-cards>.card{
  background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);box-shadow:none}
body:not(.pp):not(.asp-guest) .card:not(.asp-dash-v2 .card){padding:var(--asp-space-4) var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main .card .card{border:0;border-radius:0;background:transparent;padding:0;box-shadow:none}
body:not(.pp):not(.asp-guest) .main .system-row:hover,
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark) .system-row:hover{background:var(--asp-surface-hover);box-shadow:none;border-color:var(--asp-line)}
body:not(.pp):not(.asp-guest) .system-row.is-open{background:var(--asp-teal-100);border-color:var(--asp-line);box-shadow:none}
body:not(.pp):not(.asp-guest) .asp-row-avatar{display:none}
body:not(.pp):not(.asp-guest) .main .metric{background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);box-shadow:none}
body:not(.pp):not(.asp-guest) .main .metric b{font-size:var(--asp-text-metric);font-weight:600;line-height:1.1;font-variant-numeric:tabular-nums}
body:not(.pp):not(.asp-guest) .asp-site-footer{border-top-width:2px}

/* ---- 4. Buttons: one primary teal, white secondary with a control edge, quiet, outline danger ------------------------- */
body:not(.pp):not(.asp-guest) .main .btn,
body:not(.pp):not(.asp-guest) .main button:not([class*="asp-"]):not(.secondary):not(.ghost):not(.quiet),
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .btn:not(.secondary):not(.ghost),
body:not(.pp):not(.asp-guest) .main .asp-studio-area>.btn{
  background:var(--asp-primary);border-color:var(--asp-primary);color:var(--asp-on-primary);border-radius:var(--asp-radius-sm);
  font-weight:600;font-size:var(--asp-text-base);letter-spacing:0;box-shadow:none}
body:not(.pp):not(.asp-guest) .main .btn:hover,
body:not(.pp):not(.asp-guest) .main button:not([class*="asp-"]):not(.secondary):not(.ghost):not(.quiet):hover{
  background:var(--asp-primary-hover);border-color:var(--asp-primary-hover);color:var(--asp-on-primary)}
body:not(.pp):not(.asp-guest) .main .btn.secondary,
body:not(.pp):not(.asp-guest) .main button.secondary,
body:not(.pp):not(.asp-guest) .main .btn.ghost,
body:not(.pp):not(.asp-guest) .main button.ghost{
  background:var(--asp-surface);color:var(--asp-ink);border:1px solid var(--asp-line-control);box-shadow:none}
body:not(.pp):not(.asp-guest) .main .btn.secondary:hover,
body:not(.pp):not(.asp-guest) .main button.secondary:hover,
body:not(.pp):not(.asp-guest) .main .btn.ghost:hover{background:var(--asp-surface-hover);border-color:var(--asp-line-control);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .btn.quiet,
body:not(.pp):not(.asp-guest) .main button.quiet{background:transparent;border-color:transparent;color:var(--asp-primary);box-shadow:none}
body:not(.pp):not(.asp-guest) .main .btn.quiet:hover,
body:not(.pp):not(.asp-guest) .main button.quiet:hover{background:var(--asp-surface-hover);text-decoration:underline}
/* A destructive button in a list is an outline; the filled form is kept for the confirm button inside a dialog. */
body:not(.pp):not(.asp-guest) .main .btn.danger,
body:not(.pp):not(.asp-guest) .main button.danger{background:var(--asp-surface)!important;color:var(--asp-bad)!important;
  border:1px solid var(--asp-bad)!important;box-shadow:none}
body:not(.pp):not(.asp-guest) .main .btn.danger:hover,
body:not(.pp):not(.asp-guest) .main button.danger:hover{background:var(--asp-bad-soft)!important}
body:not(.pp):not(.asp-guest) .asp-ui-dialog .btn.danger,
body:not(.pp):not(.asp-guest) .asp-ui-dialog button.danger{background:var(--asp-bad)!important;color:var(--asp-on-primary)!important;border-color:var(--asp-bad)!important}
body:not(.pp):not(.asp-guest) .main .btn[disabled],
body:not(.pp):not(.asp-guest) .main button[disabled],
body:not(.pp):not(.asp-guest) .main .btn[aria-disabled="true"]{background:var(--asp-disabled-bg);border-color:var(--asp-disabled-bg);color:var(--asp-muted);
  cursor:not-allowed}
body:not(.pp):not(.asp-guest) .btn.icon{width:36px;min-width:36px;padding:0}
@media (max-width:768px){body:not(.pp):not(.asp-guest) .btn.icon{width:44px;min-width:44px}}

/* ---- 5. Status marks and pills: a word on a quiet fill; colour is only ever the third signal -------------------------- */
body:not(.pp):not(.asp-guest) .main .pill{min-height:24px;margin:0;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-full);
  background:var(--asp-surface-soft);border:1px solid var(--asp-line);color:var(--asp-neutral-ink);font-size:var(--asp-text-xs);font-weight:600;
  letter-spacing:0}
body:not(.pp):not(.asp-guest) .main .pill.good,body:not(.pp):not(.asp-guest) .pill.ok,body:not(.pp):not(.asp-guest) .main .pill.success{
  background:var(--asp-good-soft);color:var(--asp-good-ink);border-color:var(--asp-good-border)}
body:not(.pp):not(.asp-guest) .main .pill.warn,body:not(.pp):not(.asp-guest) .pill.warning{
  background:var(--asp-warn-soft);color:var(--asp-warn-ink);border-color:var(--asp-bronze-border)}
body:not(.pp):not(.asp-guest) .main .pill.bad,body:not(.pp):not(.asp-guest) .pill.danger,body:not(.pp):not(.asp-guest) .main .pill.error{
  background:var(--asp-bad-soft);color:var(--asp-bad);border-color:var(--asp-bad)}
body:not(.pp):not(.asp-guest) .main .pill.info{background:var(--asp-info-soft);color:var(--asp-info);border-color:var(--asp-info)}
/* Do not disturb was purple; it is now the neutral slate, with its word. */
body:not(.pp):not(.asp-guest) .main .asp-room.is-dnd,body:not(.pp):not(.asp-guest) .asp-grid-key.is-dnd,
body:not(.pp):not(.asp-guest) .main .asp-sig-chip.is-dnd{color:var(--asp-neutral-ink);background:var(--asp-surface-hover);border-color:var(--asp-neutral-ink)}
.asp-ui-status{display:inline-flex;align-items:center;gap:var(--asp-space-1);font-size:var(--asp-text-xs);font-weight:600;line-height:1.3;
  color:var(--asp-neutral-ink)}
.asp-ui-status svg{flex:none}
.asp-ui-status.is-good{color:var(--asp-good-ink)}
.asp-ui-status.is-warn{color:var(--asp-warn-ink)}
.asp-ui-status.is-bad{color:var(--asp-bad)}
.asp-ui-status.is-info{color:var(--asp-info)}
.asp-ui-status.is-solid{padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-xs);background:var(--asp-bad);color:var(--asp-on-primary)}
.asp-ui-status.is-soft{padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-xs);background:var(--asp-surface-hover)}

/* ---- 6. Forms: label above the control, a 3:1 control edge, hint under, one focus ring ------------------------------- */
body:not(.pp):not(.asp-guest) .main label{color:var(--asp-ink);font-size:var(--asp-text-xs);font-weight:600}
body:not(.pp):not(.asp-guest) .main input:not([type=checkbox]):not([type=radio]):not([type=hidden]),
body:not(.pp):not(.asp-guest) .main select,
body:not(.pp):not(.asp-guest) .main textarea{border:1px solid var(--asp-line-control);border-radius:var(--asp-radius-sm);background:var(--asp-surface);
  color:var(--asp-ink);font-size:var(--asp-text-base)}
body:not(.pp):not(.asp-guest) .main input:not([type=checkbox]):not([type=radio]):not([type=hidden]):hover,
body:not(.pp):not(.asp-guest) .main select:hover,body:not(.pp):not(.asp-guest) textarea:hover{border-color:var(--asp-ink-2)}
body:not(.pp):not(.asp-guest) .main input:focus,body:not(.pp):not(.asp-guest) select:focus,body:not(.pp):not(.asp-guest) .main textarea:focus{
  border-color:var(--asp-focus);box-shadow:none}
body:not(.pp):not(.asp-guest) .main input[type=checkbox]{border-color:var(--asp-line-control)}
body:not(.pp):not(.asp-guest) .main .req{color:var(--asp-bad)}
body:not(.pp):not(.asp-guest) .main .mini,body:not(.pp):not(.asp-guest) .muted{color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .main form>.mini{margin:calc(var(--asp-space-2) * -1) 0 var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main form>label:not(:first-child){margin-top:var(--asp-space-3)}
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main input:not([type=checkbox]):not([type=radio]):not([type=hidden]),
  body:not(.pp):not(.asp-guest) .main select,body:not(.pp):not(.asp-guest) textarea{font-size:16px}
}
/* Grouped fields (the invoice form and any form that uses the FormField / fieldset helpers). */
.asp-ui-fieldset{margin:0 0 var(--asp-space-5);padding:0;border:0;min-width:0}
.asp-ui-fieldset>legend{padding:0 0 var(--asp-space-2);margin:0 0 var(--asp-space-3);width:100%;border-bottom:1px solid var(--asp-line);
  color:var(--asp-ink);font-size:var(--asp-text-md);font-weight:600;line-height:1.3}
.asp-ui-fieldset-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:0 var(--asp-space-5);align-items:start}
.asp-ui-fieldset-grid>.asp-ui-field.is-wide{grid-column:1 / -1}
@media (max-width:768px){.asp-ui-fieldset-grid{grid-template-columns:minmax(0,1fr)}}
.asp-ui-field{min-width:0;margin:0 0 var(--asp-space-3)}
.asp-ui-field>label{margin:0 0 var(--asp-space-1)}
.asp-ui-field>input,.asp-ui-field>select,.asp-ui-field>textarea{margin:0}
.asp-ui-field>.mini{margin:var(--asp-space-1) 0 0}
.asp-ui-field .asp-ui-error{margin:var(--asp-space-1) 0 0;color:var(--asp-bad);font-size:var(--asp-text-xs);font-weight:600}
.asp-ui-field .asp-ui-field-hint{margin:var(--asp-space-1) 0 0;color:var(--asp-muted);font-size:var(--asp-text-xs)}
.asp-ui-form-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-3);align-items:center;margin-top:var(--asp-space-5);padding-top:var(--asp-space-4);
  border-top:1px solid var(--asp-line)}
.asp-ui-form-actions>.btn,.asp-ui-form-actions>button{width:auto;flex:0 0 auto}
@media (max-width:560px){
  .asp-ui-form-actions{position:sticky;bottom:calc(64px + env(safe-area-inset-bottom,0px));z-index:30;background:var(--asp-canvas);
    padding:var(--asp-space-3) 0}
  .asp-ui-form-actions>.btn,.asp-ui-form-actions>button{flex:1 1 auto}
  /* a clear strip at the right for the assistant launcher, so it never sits on Save or Cancel */
  .asp-ui-form-actions{padding-right:calc(48px + var(--asp-space-4))}
}
body:not(.pp):not(.asp-guest) .main .form-card{max-width:var(--asp-page-narrow)}
body:not(.pp):not(.asp-guest) .main .form-card.asp-ui-form-wide{max-width:var(--asp-content)}

/* ---- 7. Tables: dense, a sticky head, figures in tabular numerals ----------------------------------------------------- */
body:not(.pp):not(.asp-guest) .main .table-wrap,
body:not(.pp):not(.asp-guest) .main .asp-report-table-wrap{border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);
  max-height:75vh}
body:not(.pp):not(.asp-guest) .main table{font-size:var(--asp-text-sm);line-height:1.4}
body:not(.pp):not(.asp-guest) .main th{position:sticky;top:0;z-index:1;background:var(--asp-surface-soft);color:var(--asp-muted);
  font-size:var(--asp-text-xs);font-weight:600;letter-spacing:0;text-transform:none;border-bottom:1px solid var(--asp-line)}
body:not(.pp):not(.asp-guest) .main td{border-bottom:1px solid var(--asp-line)}
body:not(.pp):not(.asp-guest) .main td,body:not(.pp):not(.asp-guest) .main th{padding:var(--asp-space-2) var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main tr:hover>td{background:var(--asp-surface-hover)}
body:not(.pp):not(.asp-guest) .main td.num,body:not(.pp):not(.asp-guest) .main th.num,
body:not(.pp):not(.asp-guest) .main td.money,body:not(.pp):not(.asp-guest) .main th.money{text-align:right;font-variant-numeric:tabular-nums}
.asp-ui-table-wrap{max-width:100%;overflow:auto;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);max-height:75vh}
.asp-ui-table-wrap>table{width:100%;border-collapse:collapse}
.asp-ui-table-wrap caption{padding:var(--asp-space-3);text-align:left;color:var(--asp-muted);font-size:var(--asp-text-xs)}

/* ---- 8. Alerts, empty states, skeletons ------------------------------------------------------------------------------- */
body:not(.pp):not(.asp-guest) .main .banner,
body:not(.pp):not(.asp-guest) .main .asp-inline-alert,
body:not(.pp):not(.asp-guest) .main .error-card,
body:not(.pp):not(.asp-guest) .main .success-card{border-radius:var(--asp-radius-sm);font-size:var(--asp-text-sm);box-shadow:none}
body:not(.pp):not(.asp-guest) .main .banner{background:var(--asp-warn-soft);border:1px solid var(--asp-bronze-border);color:var(--asp-warn-ink);margin:0 0 var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-inline-alert-error,
body:not(.pp):not(.asp-guest) .main .error-card{background:var(--asp-bad-soft);border-color:var(--asp-bad);color:var(--asp-bad)}
body:not(.pp):not(.asp-guest) .main .asp-inline-alert:not(.asp-inline-alert-error){background:var(--asp-good-soft);border-color:var(--asp-good-border);color:var(--asp-good-ink)}
.asp-ui-alert{display:flex;align-items:flex-start;gap:var(--asp-space-2);margin:0 0 var(--asp-space-4);padding:var(--asp-space-3);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);background:var(--asp-surface-soft);color:var(--asp-ink);font-size:var(--asp-text-sm)}
.asp-ui-alert svg{flex:none}
.asp-ui-alert.is-info{background:var(--asp-info-soft);border-color:var(--asp-info);color:var(--asp-info)}
.asp-ui-alert.is-warn{background:var(--asp-warn-soft);border-color:var(--asp-bronze-border);color:var(--asp-warn-ink)}
.asp-ui-alert.is-bad{background:var(--asp-bad-soft);border-color:var(--asp-bad);color:var(--asp-bad)}
.asp-ui-alert.is-good{background:var(--asp-good-soft);border-color:var(--asp-good-border);color:var(--asp-good-ink)}
.asp-ui-alert-body{min-width:0;flex:1}
.asp-ui-alert-body p{margin:0}
body:not(.pp):not(.asp-guest) .main .empty-state,.asp-ui-empty{padding:var(--asp-space-6);text-align:center;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .main .empty-state .icon,.asp-ui-empty .icon{display:inline-flex;align-items:center;justify-content:center;width:40px;height:40px;
  margin:0 auto var(--asp-space-2);border-radius:var(--asp-radius-full);background:var(--asp-surface-hover);color:var(--asp-primary);font-size:var(--asp-text-lg)}
body:not(.pp):not(.asp-guest) .main .empty-state h3,.asp-ui-empty h3{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-md);color:var(--asp-ink)}
.asp-ui-skeleton{display:block;border-radius:var(--asp-radius-sm);background:var(--asp-surface-hover);min-height:var(--asp-space-4)}
.asp-ui-skeleton-rows{display:grid;gap:var(--asp-space-2)}
.asp-ui-skeleton-rows>.asp-ui-skeleton{height:36px}
@media (prefers-reduced-motion:no-preference){
  .asp-ui-skeleton{animation:asp-ui-pulse 1.2s ease-in-out infinite}
}
@keyframes asp-ui-pulse{0%,100%{opacity:1}50%{opacity:.55}}

/* ---- 9. One visible focus ring ---------------------------------------------------------------------------------------- */
:where(a,button,input,select,textarea,summary,[tabindex]):focus-visible{outline:2px solid var(--asp-focus);outline-offset:2px;box-shadow:none}
.asp-side :where(a,button,summary):focus-visible,.asp-more-sheet :where(a,button):focus-visible{outline-color:var(--asp-focus-on-dark)}
.main:has(>.asp-studio-mark) .system-row:focus-visible,.asp-sig-summary:focus-visible,.asp-room:focus-visible,.asp-pipe-card:focus-visible,
.asp-sig-tile:focus-visible,.asp-sig-gauge:focus-visible,.asp-sig-water:focus-visible{outline:2px solid var(--asp-focus);outline-offset:2px}

/* ---- 10. Skip link ---------------------------------------------------------------------------------------------------- */
.asp-skip-link{position:fixed;left:var(--asp-space-3);top:var(--asp-space-3);z-index:600;padding:var(--asp-space-2) var(--asp-space-4);
  border-radius:var(--asp-radius-sm);background:var(--asp-primary);color:var(--asp-on-primary);font-size:var(--asp-text-base);font-weight:600;
  text-decoration:none;transform:translateY(calc(-100% - var(--asp-space-4)))}
.asp-skip-link:focus,.asp-skip-link:focus-visible{transform:none;outline:2px solid var(--asp-focus);outline-offset:2px;box-shadow:0 0 0 4px var(--asp-surface)}
main:focus{outline:none}

/* ---- 11. The assistant launcher never covers data ---------------------------------------------------------------------- */
/* It sits low in the bottom-right corner as a small round button, and the page keeps a clear strip at the foot of its
   content so a table's last column and a form's last button are never underneath it. */
body:not(.pp):not(.asp-guest) .asp-chat-launcher{right:var(--asp-space-4);bottom:var(--asp-space-4);min-width:48px;min-height:48px;padding:0 var(--asp-space-3);
  border-radius:var(--asp-radius-full);box-shadow:var(--asp-shadow-md);z-index:80}
body:not(.pp):not(.asp-guest) .asp-chat-launcher .asp-chat-launcher-label{display:none}
body:not(.pp):not(.asp-guest) .asp-chat-launcher .asp-chat-launcher-label-short{display:none}
body:not(.pp):not(.asp-guest) .main{padding-bottom:calc(var(--asp-space-16) + var(--asp-space-4))}
@media (min-width:1025px){
  /* On a computer the launcher lives in a gutter at the right of the page, so a table's last column is never under it. */
  body:not(.pp):not(.asp-guest) .main{padding-right:calc(var(--asp-space-6) + 48px + var(--asp-space-4))}
}
body:not(.pp):not(.asp-guest) .main .table-wrap,body:not(.pp):not(.asp-guest) .asp-report-table-wrap{margin-right:0}
@media (max-width:768px){body:not(.pp):not(.asp-guest) .asp-chat-launcher{bottom:calc(var(--asp-space-16) + env(safe-area-inset-bottom,0px) + var(--asp-space-2))}}

/* ---- 12. New shared components (ui_components.py) ------------------------------------------------------------------------- */
.asp-ui-section{margin:0 0 var(--asp-space-6)}
.asp-ui-section-head{display:flex;flex-wrap:wrap;align-items:flex-end;justify-content:space-between;gap:var(--asp-space-2) var(--asp-space-4);margin:0 0 var(--asp-space-3)}
.asp-ui-section-head h2{margin:0;font-size:var(--asp-text-lg);font-weight:600}
.asp-ui-section-head p{margin:var(--asp-space-1) 0 0;color:var(--asp-muted);font-size:var(--asp-text-sm)}
.asp-ui-page-header{margin:0 0 var(--asp-space-5);padding:0 0 var(--asp-space-4);border-bottom:2px solid var(--asp-bronze-600);display:flex;flex-wrap:wrap;
  align-items:flex-start;justify-content:space-between;gap:var(--asp-space-3) var(--asp-space-4)}
.asp-ui-page-header>div{flex:1 1 360px;min-width:0}
.asp-ui-page-header h1{margin:0}
.asp-ui-page-header p{margin:var(--asp-space-1) 0 0;max-width:70ch;color:var(--asp-ink-2)}
.asp-ui-page-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center}
.asp-ui-metrics{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:0;margin:0 0 var(--asp-space-5);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.asp-ui-metric{padding:var(--asp-space-3) var(--asp-space-4);border-right:1px solid var(--asp-line);min-width:0}
.asp-ui-metric:last-child{border-right:0}
.asp-ui-metric .asp-ui-metric-label{display:block;color:var(--asp-muted);font-size:var(--asp-text-xs);font-weight:600}
.asp-ui-metric .asp-ui-metric-value{display:block;color:var(--asp-ink);font-size:var(--asp-text-metric);font-weight:600;line-height:1.1;
  font-variant-numeric:tabular-nums}
.asp-ui-metric .asp-ui-metric-note{display:block;margin-top:var(--asp-space-1);color:var(--asp-muted);font-size:var(--asp-text-xs)}
.asp-ui-tabs{display:flex;flex-wrap:wrap;gap:var(--asp-space-1);margin:0 0 var(--asp-space-4);border-bottom:1px solid var(--asp-line)}
.asp-ui-tabs a{display:inline-flex;align-items:center;min-height:var(--asp-control);padding:0 var(--asp-space-3);color:var(--asp-ink-2);
  font-size:var(--asp-text-sm);font-weight:600;text-decoration:none}
.asp-ui-tabs a:hover{background:var(--asp-surface-hover)}
.asp-ui-tabs a[aria-current="page"],.asp-ui-tabs a[aria-selected="true"]{color:var(--asp-primary);box-shadow:inset 0 -2px 0 var(--asp-primary)}
.asp-ui-dialog-scrim{position:fixed;inset:0;z-index:500;display:flex;align-items:center;justify-content:center;padding:var(--asp-space-4);background:var(--asp-scrim)}
.asp-ui-dialog-scrim[hidden]{display:none}
.asp-ui-dialog{width:min(100%,var(--asp-dialog-width));max-height:calc(100dvh - var(--asp-space-8));overflow:auto;padding:var(--asp-space-5);
  border-radius:var(--asp-radius-lg);background:var(--asp-surface);color:var(--asp-ink);box-shadow:var(--asp-shadow-lg)}
.asp-ui-dialog.is-wide{width:min(100%,var(--asp-dialog-width-wide))}
.asp-ui-dialog h2{margin:0 0 var(--asp-space-2);font-size:var(--asp-text-lg)}
.asp-ui-dialog p{margin:0 0 var(--asp-space-3);color:var(--asp-ink-2)}
.asp-ui-dialog-actions{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:var(--asp-space-2);margin-top:var(--asp-space-4)}
.asp-ui-drawer{position:fixed;top:0;right:0;bottom:0;z-index:500;width:min(100%,var(--asp-drawer-width));overflow:auto;padding:var(--asp-space-5);
  background:var(--asp-surface);color:var(--asp-ink);box-shadow:var(--asp-shadow-lg)}
.asp-ui-drawer[hidden]{display:none}
@media (max-width:768px){.asp-ui-drawer{width:100%}}
@media (prefers-reduced-motion:no-preference){
  .asp-ui-dialog,.asp-ui-drawer{animation:asp-ui-enter 180ms cubic-bezier(.2,0,0,1)}
}
@keyframes asp-ui-enter{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
.asp-ui-icon{flex:none;vertical-align:-3px}

/* ---- 13. Every transition and animation stops for people who ask for no motion ---------------------------------------- */
@media (prefers-reduced-motion:reduce){
  *,*::before,*::after{animation-duration:0s!important;animation-iteration-count:1!important;transition-duration:0s!important;scroll-behavior:auto!important}
}

/* ---- 14. The four approval screens ------------------------------------------------------------------------------------ */
/* Housekeeping board: the room list leads; empty summary cards fold to one line and follow it. */
body:not(.pp):not(.asp-guest) .main:has(>.asp-board-bar),
body:not(.pp):not(.asp-guest) .main:has(>.asp-board-grid-first){display:flex;flex-direction:column}
.main>.hero{order:0}
.main>.asp-board-bar{order:2}
.main>.asp-split{order:3}
.main>.asp-board-cards{order:4}
.main>.banner{order:1}
.main>.asp-sig-fold{order:1}
.main>.footer-note{order:9}
.main>.asp-board-cards{margin-top:var(--asp-space-4)}
.asp-board-cards>.card:has(.asp-shift-list>p.muted:only-child){padding:var(--asp-space-3) var(--asp-space-4)}
.asp-board-cards>.card:has(.asp-shift-list>p.muted:only-child) .section-head p{display:none}
.asp-board-cards>.card:has(.asp-shift-list>p.muted:only-child) .section-head{margin-bottom:var(--asp-space-1)}
.asp-board-cards>.card:has(.asp-shift-list>p.muted:only-child) .section-head h2{font-size:var(--asp-text-md)}
body:not(.pp):not(.asp-guest) .main .asp-board-cards{gap:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main .asp-sig-fold{margin:0 0 var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-room-grid{margin:0}
body:not(.pp):not(.asp-guest) .main .asp-floor-rooms{flex:1 1 0;min-width:0;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .asp-room-grid>.section-head h2{display:none}
body:not(.pp):not(.asp-guest) .main .asp-floor-name{letter-spacing:0;font-weight:600;font-size:var(--asp-text-xs)}
body:not(.pp):not(.asp-guest) .main .asp-room{width:120px;min-height:56px;border-radius:var(--asp-radius-sm);box-shadow:none;border-width:1px}
body:not(.pp):not(.asp-guest) .main .asp-room span{white-space:normal;font-size:var(--asp-text-xs);line-height:1.25}
body:not(.pp):not(.asp-guest) .main .asp-board-bar{border:0;background:transparent;box-shadow:none;padding:0;margin:0 0 var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main .asp-split-empty{border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);min-height:0;padding:var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-split-empty:only-child{display:block}

/* Home: pass-down beside what is on my name from 1024 up; the empty showcase grid disappears. */
body:not(.pp):not(.asp-guest) .main .asp-capability-grid:empty{display:none}
body:not(.pp):not(.asp-guest) .main .asp-passdown-form{display:grid;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .asp-passdown-form textarea{min-height:88px}
body:not(.pp):not(.asp-guest) .main .asp-passdown-form .btn,body:not(.pp):not(.asp-guest) .main .asp-passdown-form button{justify-self:start;width:auto}
@media (min-width:1025px){
  body:not(.pp):not(.asp-guest) .main:has(>.asp-passdown):has(>.asp-home-grid){display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr);
    column-gap:var(--asp-space-5);align-items:start}
  body:not(.pp):not(.asp-guest) .main:has(>.asp-passdown):has(>.asp-home-grid)>*{grid-column:1 / -1}
  body:not(.pp):not(.asp-guest) .main:has(>.asp-passdown):has(>.asp-home-grid)>.asp-passdown{grid-column:1;grid-row:2}
  body:not(.pp):not(.asp-guest) .main:has(>.asp-passdown):has(>.asp-home-grid)>.asp-home-grid{grid-column:2;grid-row:2}
}
body:not(.pp):not(.asp-guest) .main .asp-home-grid{display:grid;grid-template-columns:minmax(0,1fr);gap:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main .asp-home-grid>.card,body:not(.pp):not(.asp-guest) .asp-home-grid>section,
body:not(.pp):not(.asp-guest) .main .asp-home-grid>.grid{margin:0}
body:not(.pp):not(.asp-guest) .main .asp-home-catalogue-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--asp-space-3)}
@media (max-width:768px){body:not(.pp):not(.asp-guest) .main .asp-home-catalogue-grid{grid-template-columns:minmax(0,1fr)}}
body:not(.pp):not(.asp-guest) .main .asp-home-quick-actions{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--asp-space-3);
  padding:var(--asp-space-4) var(--asp-space-5);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface);box-shadow:none}
body:not(.pp):not(.asp-guest) .main .asp-home-quick-actions h2{margin:0}
body:not(.pp):not(.asp-guest) .main .choice-card{display:flex;flex-direction:column;align-items:flex-start;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .choice-card .icon{display:inline-flex;align-items:center;justify-content:center;width:36px;height:36px;border-radius:var(--asp-radius-sm);
  background:var(--asp-surface-hover);color:var(--asp-primary)}
body:not(.pp):not(.asp-guest) .main .asp-designer-showcase{background:transparent;border:0;box-shadow:none;padding:var(--asp-space-5) 0 0}

/* Home: figures read as a quiet strip, setup cards are compact. */
body:not(.pp):not(.asp-guest) .main .metrics{grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .metric{padding:var(--asp-space-3) var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .metric span{display:block;margin-top:var(--asp-space-1);color:var(--asp-muted);font-size:var(--asp-text-xs);font-weight:600;
  letter-spacing:0;text-transform:none}
body:not(.pp):not(.asp-guest) .main .choice-card h2{font-size:var(--asp-text-md);line-height:1.3;margin:0}
body:not(.pp):not(.asp-guest) .main .choice-card p{margin:0}
body:not(.pp):not(.asp-guest) .main .asp-home-quick-actions .eyebrow{display:none}
body:not(.pp):not(.asp-guest) .main .asp-passdown .section-head,
body:not(.pp):not(.asp-guest) .main .asp-shift-card .section-head{margin-bottom:var(--asp-space-2)}

/* Board rows: one dense line per room or record; the open one is marked by its fill and the word "Open". */
body:not(.pp):not(.asp-guest) .main .system-row{padding:var(--asp-space-2) var(--asp-space-3);margin-left:0;margin-right:0;align-items:center;min-height:44px;
  border-radius:var(--asp-radius-sm)}
body:not(.pp):not(.asp-guest) .main .system-row-main b{font-size:var(--asp-text-base);font-weight:600;letter-spacing:0}
body:not(.pp):not(.asp-guest) .main .system-row .status-row{margin:0;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .asp-split-list>.card{padding:var(--asp-space-1) var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .filterbar{padding:0;border:0;background:transparent;margin:0}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .section-head h2{margin:0}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .section-head p{display:none}
body:not(.pp):not(.asp-guest) .main .asp-board-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2) var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-board-bar>.section-head{margin:0;flex:0 0 auto}
body:not(.pp):not(.asp-guest) .main .asp-board-bar>form{flex:1 1 360px;min-width:0}
body:not(.pp):not(.asp-guest) .main .asp-sig-summary{border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface);box-shadow:none}

/* The page header's actions wrap in rows instead of stacking full width on a phone. */
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main .asp-studio-hero .btn,
  body:not(.pp):not(.asp-guest) .main .asp-studio-hero .asp-system-recommended-action{flex:1 1 auto;width:auto}

}
body:not(.pp):not(.asp-guest) .main .hero .btn{width:auto}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero{align-items:center}

/* A room's page: facts as plain rows, not tiles. */
body:not(.pp):not(.asp-guest) .main .asp-room-facts{display:grid;grid-template-columns:minmax(0,1fr);gap:0;margin:0 0 var(--asp-space-3);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .asp-room-fact{display:flex;flex-direction:row;flex-wrap:wrap;gap:var(--asp-space-1) var(--asp-space-3);align-items:baseline;
  padding:var(--asp-space-2) var(--asp-space-3);border:0;border-bottom:1px solid var(--asp-line);border-radius:0;background:transparent;min-height:0}
body:not(.pp):not(.asp-guest) .main .asp-room-fact:last-child{border-bottom:0}
body:not(.pp):not(.asp-guest) .main .asp-room-fact .mini{flex:0 0 8em;color:var(--asp-muted);font-size:var(--asp-text-xs);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-room-fact b{flex:1 1 12em;font-size:var(--asp-text-base);font-weight:600;line-height:1.4}

/* Invoice: the form is wide enough for two columns of fields; the line-item table keeps readable inputs. */
body:not(.pp):not(.asp-guest) .main .form-card.asp-ui-form-wide{max-width:960px}
body:not(.pp):not(.asp-guest) .main .asp-line-items select{min-width:9rem}
body:not(.pp):not(.asp-guest) .main .asp-line-items input,
body:not(.pp):not(.asp-guest) .main .asp-line-items select{margin:0}
body:not(.pp):not(.asp-guest) .main .asp-ui-field>.table-wrap{margin-top:var(--asp-space-1)}
body:not(.pp):not(.asp-guest) .main .asp-ui-fieldset .mini{margin:var(--asp-space-1) 0 0}
body:not(.pp):not(.asp-guest) .main form .status-row.asp-ui-form-actions{margin-top:var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main .asp-system-help>summary{border:1px solid var(--asp-line);border-radius:var(--asp-radius-sm);
  background:var(--asp-surface);box-shadow:none;font-weight:600}

/* A record opened beside its list: its own headings are section-sized, and the pane is flat. */
body:not(.pp):not(.asp-guest) .main .asp-split-detail{box-shadow:none;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .card{border:0;padding:var(--asp-space-3) 0;background:transparent}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .card>h2,
body:not(.pp):not(.asp-guest) .main .asp-split-detail h2{font-size:var(--asp-text-lg)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .hero{border-bottom:0;margin:0 0 var(--asp-space-3);padding:0}
body:not(.pp):not(.asp-guest) .main .asp-split-detail h1{font-size:var(--asp-text-xl)}
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main .asp-floor{flex-direction:column;gap:var(--asp-space-1)}
  body:not(.pp):not(.asp-guest) .main .asp-floor-name{width:auto;padding-top:0}
  body:not(.pp):not(.asp-guest) .main .asp-room{flex:1 1 calc(33.333% - var(--asp-space-2));min-width:96px;width:auto}
  body:not(.pp):not(.asp-guest) .main .asp-room-grid>.section-head{display:none}
}

/* === RC10.7.0 NAVIGATION V2 === */
/* The navigation half of the approved Harbor Ink look (owner, 2026-10-08). Appended after the first half (rc1060), so it wins
   the cascade. It restyles what the navigation DRAWS (the rail, the top bar, the phone bar, the More sheet, the assistant
   launcher, the catalogue page) and never what it lists: every link and its place are the ones the page already had.
   Rules: tokens only (this layer adds no raw colour); the product's four breakpoints
   (560 / 768 / 1024 / 1280); public and guest pages (body.pp, body.asp-guest) are left to their own phase; meaning is never
   carried by colour alone. */

/* ---- 1. Roles this layer adds --------------------------------------------------------------------------------------- */
:root{
  --asp-rail-width:272px;
  --asp-rail-ink-muted:color-mix(in srgb,var(--asp-rail-ink) 70%,var(--asp-navy-900));
  --asp-topbar-height:56px;
  --asp-bar-height:56px;
  --asp-launcher-slot:48px;
  --asp-bar-label:clamp(10px,3vw,11px);
  --asp-tip-offset:6px;
}

/* The skip link's target takes focus without drawing anything. */
#asp-main.asp-skip-target{display:block;height:0;overflow:hidden;outline:none}

/* ---- 2. One light top bar on every page (the Accounting frame's dark bar included) -------------------------------------- */
body:not(.pp):not(.asp-guest) .asp-col>.topbar{background:var(--asp-canvas);color:var(--asp-ink);border-bottom:1px solid var(--asp-line);
  box-shadow:none;min-height:var(--asp-topbar-height);gap:var(--asp-space-3);
  padding:calc(var(--asp-space-2) + env(safe-area-inset-top,0px)) var(--asp-space-6) var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .brand,
body:not(.pp):not(.asp-guest) .asp-col>.topbar .brand-wordmark{color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .brand-context{color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar nav a{color:var(--asp-muted);font-weight:600}
body:not(.pp):not(.asp-guest) .asp-col>.topbar nav a:hover,
body:not(.pp):not(.asp-guest) .asp-col>.topbar nav a:focus-visible,
body:not(.pp):not(.asp-guest) .asp-col>.topbar nav a[aria-current="page"]{background:var(--asp-surface-hover);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-workspace-title{color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-workspace-tab{color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-workspace-tab:hover{color:var(--asp-ink);background:var(--asp-surface-hover)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-workspace-tab.is-active{color:var(--asp-primary);background:var(--asp-surface);
  box-shadow:inset 0 -2px 0 var(--asp-primary)}
/* The hotel you are working in: the label beside its own box, the box on the same ground as every other control. */
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch-inline{margin-left:0}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch{flex-wrap:nowrap;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch-label{color:var(--asp-muted);font-size:var(--asp-text-2xs);white-space:nowrap}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch select{margin:0;min-height:40px;border-radius:var(--asp-radius-md);
  border:1px solid var(--asp-line-control);background-color:var(--asp-surface);color:var(--asp-ink);font-weight:600}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-hotel-indicator{min-height:40px;padding:0 var(--asp-space-3);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-full);background:var(--asp-surface);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool{width:var(--asp-control);height:var(--asp-control);border:1px solid var(--asp-line);
  background:var(--asp-surface);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool:hover{background:var(--asp-surface-hover);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool.is-live{background:var(--asp-primary);border-color:var(--asp-primary);
  color:var(--asp-on-primary)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-account-trigger{min-height:var(--asp-control);padding:0 var(--asp-space-3);
  border-radius:var(--asp-radius-full);background:var(--asp-primary);color:var(--asp-on-primary)}
body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-account-trigger:hover{background:var(--asp-primary-hover);color:var(--asp-on-primary)}
@media (pointer:coarse){
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool,
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-account-trigger{width:44px;min-width:44px;height:44px;min-height:44px}
}

/* ---- 3. The rail: one rule on every page -------------------------------------------------------------------------------- */
@media (min-width:1025px){
  body:not(.pp):not(.asp-guest) .asp-side{width:var(--asp-rail-width);flex:0 0 var(--asp-rail-width);background:var(--asp-navy-900)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-brand small{color:var(--asp-rail-ink-muted)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-heading{color:var(--asp-rail-ink-muted)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-link{color:var(--asp-rail-ink);font-weight:500;border-radius:var(--asp-radius-md)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-link:hover,
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-sublink:hover{background:var(--asp-navy-800);color:var(--asp-surface)}
  /* the page you are on: a lifted fill and a teal marker (never colour alone: the label is also bold) */
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-link.is-active,
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-dept[open]>summary.asp-side-link{background:var(--asp-navy-800);color:var(--asp-surface);
    font-weight:700;box-shadow:inset 3px 0 0 var(--asp-teal-glow)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-sub{border-left:2px solid var(--asp-navy-700)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-sublink{color:var(--asp-rail-ink)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-sublink.is-active{background:var(--asp-navy-800);color:var(--asp-surface);font-weight:700;
    box-shadow:inset 3px 0 0 var(--asp-teal-glow)}
}
/* Tablet: the same rail as a row of labelled tiles; the page you are on is marked under its tile. The top bar is one row. */
@media (min-width:561px) and (max-width:1024px){
  body:not(.pp):not(.asp-guest) .asp-side{background:var(--asp-navy-900)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-link{color:var(--asp-rail-ink)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-link.is-active{background:var(--asp-navy-800);color:var(--asp-surface);
    box-shadow:inset 0 -3px 0 var(--asp-teal-glow)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-nav .asp-guest-badge{position:absolute;top:var(--asp-space-1);right:calc(var(--asp-space-1) + var(--asp-space-6));left:auto}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar{flex-wrap:nowrap;padding-left:var(--asp-space-5);padding-right:var(--asp-space-5)}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch-inline{width:auto;flex:1 1 auto;min-width:0}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch select{max-width:none;flex:1 1 auto;min-width:0}
}
body:not(.pp):not(.asp-guest) .asp-side .asp-side-icon{opacity:1}
body:not(.pp):not(.asp-guest) .asp-side .asp-side-link:focus-visible,
body:not(.pp):not(.asp-guest) .asp-side .asp-side-sublink:focus-visible,
body:not(.pp):not(.asp-guest) .asp-side .asp-side-dept>summary:focus-visible{outline:2px solid var(--asp-focus-on-dark);outline-offset:2px;box-shadow:none}
/* If a rail ever shows icons only, every link keeps its name for a screen reader and shows it as a tip. */
body:not(.pp):not(.asp-guest) .asp-side.asp-side-compact .asp-side-link>span:not(.asp-nav-badge):not(.asp-guest-badge){display:inline;position:absolute;
  width:1px;height:1px;overflow:hidden;clip:rect(0 0 0 0);white-space:nowrap}

/* ---- 4. Counts and marks: tokens, one tone, never colour alone ----------------------------------------------------------- */
/* A number that wants attention is the warning tone; the count of open guest tickets is an outlined pill beside it, and each
   one is also said in words (a hidden sentence and a tip), so the two numbers on one row are not told apart by colour. */
body:not(.pp):not(.asp-guest) .asp-side .asp-nav-badge,
body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-nav-badge{background:var(--asp-warn-soft);color:var(--asp-warn-ink);
  border:1px solid var(--asp-warn);box-shadow:none;font-weight:700;letter-spacing:0}
body:not(.pp):not(.asp-guest) :is(.asp-side,.asp-more-sheet) :is(.asp-nav-badge,.asp-guest-badge){display:inline-flex;align-items:center;justify-content:center}
body:not(.pp):not(.asp-guest) .asp-side .asp-guest-badge,
body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-guest-badge{background:transparent;color:var(--asp-rail-ink);
  border:1px solid var(--asp-rail-ink-muted);box-shadow:none;font-weight:700;letter-spacing:0}
@media (min-width:1025px){
  body:not(.pp):not(.asp-guest) .asp-side .asp-guest-badge{margin-left:auto;min-width:22px;height:22px;padding:0 var(--asp-space-2);
    border-radius:var(--asp-radius-full);font-size:var(--asp-text-xs);line-height:20px;text-align:center}
  body:not(.pp):not(.asp-guest) .asp-side .asp-nav-badge{line-height:20px}
  body:not(.pp):not(.asp-guest) .asp-side .asp-guest-badge+.asp-nav-badge{margin-left:var(--asp-space-1)}
}
/* No coloured dots: a department dot carried no stated meaning (DESIGN.md 7.7). It stays in the markup, unseen. */
body:not(.pp):not(.asp-guest) .asp-side-dot,
body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-dot{display:none}

/* ---- 5. Tooltips: every control that shows an icon only names itself on hover AND on keyboard focus -------------------------- */
body:not(.pp):not(.asp-guest) :is(.asp-header-tool,.asp-account-trigger){position:relative}
body:not(.pp):not(.asp-guest) :is(.asp-header-tool,.asp-account-trigger)[aria-label]:is(:hover,:focus-visible)::after,
body:not(.pp):not(.asp-guest) details:not([open])>summary.asp-header-tool[aria-label]:is(:hover,:focus-visible)::after{
  content:attr(aria-label);position:absolute;top:calc(100% + var(--asp-tip-offset));right:0;z-index:90;padding:var(--asp-space-1) var(--asp-space-2);
  border-radius:var(--asp-radius-sm);background:var(--asp-navy-900);color:var(--asp-surface);font-size:var(--asp-text-xs);font-weight:600;
  line-height:1.3;white-space:nowrap;pointer-events:none}
body:not(.pp):not(.asp-guest) details[open]>summary.asp-header-tool::after{content:none}
@media (min-width:561px){
  body:not(.pp):not(.asp-guest) .asp-chat-launcher[aria-label]:is(:hover,:focus-visible)::after{content:attr(aria-label);position:absolute;
    right:calc(100% + var(--asp-space-2));top:50%;transform:translateY(-50%);z-index:90;padding:var(--asp-space-1) var(--asp-space-2);
    border-radius:var(--asp-radius-sm);background:var(--asp-navy-900);color:var(--asp-surface);font-size:var(--asp-text-xs);font-weight:600;
    line-height:1.3;white-space:nowrap;pointer-events:none;border:1px solid var(--asp-navy-600)}
}

/* ---- 6. The assistant launcher: a drawn icon, never a typed emoji ------------------------------------------------------------ */
body:not(.pp):not(.asp-guest) .asp-chat-launcher::before{content:none}
body:not(.pp):not(.asp-guest) .asp-chat-launcher .asp-chat-launcher-icon{width:24px;height:24px;flex:none;display:block}
body:not(.pp):not(.asp-guest) .asp-chat-launcher{z-index:70;color:var(--asp-surface)}
@media (min-width:561px){
  body:not(.pp):not(.asp-guest) .asp-chat-launcher{right:var(--asp-space-4);bottom:var(--asp-space-4);z-index:80}
}

/* ---- 7. Phone (under 561): one compact header row, a bottom bar with the launcher docked in it ------------------------------- */
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .asp-col>.topbar{flex-wrap:nowrap;gap:var(--asp-space-1);
    padding:calc(var(--asp-space-1) + env(safe-area-inset-top,0px)) var(--asp-space-3) var(--asp-space-1)}
  /* the product mark and name leave the bar (the hotel you are working in is the context a phone needs); nothing else does */
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .brand{display:none}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-workspace-header{flex:0 1 auto;gap:0;min-width:0}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch-inline{flex:1 1 0;width:auto;min-width:0;margin:0}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch{width:100%;gap:0}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch-label{position:absolute;width:1px;height:1px;overflow:hidden;
    clip:rect(0 0 0 0);white-space:nowrap}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-property-switch select{width:100%;max-width:none;min-height:44px;font-size:16px;
    text-overflow:ellipsis}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-hotel-indicator{flex:1 1 0;min-width:0;min-height:44px;margin:0;max-width:none}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tools{gap:0;margin-left:0;flex:none}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tools+.asp-header-account,
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-account{margin-left:0;flex:none}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool{width:44px;height:44px;border-color:transparent;background:transparent}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool.is-live{border-color:var(--asp-primary);background:var(--asp-primary)}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-header-tool svg{width:20px;height:20px}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-account-trigger{width:44px;min-width:44px;height:44px;padding:0;justify-content:center}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-account-caret{display:none}
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-account-panel,
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-gear-menu{max-width:calc(100vw - var(--asp-space-4))}

  /* the bottom bar: the rail's phone form (navy), five places and the assistant docked at its right end */
  body:not(.pp):not(.asp-guest) .asp-side{height:calc(var(--asp-bar-height) + env(safe-area-inset-bottom,0px));gap:0;align-items:stretch;
    padding:0 var(--asp-launcher-slot) env(safe-area-inset-bottom,0px) 0;background:var(--asp-navy-900);
    border-top:1px solid var(--asp-navy-800);box-shadow:none}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-brand{display:none}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-nav{flex:1 1 auto;width:auto;min-width:0;flex-wrap:nowrap;gap:0;align-items:stretch}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-nav .asp-side-link,
  body:not(.pp):not(.asp-guest) .asp-side a.asp-side-more{min-height:var(--asp-bar-height);padding:var(--asp-space-1) 0;gap:var(--asp-space-1);border-radius:0;
    background:transparent;color:var(--asp-rail-ink);font-size:var(--asp-bar-label);font-weight:600;position:relative;overflow:hidden}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-nav .asp-side-link.is-active{background:transparent;color:var(--asp-surface);
    box-shadow:inset 0 3px 0 var(--asp-teal-glow)}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-icon{width:22px;height:22px;flex:none}
  body:not(.pp):not(.asp-guest) .asp-side .asp-side-nav .asp-nav-badge{position:absolute;top:var(--asp-space-1);left:calc(50% + var(--asp-space-2));
    right:auto;min-width:16px;height:16px;padding:0 var(--asp-space-1);font-size:var(--asp-text-2xs);line-height:14px;margin:0}
  /* the assistant: a fifth slot of the bar, so it can never cover the page's content or a sticky Save row */
  body:not(.pp):not(.asp-guest) .asp-chat-launcher{right:0;bottom:0;width:var(--asp-launcher-slot);min-width:var(--asp-launcher-slot);
    height:calc(var(--asp-bar-height) + env(safe-area-inset-bottom,0px));min-height:0;padding:0 0 env(safe-area-inset-bottom,0px);
    border-radius:0;border:0;border-left:1px solid var(--asp-navy-800);background:transparent;box-shadow:none;justify-content:center;
    z-index:70;color:var(--asp-rail-ink)}
  body:not(.pp):not(.asp-guest) .asp-chat-launcher:hover{background:transparent;color:var(--asp-surface)}
  body:not(.pp):not(.asp-guest) .asp-chat-launcher .asp-chat-launcher-icon{width:24px;height:24px}
  body:not(.pp):not(.asp-guest) .asp-chat-launcher:focus-visible{outline:2px solid var(--asp-focus);outline-offset:-4px}
  body:not(.pp):not(.asp-guest) .asp-ui-form-actions{bottom:calc(var(--asp-bar-height) + env(safe-area-inset-bottom,0px));padding-right:0}

  /* the More sheet: the rail's full list, on the tokens, with targets a thumb can hit */
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel{background:var(--asp-navy-900);color:var(--asp-rail-ink)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-head b{color:var(--asp-surface)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-close{display:grid;place-items:center;width:44px;height:44px;min-height:44px;padding:0;
    background:var(--asp-navy-800);color:var(--asp-surface)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-close .asp-ui-icon{width:20px;height:20px}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-notification-mute{min-height:44px;height:44px;border-color:var(--asp-navy-600);
    background:transparent;color:var(--asp-rail-ink);font-size:var(--asp-text-sm)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-heading{color:var(--asp-rail-ink-muted)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-link,
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-dept>summary{color:var(--asp-rail-ink)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-link:hover,
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-sublink:hover{background:var(--asp-navy-800);color:var(--asp-surface)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-link.is-active,
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-dept[open]>summary{background:var(--asp-navy-800);color:var(--asp-surface);
    box-shadow:inset 3px 0 0 var(--asp-teal-glow)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-sub{border-left:2px solid var(--asp-navy-700)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-sublink{color:var(--asp-rail-ink)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-side-sublink.is-active{background:var(--asp-navy-800);color:var(--asp-surface);
    box-shadow:inset 3px 0 0 var(--asp-teal-glow)}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-nav-badge,
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-guest-badge{position:static;margin-left:auto;min-width:22px;height:22px;
    padding:0 var(--asp-space-2);border-radius:var(--asp-radius-full);font-size:var(--asp-text-xs);line-height:20px}
  body:not(.pp):not(.asp-guest) .asp-more-sheet .asp-more-panel-nav .asp-guest-badge+.asp-nav-badge{margin-left:var(--asp-space-1)}
}
/* a tablet's launcher floats at the corner like a computer's, clear of any bar */
@media (min-width:561px) and (max-width:1024px){
  body:not(.pp):not(.asp-guest) .asp-chat-launcher{bottom:var(--asp-space-4)}
}

/* ---- 8. The catalogue: category cards and the review, on the shared components and tokens --------------------------------------- */
body:not(.pp):not(.asp-guest) .main .asp-catalog-bundles{padding:var(--asp-space-4) var(--asp-space-5);margin-bottom:var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-bundles h2{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-lg);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-catalog-bundles .mini{margin:0 0 var(--asp-space-3);color:var(--asp-muted);font-size:var(--asp-text-xs)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-bundles .status-row{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin:0}
body:not(.pp):not(.asp-guest) .main .asp-catalog-bundles .btn{width:auto;min-height:var(--asp-control)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-section{padding:var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-section>h2{margin:0 0 var(--asp-space-3);font-size:var(--asp-text-lg);font-weight:600;color:var(--asp-ink)}
/* one category: a card you can tick anywhere on, with a clear ticked state (border and tint, and the box itself) */
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice,
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active{grid-template-columns:var(--asp-space-6) minmax(0,1fr);
  column-gap:var(--asp-space-3);padding:var(--asp-space-4);margin:0 0 var(--asp-space-3);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface);color:var(--asp-ink);cursor:pointer}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice:first-of-type,
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active:first-of-type{padding-top:var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active{grid-template-columns:minmax(0,1fr);cursor:default;
  background:var(--asp-surface-soft)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active+.choice,
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active+.asp-catalog-active{padding-top:var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice:hover{border-color:var(--asp-line-control)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice:has(input:checked){border-color:var(--asp-primary);background:var(--asp-teal-100);
  box-shadow:inset 3px 0 0 var(--asp-primary)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice:has(input:focus-visible){outline:2px solid var(--asp-focus);outline-offset:2px}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice input{width:var(--asp-space-6);height:var(--asp-space-6);min-height:0;margin:0;
  accent-color:var(--asp-primary);cursor:pointer}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice b,
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active b{color:var(--asp-ink);font-size:var(--asp-text-md);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice small,
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active small{color:var(--asp-muted);font-size:var(--asp-text-xs);line-height:1.5}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .choice small:last-child{color:var(--asp-ink-2)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-audience>span{color:var(--asp-ink-2)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-more summary{color:var(--asp-primary)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-active>.btn{min-height:var(--asp-control)}
body:not(.pp):not(.asp-guest) .main .asp-every-plan{margin:var(--asp-space-2) 0 0;color:var(--asp-muted);font-size:var(--asp-text-xs)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-submit{padding:var(--asp-space-4) var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-submit button{min-height:var(--asp-control)}
/* the review before anything is added: each category is one card (the list's own card is only its frame), the confirm row below */
body:not(.pp):not(.asp-guest) .main:has(>form[data-asp-catalog-build])>.card:has(>ul){background:transparent;border:0;padding:0;box-shadow:none;
  margin:0 0 var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main:has(>form[data-asp-catalog-build])>.card>ul{list-style:none;margin:0 0 var(--asp-space-3);padding:0;display:grid;
  gap:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main:has(>form[data-asp-catalog-build])>.card>ul>li{display:flex;flex-wrap:wrap;align-items:baseline;
  gap:var(--asp-space-1) var(--asp-space-2);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main:has(>form[data-asp-catalog-build])>.card>ul>li>b{font-size:var(--asp-text-md);font-weight:600;color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main:has(>form[data-asp-catalog-build])>.card>ul>li>.mini{flex:1 1 100%;margin:0;color:var(--asp-muted);
  font-size:var(--asp-text-xs);line-height:1.5}
body:not(.pp):not(.asp-guest) .main>form[data-asp-catalog-build]>.card{display:flex;align-items:center;gap:var(--asp-space-4);
  padding:var(--asp-space-4) var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main>form[data-asp-catalog-build] button{min-height:var(--asp-control)}
body:not(.pp):not(.asp-guest) .main>form[data-asp-catalog-build]+.btn{margin-top:var(--asp-space-3)}
@media (max-width:560px){
  /* the primary action stays above the bottom bar while you tick, like every other form's Save row */
  body:not(.pp):not(.asp-guest) .main .asp-catalog-submit{position:sticky;bottom:calc(var(--asp-bar-height) + env(safe-area-inset-bottom,0px));z-index:30;
    background:var(--asp-canvas);border-radius:0;border-width:1px 0 0}
  body:not(.pp):not(.asp-guest) .main .asp-catalog-bundles .status-row>.btn{width:100%;flex:1 1 100%}
  body:not(.pp):not(.asp-guest) .main>form[data-asp-catalog-build]>.card{position:sticky;bottom:calc(var(--asp-bar-height) + env(safe-area-inset-bottom,0px));
    z-index:30;border-radius:0;border-width:1px 0 0;background:var(--asp-canvas);flex-direction:column;align-items:stretch}
  body:not(.pp):not(.asp-guest) .main .asp-catalog-section{padding:var(--asp-space-4)}
}

/* === RC10.8.0 SYSTEMS TEMPLATE V2 === */
/* Phase 2 of the approved Harbor Ink look (owner, 2026-10-08): the one template every catalogue system is drawn with -- the
   board (header, toolbar, list), the record beside the list, the record page and the add form -- on the tokens rc1060 defines.
   Appended after rc1070, so it wins the cascade. Rules: tokens only (no raw colour or one-off size here); the product's four
   breakpoints (560 / 768 / 1024 / 1280); public and guest pages are left to their own phase; a state is a shape and a word,
   colour is only ever the third signal; no department mark, wash or button colour. */

/* ---- 1. The board's header: one title, one line of figures, the page's actions ---------------------------------------- */
/* The department mark is a typed dot the older template draws before the page; it carries no meaning any more. */
body:not(.pp):not(.asp-guest) .main>.asp-studio-mark{display:none}
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark)>.hero.compact{margin-bottom:var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .metrics .metric span,
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .metrics .metric b{font-size:var(--asp-text-sm)}
body:not(.pp):not(.asp-guest) .main .asp-studio-hero .lead{color:var(--asp-ink-2);font-size:var(--asp-text-base);line-height:1.5;max-width:72ch}

/* ---- 2. The toolbar: search, stage and Filter on one line; every control has a visible edge ------------------------------ */
body:not(.pp):not(.asp-guest) .main .asp-board-bar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2) var(--asp-space-4);
  margin:0 0 var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main .asp-board-bar>.section-head h2{font-size:var(--asp-text-lg);font-weight:600;line-height:1.3}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar{flex:1 1 420px;min-width:0;margin:0;padding:0;border:0;background:transparent;box-shadow:none;
  display:grid;grid-template-columns:minmax(160px,1fr) auto minmax(150px,220px) auto;gap:var(--asp-space-2);align-items:center}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar>.loading-note{grid-column:1 / -1}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar>label{margin:0;font-size:var(--asp-text-xs);font-weight:600;color:var(--asp-muted);
  text-transform:none;letter-spacing:0;justify-self:end}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar input,
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar select{width:100%;min-width:0;min-height:var(--asp-control);margin:0;padding:0 var(--asp-space-3);
  border:1px solid var(--asp-line-control);border-radius:var(--asp-radius-sm);background:var(--asp-surface);color:var(--asp-ink);
  font-size:var(--asp-text-base);font-weight:400;background-image:none}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar select{padding-right:var(--asp-space-8);background-image:revert}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar input::placeholder{color:var(--asp-muted);opacity:1}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar button{min-height:var(--asp-control);margin:0;padding:0 var(--asp-space-4);
  border-radius:var(--asp-radius-sm);background:var(--asp-surface);border:1px solid var(--asp-line-control);color:var(--asp-ink);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar button:hover{background:var(--asp-surface-hover)}
@media (max-width:1024px){
  body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar{flex-basis:100%;grid-template-columns:minmax(0,1fr) auto minmax(120px,200px) auto}
}
/* "What falls due" and its like: a calm one-line fold, its toggle a quiet control, not a second primary button */
body:not(.pp):not(.asp-guest) .main .asp-sig-summary{min-height:var(--asp-control);padding:var(--asp-space-2) var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-sig-toggle{border-radius:var(--asp-radius-sm);border:1px solid var(--asp-line-control);background:var(--asp-surface);
  color:var(--asp-ink);font-size:var(--asp-text-sm);font-weight:600;padding:var(--asp-space-1) var(--asp-space-3);min-height:32px}

/* ---- 3. The list: one panel, rows divided by hairlines, the open row marked by a bar as well as a tint ------------------- */
body:not(.pp):not(.asp-guest) .main .asp-split-list>.card{padding:0;overflow:hidden}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row{display:flex;align-items:center;gap:var(--asp-space-3);min-height:56px;margin:0;
  padding:var(--asp-space-2) var(--asp-space-4);border:0;border-bottom:1px solid var(--asp-line);border-left:3px solid transparent;border-radius:0;
  background:var(--asp-surface);box-shadow:none;color:var(--asp-ink);text-decoration:none}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row:last-child{border-bottom:0}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row:hover{background:var(--asp-surface-hover)}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row.is-open{background:var(--asp-teal-100);border-left-color:var(--asp-primary)}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row-main{flex:1 1 auto;min-width:0}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row-main>b:first-child{display:block;font-size:var(--asp-text-base);font-weight:600;line-height:1.35;
  overflow-wrap:anywhere}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row-main .mini{font-size:var(--asp-text-xs);color:var(--asp-muted);font-variant-numeric:tabular-nums}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row>.asp-ui-statusmark{order:1;flex:0 0 auto}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row>.status-row{order:2}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row .status-row{flex:0 0 auto;display:flex;flex-wrap:wrap;justify-content:flex-end;
  align-items:center;gap:var(--asp-space-1) var(--asp-space-2);margin:0}
body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row .status-row .mini{color:var(--asp-muted);font-size:var(--asp-text-xs)}

/* ---- 4. A state is a shape and a word -------------------------------------------------------------------------------------- */
/* rc1080 puts the glyph of the state in front of the pill the product already drew; the two read as one mark. */
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark{display:inline-flex;align-items:center;gap:0;padding-left:var(--asp-space-2);
  border:1px solid var(--asp-line);border-radius:var(--asp-radius-full);background:var(--asp-surface-soft);color:var(--asp-neutral-ink);
  white-space:nowrap;vertical-align:middle}
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark .asp-ui-state{display:inline-flex;flex:none}
/* the wrapper draws the edge and the fill; older row rules (with :has and three :not) paint the pill itself, so the wrapper's
   rule repeats its classes to outrank them rather than force it */
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark.asp-ui-statusmark>.pill.pill.pill{border:0;background:transparent;color:inherit;min-height:22px;
  padding:var(--asp-space-1) var(--asp-space-2) var(--asp-space-1) var(--asp-space-1)}
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark.is-good{background:var(--asp-good-soft);border-color:var(--asp-good-border);color:var(--asp-good-ink)}
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark.is-warn{background:var(--asp-warn-soft);border-color:var(--asp-bronze-border);color:var(--asp-warn-ink)}
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark.is-bad{background:var(--asp-bad-soft);border-color:var(--asp-bad);color:var(--asp-bad)}
body:not(.pp):not(.asp-guest) .main .asp-ui-statusmark.is-info{background:var(--asp-info-soft);border-color:var(--asp-info);color:var(--asp-info)}
/* a record's tracking number is a name, not a state: it reads as plain figures, never as a green status */
body:not(.pp):not(.asp-guest) .main .hero .status-row>.pill.good:first-child:not(:last-child){background:transparent;border-color:transparent;color:var(--asp-muted);
  padding-left:0;font-variant-numeric:tabular-nums}

/* ---- 5. Guidance and help links under the list: quiet, one row ----------------------------------------------------------- */
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark) .asp-guidance{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark) .asp-guidance>details.asp-system-help>summary,
body:not(.pp):not(.asp-guest) .main:has(>.asp-studio-mark) .asp-guidance>.btn{min-height:var(--asp-control);padding:0 var(--asp-space-3);border-radius:var(--asp-radius-sm);
  border:1px solid var(--asp-line-control);background:var(--asp-surface);color:var(--asp-ink);font-size:var(--asp-text-sm);font-weight:600}

/* ---- 6. Empty states: what would be here, said calmly ------------------------------------------------------------------------ */
body:not(.pp):not(.asp-guest) .main .asp-split-empty{border:1px dashed var(--asp-line-control);background:transparent;text-align:left;padding:var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main .asp-split-empty .asp-split-empty-title{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-md);font-weight:600;color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .asp-split-empty p{margin:0;color:var(--asp-muted);font-size:var(--asp-text-sm)}

/* ---- 7. The record: a panel beside the list (and the page when opened full) ---------------------------------------------------- */
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel]{padding:var(--asp-space-4) var(--asp-space-5);gap:var(--asp-space-3);
  border-radius:var(--asp-radius-md)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel]>.asp-split-bar{gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel]>.asp-split-bar .btn{min-height:var(--asp-control);padding:0 var(--asp-space-3);
  border-radius:var(--asp-radius-sm);border:1px solid var(--asp-line-control);background:var(--asp-surface);color:var(--asp-ink);font-size:var(--asp-text-sm);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel]>.asp-split-bar .btn.ghost{border-color:transparent;background:transparent;color:var(--asp-primary)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel]>.hero h1,
body:not(.pp):not(.asp-guest) .main .asp-split-detail .asp-ui-record-title{margin:0;font-size:var(--asp-text-xl);font-weight:600;line-height:1.25;letter-spacing:0}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .hero .hero-actions>div{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-1) var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .hero .status-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2);margin:0}
/* the stage buttons: one primary move, the rest behind "Other moves" */
body:not(.pp):not(.asp-guest) .main .asp-workflow{margin:0 0 var(--asp-space-4);padding:0;border:0;background:transparent}
body:not(.pp):not(.asp-guest) .main .asp-workflow-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .main .asp-workflow-actions .asp-workflow-btn,
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel] .asp-workflow-btn{flex:0 0 auto;min-height:var(--asp-control);padding:0 var(--asp-space-4);
  border-radius:var(--asp-radius-sm);font-size:var(--asp-text-base);font-weight:600;box-shadow:none;border:1px solid var(--asp-line-control);
  background:var(--asp-surface);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .asp-workflow>.asp-workflow-actions>.asp-workflow-btn:first-child,
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel] .asp-workflow>.asp-workflow-actions>.asp-workflow-btn:first-child{
  background:var(--asp-primary);border-color:var(--asp-primary);color:var(--asp-on-primary);box-shadow:none}
body:not(.pp):not(.asp-guest) .main .asp-workflow>.asp-workflow-actions>.asp-workflow-btn:first-child:hover{background:var(--asp-primary-hover);border-color:var(--asp-primary-hover)}
body:not(.pp):not(.asp-guest) .main .asp-workflow-more{flex:0 1 auto}
body:not(.pp):not(.asp-guest) .main .asp-workflow-more>summary{display:inline-flex;align-items:center;min-height:var(--asp-control);padding:0 var(--asp-space-3);
  border:1px solid var(--asp-line-control);border-radius:var(--asp-radius-sm);background:var(--asp-surface);color:var(--asp-ink);font-size:var(--asp-text-base);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-workflow-more[open]{flex:1 1 100%}
body:not(.pp):not(.asp-guest) .main .asp-workflow-more[open]>.asp-workflow-actions{margin-top:var(--asp-space-2)}

/* the fields: titled groups in two columns, no tile behind each field, hints small and under the control */
body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel] form[action$='/update']:has(>.asp-ui-fieldset){display:block}
body:not(.pp):not(.asp-guest) .main .asp-ui-field>.asp-field{display:block;margin:0;padding:0;border:0;border-radius:0;background:transparent}
body:not(.pp):not(.asp-guest) .main .asp-ui-field>.asp-field>label,
body:not(.pp):not(.asp-guest) .main .asp-ui-field>label{display:block;margin:0 0 var(--asp-space-1);font-size:var(--asp-text-sm);font-weight:600;color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .asp-ui-field>.asp-field :is(input:not([type=checkbox]):not([type=radio]),select,textarea){width:100%;min-height:var(--asp-control);
  margin:0;border:1px solid var(--asp-line-control);border-radius:var(--asp-radius-sm);background:var(--asp-surface);font-size:var(--asp-text-base);font-weight:400}
body:not(.pp):not(.asp-guest) .main .asp-ui-field>.asp-field textarea{min-height:88px}
body:not(.pp):not(.asp-guest) .main .asp-ui-field>.asp-field .mini{display:block;margin:var(--asp-space-1) 0 0;font-size:var(--asp-text-xs);line-height:1.4;color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .main .asp-ui-fieldset .req{font-weight:400;color:var(--asp-muted);font-size:var(--asp-text-xs)}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .asp-ui-fieldset>legend{font-size:var(--asp-text-md);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-ui-fieldset-grid .asp-ui-field.is-wide .asp-checklist-fold{margin-top:var(--asp-space-2)}

/* the save row: the shared form-actions row; inside the panel it sticks to the foot of the panel's own scroll */
body:not(.pp):not(.asp-guest) .main .asp-split-detail .asp-ui-form-actions{position:sticky;bottom:0;z-index:5;margin-top:var(--asp-space-4);
  padding:var(--asp-space-3) 0;background:var(--asp-surface);border-top:1px solid var(--asp-line)}
/* on the full record page it sticks to the foot of the window while the form is on screen */
body:not(.pp):not(.asp-guest) .main form[action$='/update'] .asp-ui-form-actions{position:sticky;bottom:0;z-index:5;background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .asp-ui-form-actions>.loading-note{flex:1 1 100%;margin:0}
body:not(.pp):not(.asp-guest) .main .asp-ui-form-actions>button{min-height:var(--asp-control);margin:0}
body:not(.pp):not(.asp-guest) .main .asp-ui-form-actions>button.asp-workflow-btn{background:var(--asp-surface);color:var(--asp-ink);border:1px solid var(--asp-line-control)}

/* the record page: the details get the wider column, history and photos the narrower one */
@media (min-width:1025px){
  body:not(.pp):not(.asp-guest) .main>.grid.two:has(form[action$='/update']){grid-template-columns:minmax(0,1.7fr) minmax(280px,1fr)}
}
/* history, photos, comments: sections of the same panel, not boxes inside it */
body:not(.pp):not(.asp-guest) .main .asp-split-detail .asp-panel-history>summary,
body:not(.pp):not(.asp-guest) .main .asp-split-detail details.card>summary{min-height:var(--asp-control);display:flex;align-items:center;font-size:var(--asp-text-md);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .card h3{font-size:var(--asp-text-md);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-split-detail .card{padding:var(--asp-space-3) 0 0;border-top:1px solid var(--asp-line)}

/* ---- 8. A phone: every control 44 px, the record first, the save row above the phone bar ----------------------------------------- */
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main.asp-operations-v2>.grid.two{grid-template-columns:minmax(0,1fr)}
  body:not(.pp):not(.asp-guest) .main.asp-operations-v2>.grid.two>*{min-width:0}
  body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar{grid-template-columns:auto minmax(0,1fr);flex-basis:100%}
  body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar>input{grid-column:1 / -1}
  body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar>button{grid-column:1 / -1;width:100%}
  body:not(.pp):not(.asp-guest) .main .asp-board-bar .filterbar>label{justify-self:start}
  body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row{min-height:64px;flex-wrap:wrap}
  body:not(.pp):not(.asp-guest) .main .asp-split-list .system-row .status-row{flex:1 1 100%;justify-content:flex-start}
  body:not(.pp):not(.asp-guest) .main .asp-workflow-more>summary,
  body:not(.pp):not(.asp-guest) .main .asp-sig-summary,
  body:not(.pp):not(.asp-guest) .main .asp-sig-toggle,
  body:not(.pp):not(.asp-guest) .main .asp-split-detail .asp-panel-history>summary,
  body:not(.pp):not(.asp-guest) .main .asp-split-detail details.card>summary{min-height:44px}
  body:not(.pp):not(.asp-guest) .main .asp-workflow-actions .asp-workflow-btn{flex:1 1 auto}
  body:not(.pp):not(.asp-guest) .main form[action$='/update'] .asp-ui-form-actions,
  body:not(.pp):not(.asp-guest) .main .asp-split-detail .asp-ui-form-actions{bottom:calc(var(--asp-bar-height) + env(safe-area-inset-bottom,0px));
    background:var(--asp-canvas)}
  body:not(.pp):not(.asp-guest) .main .asp-split-detail[data-asp-studio-panel]{padding:var(--asp-space-3)}
}

/* === RC10.8.1 TODAY AND OPERATIONS V2 === */
/* Phase 2, second slice of the approved Harbor Ink look (owner, 2026-10-08): Home, Inbox, Messages, My tasks, Reminders, the Dashboard
   and its metric pages, the housekeeping workload and morning report pages, and Lost & Found's staff side. Appended after rc1080 so it
   wins the cascade. Rules: tokens only (no raw colour or size here); the product's four breakpoints (560 / 768 / 1024 / 1280); public
   and guest pages are left to their own phase; state is a word and a shape; no markup, count or figure is touched. */

/* ---- 1. A title inside a card or a section is a section title, below the page's own ------------------------------------------------ */
/* These pages drew their card titles at the browser's 31 px, taller than the 24 px page title above them. */
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-inbox,.page-reminders,.page-my-tasks,.page-metric-detail,.page-dashboard,.page-lost-found,.asp-home) .main h2,
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-inbox,.page-reminders,.page-my-tasks,.page-metric-detail,.page-dashboard,.page-lost-found,.asp-home) .main .card>h2{
  font-size:var(--asp-text-lg);font-weight:600;line-height:1.3;letter-spacing:0}
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-inbox,.page-reminders,.page-my-tasks,.page-metric-detail,.page-dashboard,.page-lost-found,.asp-home) .main h3{
  font-size:var(--asp-text-md);font-weight:600;line-height:1.3;letter-spacing:0}
body:not(.pp):not(.asp-guest):is(.page-dashboard,.asp-home) .main :is(.asp-reference-intelligence,.asp-reference-detail,.asp-home-quick-actions) h2{
  font-size:var(--asp-text-lg);color:var(--asp-ink)}

/* ---- 2. The Dashboard: one flat, light page ------------------------------------------------------------------------------------------ */
body:not(.pp):not(.asp-guest) .asp-dashboard-reference .asp-reference-top,
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-top{background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  box-shadow:none;padding:var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .asp-dashboard-reference .asp-reference-top::after,
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-top::after{display:none}
body:not(.pp):not(.asp-guest) .asp-dashboard-reference .asp-reference-kpi-grid,
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi-grid{grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:var(--asp-space-3);margin:var(--asp-space-4) 0}
body:not(.pp):not(.asp-guest) .asp-dashboard-reference .asp-reference-kpi,
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi{min-height:0;gap:var(--asp-space-2);background:var(--asp-surface);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);box-shadow:none;padding:var(--asp-space-3) var(--asp-space-4);transition:none;transform:none}
body:not(.pp):not(.asp-guest) .asp-dashboard-reference .asp-reference-kpi:hover,
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi:hover{transform:none;box-shadow:none;border-color:var(--asp-line-control);background:var(--asp-surface-hover)}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi strong{font-size:var(--asp-text-metric);font-weight:600;line-height:1.1;letter-spacing:0;
  color:var(--asp-ink);font-variant-numeric:tabular-nums}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi-label{font-size:var(--asp-text-xs);font-weight:600;color:var(--asp-ink-2)}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi-note{font-size:var(--asp-text-xs);font-weight:400;color:var(--asp-muted)}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-kpi-trend em{font-size:var(--asp-text-xs);font-weight:600;color:var(--asp-good-ink)}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-intelligence{background:var(--asp-surface);border:1px solid var(--asp-line);
  border-left:3px solid var(--asp-primary);border-radius:var(--asp-radius-md);box-shadow:none;padding:var(--asp-space-4) var(--asp-space-5)}
body:not(.pp):not(.asp-guest).page-dashboard .asp-ai-panel{background:transparent;border:0;border-radius:0;box-shadow:none;padding:0}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-detail{box-shadow:none;border-radius:0;background:transparent}
body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-detail-skeleton i{border-radius:var(--asp-radius-md)}
body:not(.pp):not(.asp-guest).page-dashboard .asp-across .asp-across-chip{border-color:var(--asp-line-control);font-weight:600}
/* the older Dashboard cards (.asp-dash-v2) were drawn dark; they read the same light surface and ink as every other page */
body:not(.pp):not(.asp-guest) .asp-dash-v2 .card,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-kpi,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-hotel-pulse-card,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-overview-card{background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  box-shadow:none;color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .card:hover,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-hotel-pulse-card:hover,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-overview-card:hover{border-color:var(--asp-line-control);box-shadow:none}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .card :is(h2,h3),
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-kpi-value,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-hotel-pulse-name,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-overview-card-top b,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-ai-step,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-ai-idea h3,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-dash-other summary{color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-kpi.is-missing{background:var(--asp-surface-soft);border:1px dashed var(--asp-line-control)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-hotel-pulse-stats b{color:var(--asp-primary)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-dash-other,
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-ai-idea{background:var(--asp-surface-soft);border:1px solid var(--asp-line)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .pill{background:var(--asp-surface-soft);color:var(--asp-neutral-ink);border:1px solid var(--asp-line)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 a.btn.secondary{border-color:var(--asp-line-control);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .asp-dash-picker select{background:var(--asp-surface);border-color:var(--asp-line-control);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .hero.compact{background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);box-shadow:none}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .hero.compact::after{display:none}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .hero.compact h1{color:var(--asp-ink);font-size:var(--asp-text-2xl);font-weight:600;letter-spacing:0}
body:not(.pp):not(.asp-guest) .asp-dash-v2 .hero.compact .eyebrow{color:var(--asp-primary)}

/* ---- 3. Checkboxes and number boxes: one size, the primary colour, a 44 px row ----------------------------------------------------- */
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found,.page-reminders,.page-inbox) .main input[type=checkbox]{
  width:20px;height:20px;min-height:0;margin:0;flex:none;accent-color:var(--asp-primary)}
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found,.page-reminders,.page-inbox) .main label:has(>input[type=checkbox]){
  display:flex;align-items:center;gap:var(--asp-space-3);min-height:44px;padding:var(--asp-space-1) 0;font-size:var(--asp-text-base);
  letter-spacing:0;text-transform:none}
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main input[type=number]{min-height:var(--asp-control);border:1px solid var(--asp-line-control);
  border-radius:var(--asp-radius-sm);background:var(--asp-surface)}
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main input[type=number]::placeholder{color:var(--asp-muted);opacity:1}

/* ---- 4. Buttons that sit side by side have a gap, and a card's actions read as one row --------------------------------------------- */
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found,.page-reminders,.page-my-tasks) .main>a.btn,
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found,.page-reminders,.page-my-tasks) .main>form>button{margin:0 var(--asp-space-2) var(--asp-space-2) 0}
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main .card>.btn+.btn,
body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main .card .btn+.btn{margin-left:var(--asp-space-2)}

/* ---- 5. Inbox tabs, reminders and Lost & Found cards on the shared panel look ----------------------------------------------------------- */
body:not(.pp):not(.asp-guest).page-inbox .main .asp-inbox-tabs,
body:not(.pp):not(.asp-guest).page-inbox .main nav[aria-label]{border-radius:var(--asp-radius-md)}
body:not(.pp):not(.asp-guest):is(.page-inbox,.page-reminders,.page-my-tasks) .main .card .muted{font-size:var(--asp-text-base)}

/* ---- 6. A phone: the controls these pages add are 44 px ------------------------------------------------------------------------------------- */
@media (max-width:560px){
  body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main input[type=number],
  body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main input[type=text],
  body:not(.pp):not(.asp-guest):is(.page-feedback,.page-lost-found) .main select{min-height:44px}
  body:not(.pp):not(.asp-guest).page-dashboard .asp-reference-top{padding:var(--asp-space-4)}
}

/* ---- 7. The Dashboard when it holds figures (the "ledger" page): one bronze rule under the title, thin ink rules, figures at the metric size ---- */
body:not(.pp):not(.asp-guest) .main .asp-ledger{max-width:none;margin:0;padding:0 0 var(--asp-space-6)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-head{border-bottom:2px solid var(--asp-bronze-600)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-head h1{font-size:var(--asp-text-2xl);font-weight:600;letter-spacing:0}
body:not(.pp):not(.asp-guest) .main .asp-ledger-rules,
body:not(.pp):not(.asp-guest) .main .asp-ledger-band{border-top:1px solid var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-sec-top h2{font-size:var(--asp-text-md);font-weight:600;letter-spacing:0;text-transform:none}
body:not(.pp):not(.asp-guest) .main .asp-ledger-mark{background:var(--asp-surface-soft);color:var(--asp-primary)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band .asp-kpi{padding:var(--asp-space-4)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band .asp-kpi-value{font-size:var(--asp-text-metric);font-weight:600;line-height:1.1;letter-spacing:0;color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band .asp-kpi-label{font-size:var(--asp-text-xs);font-weight:600;letter-spacing:0;text-transform:none;color:var(--asp-ink-2)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-tab{min-height:var(--asp-control)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-filing-part h2{font-size:var(--asp-text-lg);font-weight:600}
@media (max-width:768px){
  body:not(.pp):not(.asp-guest) .main .asp-ledger-band{grid-template-columns:repeat(2,minmax(0,1fr))}
}

/* Append after the final .asp-ledger-head h1 rule in
   build_patches/rc1081/today_and_operations_v2.css after merging ui-phase-2.
   The shared phone page title is 22 px (rc1060). */
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main .asp-ledger-head h1{
    font-size:calc(var(--asp-text-2xl) - 2px)
  }
}

@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .asp-dash-v2 .hero.compact h1{font-size:calc(var(--asp-text-2xl) - 2px)}
  body:not(.pp):not(.asp-guest) .main form[action$='/housekeeping-auto-assign'] input[type=number],
  body:not(.pp):not(.asp-guest) .main form[action$='/housekeeping-workload'] input[type=date]{min-height:var(--asp-control)}
}

body:not(.pp):not(.asp-guest) .main.asp-operations-v2 :is(h2,.card>h2){font-size:var(--asp-text-lg);font-weight:600;line-height:1.3;letter-spacing:0}
body:not(.pp):not(.asp-guest) .main.asp-operations-v2 h3{font-size:var(--asp-text-md);font-weight:600;line-height:1.3;letter-spacing:0}
body:not(.pp):not(.asp-guest) .main.asp-operations-v2 label:has(>input[type=checkbox]){min-height:var(--asp-control);display:flex;align-items:center;gap:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .main.asp-operations-v2 .asp-lf-box{box-shadow:none;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}

/* RC10.9.0 Lost & Found terms dialog */
.asp-lf-terms-dialog{width:min(720px,calc(100% - 32px));max-height:min(86vh,900px);padding:0;overflow:auto;border:0;border-radius:var(--asp-radius-lg);background:var(--asp-surface);color:var(--asp-ink);box-shadow:var(--asp-shadow-lg)}
.asp-lf-terms-dialog::backdrop{background:color-mix(in srgb,var(--asp-ink) 55%,transparent)}
.asp-lf-terms-dialog>.card{margin:0;border:0;box-shadow:none;background:transparent;padding:var(--asp-space-5) var(--asp-space-5) var(--asp-space-3)}
.asp-lf-terms-dialog>.card h3{margin-top:var(--asp-space-4)}
.asp-lf-terms-dialog>.card p{line-height:1.6}
.asp-lf-terms-close{display:flex;justify-content:flex-end;position:sticky;bottom:0;margin:0;padding:var(--asp-space-3) var(--asp-space-5) var(--asp-space-4);background:var(--asp-surface);border-top:1px solid var(--asp-line)}
.asp-lf-terms-line{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2);margin:0 0 var(--asp-space-4)}
.asp-lf-terms-line .btn{margin-left:auto}
.asp-lf-terms-view{margin:0 0 var(--asp-space-3);font-size:var(--asp-text-sm)}
@media (max-width:560px){.asp-lf-terms-dialog{width:calc(100% - 16px);max-height:92vh}.asp-lf-terms-dialog>.card{padding:var(--asp-space-4)}.asp-lf-terms-close{padding:0 var(--asp-space-4) var(--asp-space-4)}.asp-lf-terms-line .btn{margin-left:0}}

/* RC10.9.1 invoice new payee */
.asp-payee-add{margin-top:var(--asp-space-2)}
.asp-payee-dialog{width:min(480px,calc(100% - 32px));padding:var(--asp-space-5);border:0;border-radius:var(--asp-radius-lg);background:var(--asp-surface);color:var(--asp-ink);box-shadow:var(--asp-shadow-lg)}
.asp-payee-dialog::backdrop{background:color-mix(in srgb,var(--asp-ink) 55%,transparent)}
.asp-payee-dialog h2{margin:0 0 var(--asp-space-3)}
.asp-payee-dialog .status-row{margin-top:var(--asp-space-3)}
@media (max-width:560px){.asp-payee-dialog{width:calc(100% - 16px);padding:var(--asp-space-4)}}

/* RC10.9.2 hotel logo everywhere */
.asp-dir-logo{max-width:min(86%,380px);max-height:120px}
.asp-dir-head .asp-dir-logo{max-height:104px}
@media (max-width:560px){.asp-dir-logo{max-height:92px}.asp-dir-head .asp-dir-logo{max-height:80px}}
.asp-brand-asset-preview{max-width:300px;max-height:110px}

/* RC10.9.3 hiring messages and next step */
.asp-hire-actions{display:grid;gap:var(--asp-space-2);margin:0 0 var(--asp-space-5);padding:var(--asp-space-4) var(--asp-space-5);background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg)}
.asp-hire-actions>p{margin:0}
.asp-hire-action-row{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-3)}
.asp-hire-action-row form{margin:0}
.asp-hire-details{margin:var(--asp-space-4) 0 0;padding:var(--asp-space-4);background:var(--asp-surface-soft);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}
.asp-hire-details h3{margin:0 0 var(--asp-space-3)}
.asp-hire-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(200px,1fr));gap:var(--asp-space-3);margin:0 0 var(--asp-space-3)}
.asp-hire-field label{display:block}
.asp-hire-compose textarea{font-family:inherit;line-height:1.55}
.asp-hire-missing{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2)}
.asp-hire-fieldlist{margin:var(--asp-space-3) 0}
.asp-hire-fieldlist ul{margin:var(--asp-space-2) 0 0;padding-left:var(--asp-space-5)}
.asp-hire-fieldlist li{margin:0 0 var(--asp-space-1)}

/* RC10.9.4 jobs screens calm */
.asp-hire-needs{display:grid;grid-template-columns:repeat(auto-fit,minmax(180px,1fr));gap:var(--asp-space-3);margin:0 0 var(--asp-space-5)}
.asp-hire-tile{display:grid;gap:var(--asp-space-1);padding:var(--asp-space-4);background:var(--asp-surface);border:1px solid var(--asp-line);border-radius:var(--asp-radius-lg);color:var(--asp-ink);text-decoration:none}
.asp-hire-tile b{font-size:var(--asp-text-2xl);line-height:1;font-variant-numeric:tabular-nums}
.asp-hire-tile span{font-size:var(--asp-text-sm);color:var(--asp-muted)}
.asp-hire-tile:hover{border-color:var(--asp-teal-600)}
.asp-hire-tile.is-quiet b{color:var(--asp-muted)}
.asp-hire-new{margin:var(--asp-space-5) 0}
.asp-hire-new>summary{display:inline-flex;list-style:none;cursor:pointer}
.asp-hire-new>summary::-webkit-details-marker{display:none}
.asp-hire-new[open]>summary{margin-bottom:var(--asp-space-4)}
label.check+p.mini{margin-top:var(--asp-space-2)}
.asp-hire-quiet{margin:0 0 var(--asp-space-4)}
.asp-hire-more{display:inline-block}
.asp-hire-more>summary{cursor:pointer;font-size:var(--asp-text-sm);color:var(--asp-muted)}
.asp-hire-more[open]>summary{margin-bottom:var(--asp-space-2)}
.asp-hire-link{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2)}
.asp-hire-link code{overflow-wrap:anywhere}

/* RC10.9.5 Lost & Found list rows */
.asp-lf-card-top b{display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;white-space:normal;overflow:hidden;overflow-wrap:anywhere}
.asp-lf-card-main .asp-lf-card-place{display:block;white-space:normal;overflow:visible;text-overflow:clip;overflow-wrap:anywhere}

/* RC10.9.6 catalogue cards without a tick box */
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-section .asp-catalog-active{grid-template-columns:var(--asp-space-6) minmax(0,1fr)}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-section .asp-catalog-active>span,body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-section .asp-catalog-active>small,body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-section .asp-catalog-active>.btn{grid-column:2;min-width:0}
body:not(.pp):not(.asp-guest) .main .asp-catalog-picker .asp-catalog-section .asp-catalog-active>.btn{justify-self:start;margin-top:var(--asp-space-2)}

/* RC10.9.7 housekeeping helpers */
.asp-room-team{margin-top:var(--asp-space-4);padding-top:var(--asp-space-4);border-top:1px solid var(--asp-line)}
.asp-room-team h3{margin:0 0 var(--asp-space-2);font-size:var(--asp-text-md)}
.asp-room-team ul{margin:0 0 var(--asp-space-2);padding:0;list-style:none;display:grid;gap:var(--asp-space-2)}
.asp-room-team li{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2);min-width:0;overflow-wrap:anywhere}
.asp-room-team li form{margin:0 0 0 auto}
.asp-room-helper-add form{display:grid;gap:var(--asp-space-2);margin-top:var(--asp-space-2);max-width:420px}
.asp-room-helpers{display:block;color:var(--asp-muted)}

/* RC11.0.1 shift log */
.asp-shift-log h3{margin:var(--asp-space-4) 0 var(--asp-space-2);font-size:var(--asp-text-md)}
.asp-passdown-list li.asp-shift-log-entry{display:block}
.asp-shift-log-entry p{margin:var(--asp-space-1) 0;overflow-wrap:anywhere}
.asp-shift-log-addendum{padding-left:var(--asp-space-3);border-left:2px solid var(--asp-line)}
.asp-shift-log-close,.asp-shift-log-convert{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:end;margin-top:var(--asp-space-2)}
.asp-shift-log-convert form{margin:0}
.asp-shift-log-form details{margin:var(--asp-space-2) 0}
.asp-shift-log-close-shift{margin-top:var(--asp-space-3)}
.asp-shift-log-field{display:flex;align-items:center;gap:var(--asp-space-1);min-width:0}
.asp-shift-log-field label{white-space:nowrap;margin:0}

/* RC11.0.2 dashboard money first */
.asp-rc1102-order{display:grid;gap:var(--asp-space-4)}
.asp-rc1102-order .asp-ledger-sec{margin:0}
.asp-ledger-sec .asp-ai-panel{border:0;box-shadow:none;padding:0;margin:0;background:transparent}
.asp-rc1102-dates{flex-wrap:wrap}
.asp-rc1102-date{display:flex;align-items:center;gap:var(--asp-space-2);margin:0}
.asp-rc1102-date input{min-height:40px}
.asp-rc1102-date .btn{margin:0;min-height:40px}
.asp-ledger-arrow.is-off{display:grid;place-items:center;width:44px;height:40px;color:var(--asp-muted);opacity:.45}
.asp-rc1102-one-row{grid-template-columns:minmax(180px,1.2fr) minmax(160px,.8fr) auto auto;align-items:end}
.asp-rc1102-one-row .btn{margin:0;align-self:end}
.asp-rc1102-one-row .asp-reference-date-nav{margin:0;min-height:43px;align-self:end;justify-content:flex-start}
.asp-rc1102-all{margin-top:var(--asp-space-3)}
.asp-rc1102-all>summary{list-style:none;cursor:pointer}
.asp-rc1102-all>summary::-webkit-details-marker{display:none}
.asp-rc1102-all[open]>summary{margin-bottom:var(--asp-space-3)}
@media(max-width:768px){.asp-rc1102-one-row{grid-template-columns:1fr}.asp-rc1102-one-row .asp-reference-date-nav{justify-content:space-between}.asp-rc1102-date input,.asp-rc1102-date .btn{min-height:44px}}

/* RC11.0.3 smart night audit reader */
.asp-rc1103-head{margin:var(--asp-space-4) 0 var(--asp-space-2);font-size:var(--asp-text-md)}
.asp-rc1103-unread{margin-top:var(--asp-space-4)}
.asp-rc1103-unread summary{cursor:pointer}
.asp-rc1103-unread summary h2{display:inline;font-size:var(--asp-text-md)}
.asp-rc1103-reports{margin:0 0 var(--asp-space-2);padding-left:var(--asp-space-4)}
.asp-rc1103-table code{overflow-wrap:anywhere;white-space:normal}
.asp-rc1103-teach{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:end;margin:0}
.asp-rc1103-teach select{min-width:0;max-width:100%}
.asp-rc1103-reread{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center;margin-top:var(--asp-space-3)}
.asp-rc1103-said{margin:var(--asp-space-2) 0 0;font-weight:600}
.asp-rc1103-said.is-refused{color:var(--asp-bad)}

/* RC11.0.6 inventory counts */
.asp-inv-plans{list-style:none;margin:0;padding:0}
.asp-inv-plan-row{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--asp-space-2);padding:var(--asp-space-3) 0;border-bottom:1px solid var(--asp-line)}
.asp-inv-plan-row .mini{margin-top:var(--asp-space-1)}
.asp-inv-plan-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);align-items:center}
.asp-inv-plan-actions form{margin:0}
.asp-inv-plan fieldset{display:flex;flex-wrap:wrap;column-gap:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-2) var(--asp-space-3);margin:var(--asp-space-2) 0}
.asp-inv-plan fieldset legend{width:100%}
.asp-inv-check{display:inline-flex;flex:0 0 auto;width:auto;align-items:center;gap:var(--asp-space-1);margin:0 0 var(--asp-space-1);font-weight:400}
.asp-inv-check input{width:auto;margin:0}
.asp-inv-new summary{cursor:pointer}
.asp-inv-new summary h2{display:inline}
.asp-inv-group{margin:var(--asp-space-3) 0 var(--asp-space-1);font-size:var(--asp-text-md)}
.asp-inv-said{font-weight:600}
.asp-inv-error{color:var(--asp-bad);font-weight:600}

/* RC11.0.8 market pulse hotel data */
.asp-mp-hotel-data{margin-top:var(--asp-space-4)}
.asp-mp-hotel-switch{margin:0 0 var(--asp-space-3)}
.asp-mp-hotel-sources{list-style:none;margin:var(--asp-space-2) 0;padding:0}
.asp-mp-hotel-sources li{display:flex;flex-wrap:wrap;justify-content:space-between;gap:var(--asp-space-2);padding:var(--asp-space-1) 0;border-bottom:1px solid var(--asp-line)}
.asp-mp-hotel-figures p{margin:var(--asp-space-2) 0}

/* RC11.0.9 group concierge report */
.asp-gcr-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(170px,1fr));gap:var(--asp-space-3);margin-bottom:var(--asp-space-3)}
.asp-gcr-grid label{display:block}
.asp-gcr-line{font-weight:600}
.asp-gcr-none{color:var(--asp-warn);font-weight:600}
.asp-gcr-people{display:flex;flex-direction:column;gap:var(--asp-space-1);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-2) var(--asp-space-3);margin:var(--asp-space-3) 0}
.asp-gcr-check{display:flex;align-items:flex-start;gap:var(--asp-space-2);font-weight:400;min-width:0;overflow-wrap:anywhere}
.asp-gcr-check input{width:auto;margin:0}
.asp-gcr-said{font-weight:600}
.asp-gcr-error{color:var(--asp-bad);font-weight:600}

/* RC11.1.0 demo hotel */
.asp-demo-banner{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--asp-space-2);padding:var(--asp-space-2) var(--asp-space-4);background:var(--asp-warn-soft);color:var(--asp-ink);border-bottom:2px solid var(--asp-warn);font-size:var(--asp-text-sm)}
.asp-demo-banner b{text-transform:uppercase;letter-spacing:.08em}
.asp-demo-banner-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2)}
.asp-demo-banner-actions form{margin:0}
.asp-demo-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-3);align-items:flex-start}
.asp-demo-actions form{margin:0}

/* RC11.1.1 tip our team */
.asp-tip-form{display:flex;flex-direction:column;gap:var(--asp-space-3)}
.asp-tip-group{border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);padding:var(--asp-space-2) var(--asp-space-3);display:flex;flex-wrap:wrap;gap:var(--asp-space-2) var(--asp-space-4)}
.asp-tip-person,.asp-tip-amount,.asp-tip-agree{display:inline-flex;align-items:center;gap:var(--asp-space-2);font-weight:400;min-height:44px}
.asp-tip-person input,.asp-tip-amount input,.asp-tip-agree input{width:auto;margin:0}
.asp-tip-amounts{display:flex;flex-wrap:wrap;gap:var(--asp-space-1) var(--asp-space-4)}
/* The guest pages' form-field label margins (asp-guest.css) are for a label above its box; a tip choice is the box
   and its words on one row, so the rows sit close together like a list (owner, 11 Oct night). */
.asp-tip-form label.asp-tip-amount,.asp-tip-form label.asp-tip-person,.asp-tip-form label.asp-tip-agree,
body.pp .asp-rc885-form label.asp-tip-amount,body.pp .asp-rc885-form label.asp-tip-person,body.pp .asp-rc885-form label.asp-tip-agree{display:flex;flex-direction:row;align-items:center;margin:0}
.asp-tip-amount .mini{display:inline;margin:0}
.asp-tip-sum div{display:flex;justify-content:space-between;gap:var(--asp-space-3);padding:var(--asp-space-2) 0;border-bottom:1px solid var(--asp-line)}
.asp-tip-sum dd{margin:0;font-variant-numeric:tabular-nums}
.asp-tip-total{font-weight:700}
.asp-tip-error{color:var(--asp-bad);font-weight:600}
.asp-tip-step{margin:var(--asp-space-3) 0 0;font-size:var(--asp-text-md)}

/* RC11.1.3 opportunity radar */
.mp-radar{grid-column:1/-1;order:3}
.asp-mp-grid>.asp-mp-today{order:1}.asp-mp-grid>.asp-mp-watch{order:2}
@media(max-width:768px){.mp-radar{order:2}.asp-mp-grid>.asp-mp-watch{order:3}}
.mp-radar-row{padding:var(--asp-space-4) 0;border-top:1px solid var(--asp-line)}
.mp-radar-row:first-of-type{border-top:0}
.mp-radar-row h3{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-md);line-height:1.35}
.mp-radar-meta{margin:0 0 var(--asp-space-2);color:var(--asp-muted);font-size:var(--asp-text-xs)}
.mp-bands{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin:0 0 var(--asp-space-2)}
.mp-band{display:inline-flex;flex-direction:column;gap:var(--asp-space-1);padding:var(--asp-space-1) var(--asp-space-2);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.mp-band small{color:var(--asp-muted);font-size:var(--asp-text-2xs);font-weight:700}
.mp-band b{font-size:var(--asp-text-sm)}
.mp-band.hi b{color:var(--asp-good-ink)}
.mp-band.unk b{color:var(--asp-warn-ink)}
.mp-band.watch b{color:var(--asp-navy-800)}
.mp-why{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-sm)}
.mp-why b{font-weight:600}
.mp-hotel{margin:0;padding:var(--asp-space-2) var(--asp-space-2);border-radius:var(--asp-radius-md);background:var(--asp-surface-soft);font-size:var(--asp-text-xs)}
.mp-hotel.off,.mp-hotel.none{color:var(--asp-muted)}
.mp-changes{margin-top:var(--asp-space-4);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-left:4px solid var(--asp-navy-800);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.mp-changes h2{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-md)}
.mp-changes ul{margin:var(--asp-space-2) 0 0;padding:0;list-style:none}
.mp-changes li{display:flex;gap:var(--asp-space-2);align-items:flex-start;padding:var(--asp-space-2) 0;border-top:1px solid var(--asp-line);font-size:var(--asp-text-sm)}
.mp-state{flex:0 0 auto;min-width:76px;max-width:110px;padding:var(--asp-space-1) var(--asp-space-2);border-radius:var(--asp-radius-full);background:var(--asp-surface-soft);color:var(--asp-navy-800);font-size:var(--asp-text-2xs);font-weight:700;text-align:center}
.mp-state.new{background:var(--asp-good-soft);color:var(--asp-good-ink)}
.mp-state.esc{background:var(--asp-warn-soft);color:var(--asp-warn-ink)}
.mp-state.res{background:var(--asp-surface-soft);color:var(--asp-muted)}
.mp-changes small{display:block;color:var(--asp-muted);font-size:var(--asp-text-2xs)}
.mp-insales{font-size:var(--asp-text-xs);font-weight:600;color:var(--asp-good-ink)}
.mp-deep{margin-bottom:var(--asp-space-4)}
.mp-deep h2{margin:0 0 var(--asp-space-1);font-size:var(--asp-text-lg)}
.mp-deep h3{margin:var(--asp-space-5) 0 var(--asp-space-1);font-size:var(--asp-text-sm);color:var(--asp-muted)}
.mp-deep .mp-bands{margin-top:var(--asp-space-2)}
.mp-reasons{margin:0;padding:0;list-style:none}
.mp-reasons li{display:flex;gap:var(--asp-space-2);padding:var(--asp-space-2) 0;border-top:1px solid var(--asp-line);font-size:var(--asp-text-sm)}
.mp-reasons li span:first-child{flex:0 0 auto;color:var(--asp-good-ink);font-weight:700}
.mp-reasons li small{display:block;color:var(--asp-muted);font-size:var(--asp-text-2xs)}
.mp-tl{margin:0;padding:0 0 0 var(--asp-space-3);list-style:none;border-left:2px solid var(--asp-line)}
.mp-tl li{position:relative;padding:var(--asp-space-1) 0 var(--asp-space-1) var(--asp-space-2);font-size:var(--asp-text-sm)}
.mp-tl li:before{content:"";position:absolute;left:-18px;top:12px;width:10px;height:10px;border-radius:50%;background:var(--asp-navy-800)}
.mp-tl li small{display:block;color:var(--asp-muted);font-size:var(--asp-text-2xs)}
.mp-acts{display:flex;flex-wrap:wrap;gap:var(--asp-space-3);margin-top:var(--asp-space-4)}
.mp-inline{display:inline;margin:0}
.mp-banner{margin-bottom:var(--asp-space-4);padding:var(--asp-space-4);border:1px solid var(--asp-line);border-left:4px solid var(--asp-good);border-radius:var(--asp-radius-md);background:var(--asp-good-soft);font-size:var(--asp-text-sm)}
.mp-banner b{display:block;font-size:var(--asp-text-base);margin-bottom:var(--asp-space-1)}
.mp-kpis{display:grid;grid-template-columns:repeat(auto-fit,minmax(140px,1fr));gap:var(--asp-space-3);margin-top:var(--asp-space-3)}
.mp-kpi{padding:var(--asp-space-3);border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);background:var(--asp-surface)}
.mp-kpi b{display:block;font-size:var(--asp-text-metric);font-variant-numeric:tabular-nums}
.mp-kpi span{color:var(--asp-muted);font-size:var(--asp-text-xs)}
.mp-srcs{width:100%;border-collapse:collapse;margin-top:var(--asp-space-3);font-size:var(--asp-text-xs)}
.mp-srcs td,.mp-srcs th{padding:var(--asp-space-2) var(--asp-space-1);border-top:1px solid var(--asp-line);text-align:left}
.mp-srcs td.n,.mp-srcs th.n{text-align:right;font-variant-numeric:tabular-nums}
.mp-srcs+.mp-hotel{margin-top:var(--asp-space-3)}

/* RC11.1.4 inventory departments */
.asp-inv-depts{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin:var(--asp-space-3) 0 var(--asp-space-4)}
.asp-inv-dept{display:inline-flex;align-items:center;min-height:44px;padding:0 var(--asp-space-4);border:1px solid var(--asp-line);border-radius:var(--asp-radius-full);background:var(--asp-surface);color:var(--asp-ink);font-size:var(--asp-text-sm);font-weight:600;text-decoration:none}
.asp-inv-dept.is-on{background:var(--asp-navy-800);border-color:var(--asp-navy-800);color:var(--asp-surface)}
.asp-inv-dept--add{border-style:dashed;color:var(--asp-muted)}
.asp-inv-moved{border-left:4px solid var(--asp-warn)}
.asp-inv-table{width:100%;border-collapse:collapse}
.asp-inv-table td,.asp-inv-table th{padding:var(--asp-space-2);border-top:1px solid var(--asp-line);text-align:left}

/* RC11.2.7a tip our team money */
.asp-tip-pays{font-size:var(--asp-text-lg);font-weight:700}
.asp-tip-total dt,.asp-tip-total dd{font-size:var(--asp-text-xl);font-weight:700}
.asp-tip-refund-form{display:flex;flex-wrap:wrap;align-items:flex-end;gap:var(--asp-space-2) var(--asp-space-3)}

/* === RC11.3.2 ONE PLATFORM LOOK (BEFORE THE PLATFORM LOOK) === */
/* Rules a guest or public page reads too: they sit before the staff-only platform look (RC11.1.5), whose rules must all
   start with body:not(.pp):not(.asp-guest). Tokens only. */

/* ---- Q142: ASP's own confirmation window --------------------------------------------------------------------------------- */
.asp-confirm-dialog{width:min(var(--asp-dialog-width),calc(100% - var(--asp-space-8)))}
.asp-confirm-dialog h2{overflow-wrap:anywhere}
.asp-confirm-dialog p{overflow-wrap:anywhere}
@media(max-width:560px){
  .asp-confirm-dialog{width:calc(100% - var(--asp-space-4))}
  .asp-confirm-dialog .asp-ui-dialog-actions{flex-direction:column-reverse}
  .asp-confirm-dialog .asp-ui-dialog-actions .btn{width:100%;min-height:var(--asp-control)}
}

/* ---- Q145 (DS-105): a section title is always smaller than the page title ---------------------------------------------------
   The stylesheet's first h2 rule scales it from 23 to 31 px, which on 32 pages (Settings, Access, Connections...) made a card's
   title bigger than the page's own. This draws every h2 that does not name its own size at the section-title size on a
   signed-in page. :where() keeps the rule as weak as the one it replaces, so every h2 a screen sized itself keeps its size, and
   guest and public pages are not in it. */
:where(body:not(.pp):not(.asp-guest)) h2{font-size:var(--asp-text-lg);line-height:1.3;letter-spacing:0}

/* === RC11.1.5 PLATFORM LOOK === */
/* The owner's approved redesign of every module (12 Oct 2026): the apple-look and apple-motion guidance applied INSIDE
   Harbor Ink. Appended after every earlier layer, so it wins the cascade. What it adds is behaviour and finish, not a new
   palette: a response the moment a control is pressed, motion that explains a change and leaves the way it came, labels in
   sentence case, status that is a shape plus a word, figures in one quiet strip. Rules kept from DESIGN.md: tokens only
   (the token block below holds no colour), no new font size, no forced priority, the four breakpoints, opacity and transform
   are the only animated properties, and people who ask for less motion get none. Public and guest pages (body.pp,
   body.asp-guest) keep the QR page's look and are not touched here. */

/* ---- 1. Motion roles (DESIGN.md section 16; apple-motion: respond at once, never make staff wait) ------------------ */
:root{
  --asp-motion-fast:120ms;
  --asp-motion-base:180ms;
  --asp-motion-slow:240ms;
  --asp-ease-out:cubic-bezier(.2,0,0,1);
  --asp-ease-in:cubic-bezier(.4,0,1,1);
  --asp-press:.98;
  --asp-press-tile:.985;
  --asp-enter-shift:var(--asp-space-2);
  --asp-sheet-shift:var(--asp-space-6);
  --asp-room-edge:var(--asp-line-control);
  --asp-room-word:var(--asp-muted);
}
@media (prefers-reduced-motion:reduce){
  :root{--asp-motion-fast:0ms;--asp-motion-base:0ms;--asp-motion-slow:0ms;--asp-press:1;--asp-press-tile:1;
    --asp-enter-shift:0px;--asp-sheet-shift:0px}
}

/* ---- 2. Type: hierarchy from weight and size; large text tracks a little tighter, small text stays at 0 ------------- */
body:not(.pp):not(.asp-guest) .main h1{letter-spacing:-.01em}
body:not(.pp):not(.asp-guest) .main .metric b,
body:not(.pp):not(.asp-guest) .asp-ui-metric .asp-ui-metric-value{letter-spacing:-.01em}
/* Sentence case everywhere on the signed-in product: the small tracked-out capitals above figures, in table heads, on
   the rail's group names and on the filter labels become ordinary words (DESIGN.md sections 5 and 18). */
body:not(.pp):not(.asp-guest) :is(.lab,.eyebrow,.choice-option-badge,th,.asp-footer-col h3,.asp-property-switch-label,
  .asp-dash-picker label,.asp-side-heading,.asp-hotel-pulse-stats span,.asp-flow-phase,.asp-push-match-eyebrow,.intel-glow,
  .asp-stage-filter>label,.filterbar>label,.asp-chat-group,.asp-ledger-sec-top h2,.asp-kpi-name,.asp-mp-eyebrow,.asp-mp-day,
  .asp-mp-pill,.asp-mp-row dt,.asp-mp-tag,.asp-mp-add h3,.asp-report-hotel,.asp-gear-head,.asp-rc648-table thead th span,
  .asp-rc648-tag,.asp-job-where,.asp-job-fact span,.asp-rc697-table th,.asp-gd-cell b,.asp-rc706-table th,.asp-rc713-table th,
  .asp-gd2-divider,.asp-su-next span,.asp-su-glabel,.asp-tour-step .eyebrow,.asp-lf-facts dt,.asp-lf-tag-hotel,
  .asp-demo-banner b){text-transform:none;letter-spacing:0}
body:not(.pp):not(.asp-guest) :is(.table-wrap,.asp-report-table-wrap):has([data-label]) td::before{text-transform:none;letter-spacing:0}

/* ---- 3. Press feedback on pointer-down, and quiet state changes (apple-motion section 1) ------------------------------ */
body:not(.pp):not(.asp-guest) :is(.main .btn,.main button,.asp-ui-dialog .btn,.asp-ui-dialog button){
  transition:background-color var(--asp-motion-fast) var(--asp-ease-out),border-color var(--asp-motion-fast) var(--asp-ease-out),
    color var(--asp-motion-fast) var(--asp-ease-out),transform var(--asp-motion-fast) var(--asp-ease-out)}
body:not(.pp):not(.asp-guest) :is(.main .btn,.main button,.asp-ui-dialog .btn,.asp-ui-dialog button):not([disabled]):not([aria-disabled="true"]):active{
  transform:scale(var(--asp-press))}
/* A room tile answers the press in place; a list row fills at once, before the next page arrives. */
body:not(.pp):not(.asp-guest) .main .asp-room{transition:background-color var(--asp-motion-fast) var(--asp-ease-out),
  border-color var(--asp-motion-fast) var(--asp-ease-out),transform var(--asp-motion-fast) var(--asp-ease-out)}
body:not(.pp):not(.asp-guest) .main .asp-room:active{transform:scale(var(--asp-press-tile))}
body:not(.pp):not(.asp-guest) .main :is(.system-row,.asp-attention-row,a.asp-ui-row){
  transition:background-color var(--asp-motion-fast) var(--asp-ease-out)}
body:not(.pp):not(.asp-guest) .main :is(.system-row,a.asp-ui-row):active{background:var(--asp-teal-100)}
body:not(.pp):not(.asp-guest) .main tr>td{transition:background-color var(--asp-motion-fast) var(--asp-ease-out)}
body:not(.pp):not(.asp-guest) :is(.asp-side-link,.asp-side-sublink,.asp-side-dept>summary){
  transition:background-color var(--asp-motion-fast) var(--asp-ease-out),color var(--asp-motion-fast) var(--asp-ease-out)}

/* ---- 4. Status is a shape and a word; colour is only ever the third signal (DESIGN.md section 8) ---------------------- */
/* Every toned pill on a working screen gains its small mark: a filled dot for good, a triangle for needs attention, a
   square for a problem, a ring for open or in progress. A pill with no tone (the default state) stays a plain word. */
body:not(.pp):not(.asp-guest) .main .pill:is(.good,.ok,.success,.warn,.warning,.bad,.danger,.error,.info){
  display:inline-flex;align-items:center;gap:var(--asp-space-1)}
body:not(.pp):not(.asp-guest) .main .pill:is(.good,.ok,.success,.warn,.warning,.bad,.danger,.error,.info)::before{
  content:"";flex:none;width:var(--asp-space-2);height:var(--asp-space-2);background:currentColor}
body:not(.pp):not(.asp-guest) .main .pill:is(.good,.ok,.success)::before{border-radius:var(--asp-radius-full)}
body:not(.pp):not(.asp-guest) .main .pill:is(.warn,.warning)::before{clip-path:polygon(50% 0,100% 100%,0 100%)}
body:not(.pp):not(.asp-guest) .main .pill:is(.bad,.danger,.error)::before{border-radius:1px}
body:not(.pp):not(.asp-guest) .main .pill.info::before{background:transparent;border:2px solid currentColor;border-radius:var(--asp-radius-full)}

/* ---- 5. Figures in one quiet strip, not a row of separate tiles (DESIGN.md 7.3) --------------------------------------- */
body:not(.pp):not(.asp-guest) .main .metrics:not(.asp-studio-hero .metrics){gap:0;overflow:hidden;border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .metrics:not(.asp-studio-hero .metrics)>.metric{border:0;border-radius:0;background:transparent;
  box-shadow:-1px 0 0 0 var(--asp-line),0 -1px 0 0 var(--asp-line)}

/* ---- 6. Tables read like a ledger: totals on their own band, a calm row highlight ------------------------------------- */
body:not(.pp):not(.asp-guest) .main :is(tfoot td,tfoot th,tr.total>td,tr.asp-total>td){background:var(--asp-surface-soft);
  font-weight:600;border-top:1px solid var(--asp-line-control);font-variant-numeric:tabular-nums}
body:not(.pp):not(.asp-guest) .main tr[aria-selected="true"]>td,
body:not(.pp):not(.asp-guest) .main tr.is-open>td{background:var(--asp-teal-100)}

/* ---- 7. Dialogs and the phone's More sheet arrive and leave along the same path (apple-motion section 7) --------------- */
/* The scrim is a plain dim, never a blur (DESIGN.md: no glass on operating screens). */
body:not(.pp):not(.asp-guest) dialog::backdrop{background:var(--asp-scrim);backdrop-filter:none}
@media (prefers-reduced-motion:no-preference){
  body:not(.pp):not(.asp-guest) dialog{opacity:0;transform:scale(.97);
    transition:opacity var(--asp-motion-base) var(--asp-ease-in),transform var(--asp-motion-base) var(--asp-ease-in),
      overlay var(--asp-motion-base) allow-discrete,display var(--asp-motion-base) allow-discrete}
  body:not(.pp):not(.asp-guest) dialog[open]{opacity:1;transform:none;transition-timing-function:var(--asp-ease-out)}
  @starting-style{body:not(.pp):not(.asp-guest) dialog[open]{opacity:0;transform:scale(.97)}}
  body:not(.pp):not(.asp-guest) .asp-ui-dialog-scrim{transition:opacity var(--asp-motion-base) var(--asp-ease-out),
    display var(--asp-motion-base) allow-discrete}
  body:not(.pp):not(.asp-guest) .asp-ui-dialog-scrim[hidden]{opacity:0}
  @starting-style{body:not(.pp):not(.asp-guest) .asp-ui-dialog-scrim:not([hidden]){opacity:0}}
}
@media (max-width:560px) and (prefers-reduced-motion:no-preference){
  /* the More sheet rises from the bar it was opened from and drops back down when closed */
  .asp-more-sheet{transition:display var(--asp-motion-slow) allow-discrete}
  .asp-more-sheet[hidden]{pointer-events:none}
  .asp-more-sheet .asp-more-panel{transition:transform var(--asp-motion-slow) var(--asp-ease-out),opacity var(--asp-motion-slow) var(--asp-ease-out)}
  .asp-more-sheet[hidden] .asp-more-panel{transform:translateY(var(--asp-sheet-shift));opacity:0;transition-timing-function:var(--asp-ease-in)}
  @starting-style{.asp-more-sheet:not([hidden]) .asp-more-panel{transform:translateY(var(--asp-sheet-shift));opacity:0}}
}

/* ---- 8. A record opened beside its list arrives from the side it sits on --------------------------------------------- */
@media (min-width:1025px) and (prefers-reduced-motion:no-preference){
  body:not(.pp):not(.asp-guest) .main .asp-split-detail{animation:asp-look-from-right var(--asp-motion-slow) var(--asp-ease-out)}
}
@keyframes asp-look-from-right{from{opacity:0;transform:translateX(var(--asp-enter-shift))}to{opacity:1;transform:none}}

/* ---- 9. Touch: no grey flash, and the press state shows the moment a finger lands ------------------------------------- */
body:not(.pp):not(.asp-guest){-webkit-tap-highlight-color:transparent}

/* ---- 10. Housekeeping: the room grid reads like the approved board ----------------------------------------------------- */
/* A white tile per room with its state on the left edge and in its words, so a floor of rooms scans as one calm grid
   and the state is never colour alone (the word is on the tile). The legend above repeats the counts the summary row
   already gives, so the grid shows the rooms themselves. */
body:not(.pp):not(.asp-guest) .main .asp-room{--asp-room-edge:var(--asp-line-control);--asp-room-word:var(--asp-muted);
  background:var(--asp-surface);color:var(--asp-ink);border:1px solid var(--asp-line);border-left:3px solid var(--asp-room-edge)}
body:not(.pp):not(.asp-guest) .main .asp-room b{color:var(--asp-ink);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-room span{color:var(--asp-room-word)}
body:not(.pp):not(.asp-guest) .main .asp-room:hover{background:var(--asp-surface-hover)}
body:not(.pp):not(.asp-guest) .main .asp-room.is-progress{--asp-room-edge:var(--asp-bronze-600);--asp-room-word:var(--asp-warn-ink)}
body:not(.pp):not(.asp-guest) .main .asp-room.is-ready{--asp-room-edge:var(--asp-info);--asp-room-word:var(--asp-info)}
body:not(.pp):not(.asp-guest) .main .asp-room.is-inspected{--asp-room-edge:var(--asp-good-ink);--asp-room-word:var(--asp-good-ink)}
body:not(.pp):not(.asp-guest) .main .asp-room.is-out{--asp-room-edge:var(--asp-bad);--asp-room-word:var(--asp-bad)}
body:not(.pp):not(.asp-guest) .main .asp-room.is-dnd{--asp-room-edge:var(--asp-neutral-ink);--asp-room-word:var(--asp-neutral-ink);
  background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .asp-room.is-noservice{--asp-room-edge:var(--asp-line);--asp-room-word:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .main .asp-room-grid>.asp-grid-keys{display:none}

/* ---- 11. A list with nothing open says so quietly, not inside a dashed box (DESIGN.md section 9) ---------------------- */
body:not(.pp):not(.asp-guest) .main .asp-split-empty{border:1px solid var(--asp-line);border-style:solid;background:var(--asp-surface-soft);
  color:var(--asp-ink-2)}

/* ---- 12. Dashboard: the four headline figures as one strip, at the metric size the approved preview used -------------- */
body:not(.pp):not(.asp-guest) .main .asp-ledger-rules{border-top-color:var(--asp-line)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band{gap:0;overflow:hidden;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band>.asp-kpi{border:0;border-radius:0;background:transparent;
  box-shadow:-1px 0 0 0 var(--asp-line),0 -1px 0 0 var(--asp-line);transition:background-color var(--asp-motion-fast) var(--asp-ease-out)}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band>.asp-kpi::after{content:none}
body:not(.pp):not(.asp-guest) .main .asp-ledger-band>.asp-kpi:hover{background:var(--asp-surface-hover)}
body:not(.pp):not(.asp-guest) .main .asp-kpi-now{font-size:var(--asp-text-metric);font-weight:600;letter-spacing:-.01em}
/* The month against last year and budget: one ruled strip inside its card, not cards inside a card. */
body:not(.pp):not(.asp-guest) .main .asp-vs-row{gap:0;overflow:hidden;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md)}
body:not(.pp):not(.asp-guest) .main .asp-vs-row>.asp-vs-cell{border:0;border-radius:0;background:transparent;
  box-shadow:-1px 0 0 0 var(--asp-line),0 -1px 0 0 var(--asp-line)}
/* The period choice is one segmented control; on a phone its five choices sit in an even grid instead of a ragged wrap. */
body:not(.pp):not(.asp-guest) .main .asp-ledger-tab{transition:background-color var(--asp-motion-fast) var(--asp-ease-out),color var(--asp-motion-fast) var(--asp-ease-out)}
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main .asp-ledger-tabs>span{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
  body:not(.pp):not(.asp-guest) .main .asp-ledger-tabs .asp-ledger-tab{display:flex;align-items:center;justify-content:center;min-height:44px;
    text-align:center;white-space:normal}
}
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main .asp-ledger-tabs,body:not(.pp):not(.asp-guest) .main .asp-ledger-tabs>span{width:100%}
  body:not(.pp):not(.asp-guest) .main .asp-ledger-tabs .asp-ledger-tab:last-child{grid-column:span 2}
  /* in the grid the chosen period is a light selected cell with a teal underline, not a dark block in the page */
  body:not(.pp):not(.asp-guest) .main .asp-ledger-tabs .asp-ledger-tab.is-live{background:var(--asp-teal-100);color:var(--asp-ink);
    box-shadow:inset 0 -2px 0 var(--asp-primary)}
}
/* Room tiles share each floor's width evenly, wide enough that a room's name sits on one or two lines. */
body:not(.pp):not(.asp-guest) .main .asp-floor-rooms{display:grid;grid-template-columns:repeat(auto-fill,minmax(160px,1fr))}
body:not(.pp):not(.asp-guest) .main .asp-floor-rooms>.asp-room{width:auto;min-width:0}
@media (max-width:560px){
  body:not(.pp):not(.asp-guest) .main .asp-floor-rooms{grid-template-columns:repeat(auto-fill,minmax(128px,1fr))}
}
/* Hiring's "needs you" counts read as one strip too. */
body:not(.pp):not(.asp-guest) .main .asp-hire-needs{gap:0;overflow:hidden;border:1px solid var(--asp-line);border-radius:var(--asp-radius-md);
  background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .main .asp-hire-needs>.asp-hire-tile{border:0;border-radius:0;background:transparent;
  box-shadow:-1px 0 0 0 var(--asp-line),0 -1px 0 0 var(--asp-line);transition:background-color var(--asp-motion-fast) var(--asp-ease-out)}
body:not(.pp):not(.asp-guest) .main .asp-hire-needs>.asp-hire-tile:hover{background:var(--asp-surface-hover)}
/* A pill with its mark never pushes past its row: the words may wrap inside it. */
body:not(.pp):not(.asp-guest) .main .pill:is(.good,.ok,.success,.warn,.warning,.bad,.danger,.error,.info){max-width:100%;white-space:normal}
@media (max-width:560px){body:not(.pp):not(.asp-guest) .main .asp-floor-rooms{width:100%;flex:none}}

/* === RC11.1.7 ONE HELP === */
/* The "?" sits with the page's other top-bar icons and wears their look (rc595 / rc1070 .asp-header-tool). */
body:not(.pp):not(.asp-guest) .asp-help-dialog .asp-help-meta{margin:0 0 var(--asp-space-3);color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .asp-help-dialog h3{margin:var(--asp-space-4) 0 var(--asp-space-1);font-size:var(--asp-text-md)}
body:not(.pp):not(.asp-guest) .asp-help-dialog ol{margin:0;padding-left:var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .asp-help-dialog ol li{margin:0 0 var(--asp-space-1)}
body:not(.pp):not(.asp-guest) .asp-help-dialog .asp-help-links{display:flex;flex-wrap:wrap;gap:var(--asp-space-2);margin-top:var(--asp-space-4)}

/* RC11.2.1 housekeeping on a phone */
/* HK-11: a focused control (or the room a Move came back to) is never under the sticky top bar, nor under the Save bar
   and bottom bar on a phone -- signed-in pages only; guest and public pages keep the QR page look */
body:not(.pp):not(.asp-guest) :is(input,select,textarea,button,a,summary,[id]){
  scroll-margin-top:calc(var(--asp-space-16) + var(--asp-space-6))}
@media(max-width:560px){
  body:not(.pp):not(.asp-guest) :is(input,select,textarea,button,a,summary,[id]){
    scroll-margin-bottom:calc(var(--asp-space-16) * 2 + var(--asp-space-6) + env(safe-area-inset-bottom,0px))}
}
body:not(.pp):not(.asp-guest) .asp-rc1121-floor{margin-top:var(--asp-space-3);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface)}
body:not(.pp):not(.asp-guest) .asp-rc1121-floor>summary{min-height:44px;display:flex;align-items:center;
  gap:var(--asp-space-2);padding:var(--asp-space-2) var(--asp-space-4);cursor:pointer}
body:not(.pp):not(.asp-guest) .asp-rc1121-floor>.table-wrap{padding:0 var(--asp-space-2) var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .asp-rc1121-oos form{margin:0}
body:not(.pp):not(.asp-guest) .asp-rc1121-long ul{margin:var(--asp-space-2) 0 0;padding-left:var(--asp-space-5)}

/* === RC11.2.8c THE DASHBOARD FIGURES === */
body:not(.pp):not(.asp-guest) .asp-ledger-cover{margin:var(--asp-space-2) 0 0}
body:not(.pp):not(.asp-guest) .asp-ledger-cover.is-short{color:var(--asp-warn)}
body:not(.pp):not(.asp-guest) .asp-ledger-group+.asp-ledger-group{margin-top:var(--asp-space-8);padding-top:var(--asp-space-6);border-top:3px double var(--asp-ink)}

/* === RC11.3.1 PHONE AND SCREENS === */
/* Owner go-live sweep, 15 Oct 2026 (Q130, Q131, Q134, Q135, Q136, Q141 and the low-risk list of the mobile and browser
   reviews). Appended after every earlier layer. Tokens only: no colour, no new font size, no new radius; the four
   breakpoints (560, 768, 1024, 1280). Public and guest pages (body.pp, body.asp-guest) are not touched here: their
   rules live in assets/asp-guest.css. */

/* ---- W4-01: a table drawn as cards on a phone has no box to scroll in, so it has no height cap either ------------------ */
@media(max-width:768px){
  body:not(.pp):not(.asp-guest) .main .table-wrap:has([data-label]),
body:not(.pp):not(.asp-guest) .main .asp-report-table-wrap:has([data-label]){max-height:none}
}

/* ---- W4-02: a banner with a long bold title wraps; the words beside it never squeeze to a letter ----------------------- */
@media(max-width:560px){
  body:not(.pp):not(.asp-guest) .main .banner{flex-wrap:wrap}
  body:not(.pp):not(.asp-guest) .main .banner b{white-space:normal;overflow-wrap:anywhere}
  body:not(.pp):not(.asp-guest) .main .banner>span{flex:1 1 100%;min-width:0}
}

/* ---- W4-03: the assistant button never sits on the footer's Terms and Privacy links ----------------------------------- */
body:not(.pp):not(.asp-guest) .asp-footer-bottom{padding-right:calc(var(--asp-space-16) + var(--asp-space-4))}

/* ---- W4-05: the assistant page's small heading is readable on the page ground ------------------------------------------- */
body:not(.pp):not(.asp-guest) .main .hero:not(.compact) .intel-glow{color:var(--asp-teal-700)}

/* ---- W4-08: a long sign-in email or a long button label wraps instead of widening a 320 px page -------------------------- */
@media(max-width:560px){
  body:not(.pp):not(.asp-guest) .main :is(p,li,div,span)>b{overflow-wrap:anywhere}
  body:not(.pp):not(.asp-guest) .main .btn{white-space:normal;max-width:100%}
  body:not(.pp):not(.asp-guest) .main .asp-inv-check{max-width:100%;overflow-wrap:anywhere}
}

/* ---- Q130: "My shift today" ---------------------------------------------------------------------------------------- */
body:not(.pp):not(.asp-guest) .asp-rc1131-shift h2{margin:0 0 var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .asp-rc1131-shift-actions{display:flex;flex-wrap:wrap;gap:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .asp-rc1131-shift-row{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .asp-rc1131-shift-row+.asp-rc1131-shift-row{margin-top:var(--asp-space-3);padding-top:var(--asp-space-3);border-top:1px solid var(--asp-line)}
body:not(.pp):not(.asp-guest) .asp-rc1131-shift-text{flex:1 1 0;min-width:0}
body:not(.pp):not(.asp-guest) .asp-rc1131-shift-text p{margin:var(--asp-space-1) 0 0}
body:not(.pp):not(.asp-guest) .asp-rc1131-clock{margin:0}
body:not(.pp):not(.asp-guest) .asp-rc1131-clock .btn{min-height:44px}
@media(max-width:560px){
  body:not(.pp):not(.asp-guest) .asp-rc1131-shift-text{flex-basis:100%}
  body:not(.pp):not(.asp-guest) .asp-rc1131-shift-actions{flex:1 1 100%;flex-direction:column}
  body:not(.pp):not(.asp-guest) .asp-rc1131-clock,
body:not(.pp):not(.asp-guest) .asp-rc1131-clock .btn{width:100%}
}

/* ---- Q131: the guest's link, as an address to tap, with Copy and Share ----------------------------------------------- */
body:not(.pp):not(.asp-guest) .asp-rc1131-link{margin:var(--asp-space-3) 0}
body:not(.pp):not(.asp-guest) .asp-rc1131-address{display:block;min-height:44px;padding:var(--asp-space-3);border:1px solid var(--asp-line);
  border-radius:var(--asp-radius-md);background:var(--asp-surface-soft);overflow-wrap:anywhere}
body:not(.pp):not(.asp-guest) .asp-rc1131-address code{padding:0;background:transparent;font-size:var(--asp-text-sm);word-break:break-all}
body:not(.pp):not(.asp-guest) .asp-rc1131-link-actions{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2);margin-top:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .asp-rc1131-link-actions .btn{min-height:44px}
body:not(.pp):not(.asp-guest) .asp-rc1131-link-actions .btn[hidden]{display:none}

/* ---- Q134: the big housekeeping board ------------------------------------------------------------------------------------- */
body:not(.pp):not(.asp-guest) .asp-rc1131-fold>summary{display:flex;align-items:center;justify-content:space-between;gap:var(--asp-space-3);min-height:44px;
  cursor:pointer;list-style:none}
body:not(.pp):not(.asp-guest) .asp-rc1131-fold>summary::-webkit-details-marker{display:none}
body:not(.pp):not(.asp-guest) .asp-rc1131-fold>summary h3{margin:0}
body:not(.pp):not(.asp-guest) .asp-rc1131-fold[open]>summary{margin-bottom:var(--asp-space-3)}
body:not(.pp):not(.asp-guest) .asp-rc1131-rooms{display:flex;flex-wrap:wrap;align-items:center;gap:var(--asp-space-2);margin:0}

/* ---- Q135: Arrivals, a compact row on a phone ------------------------------------------------------------------------------ */
body:not(.pp):not(.asp-guest) .asp-rc1131-find{max-width:100%}
@media(max-width:768px){
  body:not(.pp):not(.asp-guest) .main .table-wrap:has(.asp-rc713-table) tr{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));
    gap:var(--asp-space-1) var(--asp-space-3);margin-bottom:var(--asp-space-2);padding:var(--asp-space-3)}
  body:not(.pp):not(.asp-guest) .main .table-wrap:has(.asp-rc713-table) td{padding:0;border:0}
  body:not(.pp):not(.asp-guest) .main .table-wrap:has(.asp-rc713-table) td[data-label='Guest']{grid-column:1 / span 4;order:1}
  body:not(.pp):not(.asp-guest) .main .table-wrap:has(.asp-rc713-table) td[data-label='Reference']{grid-column:span 2;order:2;text-align:right}
  body:not(.pp):not(.asp-guest) .main .table-wrap:has(.asp-rc713-table) td:not([data-label='Guest']):not([data-label='Reference']){grid-column:span 2;order:3}
}

/* ---- Q136: the count's progress, and the notes about a kept draft and no signal ---------------------------------------------- */
body:not(.pp):not(.asp-guest) .asp-rc1131-progress{margin:0 0 var(--asp-space-3);font-weight:600;font-variant-numeric:tabular-nums}
body:not(.pp):not(.asp-guest) .asp-rc1131-draft-note,
body:not(.pp):not(.asp-guest) .asp-rc1131-nosignal,
body:not(.pp):not(.asp-guest) .asp-rc1131-retry{margin:var(--asp-space-3) 0}
body:not(.pp):not(.asp-guest) .asp-rc1131-draft-note .btn{min-height:44px;margin-left:var(--asp-space-2)}
body:not(.pp):not(.asp-guest) .asp-rc1131-forlist[hidden]{display:none}

/* ---- M1, M3: a supervisor's first screen --------------------------------------------------------------------------------- */
body:not(.pp):not(.asp-guest) .main details.asp-rc1035-more>summary{min-height:44px;display:flex;align-items:center}

/* ---- Q141, M8, M9, L1: a 44 px target for every link and button a thumb or a finger meets ----------------------------------- */
@media(max-width:560px),(pointer:coarse){
  body:not(.pp):not(.asp-guest) .main :is(a.btn,button.btn,.btn,button.secondary,button[type=submit],input[type=submit]){min-height:44px}
  body:not(.pp):not(.asp-guest) .main :is(.asp-rc646-link,.asp-ledger-arrow,.asp-subnav-link,.asp-side-sublink,.asp-rc522-list a,.asp-reference-intelligence-head a,.asp-program-parts a){
    display:inline-flex;align-items:center;min-height:44px}
  body:not(.pp):not(.asp-guest) .main .asp-rc648-add{display:inline-flex;align-items:center;justify-content:center;min-width:44px;min-height:44px}
  body:not(.pp):not(.asp-guest) .main :is(div,section)>a.mini{display:inline-flex;align-items:center;min-height:44px}
  body:not(.pp):not(.asp-guest) .main details>summary{min-height:44px;box-sizing:border-box}
  body:not(.pp):not(.asp-guest) .main .table-wrap td>a,
body:not(.pp):not(.asp-guest) .main .asp-report-table-wrap td>a,
body:not(.pp):not(.asp-guest) .main .table-wrap th>a,
body:not(.pp):not(.asp-guest) .main .asp-report-table-wrap th>a{
    display:inline-flex;align-items:center;min-height:44px}
  body:not(.pp):not(.asp-guest) .asp-property-switch select,body:not(.pp):not(.asp-guest) .main .asp-inline-filters select{min-height:44px}
}

/* ---- L7: the hotel name or switcher sits on the same side of the header on every page ------------------------------------------ */
@media(max-width:560px){
  body:not(.pp):not(.asp-guest) .asp-col>.topbar .asp-hotel-indicator{order:-1}
}

/* === RC11.3.2 ONE PLATFORM LOOK === */
/* Owner go-live sweep, 15 Oct 2026 (Q142-Q148, DS-101 to DS-115). Appended after every earlier layer. Tokens only: no
   colour, no new font size, no new radius; the four breakpoints (560, 768, 1024, 1280). Every rule starts with
   body:not(.pp):not(.asp-guest) so no guest or public page reads it; the rules a guest page shares are before the
   platform look, in the first block of this stage. */

/* ---- Q148 (DS-107): a status shape beside the word on every chip, not only on .pill ------------------------------------
   The platform look gave every toned .pill a small mark (dot good, triangle needs attention, square a problem, ring open).
   The Housekeeping and group chips, the ledger flag, the urgent chip and the Dashboard signal tiles were left out; they get
   the same four shapes here, drawn the same way. A chip with no tone (is-plain) is a plain word and has none. */
body:not(.pp):not(.asp-guest) .main :is(.asp-sig-chip,.asp-grid-key,.asp-ledger-flag,.asp-across-chip.is-urgent,.asp-rc648-tag):not(.is-plain,.is-changed)::before,
body:not(.pp):not(.asp-guest) .main :is(.asp-sig-tile,.asp-sig-water):not(.is-plain) em::before,
body:not(.pp):not(.asp-guest) .main .asp-sig-gauge:not(.is-plain)>b::before{
  content:"";display:inline-block;flex:none;width:var(--asp-space-2);height:var(--asp-space-2);margin-inline-end:var(--asp-space-1);
  background:currentColor;border-radius:var(--asp-radius-full)}
body:not(.pp):not(.asp-guest) .main :is(.asp-sig-chip,.asp-grid-key,.asp-ledger-flag,.asp-across-chip,.asp-rc648-tag){
  align-items:center}
body:not(.pp):not(.asp-guest) .main :is(.asp-across-chip,.asp-rc648-tag){display:inline-flex}
/* needs attention: a triangle */
body:not(.pp):not(.asp-guest) .main :is(.asp-sig-chip.is-soon,.asp-sig-chip.is-progress,.asp-grid-key.is-soon,.asp-grid-key.is-progress,.asp-ledger-flag.is-watch,.asp-sig-tile.is-soon em,.asp-sig-gauge.is-soon>b,.asp-sig-water.is-soon em)::before{
  border-radius:0;clip-path:polygon(50% 0,100% 100%,0 100%)}
/* a problem: a square */
body:not(.pp):not(.asp-guest) .main :is(.asp-sig-chip.is-late,.asp-sig-chip.is-out,.asp-grid-key.is-late,.asp-grid-key.is-out,.asp-across-chip.is-urgent,.asp-sig-tile.is-late em,.asp-sig-gauge.is-late>b,.asp-sig-water.is-late em)::before{
  border-radius:1px}
/* open, assigned, ready, not disturbed, not in service, a draft: a ring */
body:not(.pp):not(.asp-guest) .main :is(.asp-sig-chip.is-assigned,.asp-sig-chip.is-ready,.asp-sig-chip.is-dnd,.asp-sig-chip.is-noservice,.asp-grid-key.is-assigned,.asp-grid-key.is-ready,.asp-grid-key.is-dnd,.asp-grid-key.is-noservice,.asp-rc648-tag)::before{
  background:transparent;border:2px solid currentColor}

/* ---- Q144 (DS-104): the Back button is readable on the light top bar -------------------------------------------------------
   It was drawn for the old navy bar (white on a faint white), which on Owner Control's pages that do not carry the studio
   mark measured 1.08:1. The base rule now reads its colours from these properties; the light top bar names its own. */
body:not(.pp):not(.asp-guest) .asp-col>.topbar{
  --asp-nav-back-ink:var(--asp-ink);--asp-nav-back-bg:var(--asp-surface);--asp-nav-back-edge:var(--asp-line-control);
  --asp-nav-back-bg-hover:var(--asp-surface-hover);--asp-nav-back-edge-hover:var(--asp-line-control)}

/* ---- Q143 (DS-103): "(required)" in words, and a box's own sentence under it ----------------------------------------------
   The words are quiet (the red asterisk is gone); the sentence is bad-toned text with the problem square the status pills
   use, so it is never colour alone. */
body:not(.pp):not(.asp-guest) .main label .req{margin-left:var(--asp-space-1);font-weight:400;color:var(--asp-muted);
  font-size:var(--asp-text-xs)}
body:not(.pp):not(.asp-guest) .main .asp-box-error{display:flex;align-items:center;margin:var(--asp-space-1) 0 var(--asp-space-3);
  color:var(--asp-bad);font-size:var(--asp-text-sm);font-weight:600}
body:not(.pp):not(.asp-guest) .main .asp-box-error::before{content:"";flex:none;width:var(--asp-space-2);height:var(--asp-space-2);
  margin-inline-end:var(--asp-space-2);background:currentColor;border-radius:1px}
body:not(.pp):not(.asp-guest) .main .asp-ui-error-summary{margin:0 0 var(--asp-space-4);padding:var(--asp-space-3) var(--asp-space-4);
  border:1px solid var(--asp-bad);border-radius:var(--asp-radius-md);background:var(--asp-bad-soft);color:var(--asp-ink)}
body:not(.pp):not(.asp-guest) .main .asp-ui-error-summary ul{margin:var(--asp-space-1) 0 0;padding-left:var(--asp-space-5)}
body:not(.pp):not(.asp-guest) .main .asp-ui-error-summary a{color:var(--asp-bad);font-weight:600}

/* ---- DS-106: text that was faded with opacity reads at full strength ----------------------------------------------------------
   Measured on the live screens: the Scheduling "+" glyph 2.48:1, a shift's cost 3.17:1, an unassigned room's "Needs assignment"
   4.0:1. The documented colours all pass; these were dimmed by opacity. The "+" is the way to add a shift, so it also gets a
   target a finger can hit (it was 20 px; 44 px on a phone since RC11.3.1). */
body:not(.pp):not(.asp-guest) .main .asp-rc648-add{opacity:1;color:var(--asp-primary);border-color:var(--asp-line-control);
  display:inline-flex;align-items:center;justify-content:center;min-width:var(--asp-space-6);min-height:var(--asp-space-6)}
body:not(.pp):not(.asp-guest) .main :is(.asp-rc648-cost,.asp-rc648-dept,.asp-rc648-note,.asp-rc648-away,.asp-rc648-tag){
  opacity:1;color:var(--asp-muted)}
body:not(.pp):not(.asp-guest) .main .asp-room span{opacity:1}

/* ---- DS-111: What ASP Works read does not scroll the page sideways on a phone -----------------------------------------------
   Its file-name and value cells were set not to wrap, which on a phone (where each row is a card) pushed the page 59 px wide. */
@media(max-width:768px){
  body:not(.pp):not(.asp-guest) .main :is(.asp-rc706-line,.asp-rc706-value){white-space:normal;overflow-wrap:anywhere}
}
