/* The volunteer board's stylesheet — extracted verbatim from app.html (the single source; /admin
   links it too). Palette vars, board layout, physics-arena geometry, dialogs, admin panel, tour. */
  :root {
    --bg: #f1f5ee; --surface: #ffffff; --surface-2: #eaf0e5; --border: #dae2d4;
    --text: #18211a; --text-2: #5a675a; --accent: #16724f; --accent-2: #a8641a; --accent-weak: #dfeee6;
    --free: #2e9e6b; --occupied: #a6afa6; --warn: #b47618; --warn-weak: #f6ead4;
    --danger: #c4432d; --danger-weak: #f8e2dd; --canopy: #0d3b2a;
    --leaf: #2f8055; --leaf-b: #6f9e33;
    --radius: 10px; --shadow: 0 1px 2px rgba(18,45,28,.06), 0 4px 14px rgba(18,45,28,.05);
    --mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace;
    --sans: -apple-system, BlinkMacSystemFont, "Segoe UI", Inter, Roboto, system-ui, sans-serif;
  }
  @media (prefers-color-scheme: dark) {
    :root {
      --bg: #0e130e; --surface: #161d15; --surface-2: #1c241a; --border: #2a332a;
      --text: #e6ede4; --text-2: #93a293; --accent: #4dbf94; --accent-2: #d6923f; --accent-weak: #14382c;
      --free: #4fbf8a; --occupied: #69746b; --warn: #d8a23c; --warn-weak: #322810;
      --danger: #e2705a; --danger-weak: #38201b; --canopy: #cfe6d8; --leaf: #24583c; --leaf-b: #3c5f28;
      --shadow: 0 1px 2px rgba(0,0,0,.3), 0 4px 14px rgba(0,0,0,.3);
    }
  }
  :root[data-theme="dark"] {
    --bg: #0e130e; --surface: #161d15; --surface-2: #1c241a; --border: #2a332a;
    --text: #e6ede4; --text-2: #93a293; --accent: #4dbf94; --accent-2: #d6923f; --accent-weak: #14382c;
    --free: #4fbf8a; --occupied: #69746b; --warn: #d8a23c; --warn-weak: #322810;
    --danger: #e2705a; --danger-weak: #38201b; --canopy: #cfe6d8; --leaf: #24583c; --leaf-b: #3c5f28;
    --shadow: 0 1px 2px rgba(0,0,0,.3), 0 4px 14px rgba(0,0,0,.3);
  }
  :root[data-theme="light"] {
    --bg: #f1f5ee; --surface: #ffffff; --surface-2: #eaf0e5; --border: #dae2d4;
    --text: #18211a; --text-2: #5a675a; --accent: #16724f; --accent-2: #a8641a; --accent-weak: #dfeee6;
    --free: #2e9e6b; --occupied: #a6afa6; --warn: #b47618; --warn-weak: #f6ead4;
    --danger: #c4432d; --danger-weak: #f8e2dd; --canopy: #0d3b2a; --leaf: #2f8055; --leaf-b: #6f9e33;
    --shadow: 0 1px 2px rgba(18,45,28,.06), 0 4px 14px rgba(18,45,28,.05);
  }
  * { box-sizing: border-box; }
  html, body { margin: 0; }
  /* PC fit-to-viewport: the frame never scrolls; overflow lives inside the panels. */
  body {
    background: var(--bg); color: var(--text); font-family: var(--sans); font-size: 14px; line-height: 1.4;
    -webkit-font-smoothing: antialiased;
    height: 100vh; display: flex; flex-direction: column; overflow: hidden;
    background-image: radial-gradient(circle at 8% -8%, color-mix(in srgb, var(--accent) 13%, transparent), transparent 42%),
                      radial-gradient(circle at 97% -4%, color-mix(in srgb, var(--accent-2) 10%, transparent), transparent 40%),
                      radial-gradient(circle at 90% 108%, color-mix(in srgb, var(--accent) 11%, transparent), transparent 48%);
  }
  .tnum { font-variant-numeric: tabular-nums; }

  .foliage { position: fixed; inset: 0; z-index: -1; pointer-events: none; overflow: hidden; }
  .foliage .lf { position: absolute; transform: translate(-50%,-50%) rotate(var(--r,0deg)) scale(var(--s,1)); }
  .foliage .lf .blade { fill: var(--leaf); }
  .foliage .lf.lime .blade { fill: var(--leaf-b); }
  .foliage .lf .vein { stroke: color-mix(in srgb, var(--canopy) 40%, transparent); stroke-width: 2.4; fill: none; }

  .topbar {
    flex-shrink: 0; z-index: 20; display: flex; align-items: stretch; gap: 16px;
    padding: 8px 16px; background: color-mix(in srgb, var(--surface) 94%, transparent);
    backdrop-filter: blur(6px); border-bottom: 1px solid var(--border); box-shadow: var(--shadow);
  }
  .who { display: flex; align-items: center; gap: 8px; padding-right: 14px; border-right: 1px solid var(--border); flex-shrink: 0; }
  .who .avatar { width: 30px; height: 30px; border-radius: 50%; background: var(--accent); color: #fff; font-weight: 700; display: grid; place-items: center; font-size: 13px; }
  .who .name { font-weight: 600; }
  .who-meta { font-size: 11px; color: var(--text-2); }
  .change-link { color: var(--accent); cursor: pointer; text-decoration: underline; font-weight: 600; }
  .tools select { font: inherit; color: var(--text); background: transparent; border: 1px solid var(--border); border-radius: 6px; padding: 3px 6px; }
  .rooms { display: flex; align-items: center; gap: 4px; flex-wrap: nowrap; flex: 1; min-width: 0; overflow-x: auto; scrollbar-width: thin; }
  .rooms::-webkit-scrollbar { height: 5px; }
  .rooms::-webkit-scrollbar-thumb { background: var(--border); border-radius: 3px; }
  .room { display: flex; flex-direction: column; gap: 3px; padding: 5px 9px; border-radius: 8px; background: transparent; border: 1px solid transparent; flex-shrink: 0; }
  .room:hover { background: var(--surface-2); }
  .room .rtop { display: flex; align-items: baseline; gap: 6px; white-space: nowrap; }
  .room .rname { font-weight: 600; font-size: 12.5px; }
  .room .rprice { color: var(--accent); font-weight: 700; }
  .room .rmeta { font-size: 10.5px; color: var(--text-2); letter-spacing: .02em; display: flex; gap: 6px; align-items: center; }
  .ppl { display: inline-flex; gap: 1px; align-items: center; }
  .person { width: 13px; height: 13px; display: inline-block; }
  .person svg { width: 100%; height: 100%; display: block; }
  .person.occ :is(path,circle) { fill: var(--occupied); stroke: none; }
  .person.free :is(path,circle) { fill: none; stroke: var(--free); stroke-width: 1.7; }
  .dormcount { font-family: var(--mono); font-size: 10.5px; color: var(--text-2); }
  .dormcount b { color: var(--free); }
  .tools { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
  .fx { font-size: 11px; color: var(--text-2); text-align: right; line-height: 1.2; }
  .fx b { color: var(--text); font-weight: 700; }
  .fx .live { color: var(--free); font-weight: 700; font-size: 10px; letter-spacing: .04em; }
  .fx .live::before { content: "●"; margin-right: 3px; animation: pulse 2s ease-in-out infinite; }
  .fx .live.stale { color: var(--danger); }                       /* data is NOT live — never pulse a green "live" over stale data */
  .fx .live.stale::before { animation: none; }
  @keyframes pulse { 0%,100% { opacity: 1; } 50% { opacity: .3; } }
  .cog { width: 32px; height: 32px; border-radius: 7px; border: 1px solid var(--border); background: transparent; color: var(--text-2); cursor: pointer; font-size: 16px; display: grid; place-items: center; }
  .cog:hover { background: var(--surface-2); color: var(--text); }

  .sloth { position: fixed; top: 48px; right: 34px; width: 92px; z-index: 12; pointer-events: none; transform-origin: 50% 12px; animation: sway 6s ease-in-out infinite; filter: drop-shadow(0 3px 3px rgba(0,0,0,.18)); }
  @keyframes sway { 0%,100% { transform: rotate(-4deg); } 50% { transform: rotate(5deg); } }
  .verlabel { position: fixed; right: 7px; bottom: 1px; z-index: 20; font-family: var(--mono); font-size: 9.5px; color: var(--text-2); opacity: .4; letter-spacing: .03em; pointer-events: none; user-select: none; }
  @media (prefers-reduced-motion: reduce) { .sloth, .fx .live::before { animation: none; } }

  .main { padding: 12px 16px; display: flex; flex-direction: column; gap: 12px; max-width: 1600px; width: 100%; margin: 0 auto; flex: 1; min-height: 0; overflow: auto; }
  /* top area (arrivals/departures) ~3 parts, tasks ~2 parts; each has a floor so at least
     3 check-in/out cards and 6 tasks stay visible before the panel scrolls internally. */
  .flow { display: flex; gap: 12px; align-items: stretch; flex: 3 1 0; min-height: 300px; }
  .panel { flex: 1; background: color-mix(in srgb, var(--surface) 97%, transparent); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); display: flex; flex-direction: column; min-width: 0; overflow: hidden; }
  .panel.hidden { display: none; }
  .mob-only { display: none !important; }   /* phone-only blocks — activated in the @media (max-width:640px) rule */
  .tasks-done { background: color-mix(in srgb, var(--surface) 97%, transparent); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); }
  .tasks-done #tasksDone { display: flex; flex-wrap: wrap; gap: 8px; padding: 10px; min-height: 40px; }
  .tasks-done #tasksDone:empty::before { content: ""; }
  .panel-head { flex-shrink: 0; box-sizing: border-box; min-height: 49px; display: flex; align-items: center; justify-content: space-between; padding: 8px 15px; border-bottom: 1px solid var(--border); }
  .panel-head h2 { margin: 0; font-size: 13px; letter-spacing: .06em; text-transform: uppercase; color: var(--text-2); display: flex; align-items: center; gap: 7px; }
  .panel-head .count { background: var(--accent-weak); color: var(--accent); font-weight: 700; border-radius: 20px; padding: 1px 9px; font-size: 12px; }
  /* each cards panel is a physics arena; active cards flow at the top, completed chips fall to the floor */
  /* the panel is the physics arena (fixed height → chips fall to its TRUE bottom); the active cards live
     in an absolutely-positioned layer on top that scrolls on its own, so many cards scroll while the
     fallen chips stay pinned to the real floor. */
  .cards { position: relative; overflow: hidden; flex: 1; min-height: 0; }
  .card-flow { position: absolute; inset: 0; overflow-y: auto; overflow-x: hidden; display: flex; flex-wrap: wrap; align-content: flex-start; padding: 8px; gap: 8px; scrollbar-width: thin; scrollbar-gutter: stable; }
  .card-flow::-webkit-scrollbar { width: 7px; }
  .card-flow::-webkit-scrollbar-thumb { background: var(--border); border-radius: 4px; }
  .card-flow::-webkit-scrollbar-thumb:hover { background: var(--text-2); }
  .empty { padding: 26px; text-align: center; color: var(--text-2); font-style: italic; flex: 1 1 100%; }

  /* content-width, no grow: the name/facts length sets each card's size (casual, uneven rows — like the task bricks) */
  .card { flex: 0 1 auto; min-width: 168px; max-width: 100%; box-sizing: border-box; display: flex; flex-direction: column; gap: 4px;
          padding: 10px 12px; border: 1px solid var(--border); border-radius: 9px; background: var(--surface); }
  .card.turnover { background: var(--warn-weak); border-color: color-mix(in srgb, var(--warn) 40%, var(--border)); }
  .card.turnover { cursor: default; }
  /* hover checklist for a turnover card — floating (fixed) so the departures column can't clip it */
  .turnover-tip { position: fixed; z-index: 120; width: min(330px, 88vw); background: var(--surface); color: var(--text);
    border: 1px solid color-mix(in srgb, var(--warn) 45%, var(--border)); border-radius: 14px; box-shadow: var(--shadow), 0 14px 34px rgba(8,20,12,.26);
    padding: 14px 16px 15px; font-size: 12.5px; line-height: 1.48; opacity: 0; transform: translateY(5px);
    transition: opacity .14s ease, transform .14s ease; pointer-events: none; }
  .turnover-tip.show { opacity: 1; transform: translateY(0); }
  .turnover-tip h4 { margin: 0 0 9px; font-size: 13px; display: flex; align-items: center; gap: 7px; color: var(--warn);
    letter-spacing: .02em; text-transform: uppercase; }
  .turnover-tip ol { margin: 0; padding: 0; list-style: none; display: flex; flex-direction: column; gap: 6px; }
  .turnover-tip li { display: flex; gap: 8px; align-items: flex-start; }
  .turnover-tip li::before { content: "✓"; color: var(--accent); font-weight: 800; flex: 0 0 auto; margin-top: 1px; }
  .turnover-tip li.flag::before { content: "⚠"; color: var(--warn); }
  /* task hover tip — same box as the checklist tip, but headed by the task (accent, not the warn/uppercase checklist look) */
  .task-tip { border-color: color-mix(in srgb, var(--accent) 40%, var(--border)); padding: 12px 15px 13px; }
  .task-tip h4 { color: var(--accent); text-transform: none; letter-spacing: 0; font-size: 13.5px; margin-bottom: 7px; flex-wrap: wrap; }
  .task-tip .tt-hour { margin-left: auto; font-size: 11.5px; font-weight: 600; color: var(--text-2); }
  .task-tip .task-details { font-size: 12.5px; line-height: 1.48; }
  .task-tip .task-details p { margin: 0 0 6px; }
  .task-tip .task-details p:last-child, .task-tip .task-details .td-list:last-child { margin-bottom: 0; }
  /* pre-check-in "prepare room" state — amber left-rail marks a card still needing prep (before its check-in phase) */
  .card.prep { border-left: 3px solid var(--accent-2); cursor: default; }
  /* overdue arrival — booked, never checked in (a late/after-midnight arrival, or an in-house guest never logged).
     Dedicated warm shade + a "was expected …" pill, distinct from a normal arrival and from the prep state. */
  .card.overdue { background: color-mix(in srgb, var(--accent-2) 12%, var(--surface)); border-color: color-mix(in srgb, var(--accent-2) 45%, var(--border)); border-left: 3px solid var(--accent-2); }
  .late-badge { align-self: center; font-size: 10px; font-weight: 700; text-transform: uppercase; letter-spacing: .04em; white-space: nowrap;
    color: var(--accent-2); background: color-mix(in srgb, var(--accent-2) 16%, var(--surface)); border: 1px solid color-mix(in srgb, var(--accent-2) 40%, var(--border)); padding: 1px 8px; border-radius: 999px; }
  /* check-out / prep SLA: past the due time a card warms to orange, 30 min later red. `late` wins over `prep`. */
  .card.sla-warn { background: var(--warn-weak); border-color: color-mix(in srgb, var(--warn) 55%, var(--border)); border-left: 3px solid var(--warn); }
  .card.sla-late { background: var(--danger-weak); border-color: color-mix(in srgb, var(--danger) 55%, var(--border)); border-left: 3px solid var(--danger); }
  .sla-tag { display: inline-flex; align-items: center; gap: 2px; font-weight: 700; font-size: 11px; letter-spacing: .02em; text-transform: uppercase; padding: 0 5px; border-radius: 5px; }
  .sla-tag.warn { color: var(--warn); background: color-mix(in srgb, var(--warn) 16%, transparent); }
  .sla-tag.late { color: var(--danger); background: color-mix(in srgb, var(--danger) 16%, transparent); }
  .card .g-name .flag { font-size: 14px; vertical-align: baseline; }
  .card-top { display: flex; align-items: baseline; justify-content: space-between; gap: 10px; }
  .card .g-name { font-size: 15px; font-weight: 650; letter-spacing: -.01em; flex: 1; min-width: 0; line-height: 1.25; }
  .card .g-facts { display: flex; flex-wrap: wrap; gap: 3px 12px; color: var(--text-2); font-size: 12.5px; }
  .card .g-facts b { color: var(--text); font-weight: 600; }
  .card .money { margin-top: 2px; display: flex; gap: 14px; flex-wrap: wrap; align-items: baseline; }
  .money .lbl { font-size: 10.5px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-2); margin-right: 4px; }
  .money .paid { color: var(--free); font-weight: 650; }
  .money .due { font-weight: 650; }
  .money .due.owed { color: var(--danger); }
  .money .due.clear { color: var(--free); }
  .actions { display: flex; align-items: center; gap: 6px; flex-shrink: 0; }
  .card-top .btn { padding: 5px 11px; font-size: 12.5px; }
  .btn { font: inherit; font-weight: 600; cursor: pointer; border-radius: 8px; padding: 8px 14px; border: 1px solid var(--accent); background: var(--accent); color: #fff; white-space: nowrap; }
  .btn:hover { filter: brightness(1.06); }
  .btn.ghost { background: transparent; color: var(--accent); }
  .btn.warn { background: var(--warn); border-color: var(--warn); }
  .btn.subtle { background: transparent; border-color: var(--border); color: var(--text-2); font-weight: 500; padding: 5px 10px; }
  .btn.done { background: var(--free); border-color: var(--free); }

  .tasks-panel { background: color-mix(in srgb, var(--surface) 97%, transparent); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); flex: 2 1 0; min-height: 320px; display: flex; flex-direction: column; overflow: hidden; }
  #tasks { flex: 1; min-height: 0; overflow-y: auto; }
  .task { display: flex; align-items: center; gap: 12px; padding: 11px 15px; border-bottom: 1px solid var(--border); }
  .task:last-child { border-bottom: none; }
  .task.overdue { background: var(--danger-weak); }
  .task .check { width: 22px; height: 22px; border-radius: 6px; border: 2px solid var(--border); cursor: pointer; flex-shrink: 0; display: grid; place-items: center; color: transparent; font-size: 14px; background: transparent; }
  .task .check:hover { border-color: var(--free); }
  .task.locked .check { cursor: not-allowed; opacity: .4; }
  .task.done .check { background: var(--free); border-color: var(--free); color: #fff; }
  .task .body { flex: 1; min-width: 0; }
  .task .label { font-weight: 550; }
  .task.done .label, .task.dismissed .label { text-decoration: line-through; color: var(--text-2); }
  .task .sub { font-size: 12px; color: var(--text-2); margin-top: 2px; }
  .task.overdue .sub { color: var(--danger); font-weight: 600; }
  .task .hour { font-family: var(--mono); font-size: 12px; color: var(--text-2); padding: 2px 8px; border: 1px solid var(--border); border-radius: 6px; }
  .task .hour.locked { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 40%, var(--border)); }
  .task .dismiss { background: none; border: none; color: var(--text-2); cursor: pointer; font-size: 12px; padding: 4px; text-decoration: underline; }
  .task .dismiss:hover { color: var(--danger); }
  .task.dismissed { opacity: .5; }

  .overlay { position: fixed; inset: 0; background: rgba(8,20,12,.5); backdrop-filter: blur(2px); display: none; align-items: center; justify-content: center; z-index: 70; padding: 20px; }
  .overlay.open { display: flex; }
  .modal { background: var(--surface); border: 1px solid var(--border); border-radius: 14px; width: 100%; max-width: 440px; box-shadow: 0 20px 60px rgba(0,0,0,.35); overflow: hidden; }
  .modal-head { padding: 16px 20px 4px; }
  .modal-head h3 { margin: 0; font-size: 18px; }
  .modal-head .who-line { color: var(--text-2); font-size: 13px; margin-top: 2px; }
  /* settled-task info dialog: big icon emblem + name/who stacked so "Completed by…" sits under the name */
  .settled-head { display: flex; align-items: center; gap: 14px; }
  .settled-emblem { position: relative; flex: 0 0 auto; width: 54px; height: 54px; border-radius: 14px; display: grid; place-items: center; font-size: 30px; line-height: 1; }
  .settled-emblem.done { background: color-mix(in srgb, var(--free) 16%, var(--surface)); border: 1px solid color-mix(in srgb, var(--free) 45%, var(--border)); }
  .settled-emblem.dismissed { background: color-mix(in srgb, var(--warn) 16%, var(--surface)); border: 1px solid color-mix(in srgb, var(--warn) 45%, var(--border)); }
  .settled-emblem .se-badge { position: absolute; right: -6px; bottom: -6px; width: 22px; height: 22px; border-radius: 50%; display: grid; place-items: center; font-size: 12px; font-weight: 800; color: #fff; border: 2px solid var(--surface); }
  .settled-emblem.done .se-badge { background: var(--free); }
  .settled-emblem.dismissed .se-badge { background: var(--warn); }
  .settled-htext { min-width: 0; }
  .settled-htext h3 { margin: 0 0 2px; font-size: 18px; }
  .modal-body { padding: 12px 20px; display: flex; flex-direction: column; gap: 14px; }
  .field { display: flex; flex-direction: column; gap: 5px; }
  .field > label { font-size: 12px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-2); font-weight: 600; }
  .field input, .field select { font: inherit; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); width: 100%; }
  .btn:disabled { opacity: .4; cursor: not-allowed; filter: none; }
  .field .hint { font-size: 11px; color: var(--text-2); }
  .face-hint { display: flex; align-items: center; gap: 8px; margin-top: 12px; font-size: 13px; color: var(--text-2); }
  .fh-spin { width: 14px; height: 14px; border: 2px solid var(--border); border-top-color: var(--accent); border-radius: 50%; animation: fh-rot .7s linear infinite; flex: none; }
  @keyframes fh-rot { to { transform: rotate(360deg); } }
  @media (prefers-reduced-motion: reduce) { .fh-spin { animation: none; } }
  .face-cam { width: 160px; height: 120px; border-radius: 10px; object-fit: cover; background: #0a0a0a; margin-top: 10px; transform: scaleX(-1); }
  .face-cam.big { width: 260px; height: 195px; }
  .cash-ok { color: var(--free); font-size: 11px; font-weight: 700; letter-spacing: 0; text-transform: none; margin-left: 6px; }
  .field input.cash-locked { border-color: var(--free); background: color-mix(in srgb, var(--free) 12%, var(--bg)); color: var(--text-2); cursor: not-allowed; }
  .segmented { display: flex; gap: 6px; }
  .segmented label { flex: 1; text-align: center; padding: 8px; border: 1px solid var(--border); border-radius: 8px; cursor: pointer; font-weight: 550; font-size: 13px; color: var(--text-2); position: relative; }
  .segmented input { position: absolute; opacity: 0; pointer-events: none; }
  .segmented label:has(input:checked) { border-color: var(--accent); background: var(--accent-weak); color: var(--accent); }
  .checks { display: flex; flex-direction: column; gap: 4px; }
  /* owners are set apart wherever volunteers are listed: a plain rule above them + a shaded row */
  .owner-sep { border: none; border-top: 1px solid var(--border); margin: 8px 2px 5px; }
  .checkrow.owner-row { background: var(--warn-weak); border-radius: 8px; padding-left: 6px; padding-right: 6px; }
  .checkrow .owner-lock { margin-left: auto; opacity: .55; font-size: 12px; }
  tr.owner-row > td { background: var(--warn-weak); }
  tr.owner-first > td { border-top: 2px solid var(--border); }
  .checkrow { display: flex; align-items: center; gap: 10px; padding: 7px 4px; cursor: pointer; }
  /* styled volunteer chip-picker (replaces native <select> for choosing who's on shift) */
  .pref-section h4 { margin: 0 0 7px; }
  .prefwho { display: flex; flex-wrap: wrap; align-items: center; gap: 8px; margin: 0 0 7px; }
  .prefwho-lab { font-size: 12.5px; color: var(--text-2); font-weight: 600; }
  .pref-legend { font-size: 12px; color: var(--text-2); margin: 0 0 8px; }
  .pick-chips { display: flex; flex-wrap: wrap; gap: 6px; }
  .pick-chips .owner-sep { width: 100%; margin: 5px 0 2px; }
  .pick-chip { font: inherit; font-size: 13px; padding: 6px 12px; border-radius: 20px; border: 1.5px solid var(--border); background: var(--surface); color: var(--text); cursor: pointer; transition: background .12s, border-color .12s; }
  .pick-chip:hover:not(:disabled) { border-color: var(--accent); }
  .pick-chip.sel { background: var(--accent); color: #fff; border-color: var(--accent); font-weight: 600; }
  .pick-chip.owner { background: var(--warn-weak); border-color: color-mix(in srgb, var(--warn) 40%, var(--border)); }
  .pick-chip.owner.sel { background: var(--warn); color: #fff; border-color: var(--warn); }
  .pick-chip:disabled { opacity: .5; cursor: default; }
  .checkrow input { width: 18px; height: 18px; accent-color: var(--accent); }
  .amount-summary { background: var(--surface-2); border-radius: 9px; padding: 11px 13px; display: flex; flex-direction: column; gap: 5px; }
  .amount-summary .row { display: flex; justify-content: space-between; font-size: 13px; }
  .amount-summary .row .k { color: var(--text-2); }
  .amount-summary .row.total { font-weight: 700; font-size: 15px; padding-top: 6px; border-top: 1px solid var(--border); margin-top: 3px; }
  .amount-summary .surcharge { color: var(--warn); }
  .stars { display: flex; gap: 6px; }
  .star { font-size: 26px; cursor: pointer; color: var(--border); line-height: 1; }
  .star.on { color: var(--warn); }
  /* optional note: a low-key icon toggle so the busy dialogs stay clean until a note is actually wanted */
  .notes-toggle { align-self: flex-start; background: none; border: 1px solid var(--border); color: var(--muted); border-radius: 8px; width: 30px; height: 30px; padding: 0; cursor: pointer; font-size: 15px; line-height: 1; display: inline-flex; align-items: center; justify-content: center; transition: color .12s, border-color .12s; }
  .notes-toggle:hover { color: var(--accent, var(--fg)); border-color: var(--accent, var(--fg)); }
  .notes-input { width: 100%; min-height: 52px; resize: vertical; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--bg); color: var(--fg); font: inherit; }
  /* sandbox / test mode page */
  .sb-presets { display: flex; flex-wrap: wrap; gap: 6px; margin: 10px 0; align-items: center; }
  .sb-presets .lbl { color: var(--text-2); font-size: 13px; margin-right: 4px; }
  .sb-now { margin: 8px 0; color: var(--text-2); }
  .sb-badge { font-size: 11px; font-weight: 700; padding: 2px 8px; border-radius: 6px; background: color-mix(in srgb, var(--warn) 22%, transparent); color: var(--warn); }
  .sb-badge.real { background: color-mix(in srgb, var(--text-2) 20%, transparent); color: var(--text-2); }
  .sb-actions { display: flex; flex-wrap: wrap; gap: 8px; margin-top: 12px; }
  .sb-log { display: flex; flex-direction: column; gap: 4px; max-height: 52vh; overflow: auto; }
  .sb-row { display: grid; grid-template-columns: 86px 150px 1fr; gap: 10px; padding: 7px 10px; border-radius: 8px; background: var(--bg); font-size: 13px; align-items: baseline; }
  .sb-row.wa { border-left: 3px solid var(--accent); }
  .sb-row.beds24 { border-left: 3px solid var(--warn); }
  .sb-ch { font-weight: 600; color: var(--text-2); }
  .sb-t { color: var(--text-2); font-variant-numeric: tabular-nums; font-size: 12px; }
  .sb-msg { color: var(--text); }
  #sbNow { font: inherit; padding: 6px 8px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); margin-right: 6px; }
  .modal-foot { padding: 14px 20px 18px; display: flex; gap: 10px; justify-content: flex-end; border-top: 1px solid var(--border); }
  .avatar-sm { width: 26px; height: 26px; border-radius: 50%; background: var(--accent); color: #fff; font-weight: 700; display: grid; place-items: center; font-size: 11px; flex-shrink: 0; }
  .beds24-note { font-size: 11px; color: var(--text-2); background: var(--surface-2); border-radius: 8px; padding: 8px 10px; }
  /* chip "what happened" detail sheet */
  .d-sheet { display: flex; flex-direction: column; }
  .d-row { display: flex; justify-content: space-between; gap: 14px; padding: 8px 2px; border-bottom: 1px solid var(--border); font-size: 14px; }
  .d-row:last-child { border-bottom: 0; }
  .d-k { color: var(--text-2); flex-shrink: 0; }
  .d-v { text-align: right; min-width: 0; word-break: break-word; }
  .d-mut { color: var(--text-2); }
  .d-ok { color: var(--free); font-weight: 600; }
  .beds24-note b { color: var(--text); }
  /* room-week availability + pricing dialog (top-bar room click) */
  .rw-strip { display: grid; grid-template-columns: repeat(7, 1fr); gap: 6px; user-select: none; touch-action: none; }
  .rw-cell { border: 1px solid var(--border); border-radius: 9px; padding: 8px 3px; text-align: center; cursor: pointer; background: var(--bg); transition: background .1s, border-color .1s; }
  .rw-cell:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); }
  .rw-cell .rw-dow { font-size: 10px; text-transform: uppercase; letter-spacing: .03em; color: var(--text-2); }
  .rw-cell .rw-date { font-size: 17px; font-weight: 700; line-height: 1.15; }
  .rw-av { display: inline-block; font-size: 9.5px; font-weight: 700; border-radius: 10px; padding: 1px 5px; margin: 3px 0; }
  .rw-av.ok { color: var(--free); background: color-mix(in srgb, var(--free) 15%, transparent); }
  .rw-av.no { color: var(--danger); background: color-mix(in srgb, var(--danger) 15%, transparent); }
  .rw-price { font-size: 11px; font-weight: 650; font-family: var(--mono); margin-top: 2px; }
  .rw-price .rw-crc { display: block; color: var(--text-2); font-weight: 500; font-size: 9.5px; }
  .rw-cell.sel { border-color: var(--accent); background: var(--accent-weak); }
  .rw-cell.sel .rw-date, .rw-cell.sel .rw-price { color: var(--accent); }
  .rw-total { margin-top: 14px; text-align: center; font-size: 15px; padding: 12px; border-top: 1px solid var(--border); color: var(--text-2); }
  .rw-total b { color: var(--text); }
  .rw-total .rw-crc { color: var(--text-2); font-weight: 500; }
  /* all-rooms table: every room × 7 nights; click one room per night (mixable) to compose a stay */
  .rw-tablewrap { overflow-x: auto; margin: 0 -4px; }
  .rw-table { border-collapse: separate; border-spacing: 5px; width: 100%; user-select: none; touch-action: none; }
  .rw-table thead th { padding: 2px 4px; color: var(--text-2); font-weight: 600; vertical-align: bottom; }
  .rw-table thead .rw-dow { font-size: 10px; text-transform: uppercase; letter-spacing: .03em; }
  .rw-table thead .rwh-date { font-size: 15px; font-weight: 700; color: var(--text); line-height: 1.1; }
  .rw-table th.rwh-room { text-align: left; white-space: nowrap; font-weight: 600; font-size: 13px; padding-right: 10px;
                          position: sticky; left: 0; background: var(--surface); z-index: 1; }
  .rw-table td.rwc { border: 1px solid var(--border); border-radius: 8px; padding: 6px 8px; text-align: center; cursor: pointer;
                     background: var(--bg); min-width: 60px; transition: background .1s, border-color .1s; }
  .rw-table td.rwc:hover { border-color: color-mix(in srgb, var(--accent) 45%, var(--border)); }
  .rw-table td.rwc.sel { border-color: var(--accent); background: var(--accent-weak); }
  .rw-table td.rwc.sel .rw-price { color: var(--accent); }
  .rw-table td.rwc.full { opacity: .38; cursor: default; }
  .rw-table td.rwc.full:hover { border-color: var(--border); }
  .rw-plan { text-align: center; font-size: 12.5px; line-height: 1.9; color: var(--text); margin-bottom: 6px; }
  .rw-plan .rw-plan-item { white-space: nowrap; }
  .rw-plan .rw-plan-day { color: var(--text-2); font-family: var(--mono); font-size: 11px; }
  .rw-plan .rw-plan-sep { color: var(--text-2); }
  .rw-sum { font-size: 14px; }
  /* room-week / calendar loading feedback */
  .rw-loading { display: flex; align-items: center; justify-content: center; gap: 11px; padding: 46px 20px; color: var(--text-2); font-size: 13px; }
  /* month price+availability calendar */
  .cal-modhead { padding: 14px 20px 10px; display: flex; align-items: center; justify-content: center; gap: 14px 22px; flex-wrap: wrap; }
  .cal-nav { display: flex; align-items: center; justify-content: center; gap: 14px; }
  .cal-pick { display: flex; align-items: center; gap: 8px; min-width: 210px; justify-content: center; }
  .cal-cal { font-size: 16px; }
  .cal-sel { appearance: none; -webkit-appearance: none; background: var(--surface-2) no-repeat right 8px center;
    background-image: linear-gradient(45deg, transparent 50%, var(--text-2) 50%), linear-gradient(135deg, var(--text-2) 50%, transparent 50%);
    background-size: 5px 5px, 5px 5px; background-position: right 10px center, right 5px center;
    border: 1px solid var(--border); border-radius: 8px; color: var(--text); font-size: 15px; font-weight: 600;
    padding: 5px 26px 5px 11px; cursor: pointer; font-family: inherit; }
  .cal-sel:hover:not(:disabled) { border-color: color-mix(in srgb, var(--accent) 50%, var(--border)); }
  .cal-sel:disabled { opacity: .5; cursor: default; }
  .cal-arrow { width: 30px; height: 30px; border-radius: 8px; border: 1px solid var(--border); background: transparent; color: var(--text); cursor: pointer; font-size: 16px; line-height: 1; }
  .cal-arrow:hover:not(:disabled) { background: var(--surface-2); }
  .cal-arrow:disabled { opacity: .4; cursor: default; }
  .cal-body { height: 72vh; overflow-y: auto; }   /* fixed so the dialog doesn't resize between 4/5/6-week months or while loading */
  .cal-dow { display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; margin-bottom: 5px; }
  .cal-dow-c { text-align: center; font-size: 10.5px; text-transform: uppercase; letter-spacing: .05em; color: var(--text-2); font-weight: 700; }
  .cal-vdiv { width: 1px; align-self: stretch; min-height: 26px; background: var(--border); }   /* between month nav and legend */
  .cal-grid { position: relative; display: grid; grid-template-columns: repeat(7, 1fr); gap: 5px; }
  .cal-chart { position: absolute; inset: 0; pointer-events: none; z-index: 6; overflow: visible; }
  .cal-chart-line { fill: none; stroke: var(--accent); stroke-width: 1.6; opacity: .9; stroke-linejoin: round; stroke-linecap: round; filter: drop-shadow(0 1px 2px rgba(0,0,0,.55)); }
  .cal-chart-dot { fill: var(--accent); stroke: var(--bg); stroke-width: .8; }
  .cal-cell { position: relative; min-height: 104px; border: 1px solid var(--border); border-radius: 8px; padding: 4px; background: var(--bg); display: flex; flex-direction: column; }
  .cal-cell.out { opacity: .3; }
  .cal-cell.past:not(.out) { opacity: .5; }
  .cal-cell.today { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent); }
  .cal-dnum { position: absolute; top: 2px; right: 3px; z-index: 3; font-size: 10px; font-weight: 700; color: var(--text-2); line-height: 1; padding: 1px 3px; border-radius: 4px; background: color-mix(in srgb, var(--bg) 62%, transparent); pointer-events: none; }
  .cal-cell.today .cal-dnum { color: var(--accent); }
  .cal-bars { display: flex; flex-direction: column; gap: 2px; }
  .cal-room { position: relative; height: 14px; border-radius: 3px; background: color-mix(in srgb, var(--rc) 15%, transparent); }
  .cal-room:hover { z-index: 4; }
  .cal-fill { position: absolute; top: 0; bottom: 0; left: 0; border-radius: 3px; background: color-mix(in srgb, var(--rc) 60%, transparent); }
  .cal-room.full .cal-fill { background: var(--rc); }
  .cal-ico { position: absolute; left: 2px; top: 50%; transform: translateY(-50%); transform-origin: left center; font-size: 8px; line-height: 1; z-index: 1; filter: drop-shadow(0 1px 1px rgba(0,0,0,.55)); transition: transform .12s ease; pointer-events: none; }
  .cal-room:hover .cal-ico { transform: translateY(-50%) scale(3.6); filter: drop-shadow(0 2px 4px rgba(0,0,0,.75)); }
  .cal-p { position: relative; display: block; text-align: center; font-size: 9.5px; line-height: 14px; font-weight: 650; color: var(--text); font-variant-numeric: tabular-nums; text-shadow: 0 1px 2px rgba(0,0,0,.5); }
  .cal-legend { display: flex; flex-wrap: wrap; justify-content: center; gap: 6px 13px; }
  .cal-leg { display: inline-flex; align-items: center; gap: 5px; font-size: 11.5px; color: var(--text-2); }
  .cal-swatch { width: 11px; height: 11px; border-radius: 3px; flex: 0 0 auto; }

  .admin { position: fixed; inset: 0; background: var(--bg); z-index: 60; display: none; flex-direction: column; overflow: auto; }
  .admin.open { display: flex; }
  .admin-top { position: sticky; top: 0; background: var(--surface); border-bottom: 1px solid var(--border); box-shadow: var(--shadow); display: flex; align-items: center; gap: 16px; padding: 10px 18px; z-index: 2; }
  .admin-top h1 { margin: 0; font-size: 17px; display: flex; align-items: center; gap: 8px; }
  .admin-tabs { display: flex; gap: 4px; flex: 1; flex-wrap: wrap; }
  .admin-tabs button { font: inherit; font-weight: 600; background: transparent; border: none; color: var(--text-2); padding: 8px 13px; border-radius: 8px; cursor: pointer; }
  .admin-tabs button:hover { background: var(--surface-2); color: var(--text); }
  .admin-tabs button.active { background: var(--accent-weak); color: var(--accent); }
  .admin-tabsel { display: none; font: inherit; font-weight: 600; flex: 1; min-width: 0; padding: 8px 10px; border-radius: 8px; border: 1px solid var(--border); background: var(--surface-2); color: var(--text); }
  .admin-body { padding: 22px; max-width: 1100px; margin: 0 auto; width: 100%; }
  .admin-pane { display: none; }
  .admin-pane.active { display: block; }
  .a-card { background: var(--surface); border: 1px solid var(--border); border-radius: 12px; box-shadow: var(--shadow); padding: 18px 20px; margin-bottom: 18px; }
  .a-card h3 { margin: 0 0 3px; font-size: 15px; }
  .a-card .desc { color: var(--text-2); font-size: 13px; margin-bottom: 14px; }
  /* cash register */
  .cash-subtabs { display: flex; gap: 6px; margin-bottom: 18px; border-bottom: 1px solid var(--border); }
  .cash-subtabs button { font: inherit; font-weight: 600; background: transparent; border: none; border-bottom: 2px solid transparent; color: var(--text-2); padding: 8px 14px; margin-bottom: -1px; cursor: pointer; }
  .cash-subtabs button.active { color: var(--accent); border-bottom-color: var(--accent); }
  /* per-shift till reconciliation timeline */
  .rec-intro { margin-bottom: 12px; }
  .rec-shift { margin-bottom: 12px; border-left: 3px solid color-mix(in srgb, var(--free) 45%, var(--border)); }
  .rec-shift.rec-flag { border-left-color: var(--danger); background: color-mix(in srgb, var(--danger) 5%, var(--surface)); }
  .rec-head { font-size: 14px; margin-bottom: 8px; }
  .rec-head .rec-times { color: var(--text-2); font-family: var(--mono); font-size: 12px; margin-left: 4px; }
  .rec-line { display: flex; justify-content: space-between; align-items: baseline; gap: 12px; padding: 6px 0; font-size: 14px; }
  .rec-lbl { color: var(--text-2); flex-shrink: 0; }
  .rec-val { text-align: right; font-variant-numeric: tabular-nums; }
  .rec-var { font-weight: 700; padding: 1px 7px; border-radius: 20px; font-size: 12px; margin-left: 6px; white-space: nowrap; }
  .rec-var.short { background: var(--danger-weak); color: var(--danger); }
  .rec-var.over  { background: var(--warn-weak); color: var(--warn); }
  .rec-ok { color: var(--free); font-weight: 600; font-size: 12px; margin-left: 6px; }
  .rec-tries { color: var(--danger); font-size: 11px; font-weight: 600; }
  .rec-tx { width: 100%; border-collapse: collapse; margin: 6px 0; font-size: 13px; }
  .rec-tx td { padding: 4px 6px; border-bottom: 1px solid var(--border); color: var(--text-2); }
  .rec-tx td.tnum { font-variant-numeric: tabular-nums; color: var(--fg); text-align: right; }
  .rec-tx td:first-child { font-family: var(--mono); font-size: 11px; }
  .rec-tx .rec-who { color: var(--text-2); }
  .rec-tx tr.rec-txvar td { color: var(--danger); font-weight: 600; }
  .rec-empty { color: var(--text-2); font-style: italic; font-size: 12px; padding: 4px 0; }
  .rec-note { font-size: 12px; background: var(--surface-2); border-radius: 7px; padding: 6px 9px; margin: 4px 0; }
  .rec-note.rec-guilt { background: var(--danger-weak); color: var(--danger); }
  .rec-inprog .rec-lbl { color: var(--warn); }
  .rec-toolbar { display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 10px; margin-bottom: 12px; }
  .rec-seg { display: inline-flex; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
  .rec-seg button { font: inherit; font-size: 13px; font-weight: 600; background: transparent; border: none; color: var(--text-2); padding: 6px 12px; cursor: pointer; }
  .rec-seg button.active { background: var(--accent); color: #fff; }
  .rec-page { display: inline-flex; align-items: center; gap: 8px; }
  .rec-page .btn.small { margin-top: 0; }   /* the generic .btn.small top-margin would shove the arrows below the window label */
  .rec-page .rec-window { font-family: var(--mono); font-size: 12px; color: var(--text-2); }
  .rec-headline { font-size: 14px; line-height: 1.5; margin-bottom: 6px; }
  .rec-headline .rec-icon { margin-right: 3px; }
  .rec-headline .rec-diff { color: var(--danger); }
  .rec-shift details { border-top: 1px solid var(--border); margin-top: 6px; }
  .rec-shift summary { cursor: pointer; color: var(--text-2); font-size: 12px; padding: 6px 0 2px; list-style-position: inside; }
  .rec-shift summary:hover { color: var(--accent); }
  .drawer-cards { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; margin-bottom: 16px; }
  .drawer-bal { margin-bottom: 0; text-align: center; padding: 22px 18px; }
  .dc-label { color: var(--text-2); font-size: 12px; text-transform: uppercase; letter-spacing: .05em; margin-bottom: 8px; }
  .dc-amt { font-size: 32px; font-weight: 700; font-variant-numeric: tabular-nums; }
  .cash-actions { display: flex; gap: 10px; margin-bottom: 18px; flex-wrap: wrap; }
  .btn.small { font-size: 12px; padding: 6px 12px; margin-top: 10px; }
  .tx-toolbar { display: flex; align-items: center; justify-content: space-between; gap: 12px; margin-bottom: 12px; flex-wrap: wrap; }
  .tx-filters { display: flex; gap: 6px; align-items: center; flex-wrap: wrap; }
  .tx-filters .chip { cursor: pointer; border: 1px solid var(--border); background: transparent; color: var(--text-2); border-radius: 20px; padding: 4px 12px; font: inherit; font-size: 13px; }
  .tx-filters .chip.on { background: var(--accent-weak); color: var(--accent); border-color: transparent; font-weight: 600; }
  .chip-sep { width: 1px; align-self: stretch; background: var(--border); margin: 2px 4px; }
  .tx-cur { display: flex; gap: 6px; align-items: center; }
  .curbtn { font: inherit; font-size: 13px; font-weight: 600; border: 1px solid var(--border); background: transparent; color: var(--text-2); border-radius: 20px; padding: 4px 13px; cursor: pointer; }
  .curbtn.on { background: var(--accent); color: #fff; border-color: transparent; }
  .dc-set { margin-top: 10px; font: inherit; font-size: 12px; font-weight: 600; background: transparent; border: 1px solid var(--border); color: var(--text-2); border-radius: 7px; padding: 4px 12px; cursor: pointer; }
  .dc-set:hover { color: var(--accent); border-color: var(--accent); }
  .tx-wrap { overflow-x: auto; border: 1px solid var(--border); border-radius: 12px; }
  .tx-table { width: 100%; border-collapse: collapse; font-size: 13px; }
  .tx-table td { padding: 9px 12px; border-bottom: 1px solid var(--border); white-space: nowrap; }
  .tx-table tr:last-child td { border-bottom: none; }
  .tx-when { color: var(--text-2); font-family: var(--mono); font-size: 11.5px; }
  .tx-who { color: var(--text-2); }
  .tx-note { white-space: normal; }
  .tx-amt { text-align: right; font-variant-numeric: tabular-nums; font-weight: 600; }
  .tx-amt.in { color: var(--accent); }
  .tx-amt.out { color: var(--warn); }
  .tx-amt.set { color: var(--text-2); }
  .tx-flag { text-align: center; }
  .tx-flag .ok { color: var(--accent); }
  .tx-flag .pend { color: var(--warn); }
  .tx-shift-row td { padding: 0 !important; border-bottom: 1px solid var(--border); }
  .tx-shift { display: flex; align-items: baseline; gap: 10px; padding: 7px 12px; background: var(--panel-2, rgba(127,127,127,.07)); }
  .tx-shift-slot { font-size: 11px; text-transform: uppercase; letter-spacing: .05em; font-weight: 700; color: var(--canopy); }
  .tx-shift-vol { font-size: 12px; font-weight: 600; color: var(--text); }
  .tx-shift-date { margin-left: auto; font-family: var(--mono); font-size: 11px; color: var(--text-2); }
  .tx-shift-none .tx-shift-slot { color: var(--text-2); }
  .dev-list { display: flex; flex-direction: column; gap: 6px; padding: 4px 0 4px 8px; }
  .dev-item { display: flex; align-items: center; justify-content: space-between; gap: 12px; font-size: 13px; }
  .rec-total { font-size: 14px; margin-top: 6px; }
  table.vol { width: 100%; border-collapse: collapse; font-size: 13px; }
  table.vol th { text-align: left; font-size: 11px; text-transform: uppercase; letter-spacing: .04em; color: var(--text-2); padding: 8px 10px; border-bottom: 1px solid var(--border); }
  table.vol td { padding: 10px; border-bottom: 1px solid var(--border); vertical-align: top; }
  table.vol tr:last-child td { border-bottom: none; }
  table.vol .vn { font-weight: 650; }
  table.vol td .peer { color: var(--text-2); }
  .chips { display: flex; flex-wrap: wrap; gap: 4px; }
  .chip { font-size: 11px; background: var(--surface-2); border: 1px solid var(--border); border-radius: 20px; padding: 2px 9px; }
  .set-row { display: flex; align-items: center; justify-content: space-between; padding: 12px 0; border-bottom: 1px solid var(--border); gap: 20px; }
  .set-row:last-child { border-bottom: none; }
  .set-row .k { font-weight: 600; }
  .set-row .k .sub { font-weight: 400; color: var(--text-2); font-size: 12px; margin-top: 2px; }
  .set-row .v { display: flex; align-items: center; gap: 8px; }
  .set-row .v input[type=number] { font: inherit; width: 80px; padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); text-align: right; }
  .set-row .v select, .set-row .v input[type=time], .set-row .v input[type=text] { font: inherit; padding: 7px 10px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); }
  .pill { font-size: 11px; font-weight: 700; border-radius: 20px; padding: 2px 10px; text-transform: capitalize; }
  .pill.hold { background: var(--accent-weak); color: var(--accent); }
  .pill.raise { background: var(--warn-weak); color: var(--warn); }
  .pill.cut { background: var(--danger-weak); color: var(--danger); }
  .stub { color: var(--text-2); font-style: italic; padding: 30px; text-align: center; border: 1px dashed var(--border); border-radius: 12px; }
  /* Prices tab hosts the full engine dashboard, full-bleed (no card, no max-width). */
  .admin-body.wide { max-width: none; padding: 0; }
  .engine-frame { width: 100%; height: calc(100vh - 56px); border: 0; display: block; background: var(--bg); }
  /* schedule grids + preference editor */
  .sched { width: 100%; border-collapse: collapse; font-size: 12.5px; margin-top: 6px; }
  .sched th, .sched td { border: 1px solid var(--border); padding: 5px 7px; text-align: center; }
  .sched th { background: var(--surface-2); font-weight: 600; white-space: nowrap; }
  .sched .slotlab { text-align: left; font-weight: 600; background: var(--surface-2); white-space: nowrap; }
  .sched td.cell { cursor: pointer; min-width: 84px; vertical-align: top; }
  .sched td.cell:hover { background: var(--accent-weak); }
  .sched .asg { display: inline-flex; align-items: center; gap: 3px; background: var(--accent-weak); color: var(--accent); border: 1.5px solid transparent; border-radius: 20px; padding: 1px 8px; margin: 1px; font-weight: 600; }
  .sched .asg.auto { border-style: dashed; }   /* per-volunteer colour comes from inline style; dashed = auto (Selva), solid + 📌 = manual */
  .sched .asg .x { cursor: pointer; opacity: .55; font-weight: 700; }
  .sched .asg .x:hover { opacity: 1; }
  .pref-cell { cursor: pointer; user-select: none; }
  .pref-cell.prefer { background: var(--accent-weak); color: var(--accent); font-weight: 700; }
  .pref-cell.avoid { background: var(--danger-weak); color: var(--danger); font-weight: 700; }
  /* schedule view: today's column + the live shift cell */
  .sched th.today-col { background: var(--accent-weak); color: var(--accent); }
  .sched td.today-col { background: var(--accent-weak); }
  .sched td.cur-shift { box-shadow: inset 0 0 0 2px var(--accent); }
  /* toasts — non-blocking, float above modals (replaces window.alert) */
  .toast-wrap { position: fixed; left: 50%; bottom: 26px; transform: translateX(-50%); z-index: 9999; display: flex; flex-direction: column; gap: 8px; align-items: center; pointer-events: none; }
  .toast { pointer-events: auto; display: flex; align-items: center; gap: 10px; background: var(--surface); color: var(--text); border: 1px solid var(--border); border-left: 4px solid var(--accent); border-radius: 10px; padding: 10px 14px; font-size: 13.5px; font-weight: 600; box-shadow: 0 8px 30px rgba(0,0,0,.28); max-width: min(90vw, 440px); animation: toastIn .18s ease-out; }
  .toast.warn { border-left-color: var(--warn); }
  .toast.error { border-left-color: var(--danger); }
  .toast .tx { cursor: pointer; opacity: .5; font-weight: 700; margin-left: 2px; }
  .toast .tx:hover { opacity: 1; }
  @keyframes toastIn { from { opacity: 0; transform: translateY(8px); } to { opacity: 1; transform: none; } }
  .modal.wide { max-width: 880px; }
  .modal.paydlg { max-width: 500px; }
  .row-actions { display: flex; gap: 6px; }
  .linkbtn { background: none; border: none; color: var(--accent); cursor: pointer; text-decoration: underline; font: inherit; font-size: 12px; padding: 2px; }
  .linkbtn.danger { color: var(--danger); }
  .runsum { font-size: 12px; color: var(--text-2); background: var(--surface-2); border-radius: 8px; padding: 8px 10px; margin-top: 10px; }
  .runsum.recalc-run { display: flex; align-items: center; gap: 8px; color: var(--text); }
  .spinner { display: inline-block; width: 14px; height: 14px; flex: 0 0 auto; border: 2px solid color-mix(in srgb, var(--accent) 28%, transparent); border-top-color: var(--accent); border-radius: 50%; animation: spin .7s linear infinite; }
  @keyframes spin { to { transform: rotate(360deg); } }

  /* Iggy the iguana — a procedural canvas rig (iguana-rig.js) over the tasks physics arena; pointer-events off so the drag hits the arena */
  .iggy-canvas { position: absolute; left: 0; top: 0; z-index: 2; pointer-events: none; filter: drop-shadow(0 3px 2px rgba(0,0,0,.22)); }

  /* machine-auth full-screen gate (first load per device) */
  .gate { position: fixed; inset: 0; z-index: 80; display: none; align-items: center; justify-content: center; padding: 20px; background: radial-gradient(120% 100% at 50% 0, #1f6b3d, #0a2a17); }
  .gate.show { display: flex; }
  .gate-card { background: rgba(0,0,0,.28); border: 1px solid rgba(255,255,255,.14); border-radius: 16px; padding: 34px; width: min(360px,92vw); text-align: center; color: #f3ecd6; backdrop-filter: blur(6px); }
  .gate-card .gleaf { font-size: 36px; }
  .gate-card h2 { margin: 6px 0 2px; font-size: 19px; }
  .gate-card .gsub { opacity: .75; font-size: 13px; margin-bottom: 18px; }
  .gate-card input { width: 100%; padding: 12px; border-radius: 10px; border: 1px solid rgba(255,255,255,.2); background: rgba(0,0,0,.25); color: #fff; font: inherit; }
  .gate-card .gerr { color: #ffb4a2; font-size: 13px; min-height: 18px; margin: 8px 0 4px; }
  .gate-card button { width: 100%; padding: 12px; border: none; border-radius: 10px; background: #e7b34e; color: #3a2a10; font-weight: 700; font: inherit; cursor: pointer; }

  /* --- UI round 1 additions --- */
  .who-txt { min-width: 0; }
  .name-line { display: flex; align-items: baseline; gap: 8px; flex-wrap: nowrap; }
  .name-line .name { white-space: nowrap; }
  .change-link.mini { font-size: 11px; font-weight: 600; }
  /* loading skeletons */
  @keyframes shimmer { 0% { background-position: -420px 0; } 100% { background-position: 420px 0; } }
  .skel { background: linear-gradient(90deg, var(--surface-2) 25%, color-mix(in srgb, var(--surface-2) 55%, var(--border)) 40%, var(--surface-2) 60%); background-size: 840px 100%; animation: shimmer 1.25s linear infinite; border-radius: 8px; }
  .skel-card { height: 74px; margin: 8px; }
  .skel-line { height: 14px; margin: 11px 15px; }
  .skel-room { width: 78px; height: 34px; flex-shrink: 0; }
  @media (prefers-reduced-motion: reduce) { .skel { animation: none; } }
  /* locked task is clickable now (shows an explainer dialog, never an alert) */
  .task.locked .check { cursor: help; pointer-events: auto; }
  /* item 5: unavailability roster cells (3-state) + read-only pref grid */
  .pref-cell.u-next  { background: var(--warn-weak);   color: var(--warn);   font-weight: 700; font-size: 10.5px; letter-spacing: .02em; }
  .pref-cell.u-every { background: var(--danger-weak); color: var(--danger); font-weight: 700; font-size: 10.5px; letter-spacing: .02em; }
  .ro-grid .pref-cell { cursor: default; }
  .ro-grid .pref-cell:hover { background: inherit; }
  .roster-legend { display: flex; gap: 14px; flex-wrap: wrap; font-size: 11.5px; color: var(--text-2); margin-top: 4px; }
  .roster-legend .sw { display: inline-block; width: 11px; height: 11px; border-radius: 3px; vertical-align: -1px; margin-right: 4px; }
  .two-col { display: grid; grid-template-columns: 1fr 1fr; gap: 18px; align-items: start; }
  @media (max-width: 720px) { .two-col { grid-template-columns: 1fr; } }
  /* items 7/16/15: tabs, payment dialog, pending list, urgent balance task */
  .panel-tabs { display: flex; gap: 4px; flex: 1; }
  .panel-tabs .tab { font: inherit; font-weight: 600; font-size: 13px; letter-spacing: .04em; text-transform: uppercase; color: var(--text-2); background: transparent; border: none; border-radius: 8px 8px 0 0; padding: 4px 10px; cursor: pointer; display: flex; align-items: center; gap: 6px; }
  .panel-tabs .tab:hover { background: var(--surface-2); color: var(--text); }
  .panel-tabs .tab.active { color: var(--accent); border-bottom: 2px solid var(--accent); }
  .panel-tabs .tab .count { background: var(--accent-weak); color: var(--accent); font-weight: 700; border-radius: 20px; padding: 0 8px; font-size: 12px; }
  .panel-tabs .tab.warn-tab.active { color: var(--warn); border-bottom-color: var(--warn); }
  .panel-tabs .tab.warn-tab .count { background: var(--warn-weak); color: var(--warn); }
  /* something's overdue in this list (late pending, turnover, or room-ready) → the tab/panel count goes red */
  .panel-head .count.urgent, .panel-tabs .tab .count.urgent { background: var(--danger-weak); color: var(--danger); }
  .cards.hidden { display: none; }
  /* payment dialog */
  .bigamt { font-size: 26px; font-weight: 700; color: var(--text); }
  .bigamt .crcsub { font-size: 14px; font-weight: 500; color: var(--text-2); margin-left: 8px; }
  .collectrow { display: flex; gap: 8px; align-items: stretch; }
  .collectrow input { flex: 1; }
  .xbtn { border: 1px solid var(--border); background: var(--surface-2); color: var(--text-2); border-radius: 8px; width: 42px; cursor: pointer; font-size: 15px; font-weight: 700; }
  .xbtn:hover { color: var(--danger); border-color: var(--danger); }
  .paidfull { display: flex; align-items: center; gap: 8px; font-size: 17px; font-weight: 700; color: var(--free); background: color-mix(in srgb, var(--free) 12%, transparent); border-radius: 10px; padding: 12px 14px; }
  .paylist { display: flex; flex-direction: column; gap: 2px; background: var(--surface-2); border-radius: 9px; padding: 8px 10px; }
  .payrow { display: grid; grid-template-columns: 96px 1fr 62px 84px; gap: 4px 10px; font-size: 13px; padding: 3px 0; align-items: baseline; }
  .payrow span:first-child { color: var(--text-2); font-family: var(--mono); font-size: 11.5px; white-space: nowrap; }
  .payrow span:nth-child(3), .payrow span:nth-child(4) { text-align: right; font-variant-numeric: tabular-nums; }
  .payrow.total { border-top: 1px solid var(--border); margin-top: 4px; padding-top: 6px; font-weight: 700; }
  .sublabel { font-weight: 400; color: var(--text-2); font-size: 11.5px; text-transform: none; letter-spacing: 0; }
  .changerow { display: flex; align-items: center; justify-content: space-between; margin-top: 8px; font-size: 14px; }
  .changerow .k { color: var(--text-2); }
  .changeval { display: flex; align-items: center; gap: 8px; }
  .changeval b { font-size: 16px; }
  .curtoggle { display: inline-flex; border: 1px solid var(--border); border-radius: 8px; overflow: hidden; }
  .curtoggle button { font: inherit; font-weight: 700; border: none; background: transparent; color: var(--text-2); padding: 3px 10px; cursor: pointer; }
  .curtoggle button.on { background: var(--accent); color: #fff; }
  .payrow .pcur { display: inline-block; min-width: 15px; text-align: center; font-size: 11px; font-weight: 700; color: var(--accent); background: var(--accent-weak); border-radius: 5px; padding: 0 3px; }
  .amount-summary .row .tnum.rem { color: var(--warn); }
  /* urgent balance task (item 15) */
  .task.balance-task { background: var(--danger-weak); border-left: 3px solid var(--danger); cursor: pointer; }
  .task.balance-task:hover { filter: brightness(1.03); }
  .task.balance-task .label { color: var(--danger); font-weight: 700; }
  .task .urgent-badge { width: 22px; height: 22px; border-radius: 50%; background: var(--danger); color: #fff; font-weight: 800; display: grid; place-items: center; flex-shrink: 0; }
  .task .coin { font-size: 16px; }

  /* ---- items 11/12/14: gamified task bricks + real-physics fall (matter.js) ----
     #tasks IS the arena: active bricks flow from the top, completed bricks fall as physics bodies
     to the floor (bottom of the same container) and stack — no separate pile section. */
  #tasks { flex: 1; min-height: 0; position: relative; overflow: hidden; user-select: none; -webkit-user-select: none; }
  /* one flowing wall: urgent + active bricks stack and flex-fill each row (narrow, many per line) */
  /* active tasks sit ABOVE the play layer (fallen boxes + Iggy) so they never get in the way of work */
  /* A low band of grass along the arena floor — PURE DECORATION. z-index 4 puts it in front of the chips (1),
     Iggy (2) and the wall (3), so they read as standing *behind* the blades. pointer-events:none so it never
     eats a drag on a chip. It's a keyed + mirror-tiled PNG made from grass2.jpg (its checkerboard removed),
     ~20px tall, repeated across the floor. NB fixed-colour image — does not follow light/dark theme. */
  #tasks::after {
    content: ""; position: absolute; left: 0; right: 0; bottom: 0; height: 10px; z-index: 4;
    pointer-events: none;
    background-image: url("data:image/png;base64,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");
    background-repeat: repeat-x; background-position: left bottom; background-size: auto 10px;
  }
  #task-wall { display: flex; flex-wrap: wrap; gap: 6px; padding: 8px; align-content: flex-start; position: relative; z-index: 3; pointer-events: none; }
  #task-wall > * { pointer-events: auto; }
  #task-wall:empty::after { content: attr(data-empty); color: var(--text-2); font-style: italic; margin: 22px auto; }
  /* content-width bricks that wrap; NO grow, so a lone brick on a row stays its size (rows needn't fill) */
  .brick { flex: 0 1 auto; min-width: 132px; max-width: 100%; box-sizing: border-box; border: 1px solid var(--border); border-radius: 9px; background: var(--surface);
           padding: 10px 12px; display: flex; align-items: center; gap: 9px; transition: box-shadow .15s; }
  .brick:not(.settled):hover { box-shadow: var(--shadow); }
  .brick .b-check { width: 21px; height: 21px; border-radius: 6px; border: 2px solid var(--border); cursor: pointer; flex-shrink: 0;
                    display: grid; place-items: center; color: transparent; font-size: 13px; background: transparent; transition: .12s; }
  .brick .b-check:hover { border-color: var(--free); color: var(--free); transform: scale(1.12); }
  .brick.locked .b-check { cursor: help; opacity: .4; }
  .brick .b-body { flex: 1; min-width: 0; display: flex; align-items: center; gap: 9px; cursor: pointer; }
  .brick .b-text { min-width: 0; }
  .brick .b-ico { font-size: 19px; line-height: 1; flex-shrink: 0; }
  .brick .b-label { font-weight: 600; font-size: 13px; line-height: 1.25; }
  .brick .b-sub { font-size: 11px; color: var(--text-2); margin-top: 2px; }
  .brick .b-hour { font-family: var(--mono); font-size: 11px; color: var(--text-2); padding: 2px 6px; border: 1px solid var(--border); border-radius: 6px; flex-shrink: 0; }
  .brick .b-hour.locked { color: var(--warn); border-color: color-mix(in srgb, var(--warn) 40%, var(--border)); }
  .brick .b-dismiss { background: none; border: none; color: var(--text-2); cursor: pointer; font-size: 11px; text-decoration: underline; padding: 3px; flex-shrink: 0; }
  .brick .b-dismiss:hover { color: var(--danger); }
  /* task details dialog (tap a task to see what it entails) + admin markers */
  .task-details { line-height: 1.55; font-size: 14px; }
  .task-details p { margin: 0 0 8px; }
  .task-details .td-list { margin: 0 0 8px; padding-left: 20px; }
  .task-details .td-list li { margin: 3px 0; }
  .task-details .muted { color: var(--text-2); font-style: italic; }
  /* drag-to-reorder task templates */
  .tasktbl td.drag-h { cursor: grab; color: var(--text-2); user-select: none; text-align: center; width: 20px; font-size: 15px; }
  .tasktbl td.drag-h:active { cursor: grabbing; }
  .tasktbl tr.dragging { opacity: .45; }
  .tasktbl tr.drop-before td { box-shadow: inset 0 2px 0 0 var(--accent); }
  .tasktbl tr.drop-after td { box-shadow: inset 0 -2px 0 0 var(--accent); }
  td.ticon { font-size: 17px; text-align: center; width: 30px; opacity: .9; }
  .has-detail { color: var(--text-2); font-size: 11px; opacity: .6; margin-left: 4px; }
  /* urgent bricks (carried-overdue item 14 + collect-balance item 15): red, but they stack in the flow like the rest */
  .brick.urgent { background: var(--danger-weak); border-color: var(--danger); border-left: 3px solid var(--danger); }
  .brick.urgent.pay { cursor: pointer; }
  .brick.urgent.pay:hover { filter: brightness(1.03); }
  .brick.urgent .b-label { color: var(--danger); font-weight: 700; }
  .brick .b-bang { width: 20px; height: 20px; border-radius: 50%; background: var(--danger); color: #fff; font-weight: 800; display: grid; place-items: center; flex-shrink: 0; font-size: 12px; }
  .brick .b-coin { font-size: 15px; flex-shrink: 0; }
  /* system shift bricks: start-gate (accent, invites) + end-of-shift (amber, urgent). Full-width, draw attention. */
  .brick.sys { cursor: pointer; padding: 13px 15px; gap: 12px; }
  .brick.sys .b-label { font-size: 15px; font-weight: 750; }
  .brick.sys .b-sub { font-size: 12px; margin-top: 3px; }
  .brick.sys .b-bang { width: 26px; height: 26px; font-size: 15px; }
  .brick.sys-gate { flex: 1 1 100%; background: var(--accent-weak); border-color: var(--accent); border-left: 3px solid var(--accent); justify-content: center; }
  .brick.sys-gate .b-body { flex: 0 1 auto; flex-direction: column; align-items: center; gap: 2px; text-align: center; }
  .brick.sys-gate .b-label { color: var(--accent); }
  .brick.sys-gate .b-bang { background: var(--accent); }
  .brick.sys-gate:hover { box-shadow: var(--shadow); filter: brightness(1.02); }
  .brick.sys-end { background: var(--warn-weak); border-color: var(--warn); border-left: 3px solid var(--warn); }
  .brick.sys-end.due { animation: sysglow 2.4s ease-in-out infinite; }   /* only escalates in the last 15 min */
  .brick.sys-end .b-label { color: var(--warn); }
  .brick.sys-end .b-bang { background: var(--warn); }
  .brick.sys-end:hover { filter: brightness(1.03); }
  @keyframes sysglow { 0%,100% { box-shadow: 0 0 0 0 color-mix(in srgb, var(--warn) 45%, transparent); } 50% { box-shadow: 0 0 0 5px color-mix(in srgb, var(--warn) 0%, transparent); } }
  .brick.sys-done { background: color-mix(in srgb, var(--free) 12%, var(--surface)); border-color: color-mix(in srgb, var(--free) 45%, var(--border)); cursor: pointer; padding: 11px 14px; }
  .brick.sys-done .b-label { color: var(--free); font-weight: 700; }
  /* shift dialog bits: textarea, cash-count handoff table */
  .field textarea { font: inherit; padding: 9px 11px; border: 1px solid var(--border); border-radius: 8px; background: var(--bg); color: var(--text); width: 100%; min-height: 62px; resize: vertical; }
  .field textarea:disabled, .field input:disabled { opacity: .45; cursor: not-allowed; }
  .cashtable { display: flex; flex-direction: column; gap: 8px; }
  .cashrow { display: flex; align-items: center; gap: 12px; padding: 9px 11px; border: 1px solid var(--border); border-radius: 9px; background: var(--bg); }
  .cashrow .cr-cur { font-weight: 700; font-size: 13px; min-width: 42px; color: var(--text-2); }
  .cashrow .cr-amt { font-family: var(--mono); font-weight: 700; font-size: 16px; flex: 1; }
  .cashrow label { display: flex; align-items: center; gap: 7px; font-size: 12px; color: var(--text-2); cursor: pointer; white-space: nowrap; }
  .cashrow label input { width: 17px; height: 17px; accent-color: var(--free); }
  .cashrow.confirmed { border-color: color-mix(in srgb, var(--free) 55%, var(--border)); background: color-mix(in srgb, var(--free) 9%, var(--bg)); }
  .handoff-note { background: var(--bg); border: 1px solid var(--border); border-radius: 9px; padding: 12px 14px; font-size: 14px; line-height: 1.5; white-space: pre-wrap; }
  .handoff-guilt { background: var(--danger-weak); border-color: var(--danger); color: var(--danger); }
  .skip-list { margin-top: 8px; white-space: normal; }
  .skip-list .skip-head { font-weight: 700; font-size: 12px; text-transform: uppercase; letter-spacing: .03em; margin-bottom: 6px; opacity: .85; }
  .skip-row { display: flex; gap: 8px; align-items: baseline; padding: 3px 0; }
  .skip-row .skip-ic { flex: 0 0 auto; font-size: 15px; }
  .skip-row .skip-lbl { font-weight: 600; flex: 0 0 auto; }
  .skip-row .skip-why { color: var(--text-2); }
  .skip-row .skip-why .skip-none { font-style: italic; opacity: .7; }
  /* settled bricks: shrunk, green (done) / amber (dismissed). When physics is live they're absolutely
     positioned and driven by matter bodies; the fallback (no engine / reduced-motion) lets them flow. */
  .brick.settled { padding: 4px 8px; gap: 6px; cursor: grab; border-radius: 7px; flex: 0 0 auto; min-width: 0; white-space: nowrap; user-select: none; }
  .brick.settled.phys:active { cursor: grabbing; }
  .brick.settled.phys { position: absolute; top: 0; left: 0; margin: 0; will-change: transform; z-index: 1; }
  .brick.settled .b-mark { font-weight: 800; font-size: 12px; }
  .brick.settled .b-ico { font-size: 13px; }
  .brick.settled .b-label { font-weight: 500; font-size: 11px; }
  .brick.settled .b-time { font-family: var(--mono); font-size: 10px; color: var(--text-2); }
  .brick.settled.done { background: color-mix(in srgb, var(--free) 17%, var(--surface)); border-color: color-mix(in srgb, var(--free) 55%, var(--border)); }
  .brick.settled.done .b-mark, .brick.settled.done .b-label { color: var(--free); }
  .brick.settled.dismissed { background: color-mix(in srgb, var(--warn) 17%, var(--surface)); border-color: color-mix(in srgb, var(--warn) 55%, var(--border)); }
  .brick.settled.dismissed .b-mark, .brick.settled.dismissed .b-label { color: var(--warn); }
  .brick.settled.gold { background: color-mix(in srgb, var(--accent-2) 20%, var(--surface)); border-color: color-mix(in srgb, var(--accent-2) 55%, var(--border)); }
  .brick.settled.gold .b-mark, .brick.settled.gold .b-label { color: var(--accent-2); }

  .modal.xwide { max-width: 1040px; }
  /* equal-height intro so the two grids line up top-to-top */
  .col-hint { min-height: 56px; font-size: 11.5px; color: var(--text-2); line-height: 1.4; }
  /* fixed, content-independent cell sizes so "next week" never resizes the grid */
  .fixgrid { table-layout: fixed; width: auto; }
  .fixgrid th, .fixgrid td { width: 58px; height: 32px; padding: 4px 3px; overflow: hidden; }
  .fixgrid .slotlab { width: 74px; text-align: left; }
  .fixgrid .pref-cell { font-size: 10px; letter-spacing: 0; }
  .hint.err { color: var(--danger); font-weight: 600; }

  /* ===================== onboarding tour ===================== */
  /* One spotlight element both DIMS the page (huge box-shadow) and RINGS the current target. The dim is
     pointer-events:none — click-gating is done in JS (capture-phase), so visuals never fight interaction. */
  #tourSpot { position: fixed; z-index: 1000; pointer-events: none; border-radius: 10px; left: 50%; top: 50%; width: 0; height: 0;
    box-shadow: 0 0 0 9999px rgba(6,16,10,.60); opacity: 0; transition: all .45s cubic-bezier(.4,0,.2,1), opacity .3s; }
  #tourSpot.on { opacity: 1; }
  #tourSpot.ring::after { content:""; position:absolute; inset:-4px; border-radius:13px; border:2.5px solid var(--accent);
    box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 32%, transparent); animation: tourPulse 1.9s ease-in-out infinite; }
  #tourSpot.glow::after { animation: tourGlow .55s ease-out 2; }
  @keyframes tourPulse { 0%,100%{ opacity:.65 } 50%{ opacity:1 } }
  @keyframes tourGlow { 0%{ box-shadow:0 0 0 4px var(--accent), 0 0 26px 8px color-mix(in srgb, var(--accent) 80%, transparent) } 100%{ box-shadow:0 0 0 4px transparent } }
  /* wrong-click nudge on the exact element to click (button / checkbox / stars) */
  .tour-cta-glow { animation: tourCtaGlow .55s ease-out 2; border-radius: 9px; position: relative; z-index: 1; }
  @keyframes tourCtaGlow { 0%{ box-shadow:0 0 0 3px var(--accent), 0 0 20px 6px color-mix(in srgb, var(--accent) 75%, transparent) } 100%{ box-shadow:0 0 0 3px transparent } }
  /* traveling highlight: rings the one control this step is about, while the whole dialog stays lit */
  .tour-hi { border-radius: 8px; position: relative; z-index: 1; animation: tourHiPulse 1.6s ease-in-out infinite; }
  @keyframes tourHiPulse { 0%,100%{ box-shadow:0 0 0 3px var(--accent), 0 0 0 6px color-mix(in srgb, var(--accent) 30%, transparent) } 50%{ box-shadow:0 0 0 3px var(--accent), 0 0 0 9px color-mix(in srgb, var(--accent) 10%, transparent) } }
  /* keep the always-on controls (tour / theme / language) bright + above the dim while touring */
  body.touring .topbar { z-index: 1001; }
  /* the room strip scrolls (overflow-x:auto → overflow-y clips), which would crop the tour highlight ring
     around a room button; open it up while touring so the spotlight on a room shows in full */
  body.touring .rooms { overflow: visible; }
  body.touring { overflow: hidden; }

  .tour-balloon { position: fixed; z-index: 1002; width: 320px; max-width: calc(100vw - 24px); background: var(--surface); color: var(--text);
    border: 1px solid var(--border); border-radius: 14px; box-shadow: 0 18px 50px rgba(0,0,0,.42); padding: 15px 17px;
    opacity: 0; transform: translateY(4px); transition: top .45s cubic-bezier(.4,0,.2,1), left .45s cubic-bezier(.4,0,.2,1), opacity .3s, transform .3s; }
  .tour-balloon.show { opacity: 1; transform: none; }
  .tour-balloon .tb-caret { position: absolute; width: 15px; height: 15px; background: var(--surface); border: 1px solid var(--border);
    border-right: 0; border-bottom: 0; transform: rotate(45deg); }
  .tour-balloon h4 { margin: 0 0 5px; font-size: 15.5px; color: var(--text); text-wrap: balance; }
  /* step glam kit: bare glyph beside the title, a gradient divider, and a right-aligned vine-dot progress */
  .tour-balloon .tb-crest { display: flex; align-items: center; gap: 11px; }
  .tour-balloon .tb-crest h4 { margin: 0; }
  .tour-balloon .tb-glyph { flex: 0 0 auto; font-size: 26px; line-height: 1; transform: scale(1.2); transform-origin: center; filter: drop-shadow(0 1px 3px rgba(0,0,0,.4)); }
  .tour-balloon .tb-rule { height: 1px; margin: 12px 0 0; background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 42%, transparent), transparent); }
  .tour-balloon .tb-rule + .tb-body { margin-top: 11px; }
  .tour-balloon .tb-body { font-size: 13px; color: var(--text-2); line-height: 1.5; }
  .tour-balloon .tb-body p { margin: 0 0 8px; } .tour-balloon .tb-body p:last-child { margin: 0; }
  .tour-balloon .tb-body .tb-hint { font-size: 12px; color: var(--text-2); opacity: .8; font-style: italic; }
  .tour-balloon .tb-foot { display: flex; align-items: center; margin-top: 13px; gap: 10px; }
  .tour-balloon .tb-btns { display: flex; gap: 8px; flex: 0 0 auto; }
  /* vine-dots: completed = accent, current = elongated pill, upcoming = gray; sliding window clipped + faded on the left */
  .tour-balloon .tb-vine { display: flex; align-items: center; justify-content: flex-end; gap: 5px; flex: 1 1 auto; min-width: 0; overflow: hidden;
    -webkit-mask-image: linear-gradient(90deg, transparent, #000 22%); mask-image: linear-gradient(90deg, transparent, #000 22%); }
  .tour-balloon .tb-vine i { flex: 0 0 auto; width: 6px; height: 6px; border-radius: 50%; background: var(--border); }
  .tour-balloon .tb-vine i.on { background: color-mix(in srgb, var(--accent) 70%, var(--border)); }
  .tour-balloon .tb-vine i.cur { width: 17px; border-radius: 3px; background: var(--accent); box-shadow: 0 0 8px color-mix(in srgb, var(--accent) 70%, transparent); }
  .tour-btn { border: 0; border-radius: 9px; padding: 7px 15px; font-size: 13px; font-weight: 650; cursor: pointer; background: var(--accent); color: #fff; }
  .tour-btn:hover { filter: brightness(1.06); }
  .tour-btn.ghost { background: transparent; color: var(--text-2); border: 1px solid var(--border); }

  /* welcome — big centered dialog, shown together with the language annotation balloon */
  .tour-welcome { position: fixed; inset: 0; z-index: 1002; display: grid; place-items: center; padding: 20px; pointer-events: none; }
  .tour-welcome .tw-card { pointer-events: auto; background: var(--surface); border: 1px solid var(--border); border-radius: 18px;
    box-shadow: 0 30px 90px rgba(0,0,0,.5); width: 460px; max-width: calc(100vw - 32px); padding: 30px 32px; text-align: center;
    opacity: 0; transform: translateY(10px) scale(.985); transition: opacity .4s, transform .4s; }
  .tour-welcome.show .tw-card { opacity: 1; transform: none; }
  .tour-welcome .tw-badge { font-size: 34px; line-height: 1; margin-bottom: 10px; }
  .tour-welcome h2 { margin: 0 0 10px; font-size: 21px; text-wrap: balance; }
  .tour-welcome .tw-body { font-size: 14px; color: var(--text-2); line-height: 1.6; }
  .tour-welcome .tw-foot { margin-top: 22px; display: flex; align-items: center; justify-content: center; gap: 14px; }
  .tour-welcome .tw-prog { font-size: 11px; color: var(--text-2); opacity: .6; font-variant-numeric: tabular-nums; }
  .tour-welcome .tour-btn { padding: 10px 24px; font-size: 14px; }
  /* finish: a warmer, celebratory version of the card */
  .tour-welcome .tw-finish { border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
    box-shadow: 0 30px 90px rgba(0,0,0,.5), 0 0 0 1px color-mix(in srgb, var(--accent) 30%, transparent),
      0 18px 50px -10px color-mix(in srgb, var(--accent) 40%, transparent); }
  .tour-welcome .tw-finish .tw-badge { font-size: 54px; margin-bottom: 14px; animation: finishPop .6s cubic-bezier(.2,1.5,.4,1) both; }
  .tour-welcome .tw-finish h2 { font-size: 25px; }
  @keyframes finishPop { 0%{ transform: scale(0) rotate(-18deg); opacity: 0 } 100%{ transform: none; opacity: 1 } }
  @media (prefers-reduced-motion: reduce) { #tourSpot, .tour-balloon { transition: opacity .2s; } }

  /* ---------- Mobile (phones) — NOT a primary target. Just a legible, stacked, scrollable view for a
     quick "how are things going?" check from a phone. Desktop/tablet layout (>640px) is untouched.
     Physics, Iggy and FLIP animations are disabled in JS (REDUCE is forced true ≤640px). ---------- */
  /* Phone layout. Portrait phones match on width; LANDSCAPE phones widen past 640 but are still a phone —
     catch them by (coarse pointer + short height), which a desktop/tablet never both satisfies. (4d.1) */
  @media (max-width: 640px), (pointer: coarse) and (max-height: 640px) {
    /* #2: drop the fixed-viewport no-scroll policy — let the PAGE scroll */
    html, body { height: auto; }
    body { min-height: 100vh; overflow-y: auto; overflow-x: hidden; }
    /* header wraps instead of overflowing (no horizontal scroll) */
    .topbar { flex-wrap: wrap; gap: 8px 12px; }
    .who { border-right: 0; padding-right: 0; }
    .tools { flex-wrap: wrap; }
    /* #1: fill the width; let content define height instead of a clipped fixed-height board */
    .main { overflow: visible; flex: none; min-height: 0; max-width: none; padding: 10px 10px 28px; }
    /* #3: stack the three segments one below the other (no side-by-side columns, no fixed row heights) */
    .flow { flex-direction: column; flex: none; min-height: 0; gap: 10px; }
    .panel, .tasks-panel { flex: none; min-height: 0; }
    /* #1: no tabs on phones — hide the tab bar, show both Arriving + Pending as their own stacked sections */
    .desk-only { display: none !important; }
    #panel-in .panel-head.mob-only { display: flex !important; }
    #panel-in .cards.hidden { display: block; }
    /* #2: the "Completed" section appears below the tasks panel (done items are routed here in JS) */
    #tasksDoneWrap.mob-only { display: block !important; }
    /* the card lists were absolutely-positioned inside a fixed-height arena; on mobile let them flow so
       each panel grows to fit and the page scrolls as one */
    .cards { position: static; overflow: visible; flex: none; height: auto; min-height: 0; }
    /* 4d.2: an empty segment shows just its title — hide the empty-state card and don't reserve a blank box */
    .cards .empty { display: none; }
    /* 4d.3: no decorative grass / cattails on phones */
    #tasks::after, #tasks::before { display: none !important; }
    .card-flow { position: static; inset: auto; overflow: visible; height: auto; }
    #tasks { position: relative; overflow: visible; height: auto; min-height: 160px; }
    /* #4: no decorative sway on mobile */
    .sloth { display: none; }
    .verlabel { display: none; }   /* version label is desktop-only */
    /* 4d.4: admin usable on a phone — the wrapping tab row becomes a dropdown, panel breathes */
    .admin-tabs { display: none; }
    .admin-tabsel { display: block; }
    .admin-top { flex-wrap: wrap; gap: 8px 12px; padding: 10px 12px; }
    .admin-top h1 { font-size: 16px; }
    .admin-body { padding: 14px 12px 28px; }
    .a-card { padding: 14px 14px; }
    /* 4d.5: the availability / weekly / month-calendar dialogs made usable on a phone.
       Wide dialogs go full-width; every modal caps its height and scrolls its body (head + foot pinned),
       so a tall table or calendar never runs off-screen; the footer buttons wrap instead of overflowing. */
    .overlay { padding: 8px; }
    .modal { max-height: 92vh; display: flex; flex-direction: column; }
    .modal-head, .modal-foot { flex: 0 0 auto; }
    .modal-body { overflow-y: auto; flex: 1 1 auto; }
    .modal.wide, .modal.xwide { max-width: none; }
    .modal-foot { flex-wrap: wrap; justify-content: stretch; }
    .modal-foot .btn { flex: 1 1 auto; }
    /* room-week strip + all-rooms table: tighter cells so 7 nights fit a narrow screen (table still scrolls x) */
    .rw-cell { padding: 6px 2px; }
    .rw-cell .rw-date { font-size: 15px; }
    .rw-table td.rwc { min-width: 48px; padding: 6px 5px; }
    /* month calendar: shorter day-cells + its own body height released so it flows inside the scrolling modal */
    .cal-body { height: auto; max-height: none; }
    .cal-cell { min-height: 62px; }
  }
