/* styles/sched.css -- the Schedule, Batch 6 (2026-11-02, the owner's design
   package `Tenxetic_design_final.zip`, HANDOFF_td2_v1 and its references
   Td2_S1 (week) and Td2_S2 (day); RULED "Yes, all of Batch 6"). Grown from
   J1 (2026-10-29, `docs design/schedule-week/`), whose layout it keeps.
   Every number is the references' unless a comment says otherwise. Linked
   LAST, so it wins over the shell's calendar rules (index.html) and the
   other sheets.

   SCOPE: `body.calmode` -- the Schedule's four views share its page, top
   bar and key colours; the week's own grid rules say `.cal:not(.one)`, and
   Day's cards `.cal.one`.

   COLOUR HAS ONE MEANING EACH (Td2 §2): a session block is what it builds
   (`calLook`, week.js: the kernel's `qHeroBg` in `--qbg`, the first
   quality's bright colour in `--tc`); gold (`--gold`, `--match-card`) is
   competition only; blue is the app -- today, now, done; your tennis is
   OUTLINED blue, never filled. WAS (J1) four group colours, Gym, Court,
   Recovery, Match, and J1's gold #f2b24c. */

/* ───────────────────────── the page (Td2: #050607, a blue glow at the
   bottom; WAS J1's #07090d; the font Archivo where the phone has it -- no
   font file is served, BACKLOG 2026-10-28) */
body.calmode { --bg: #050607; }
body.calmode::before {
  background: radial-gradient(130% 380px at 50% calc(100% + 40px),
              rgba(33, 150, 243, .30), rgba(0, 0, 0, 0) 72%), #050607; }
body.calmode .appbar, body.calmode .cal, body.calmode .calkey,
body.calmode .calstrip, body.calmode .caldtitle {
  font-family: "Archivo", system-ui, sans-serif; }

/* ───────────────────────── 1 · the top bar (Schedule updates v1, 3 Nov
   2026, SH2 -- `Vol_SH2_topbar.html`): the days shown on a small line,
   "Schedule" under it at 32/800, and at the right one row of 42 px
   card-style buttons, "Week ▾", the sliders and + -- no Today (ruled). On
   the page's own black, pinned above the grid it scrolls over. The
   reference's X over it is NOT drawn: every reference in the package draws
   it, Today's stand-in too, and the live Today and Phase draw none
   (Batch 6) -- the Schedule keeps their rule (index.html hides the
   wordmark in `calmode`). WAS (Batch 6, Td2 §4) a glass bar with rounded
   bottom corners, the range its 30 px title, "Week ▾" and Today as 38 px
   pills. */
body.calmode .appbar.calbar { gap: 8px; min-height: 0;
  align-items: flex-end; margin: -1rem 0 12px; padding: 18px 20px 8px;
  background: #050607; }
/* The title takes the room the buttons leave (a size container, so its
   own width never pushes them), and "Schedule" fits it: 32 px where there
   is room (390 px, Week), smaller where there is not -- MEASURED 162 px
   wide at 32 px, 5.06 times its size, so 19.7% of the room is the size
   that fits (375 px; "Month ▾"; a Back after a zoom). */
body.calmode .appbar.calbar .sct-tt { flex: 1 1 0; min-width: 0;
  container-type: inline-size; display: flex; flex-direction: column; }
body.calmode .appbar.calbar .sct-range { font-size: 14.5px; font-weight: 600;
  line-height: 1.3; color: var(--quiet, #848e9d); white-space: nowrap;
  overflow: hidden; text-overflow: ellipsis; }
body.calmode .appbar.calbar h2.mon { font-size: min(32px, 19.6cqi);
  font-weight: 800; letter-spacing: -.02em; line-height: 1.1;
  color: #eef1f5; overflow: visible; }
/* 2026-11-07 (Schedule 1c, boards 1 and 44-49: "The + is a plain raised
   button (not blue)"): the three are the 1c look's raised parts
   (onec.css tokens) -- "Week ▾" a 44 px raised pill, the sliders and +
   44 px raised ROUNDS, their glyphs grey (#c3cddb, the boards'). WAS 42
   px card-style squares, the glyphs the app's soft blue. */
body.calmode .appbar .sct-btns { flex: none; display: flex; gap: 8px;
  align-items: center; }
body.calmode .appbar .sct-btns > button { flex: none; width: auto;
  height: 44px; min-height: 0; margin: 0; border-radius: 14px;
  background: var(--c1-tile); border: 1px solid var(--c1-tile-line);
  box-shadow: var(--c1-tile-lift); color: var(--c1-ink); }
body.calmode .appbar .sct-btns > button:active { transform: translateY(2px);
  box-shadow: none; }
body.calmode .appbar .sct-btns > button.calviewpill { display: inline-flex;
  align-items: center; gap: 6px; padding: 0 14px;
  font-size: 15.5px; font-weight: 800; white-space: nowrap; }
body.calmode .calviewpill .caret { width: 12px; height: 12px;
  stroke: #c3cddb; stroke-width: 3; }
body.calmode .appbar .sct-btns > button.sct-btn { width: 44px; padding: 0;
  border-radius: 50%; display: flex; align-items: center;
  justify-content: center; }
.sct-btn svg { width: 20px; height: 20px; fill: none;
  stroke: #c3cddb; stroke-width: 2; stroke-linecap: round;
  stroke-linejoin: round; }
/* After a zoom the Back leads the bar. */
body.calmode .appbar.calbar > .c-back { flex: none; align-self: center; }
/* THE VIEW MENU (2026-11-07, Schedule 1c, board 48): a dark card under
   the bar at the right, the screen dimmed behind it; the four views as
   raised rows (`.c1-tile`), the shown one solid blue. WAS a list of plain
   rows, the shown one a chip, "Build your schedule" under a rule (the
   rule kept for the `?dev=1` preview row). */
body.calmode .calviewwrap { background: rgba(2, 3, 5, .55); }
body.calmode .calviewmenu { right: 16px; width: 216px; min-width: 0;
  box-sizing: border-box; padding: 8px; gap: 8px; border-radius: 18px;
  background: var(--c1-sheet); border: 1px solid var(--c1-sheet-line);
  box-shadow: 0 20px 50px rgba(0, 0, 0, .8); }
body.calmode .calviewmenu button.c1-tile { min-height: 50px;
  padding: 8px 12px; border-radius: 14px; font-size: 16px;
  font-weight: 800; }
body.calmode .calviewmenu button.c1-tile:not(.on) {
  background: var(--c1-tile); border: 1px solid var(--c1-tile-line);
  box-shadow: var(--c1-tile-lift); color: var(--c1-ink); }
body.calmode .calviewmenu button.c1-tile.on { background: var(--c1-on);
  border: 1px solid var(--c1-on-line); box-shadow: var(--c1-on-lift);
  color: #fff; }
.calviewmenu hr { width: 100%; margin: 0; border: 0;
  border-top: 1px solid var(--c1-card-line); }

/* ───────────────────────── 2 · a move against the guidance, asked at
   the move (2026-11-06, the owner's Schedule list, item 5; week.js
   `calAdviseAsk`): the sessions-updated sheet (planchg.css) with an amber
   kicker -- calm, never red. WAS the gold guidance banner over the week,
   `.calban`. */
.cal-adv .pc-ukic.cal-advic { background: rgba(240, 185, 90, .14); }
.cal-adv .pc-ukic.cal-advic svg { stroke: var(--gold); }
/* 2026-11-07 (Schedule 1c, board 35): the X at the top RIGHT, the warning
   a round amber-tinted 54 px badge drawn up beside it, the reason in the
   sheet's grey words (WAS the X left, a rounded square, the reason gold). */
.cal-adv .c-sheethead { justify-content: flex-end; }
.cal-adv .pc-ukic.cal-advic { width: 54px; height: 54px;
  border-radius: 50%; background: rgba(232, 184, 75, .16);
  margin-top: -30px; }
.cal-adv .cal-advwhy { color: var(--c1-sub); }
.cal-adv .cal-advq { margin-top: 14px; color: var(--ink); font-weight: 700; }
.cal-adv .pc-foot button.c-link { justify-content: center; text-align: center; }
/* 2026-11-07 (Schedule 1c, board 35: "'Yes, continue' or 'Go back' (red
   text)"): Go back a raised row (`.c1-tile`) in red words, under the one
   bright button. WAS a plain link. */
/* ⚠ The tile's own look is set HERE as well: the sheet's `.c-link` rule
   (transparent, no border) beat onec.css's `.c1-tile` -- MEASURED
   2026-11-07, Go back drew as bare red words. Board 35's `.tile`: 56 px,
   raised. */
.cal-adv .pc-foot button.c-link.cal-advback { justify-content: center;
  width: 100%; min-height: 56px; box-sizing: border-box;
  margin-top: 10px; padding: 10px 14px; border-radius: 14px;
  background: var(--c1-tile); border: 1px solid var(--c1-tile-line);
  box-shadow: var(--c1-tile-lift);
  color: var(--c1-red); font-size: 16px;
  font-weight: 800; text-decoration: none; }
.cal-adv .pc-foot button.c-link.cal-advback:active {
  transform: translateY(2px); box-shadow: none; }

/* ───────────────────────── 3 · the key: the eight qualities by their
   short names, each its bright colour (inline, off the table), then Match,
   gold */
body.calmode .calkey { margin: 0 20px 14px; gap: 5px 11px;
  font-size: 11px; font-weight: 800; letter-spacing: 0;
  text-transform: none; color: #a3acba; }
body.calmode .calkey .ck { gap: 5px; white-space: nowrap; }
body.calmode .calkey .ck .cks { width: 9px; height: 9px; border-radius: 3px; }
body.calmode .calkey .ck.q-match .cks { background: var(--gold); }

/* ───────────────────────── 4 · the day strip */
body.calmode .cal { --calgut: 28px; --grid: #151c29; background: transparent; }
body.calmode .calhead { background: #050607; border-bottom: 0; }
.cal:not(.one) .caldh { border-left: 0; padding: 4px 0 5px; cursor: pointer; }
/* (2026-11-08, the owner: "the actual visual claendar itself wsa supposed
   to stay identical" -- the grid is v0.294's again: the day, the word
   under its date, the hours, the time now and a tile's name at 10, 9.5,
   10, 10 and 10 px. v0.295 had set them 12 px, the hour column 34 / 44
   px, the Day chips raised.) */
.cal:not(.one) .caldh .dow { font-size: 10px; font-weight: 800;
  color: #a3acba; }
.cal:not(.one) .caldh.today .dow { color: #6aa8f0; }
.cal:not(.one) .caldh .dnum { width: 28px; height: 28px; line-height: 28px;
  margin: 2px auto 1px; font-size: 18px; font-weight: 800; color: #eef1f5; }
.cal:not(.one) .caldh.today .dnum { background: var(--done-blue);
  color: #ffffff; font-size: 16px; }
/* "TODAY", "REST", "MATCH" -- the day's word (`daySub`) in capitals. */
.cal:not(.one) .caldh .dsub { font-size: 9.5px; font-weight: 800;
  letter-spacing: .04em; text-transform: uppercase;
  line-height: 12px; min-height: 12px; color: #a3acba; }
.cal:not(.one) .caldh.comp .dsub, .cal:not(.one) .caldh.lin .dsub {
  color: var(--gold); }

/* ───────────────────────── 5 · the gutter and the grid */
/* THE GRID ENDS AT THE BOTTOM OF THE SCREEN (2026-11-06, the owner's
   Schedule list, item 6: "The calendar must end at the bottom of the
   screen"): on Week and Day nothing is drawn under it, and the room the
   page keeps under its content for the floating tab bar goes -- scrolled
   to the end, midnight is the screen's bottom edge, the tab bar over the
   grid as Google's + is over its. WAS 249 px of empty page under the
   grid at 390 x 844 (#app's tab room and body's), under the notes.
   ⚠ AND IT ENDS ON THE TAB BAR'S TOP EDGE, NOT UNDER IT (2026-11-06, the
   owner: "Ensure the whole screen is visible, there should be no
   scrolling necessary"): the page keeps exactly the tab bar's room under
   the grid (`--tabspace`, the bar and its gap to the screen's foot), so
   midnight is the bar's top edge -- the week fits there whole, at its
   measured hour (week.js `calFitNow`), the page as tall as the glass;
   Day, scrolled to its end, stops there too. WAS no room at all: the
   evening ran on under the bar. */
body.calmode:has(#app > .cal:last-child) { padding-bottom: 0; }
body.calmode #app:has(> .cal:last-child) { padding-bottom: var(--tabspace); }
/* ... and the hours run on past the grid's box by its top padding and
   rule (`.calbody` is `--hpx` x 24 tall, padding and rule inside it; the
   grid's own bottom rule covers the rule), so the page keeps the padding
   too: scrolled to the end at any zoom, 24:00 is the bar's top edge
   (MEASURED, zoomed in: 8.4 px of the last hour under the bar without
   it). WAS 0. */
body.calmode #app > .cal:last-child { margin-bottom: .5rem; }
body.calmode .calbody { border-top: 1px solid #243049; }
body.calmode .calhr span { font-size: 10px; color: #a3acba;
  background: transparent; }
/* 2026-11-08 (the owner, asked "Should I fix Day view's hour labels being
   cut off at the left edge?" -> "Yes, fix it"): Day's hour column 44 px --
   WAS the week's 28 px (the rule above out-specifies index.html's
   `.cal.one { --calgut: 56px }`), and an 11 px "08:00" ran 6 px off the
   screen's left edge (MEASURED 2026-11-08). The week keeps 28 px; nothing
   else on the grid changes. */
body.calmode .cal.one { --calgut: 44px; }
.cal:not(.one) .calcol.rest { background-image: none; }
.cal:not(.one) .restlabel { display: none; }

/* ───────────────────────── 6 · today's column blue, a match day's gold */
.cal:not(.one) .calcol.comp { background-color: rgba(255, 199, 46, .07); }
.cal:not(.one) .calcol.today,
.cal:not(.one) .calcol.rest.today { background-color: rgba(20, 121, 209, .10); }

/* ───────────────────────── 7 · the now line: today's column only
   (2026-11-06, the owner's Schedule list, item 3; WAS from today's column
   to the week's last, `--nowcols`) */
body.calmode .calnow { border-top: 2px solid var(--done-blue); }
body.calmode .calnow i { left: -4.5px; top: -5.5px; width: 9px; height: 9px;
  background: var(--done-blue); box-shadow: none; }
body.calmode .calnowt { color: #6aa8f0; background: #050607; }

/* ───────────────────────── 8 · a session block, week and day: what it
   builds (`--qbg`), a thin bright edge, white words with a soft shadow */
.cal .calev.ws.q-on, .cal .calev.ws.q-none, .cal .calev.ws.q-match,
.cal .evblock.q-match, .cal .evblock.q-tennis, .cal .evblock.q-none {
  border: 1px solid rgba(255, 255, 255, .22); color: #ffffff;
  text-shadow: 0 1px 4px rgba(0, 0, 0, .45); box-shadow: none; }
.cal .calev.ws.q-on { background: var(--qbg); }
.cal .calev.ws.q-none, .cal .evblock.q-none { --tc: #8b93a1;
  background: #1a2232; border-color: rgba(255, 255, 255, .14); }
.cal .calev.q-match, .cal .evblock.q-match { --tc: var(--gold);
  background: var(--match-card); }
/* Your tennis: OUTLINED blue, never filled (Td2 §3.6; the lead's call) --
   the light/heavy stripe went with the fill; Day's words still say it. */
.cal .evblock.q-tennis { --tc: #6aa8f0; background: transparent;
  background-image: none; border: 1.5px solid #6aa8f0; color: #dbe9fb;
  text-shadow: none; }

/* On the week (Td2_S1): inset 1.5 px, radius 7, the SHORT name at 10 px
   (asked, J1 §8 H: 10, not the reference's 9.5). The tap reaches 44 px
   however short it is, drawn no taller.
   THE TITLE WRAPS AND IS CUT AT THE BLOCK'S EDGE, NO "…" (2026-11-06, the
   owner's Schedule list, items 1-2: "cut off at the edge of the block ...
   show as much of the title as it can"; "When you zoom in ... the titles
   expand to fill the bigger blocks"), as Google's phone calendar draws
   ours: broken between any two letters to fill each line ("Stren / gth &
   / power"), as many WHOLE lines as the block holds -- its own height, so
   a pinch that makes it taller shows more. WAS one line, "Stren…". */
/* An event is a <button>, and the sheet's `button` is 100% wide: without
   this its left and right were ignored and it ran past the column's edge
   (MEASURED on Day, 2026-11-02: 20 px past the session cards). `.calev`
   says the same in index.html. */
.cal .evblock { width: auto; }
.cal:not(.one) .calev.ws, .cal:not(.one) .evblock { left: 1.5px; right: 1.5px;
  padding: 3px; border-radius: 7px; overflow: visible; }
.cal:not(.one) .calev.casc, .cal:not(.one) .evblock.casc {
  left: calc(1.5px + var(--casc) * 10px);
  box-shadow: 0 0 0 1.5px #050607; }
.cal:not(.one) .calev.ws::after, .cal:not(.one) .evblock::after {
  content: ""; position: absolute; left: 0; right: 0; top: 50%;
  height: max(100%, 44px); transform: translateY(-50%); }
.calev .calsn { display: none; }
.cal:not(.one) .calev.ws > b { display: none; }
.cal .evblock { display: flex; flex-direction: column; }
.cal:not(.one) .calev .calsn, .cal:not(.one) .evblock .evt {
  display: block; flex: 0 1 auto; min-height: 0; font-size: 10px;
  font-weight: 800; line-height: 12px; white-space: normal;
  word-break: break-all; overflow: hidden; text-overflow: clip;
  max-height: round(down, 100%, 12px); }
.cal:not(.one) .calev .calwhen, .cal:not(.one) .calev .calsets,
.cal:not(.one) .evblock .evwhen,
.cal:not(.one) .evblock.sm .evk, .cal:not(.one) .calev .calq {
  display: none; }
.cal:not(.one) .evblock .evk { flex: 0 100 auto; min-height: 0;
  font-size: 9px; line-height: 11px; white-space: nowrap; overflow: hidden;
  text-overflow: clip; }

/* ───────────────────────── 9 · (2026-11-06: a session against the
   guidance is NOT marked -- WAS a gold outline and "⚠" after its name.) */

/* A done session (Td2 §4: "done blocks 78% opacity with a tick"): a white
   tick bottom right. WAS (J1) 70% and Today's done X ball. */
.cal .calev.done { opacity: .78; }
.cal:not(.one) .calev.done .calsn { padding-right: 11px; }
.cj-done { position: absolute; right: 3px; bottom: 3px; width: 11px;
  height: 11px; fill: none; stroke: #ffffff; stroke-width: 4;
  stroke-linecap: round; stroke-linejoin: round; pointer-events: none; }

/* ───────────────────────── THE DAY (Td2_S2): full session cards -- the
   same colours and bands as Today's card -- on the 24 hours (ruled "All 24
   hours, as now"), each at its time and as tall as it lasts; drag, hold,
   zoom and pinch are the grid's, unchanged. The whole name, "09:00–10:00 ·
   45 min · In the gym", and the qualities it builds as chips in run order;
   what it holds is its sheet's (a tap). A short card clips -- a pinch makes
   it taller. */
/* A card is its own size container: a line it has no room for is left out
   WHOLE -- the times, then the chips -- rather than cut through. */
.cal.one .calev.ws, .cal.one .evblock { left: 4px; right: 16px;
  border-radius: 16px; padding: 6px 64px 6px 14px; container-type: size; }
.cal.one .calev.ws.sm, .cal.one .evblock.sm { border-radius: 9px;
  padding-top: 1px; padding-bottom: 1px; }
/* The name wraps and is cut at the card's edge, no "…" (2026-11-06, the
   owner's Schedule list, items 1-2) -- whole lines, and never the times'
   line: it gives way down to one line while they show. WAS one line,
   "…". */
.cal.one .calev b, .cal.one .evblock .evt { flex: 0 1 auto; min-height: 20px;
  font-size: 17px; font-weight: 800; letter-spacing: -.01em;
  line-height: 20px; white-space: normal; overflow-wrap: anywhere;
  overflow: hidden; text-overflow: clip;
  max-height: round(down, 100%, 20px); }
.cal.one .calev .calwhen, .cal.one .evblock .evk { display: block;
  flex: none; font-size: 13px; line-height: 16px; opacity: .92;
  white-space: nowrap; overflow: hidden; text-overflow: clip; }
.cal.one .calev .calsets { display: none; }
@container (max-height: 35.9px) {
  .cal.one .calev .calwhen, .cal.one .evblock .evk { display: none; } }
@container (max-height: 54.9px) { .cal.one .calev .calq { display: none; } }
@container (max-height: 19.9px) {
  .cal.one .calev b, .cal.one .evblock .evt { font-size: 12px;
    line-height: 14px; min-height: 0; max-height: 14px; } }
.calev .calq { display: flex; flex-wrap: wrap; gap: 2px 12px;
  margin-top: 4px; }
.calev .calq span { display: inline-flex; align-items: center; gap: 5px;
  font-size: 12px; font-weight: 700; line-height: 15px; }
.calev .calq i { width: 8px; height: 8px; border-radius: 50%;
  background: #ffffff; }
.cal.one .calev.casc, .cal.one .evblock.casc {
  left: calc(4px + var(--casc) * 10px); box-shadow: 0 0 0 1.5px #050607; }
.calgrip { fill: rgba(255, 255, 255, .6); }
/* NEXT and DONE, top right (Td2_S2: "DONE", 12/800, .08em): the next
   session white; WAS green, which is Mobility's now. */
.cal.one .calpill { top: 10px; transform: none; font-size: 12px;
  font-weight: 800; letter-spacing: .08em; text-transform: uppercase; }
.cal.one .calpill.next { height: 20px; padding: 0 8px; border-radius: 10px;
  background: #ffffff; color: #0a1220; text-shadow: none; }
.cal.one .calpill.done { color: #ffffff; }
.cal.one .calev:has(.calpill.done) .cj-done { display: none; }
.cal.one .calev.next, .cal.one .evblock.next {
  border: 2px solid #ffffff; box-shadow: 0 10px 28px rgba(0, 0, 0, .45); }
.cal.one .calev.past, .cal.one .evblock.past { opacity: .6; }

/* The Day view's strip: a dot per session in its block's colour -- the
   first quality's (`--tc`, inline), gold a match, your tennis a blue
   ring. */
.calstrip .cday .dots i.q-match { --tc: var(--gold); }
.calstrip .cday .dots i.q-none { --tc: #8b93a1; }
.calstrip .cday .dots i.q-tennis { background: transparent;
  box-shadow: inset 0 0 0 1.2px #6aa8f0; }
.calstrip .cday.on { background: var(--done-blue);
  border-color: var(--done-blue); }

/* A competition's band, and its lines on Month and Year: gold. */
.evband.ev-competition { background: #2a2112; color: var(--gold);
  border-left-color: var(--gold); }
body.calmode .mev.ev-competition, body.calmode .yev.ev-competition {
  border-left-color: var(--gold); }

/* (The round blue + -- J1, "Add a round blue + button, 52 px" -- is gone
   since 3 Nov 2026: the top bar's + replaces it, SH4.) */

/* The category calendar preview's warnings (shape.js): gold. (WAS also
   the week's list under the grid, gone 2026-11-06.) */
body.calmode .wswarn { border-color: #8a6a2c; background: #1a1409; }
body.calmode .wswarn h3 { color: var(--gold); }

/* ───────────────────────── THE 1c LOOK, 2026-11-07 (the owner's "Schedule
   screens, 1c look" handoff, FINAL): the parts over the week -- the drag,
   the placing bar, the messages, the lead-in bar -- in the boards' sizes
   and colours (onec.css tokens). The grid under them stays the app's --
   v0.294's, every size (2026-11-08, the owner; v0.295's 12 px all-day
   strip, hours and day words undone). */

/* ── DRAGGING (boards 50-53, handoff s4). Hold, then drag within its own
   day (week.js `dragify`, `moveZones`).
   "A banner replaces the phase line": while a session is held the bar,
   the phase line and every notice under it give way -- kept in place,
   unseen, so nothing moves under the finger -- and the banner, fixed at
   the top, says what moves. Your own events (53) lift with no banner, so
   nothing gives way for them. */
body.calmoving .appbar.calbar,
body.calmoving #app > :not(.cal):not(.mzbanner) { visibility: hidden; }
.mzbanner { padding: 10px 10px 10px 14px; border-radius: 16px;
  background: var(--c1-card); border: 1.5px solid var(--c1-on-line);
  box-shadow: 0 10px 28px rgba(0, 0, 0, .55); }
.mzbt { gap: 3px; font-size: 13px; line-height: 1.3; color: #c9d3e0; }
.mzbt .mzwhat { font-size: 12px; line-height: 1.3; color: var(--c1-icon);
  white-space: normal; }
.mzbt span b { font-weight: 800; color: var(--c1-icon); }
.mzcancel { height: 44px; min-height: 44px; padding: 0 14px;
  border-radius: 12px; background: var(--c1-tile);
  border: 1px solid var(--c1-tile-line); box-shadow: var(--c1-tile-lift);
  color: var(--c1-ink); font-size: 14.5px; font-weight: 800; }
/* Where it cannot go: hatched and blurred; blue dashed = fits; gold
   dashed = allowed, not advised; "✓ fits" under a day with room. */
.mzveil { background: repeating-linear-gradient(135deg,
  rgba(5, 6, 7, .84) 0 5px, rgba(5, 6, 7, .70) 5px 10px); }
.mzwin { border: 1.5px dashed rgba(109, 180, 238, .85);
  background: rgba(45, 123, 198, .14); }
.mzwin.warn { border-color: rgba(232, 184, 75, .8);
  background: rgba(232, 184, 75, .09); }
.mzfit { font-size: 12px; color: var(--c1-icon); }
/* The block lifts -- bigger, tilted, ringed blue; red over a place it
   cannot go (52, the app's refusal colour). ⚠ AS SPECIFIC AS A BLOCK'S
   OWN LOOK (`.cal .calev.ws.q-on`, section 8, `box-shadow: none`), and
   after it: MEASURED 2026-11-07, a held session's ring was `none` -- the
   look's rule beat the shell's `.calev.lifted`. */
.cal .calev.lifted.dragging, .cal .evblock.lifted.dragging {
  box-shadow: 0 0 0 1.5px var(--c1-on-line),
              0 0 0 5.5px rgba(109, 180, 238, .25),
              0 14px 30px rgba(0, 0, 0, .6); }
.cal .calev.lifted.dragging.mz-no, .cal .evblock.lifted.dragging.mz-no {
  box-shadow: 0 0 0 1.5px var(--c1-red),
              0 0 0 5.5px rgba(245, 154, 154, .35),
              0 14px 30px rgba(0, 0, 0, .6); }
.calguide { border-top-color: var(--c1-on-line); }
.calguide.no { border-top-color: var(--c1-red); }
/* The time glowing in the hour column, 12 px. WAS 11. */
.guttime { font-size: 12px; letter-spacing: -.02em; border-radius: 7px; }
/* What the place says: the server's reason. */
.mztip { max-width: min(236px, calc(100% - 4px)); padding: 5px 9px;
  border-radius: 9px; font-size: 12px; line-height: 1.3;
  background: var(--c1-sheet); border: 1px solid var(--c1-sheet-line);
  color: #dbe6f4; }
.mztip.warn { border-color: rgba(232, 184, 75, .8); }
.mztip.no { background: #2a1517; border-color: rgba(245, 154, 154, .6);
  color: #fbd0d0; }

/* ── PLACING A STAMINA OR SPEED SESSION (board 65): the bar in place of
   the top bar -- a raised round Back, what is placed, how; no Cancel, no
   +, no view menu (week.js `calPlaceBar`, `calPlaceView`). */
.appbar.calplace, body.calmode .appbar.calplace { margin: 12px 16px 10px;
  padding: 10px 14px 10px 10px; gap: 10px; border-radius: 16px;
  background: var(--c1-card); border: 1.5px solid var(--c1-on-line);
  box-shadow: 0 10px 28px rgba(0, 0, 0, .55); }
body.calmode .appbar.calplace > .c-back { flex: none; width: 44px;
  height: 44px; min-height: 0; border-radius: 50%;
  background: var(--c1-tile); border: 1px solid var(--c1-tile-line);
  box-shadow: var(--c1-tile-lift); }
body.calmode .appbar.calplace > .c-back svg { stroke: var(--c1-ink); }
.appbar.calplace .mzcancel { flex: none; }

/* ── THE MESSAGES (boards 62-63): a short card at the bottom, above the
   tab bar, that goes by itself -- the words plain, no tick; a refusal in
   the app's refusal red. WAS a note with a green tick and its first
   sentence bold, a refusal with a red edge. */
body.calmode .caltoast { left: 16px; right: 16px; padding: 12px 16px;
  border-radius: 16px; background: #17233a;
  border: 1px solid var(--c1-sheet-line);
  box-shadow: 0 12px 30px rgba(0, 0, 0, .6); font-size: 14px;
  line-height: 1.4; color: #dbe6f4; }
body.calmode .caltoast.note { display: block;
  border-left: 1px solid var(--c1-sheet-line); }
body.calmode .caltoast.note::before { content: none; display: none; }
body.calmode .caltoast b { font-weight: inherit; }
body.calmode .caltoast.err { color: var(--c1-red);
  border: 1px solid rgba(245, 154, 154, .5); }

/* ── YOUR OWN LEAD-IN (board 58): "My lead-in to City Open" and a raised
   "Save as my lead-in" (leadin.js `linSaveBar`), a plain card under the
   phase line. WAS gold-tinted, the button outlined blue. */
body.calmode .lin-bar { margin: 8px 16px 10px; padding: 8px 8px 8px 14px;
  border-radius: 16px; background: var(--c1-card);
  border: 1px solid var(--c1-card-line); }
body.calmode .lin-bt { font-size: 14px; color: var(--c1-sub); }
body.calmode .lin-bt b { color: var(--c1-ink); font-weight: 800;
  margin-right: 0; }
body.calmode .lin-barbtn { min-height: 40px; height: 40px;
  padding: 0 12px; border-radius: 12px; background: var(--c1-tile);
  border: 1px solid var(--c1-tile-line); box-shadow: var(--c1-tile-lift);
  color: var(--c1-ink); font-size: 14px; font-weight: 800; }

/* ── ADD A MATCH (board 60): a tapped hour on a tournament day. The head
   (gold-free: the eyebrow blue, "Add a match", the app's x at the right),
   TITLE over the sunken box, the time in grey, the lead-in advice card,
   the notes as flat words, Save the one bright button at the foot. WAS a
   Back and a top-right Save over an underlined title, half the screen. */
.sheet.wk-msheet { height: auto; max-height: 92vh;
  background: var(--c1-sheet); border-top: 1px solid var(--c1-sheet-line);
  border-radius: 28px 28px 0 0; }
.sheet.wk-msheet.full { height: 100%; }
.sheet.wk-msheet .grab { padding: 12px 0 4px; }
.sheet.wk-msheet .grab i { width: 40px; height: 5px;
  background: var(--c1-sheet-line); }
.sheet.wk-msheet .inner { padding: 4px 20px 12px; }
.wk-mhead { display: flex; align-items: flex-start; gap: 12px;
  margin: 4px 0 2px; }
.wk-mtt { flex: 1 1 auto; min-width: 0; }
.wk-meye { margin: 18px 0 0; color: var(--c1-icon);
  font-size: 13px; font-weight: 800; letter-spacing: .12em;
  text-transform: uppercase; }
.wk-mtitle { margin: 2px 0 0; color: var(--c1-ink); font-size: 26px;
  font-weight: 800; line-height: 1.2; }
.wk-mhead button.c-back.c-close { flex: none; width: 44px; height: 44px;
  min-height: 0; margin: 0; padding: 12px; border-radius: 50%;
  background: #17233a; border: 1px solid #2f4262; color: #c3cddb; }
.wk-mlab.c1-lab { margin: 22px 4px 10px; }
.sheet.wk-msheet input.wk-mfield { margin: 0; }
.sheet.wk-msheet input.wk-mfield:focus { outline: none;
  border-color: var(--c1-on-line); }
.sheet.wk-msheet .when { margin: 16px 4px 4px; color: var(--c1-hint);
  font-size: 15px; }
.sheet.wk-msheet .lin-adv { margin: 12px 0 4px; }
.sheet.wk-msheet .popnote { margin: 14px 4px 0; color: var(--c1-hint);
  font-size: 15px; line-height: 1.5; }
.sheet.wk-msheet .popnote b { color: var(--c1-ink); }
.wk-mfoot { flex: none; padding: 12px 20px
  calc(16px + env(safe-area-inset-bottom)); }
.sheet.wk-msheet button.c1-pri.wk-msave { width: 100%; min-height: 58px;
  margin: 0; padding: 0 18px; border: 0; border-radius: 18px;
  background: var(--c1-pri); box-shadow: var(--c1-pri-lift); color: #fff;
  font-size: 17px; font-weight: 800; opacity: 1; }
.sheet.wk-msheet button.c1-pri.wk-msave[disabled] {
  background: var(--c1-tile); box-shadow: none; color: var(--c1-hint); }
