/* =================================================================
   ISG · MONO TECHNICAL — STRUCTURAL PASS
   Re-shapes components for the spec-sheet look: hairline rules,
   square corners, B&W map, 8px rhythm. Declares NO tokens — all
   values come from tokens.css. (Token block removed; it now lives
   in tokens.css as the single source of truth.)
   ================================================================= */

/* =================================================================
   2 · GLOBAL CHROME
   ================================================================= */
#app { background: var(--bg-app); color: var(--text-body); }
body { background: var(--bg-app); }

/* every box: square + no shadow unless re-stated */
#app .hm-card, #app .opt-card, #app .hotel-card, #app .summary-card,
#app .choose-card, #app .decide-card, #app .modal { box-shadow: none; }

/* ---- Top bar (slim, hairline) ---- */
.app-topbar {
  height: 64px; padding: 0 24px;
  background: var(--surface);
  border-bottom: 1px solid var(--rule, var(--text-heading));
}
.app-topbar { border-bottom: 1px solid var(--border); }
.app-brand .logo-mark { font-family: var(--font-sans); font-size: 14px; font-weight: 700; letter-spacing: .22em; }
.app-brand .logo-dot { width: 8px; height: 8px; border-radius: 0; }
.app-brand .logo-sep { color: var(--text-faint); margin: 0 2px; }
.app-event-mini .ev { font-size: 14px; letter-spacing: -.01em; }
.app-event-mini .ev-meta { font-size: 11px; letter-spacing: .02em; text-transform: uppercase; color: var(--text-faint); }

/* progress pips → square, mono index */
.app-progress { gap: 0; }
.app-progress .step { gap: 8px; font-size: 11px; letter-spacing: .12em; text-transform: uppercase; font-weight: 600; padding: 0 14px; }
.app-progress .step .pip {
  width: 22px; height: 22px; border-radius: 0;
  border: 1px solid var(--border); background: transparent; color: var(--text-faint);
  font-size: 11px; font-weight: 700;
}
.app-progress .step.done .pip { background: transparent; color: var(--accent); border-color: var(--accent); }
.app-progress .step.active .pip { background: var(--accent); color: var(--on-accent); border-color: var(--accent); box-shadow: none; }
.app-progress .sep { width: 14px; }

/* ---- light/dark toggle ---- */
.mode-toggle {
  display: inline-flex; align-items: stretch; border: 1px solid var(--border); margin-left: 16px;
}
.mode-toggle button {
  width: 36px; height: 30px; border: 0; background: transparent; cursor: pointer;
  color: var(--text-faint); font-family: var(--font-sans); font-size: 12px;
  display: flex; align-items: center; justify-content: center;
}
.mode-toggle button + button { border-left: 1px solid var(--border); }
.mode-toggle button.on { background: var(--text-heading); color: var(--neutral-0); }

/* hide the floating journey pill — the top bar carries nav now */
#app .journey { display: none !important; }

/* =================================================================
   3 · RAIL / CONFIGURE  (8px grid, hairline frame)
   ================================================================= */
.rail { box-shadow: none; border-right: 1px solid var(--border); background: var(--surface); }
/* LEFT COLUMN = clean white (Magenta gallery surface); hairline borders do the
   separation — magenta stays for true accents only. */
.rail-foot, .pick-left, .work-area, .work-head, .summary-col { background: var(--surface); }
.rail-scroll { padding: 24px 32px 0; }
.rail-scroll > *, .rail-foot > * { max-width: 520px; }
.rail-foot { padding: 16px 32px 24px; border-top: 1px solid var(--border); }

.cfg-divider { margin: 0 -32px 24px; background: var(--border); }
.cfg-block { padding: 24px 0; border-top: 1px solid var(--border); }

/* number badge → crisp ink/ green index square */
.hm-badge { border-radius: 0; background: var(--text-heading); color: var(--neutral-0); font-feature-settings: "tnum" 1; }

/* section title sizing on baseline */
.cfg-collapse .cc-head .hm-h2 { font-size: 16px; font-weight: 600; letter-spacing: -.01em; }
.cfg-collapse .cc-val { font-size: 12px; font-weight: 500; letter-spacing: .02em; }
.cc-chev { font-family: var(--font-sans); }

.cfg-head .cfg-event { font-size: 25px; font-weight: 600; letter-spacing: -.02em; line-height: 1.12; }
.cfg-head .cfg-meta { font-size: 13px; }
.hm-eyebrow { letter-spacing: .18em; }

/* steppers → square hairline, no fill except hover */
.hm-stepper { border: 1px solid var(--border); border-radius: 0; background: var(--surface); padding: 0; grid-template-columns: 38px 46px 38px; gap: 0; }
.hm-stepper button { background: transparent; color: var(--text-heading); border-radius: 0; height: 36px; width: 38px; font-size: 17px; }
.hm-stepper button:hover:not(:disabled) { background: var(--accent); color: var(--on-accent); }
.hm-stepper .val { border-left: 1px solid var(--border); border-right: 1px solid var(--border); }
.hm-stepper button:disabled { background: transparent; color: var(--text-faint); }

/* room rows → hairline separated, flat */
.hm-room-row { background: transparent; border-radius: 0; border-top: 1px solid var(--border); padding: 12px 0; }
.hm-room-row + .hm-room-row { margin-top: 0; }

/* sliders → 1px track, square thumb, green fill (high-specificity to beat hotelmap) */
input[type="range"].hm-range-input { height: 22px; background: linear-gradient(var(--border), var(--border)) left center / 100% 1px no-repeat; border-radius: 0; }
#app input[type="range"].hm-range-input::-webkit-slider-runnable-track { height: 22px; background: transparent; border: 0; }
#app input[type="range"].hm-range-input::-moz-range-track { height: 22px; background: transparent; border: 0; }
#app input[type="range"].hm-range-input::-webkit-slider-thumb { -webkit-appearance: none; border-radius: 0; width: 14px; height: 14px; border: 1px solid var(--text-heading); background: var(--text-heading); box-shadow: none; margin-top: 4px; }
#app input[type="range"].hm-range-input:hover::-webkit-slider-thumb, #app input[type="range"].hm-range-input:active::-webkit-slider-thumb { background: var(--accent); border-color: var(--accent); }
#app input[type="range"].hm-range-input::-moz-range-thumb { border-radius: 0; width: 14px; height: 14px; border: 1px solid var(--text-heading); background: var(--text-heading); box-shadow: none; }
#app input[type="range"].hm-range-input:hover::-moz-range-thumb { background: var(--accent); border-color: var(--accent); }
.hm-dual .track { height: 1px; border-radius: 0; }
.hm-dual .fill { height: 3px; border-radius: 0; background: var(--accent); }
#app .hm-dual input[type="range"]::-webkit-slider-thumb { border-radius: 0; width: 14px; height: 14px; border: 1px solid var(--text-heading); background: var(--text-heading); box-shadow: none; }
#app .hm-dual input[type="range"]:hover::-webkit-slider-thumb { background: var(--accent); border-color: var(--accent); }
#app .hm-dual input[type="range"]::-moz-range-thumb { border-radius: 0; width: 14px; height: 14px; border: 1px solid var(--text-heading); background: var(--text-heading); box-shadow: none; }
#app .hm-dual input[type="range"]:hover::-moz-range-thumb { background: var(--accent); border-color: var(--accent); }
.hm-slider-axis, .hm-slider-label { font-family: var(--font-sans); }
.hm-slider-axis { letter-spacing: .02em; }

/* chips / toggles → square hairline */
.hm-chip { border-radius: 0; border: 1px solid var(--border); font-weight: 500; letter-spacing: .01em; height: 36px; }
.hm-chip .check { border-radius: 0; border: 1px solid var(--text-faint); }
.hm-chip.on { background: var(--text-heading); color: var(--neutral-0); border-color: var(--text-heading); }
.hm-chip.on .check { background: var(--neutral-0); color: var(--text-heading); border-color: var(--neutral-0); }

.filter-chip { border-radius: 0; border: 1px solid var(--border); font-weight: 500; height: 34px; color: var(--text-muted); }
.filter-chip .fc-count, .filter-chip span { color: var(--text-faint); }
.filter-chip.on { border-color: var(--accent); background: var(--accent-tint); color: var(--accent-strong); }
.filter-chip.on .fc-count, .filter-chip.on span { color: var(--accent-strong); }
.cfg-sublabel { font-size: 11px; letter-spacing: .14em; text-transform: uppercase; color: var(--text-muted); font-weight: 600; }

/* option cards (who pays / manage) → square hairline */
.opt-card { border: 1px solid var(--border); border-radius: 0; }
.opt-card:hover { border-color: var(--accent-soft); }
.opt-card.sel { border-color: var(--accent); background: var(--accent-tint); }
.opt-card .oc-radio { border-radius: 0; border: 1px solid var(--text-faint); }
.opt-card.sel .oc-radio::after { border-radius: 0; }
.opt-card .oc-title { font-size: 14px; }

/* buttons → already uppercase tracked; flatten */
.hm-btn { border-radius: 0; box-shadow: none; letter-spacing: .14em; height: 48px; }
.hm-btn.primary { box-shadow: none; }
.hm-btn.secondary { border: 1px solid var(--border); }
.hm-btn.secondary:hover { border-color: var(--accent); }

/* footer estimate */
.est-label { letter-spacing: .14em; }
.est-figure { font-size: 24px; font-weight: 600; letter-spacing: -.01em; }
.cfg-estimate { border-top: 1px solid var(--border); padding-top: 14px; }

/* =================================================================
   4 · MAP — high-contrast B&W via filter on the live tiles
   ================================================================= */
.map-area .map-el, .choose-map { background: var(--map-bg); }
/* colourful basemap (Magenta scheme): full colour in light, dimmed for dark mode */
.leaflet-tile { filter: saturate(1.04); }
#app[data-mode="dark"] .leaflet-tile { filter: brightness(.68) contrast(1.02) saturate(.82); }
.leaflet-container { font-family: var(--font-sans); background: var(--map-bg); }

/* price pins → square tags, hairline, mono */
.hm-dot { border-radius: 0; background: var(--accent); border: 2px solid var(--neutral-0); box-shadow: none; }
.hm-dot.nofit { background: var(--text-faint); }
.hm-dot.sel { background: var(--text-heading); box-shadow: none; }
.hm-tag {
  border-radius: 0; border: 1px solid var(--neutral-0); box-shadow: none;
  background: var(--text-heading); color: var(--neutral-0);
  font-family: var(--font-sans); letter-spacing: 0; height: 24px;
}
.hm-marker.is-sel .hm-tag, .hm-tag.sel { background: var(--accent); color: var(--on-accent); }
.hm-tag.nofit { background: var(--surface); color: var(--text-muted); border: 1px dashed var(--text-faint); }
.hm-marker:hover .hm-tag:not(.nofit) { background: var(--accent); color: var(--on-accent); transform: none; box-shadow: none; }
.hm-pin.venue { border-radius: 0; background: var(--text-heading); border: 1px solid var(--neutral-0); box-shadow: none; }

.map-hud {
  border-radius: 0; box-shadow: none; border: 1px solid var(--border);
  background: var(--surface); font-size: 11px; letter-spacing: .1em; text-transform: uppercase;
  top: 22px; left: 22px; transform: none;
}
/* move Leaflet zoom to the right so it never collides with the HUD */
#app .leaflet-top.leaflet-left { left: auto; right: 0; }
#app .leaflet-control-zoom { border-radius: 0; border: 1px solid var(--border); box-shadow: none; }
#app .leaflet-control-zoom a { border-radius: 0; background: var(--surface); color: var(--text-heading); }

/* =================================================================
   5 · PICK / cards / summary / work panels
   ================================================================= */
.pick-left-pad { padding: 24px 32px 40px; }
.summary-col { padding: 24px; border-right: 1px solid var(--border); }
.summary-card { background: var(--surface-sunken); border-radius: 0; padding: 20px; }
.sort-btn { border-radius: 0; border: 1px solid var(--border); font-weight: 600; text-transform: uppercase; letter-spacing: .1em; font-size: var(--fs-xs); }
/* house rule: button / tab text is UPPERCASE with generous tracking */
.mg-act, .mg-tab, .gx-cap { text-transform: uppercase; letter-spacing: .1em; }
/* Magenta display face (Mark Pro → Libre Franklin) on the marquee titles only;
   the rest of the UI stays in the body face */
#app .hm-display, #app .hc-name, #app .hs-name, #app .wh-title,
#app .pi-event, #app .hr-title, #app .co-title, #app .choose-title {
  font-family: var(--font-display);
}
.sort-btn.active { border-color: var(--accent); background: var(--accent-tint); color: var(--accent-strong); }

.hotel-card { border-radius: 0; border: 1px solid var(--border); box-shadow: none; }
.hotel-card:hover { box-shadow: none; transform: none; border-color: var(--text-faint); }
.hotel-card.sel { border-color: var(--accent); box-shadow: inset 0 0 0 1px var(--accent); }
/* golden-ratio photo block — φ rectangle, 61.8/38.2 split (matches Hybrid Grid):
   square hero + two ~1.24:1 thumbs (the golden spiral subdivision) */
.hc-photos-grid {
  grid-template-columns: 61.8fr 38.2fr;
  grid-template-rows: 1fr 1fr;
  aspect-ratio: 1.618 / 1;
  height: auto;
  gap: 4px;
}
.hc-photos-grid .hc-photo { background-position: center; background-size: cover; }
.hc-dist, .hc-photos, .hs-photos { border-radius: 0; }
.hc-avail { border-width: 1px; }
.hc-nofit { border-radius: 0; }
.hc-name, .pi-event, .hr-title { letter-spacing: -.01em; }

.concierge { border-radius: 0; border: 1px solid var(--accent-soft); background: var(--accent-tint); }

.work-head { padding: 16px 28px; border-bottom: 1px solid var(--border); }
.work-scroll { padding: 24px 28px; }
/* The summary panel minimises as the viewport narrows so the gantt keeps its
   width instead of cramping. Panel scales 360px (wide) → 264px (floor) with the
   viewport; .work-area (flex:1) absorbs every pixel the panel gives up. */
.side-panel { border-left: 1px solid var(--border); width: clamp(264px, 18vw + 80px, 360px); flex-shrink: 0; }

/* modals */
.modal-bg { background: rgba(var(--scrim-rgb), .55); }
.modal { border-radius: 0; border: 1px solid var(--border); box-shadow: none; }
.lm-quote, .lm-timer { border-radius: 0; }
.lm-share-row input { border-radius: 0; border: 1px solid var(--border); }
.lm-timer { background: var(--accent-tint); }

/* checkout — method cards (mono is wider; prevent badge/name overlap) */
.co-method { border: 1px solid var(--border); border-radius: 0; }
.co-method:hover { border-color: var(--accent-soft); }
.co-method.sel { border-color: var(--accent); background: var(--accent-tint); box-shadow: none; }
.co-method .oc-radio { border-radius: 0; border: 1px solid var(--text-faint); }
.co-method.sel .oc-radio { border-color: var(--accent); }
.co-method.sel .oc-radio::after { border-radius: 0; }
.cm-head { flex-wrap: wrap; align-items: center; row-gap: 6px; }
.cm-name { font-size: 13px; font-weight: 700; flex: 1 1 auto; min-width: 0; }
.cm-tag { border-radius: 0; flex-shrink: 0; color: var(--accent-strong); background: var(--accent-tint-2); }
.cm-tag.groups { color: var(--text-body); background: var(--surface-sunken-2); }
.card-pill { border-radius: 0; }
.co-stepper .cs-pip, .co-stepper .pip { border-radius: 0; }

/* =================================================================
   6 · CHOOSE (stage 0)
   ================================================================= */
.choose-card { border-radius: 0; box-shadow: 0 0 0 1px var(--border); }
.choose-opt { border-radius: 0; border: 1px solid var(--border); background: var(--surface-sunken); }
.choose-opt .co-title { font-size: 22px; font-weight: 600; }
.choose-event { font-size: 30px; letter-spacing: -.02em; }

/* gallery */
.gx-thumb, .gx-hero { border-radius: 0; }
.gx-count { font-family: var(--font-sans); }

/* =================================================================
   7 · BASELINE / rhythm niceties
   ================================================================= */
.hm-h1, .hm-h2, .hm-h3, .hm-display, .cfg-event, .wh-title, .hr-title,
.pi-event, .hs-itin-event, .sc-event, .choose-event, .decide-title, .est-figure {
  font-family: var(--font-sans);
}
.hm-value, .hc-party-amt { font-family: var(--font-sans); letter-spacing: -.01em; }

/* =================================================================
   8 · GANTT — "sophistication" pass
   Slim the heavy green slabs to light hairline intervals; pull green
   out of the pay/breakfast chips so it stays a signal, not a fill.
   ================================================================= */
.gantt { border: 1px solid var(--border); border-radius: 0; box-shadow: none; }
.g-head { background: var(--surface-sunken); }
.g-head .g-cell { letter-spacing: .1em; }
.g-day .dom { font-weight: 600; }
.g-day.event { background: var(--accent-tint); }
.g-day.event .dom { color: var(--accent-strong); }

/* quiet green wash behind the event columns in the track */
.g-track .g-gcell.event { background: var(--accent-tint); }

/* event band over the Fri–Sun columns in the header */
.g-days-col { position: relative; display: flex; flex-direction: column; }
.g-eventband { position: relative; height: 20px; margin-bottom: 3px; padding-top: 2px; }
.g-evtag {
  position: absolute; top: 0; height: 16px; display: flex; align-items: center; justify-content: center;
  background: var(--accent); color: var(--on-accent); font-size: var(--fs-2xs); font-weight: 700;
  letter-spacing: .12em; text-transform: uppercase; white-space: nowrap;
}
.g-day.event { background: var(--accent-tint); box-shadow: inset 0 2px 0 var(--accent); }
.g-day.event .dom, .g-day.event .dow { color: var(--accent-strong); }

/* room info row: keep number + bed on one line, never overlapping */
.g-info .gi-top { display: flex; align-items: center; gap: 8px; min-width: 0; }
.gi-num { letter-spacing: .1em; white-space: nowrap; flex-shrink: 0; color: var(--text-muted); }
.gi-bed { flex-shrink: 0; }

/* guest rows → name on one line + a clear EDIT / ADD NAME button */
.g-guest { background: var(--surface-sunken); border-radius: 0; font-weight: 600; display: flex; align-items: center; justify-content: space-between; gap: 8px; padding: 7px 8px 7px 11px; }
.g-guest.placeholder { border: 1px dashed var(--border); background: transparent; font-style: normal; }
.g-guest:hover { background: var(--accent-tint); }
.gg-name { white-space: nowrap; overflow: hidden; text-overflow: ellipsis; min-width: 0; flex: 1 1 auto; font-size: var(--fs-sm); }
.g-guest.placeholder .gg-name { color: var(--text-faint); }
/* guest-row buttons → identical to the EDIT pill used elsewhere (.cfg-edit-event) */
.gg-act {
  flex-shrink: 0; height: 32px; padding: 0 14px; border: 1px solid var(--border);
  background: transparent; color: var(--text-muted); font-family: var(--font-sans);
  font-size: var(--fs-xs); font-weight: 600; letter-spacing: .1em; text-transform: uppercase;
  border-radius: var(--radius-pill); cursor: pointer; transition: border-color .12s, color .12s, background .12s;
}
.gg-act:hover { border-color: var(--accent); color: var(--accent-strong); }
.gg-act.add { background: var(--accent); color: var(--on-accent); border-color: var(--accent); }
.gg-act.add:hover { background: var(--accent-hover); border-color: var(--accent-hover); color: var(--on-accent); }

/* diff pill → square, mono */
.gi-diff { border-radius: 0; background: var(--accent-tint); color: var(--accent-strong);
  font-size: var(--fs-2xs); letter-spacing: .04em; text-transform: uppercase; }

/* who-pays + breakfast → INK = you (booker), OUTLINE = guest; no green */
.pay-chip { border-radius: 0; border: 1px solid var(--border); width: 52px; height: 30px; font-size: var(--fs-xs); }
.pay-chip.booker { background: var(--text-heading); color: var(--neutral-0); border-color: var(--text-heading); }
.pay-chip.guest { background: transparent; color: var(--text-body); border-color: var(--border); }
.bk-chip { border-radius: 0; border: 1px solid var(--border); width: 44px; height: 30px; }
.bk-chip.yes { background: transparent; color: var(--text-heading); border-color: var(--text-heading); }

/* THE STAY INTERVAL — solid accent, reads like a button. */
#app .stay-bar {
  top: 50%; bottom: auto; height: 34px; transform: translateY(-50%);
  background: var(--accent);
  border: 1px solid var(--accent);
  border-radius: 0; box-shadow: none;
  color: var(--on-accent);
  gap: 6px; min-width: 52px;
}
#app .stay-bar:hover { background: var(--accent-hover); border-color: var(--accent-hover); }
.stay-bar .nights { font-size: var(--fs-xs); font-weight: 700; color: var(--on-accent); }
.stay-bar .nlabel { font-size: var(--fs-xs); font-weight: 700; letter-spacing: .08em; text-transform: uppercase; color: var(--on-accent); opacity: 1; }
/* labels stay consistent at every width: "2 NTS", "3 NTS" — the unit never
   drops. Narrow bars just tighten the gap. */
#app .stay-bar.narrow { gap: 3px; }
#app .stay-bar .nlabel { display: inline; }
/* OBVIOUS drag handles → a visible grip tab at each edge */
#app .stay-bar .handle {
  width: 12px; top: 0; bottom: 0; display: flex; align-items: center; justify-content: center;
  cursor: ew-resize; opacity: 1;
}
#app .stay-bar .handle.l { left: 0; } #app .stay-bar .handle.r { right: 0; }
#app .stay-bar .handle::before {
  content: ''; width: 5px; height: 18px; border-radius: 0;
  background: var(--on-accent); opacity: .9;
  border-left: 1px solid var(--accent); border-right: 1px solid var(--accent);
}
#app .stay-bar:hover .handle::before { opacity: 1; }
/* annotations sit cleanly ABOVE the bar so they never cover the nights label */
.stay-bar .flag {
  border-radius: 0; background: var(--text-heading); color: var(--neutral-0);
  font-size: var(--fs-2xs); letter-spacing: .06em; text-transform: uppercase; padding: 2px 7px; top: -23px;
}
/* CANCELLED room → red striped interval (red reserved for cancellations) */
#app .g-row.is-cancelled { opacity: 1; }
#app .g-row.is-cancelled .g-guest { text-decoration: line-through; color: var(--text-faint); }
#app .g-row.is-cancelled .stay-bar {
  background: var(--status-danger-tint); border: 1px solid var(--status-danger);
  color: var(--status-danger); text-decoration: none; box-shadow: none;
}
#app .g-row.is-cancelled .stay-bar .nights,
#app .g-row.is-cancelled .stay-bar .nlabel { color: var(--status-danger); }
.gi-status.cancelled { color: var(--status-danger); font-weight: 600; }

/* side summary rows → keep label + value each on one line */
.hs .hs-row { gap: 16px; }
.hs .hs-row .k { white-space: nowrap; }
.hs .hs-row .v { white-space: nowrap; }
.hs .hs-meta { white-space: normal; }

/* foot + legend + side summary */
.g-foot { background: var(--surface-sunken); }
.gantt-legend .sw { border-radius: 0; }
.hs .hs-photo { border-radius: 0; }
.hs .hs-total .v { font-family: var(--font-sans); letter-spacing: -.01em; }
.up-opt { border-radius: 0; border: 1px solid var(--border); }
.up-opt.sel { border-color: var(--accent); background: var(--accent-tint); }
.modal { border-radius: 0; }
.guest-pop, .mg-pop { border-radius: 0; box-shadow: 0 0 0 1px var(--border); }
.mgp-input, .guest-pop input { border-radius: 0; }

/* checkout step pips → square */
.co-step .co-pip { border-radius: 0; box-shadow: none; }
.co-step.active .co-pip { box-shadow: none; }
.co-field input, .co-wire, .co-rcard, .co-totals, .co-note { border-radius: 0; }

/* confirmed + commit → square, mono numerals */
.cf-card, .cf-share { border-radius: 0; box-shadow: 0 0 0 1px var(--border); }
.cf-share-row input { border-radius: 0; border: 1px solid var(--border); }
.cf-card .cf-v { font-family: var(--font-sans); letter-spacing: -.005em; }
.cf-tick, .commit-bigtick, .cg-tick { border-radius: 0; box-shadow: none; }
.commit-card, .commit-room { border-radius: 0; }
.commit-room .cr-dot { border-radius: 0; }

/* ===================================================================
   AUDIT PASS — square the deep modal/popover stragglers the structural
   pass missed, so the 0-radius (Magenta) system is consistent everywhere.
   =================================================================== */
.conflict-popover,
.mg-pop, .mgp-item, .mgp-input,
.mg-msg-bubble,
.mg-msg.hotel .mg-msg-bubble, .mg-msg.you .mg-msg-bubble,
.gi-code, .gi-ss-field input, .gi-card, .gi-url,
.doc-share, .doc-paper,
.guest-pop, .guest-pop input,
.co-method, .cm-tag { border-radius: 0; }
/* chat bubble "tail" corners → also square */
.mg-msg.hotel .mg-msg-bubble { border-bottom-left-radius: 0; }
.mg-msg.you .mg-msg-bubble { border-bottom-right-radius: 0; }

/* ===================================================================
   Gantt entrance — rows arrive together as one connected system (Common
   Fate), staggered top-to-bottom. One-shot via .intro (added on stage
   entry, removed after it plays) so edit-rebuilds never re-animate.
   Base state is visible → print, PDF export & reduced-motion are unaffected.
   =================================================================== */
@media (prefers-reduced-motion: no-preference) {
  @keyframes gRowIn { from { opacity: 0; transform: translateY(7px); } to { opacity: 1; transform: none; } }
  .gantt.intro .g-row { animation: gRowIn .42s cubic-bezier(.22,.61,.36,1) both; animation-delay: calc(var(--row-i, 0) * 55ms); }
}
