﻿/* ============================================================
   MATTHEW HOUSE - ADD NEW PROGRAM WIZARD
   Verbatim port of _handoff/Program Wizards (Add New Program, wz2 variant).
   Every rule is scoped under :is(#pgWiz,#schWiz,#latePts) so the mock's generic class names
   (.field, .icf, .modal, .ui-btn ...) never leak into the app. The demo
   canvas cream body is intentionally dropped - the wizard is a modal here,
   and the app-wide standing rule is ONE cool-gray background, no cream.
   Only the wz2 chrome the Add New Program screen actually uses is kept.
   ============================================================ */
/* =============================================================================
   #latePts JOINED THIS FILE'S SELECTOR GROUP ON PURPOSE (Aug 9 2026).

   The staff "how many points was this late visit worth" prompt had to look like
   the app's own wizards, not like a new dialog invented for it. Rather than
   copying the field kit, the buttons and the modal shell into a fourth place -
   which is how three of them drift apart - the overlay's id was added to EVERY
   selector in this file. It therefore gets the shell, .modal, .field, .icf,
   .ui-btn and the tokens for free, and can never drift from the wizards, because
   there is nothing separate to drift.

   Rules it does not use simply do not match. The handful of things unique to it
   (the child list) are at the END of this file, scoped #latePts alone.
   ============================================================================= */
:is(#pgWiz,#schWiz,#latePts){
  --font-sans:'Hanken Grotesk',ui-sans-serif,system-ui,-apple-system,sans-serif;
  --font-mono:'IBM Plex Mono',ui-monospace,Menlo,monospace;

  /* Brand accent = the LEFT-RAIL / sidebar teal (#2E4A43 -> #213A33), so EVERY accent
     inside the wizard - primary buttons, "Step x of 4" bar, the toggle switch, the
     day-of-week toggles, selected dropdown options, the review hero - is the same colour
     and matches the rail (was the brighter pine #3E6B57). */
  --brand:#2E4A43; --brand-600:#375A50; --brand-700:#213A33;
  --brand-tint:rgba(46,74,67,.12); --brand-tint-2:rgba(46,74,67,.18);
  --brand-glow:rgba(33,58,51,.35);

  --ink-1:#1C2733; --ink-2:#3B474B; --ink-3:#677579; --ink-4:#9AA7B3;
  --danger:#C0473F; --danger-bg:#F7E3E1; --danger-ink:#8C312B;

  --bg-canvas:#E8EBF0;
  /* inset cool field tokens (tuned against the #E8EBF0 cool canvas) */
  --f-rest-bg:#DFE4EA; --f-rest-bd:rgba(40,60,80,.10); --f-rest-sh:inset 0 1px 2px rgba(40,60,80,.10);
  --f-hover-bg:#E4E8ED;
  --f-focus-bg:#FFFFFF; --f-focus-bd:rgba(40,60,80,.16); --f-focus-sh:0 10px 28px rgba(40,60,80,.14);

  --line:rgba(40,60,80,.08);
  --r-sm:9px; --r-md:12px; --r-lg:16px; --r-pill:999px;
  --ease:cubic-bezier(.2,.7,.25,1); --t:.2s var(--ease);

  /* CTA accent = the LEFT-RAIL gradient colours (deep teal #2E4A43 -> #213A33), so the
     "Step x of 4" progress bar and the primary buttons match each other AND the sidebar
     (was the brighter pine --brand). ONE definition -> guaranteed identical. */
  --pg-cta:linear-gradient(135deg,#2E4A43,#213A33);
  --pg-cta-hover:linear-gradient(135deg,#375A50,#274A40);
  --pg-cta-glow:rgba(33,58,51,.42);
}
:is(#pgWiz,#schWiz,#latePts) *{box-sizing:border-box}

/* =========================================================
   MODAL OVERLAY (replaces the demo canvas frame)
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts){position:fixed;inset:0;z-index:200;display:none;place-items:center;padding:24px;
  background:rgba(28,39,51,.5);backdrop-filter:blur(3px);overflow:auto;
  font-family:var(--font-sans);color:var(--ink-1);-webkit-font-smoothing:antialiased}
:is(#pgWiz,#schWiz,#latePts).show{display:grid;animation:pgFade .22s var(--ease)}
@keyframes pgFade{from{opacity:0}to{opacity:1}}

/* =========================================================
   MODAL SHELL
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .modal{position:relative;display:flex;flex-direction:column;overflow:hidden;background:rgb(var(--tg-rgb,255,255,255));
  border-radius:24px;border:1px solid var(--line);
  box-shadow:0 40px 90px -20px rgba(28,39,51,.35),0 4px 14px rgba(28,39,51,.08)}
:is(#pgWiz,#schWiz,#latePts) .modal.wz2{width:min(1240px,100%);height:min(calc(92 * var(--mh-vh)),884px);animation:pgRise .42s var(--ease)}
@keyframes pgRise{from{opacity:0;transform:translateY(16px) scale(.99)}to{opacity:1;transform:none}}
:is(#pgWiz,#schWiz,#latePts) .m-body{flex:1;min-height:0;overflow:auto;padding:8px 26px 26px}
:is(#pgWiz,#schWiz,#latePts) .m-body::-webkit-scrollbar{width:10px}
:is(#pgWiz,#schWiz,#latePts) .m-body::-webkit-scrollbar-thumb{background:rgba(40,60,80,.16);border-radius:99px;border:3px solid #fff}
:is(#pgWiz,#schWiz,#latePts) .m-foot{flex:none;display:flex;align-items:center;gap:12px;padding:16px 22px;border-top:1px solid var(--line);
  background:linear-gradient(0deg,var(--tg-cream2,rgb(247,249,250)),rgb(var(--tg-rgb,255,255,255)))}
:is(#pgWiz,#schWiz,#latePts) .m-foot .spacer{flex:1}
:is(#pgWiz,#schWiz,#latePts) .m-foot .foot-hint{font-size:12.5px;color:var(--ink-3);font-weight:500}

/* =========================================================
   FIELDS
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .step{display:none;animation:stepIn .32s var(--ease)}
:is(#pgWiz,#schWiz,#latePts) .step.active{display:block}
@keyframes stepIn{from{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}
:is(#pgWiz,#schWiz,#latePts) .fgrid{display:grid;grid-template-columns:1fr 1fr;gap:18px 20px}
:is(#pgWiz,#schWiz,#latePts) .fgrid .full{grid-column:1/-1}
:is(#pgWiz,#schWiz,#latePts) .field{display:flex;flex-direction:column;gap:8px;min-width:0}
:is(#pgWiz,#schWiz,#latePts) .field>label{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);display:flex;align-items:center;gap:6px}
:is(#pgWiz,#schWiz,#latePts) .field .req{color:var(--danger)}
:is(#pgWiz,#schWiz,#latePts) .divider{height:1px;background:var(--line);margin:22px 0}

/* ---- GROUP HEADER inside a step (Jul 31 2026) ---------------------------------
   Step 3 carries two unrelated families: what the program IS (delivery, completion)
   and the points economy (earn rate, gift-card rule, threshold). A labelled rule
   between them is what makes "these three belong together" readable at a glance,
   without spending a whole wizard step on three fields. Grid child, full width. */
:is(#pgWiz,#schWiz,#latePts) .grp{display:flex;align-items:center;gap:12px;margin:6px 0 -2px}
:is(#pgWiz,#schWiz,#latePts) .grp-h{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap}
:is(#pgWiz,#schWiz,#latePts) .grp-line{flex:1;height:1px;background:var(--line)}

/* Helper text under a stepper. Sits OUTSIDE .icf so it never inherits the field
   fill, and is muted enough that it reads as guidance, not as a validation message
   (those are .msg.err and must stay the only red thing in the form). */
:is(#pgWiz,#schWiz,#latePts) .fhint{font-size:12px;font-weight:500;line-height:1.35;color:var(--ink-4);margin-top:-1px}

/* Advisory warning under a stepper. Amber, NOT the red of .msg.err - this never blocks
   Continue, and borrowing the error red would teach staff that red is sometimes ignorable.
   It replaces .fhint rather than stacking, so the field never grows a third line. */
:is(#pgWiz,#schWiz,#latePts) .fwarn{display:flex;align-items:flex-start;gap:6px;font-size:12px;font-weight:600;line-height:1.35;color:#8a5a12;margin-top:-1px}
:is(#pgWiz,#schWiz,#latePts) .fwarn svg{width:13px;height:13px;flex:none;margin-top:1px;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round}

/* Step-level notice: states a consequence of a choice made on ANOTHER step, so it must read
   as information rather than as a field error. Amber like .fwarn, never the validation red -
   nothing here blocks Continue, and the user may genuinely want a program with no schedule. */
:is(#pgWiz,#schWiz,#latePts) .step-note{display:flex;align-items:flex-start;gap:10px;margin:0 0 18px;padding:12px 14px;
  border-radius:var(--r-md);background:#fdf5e6;border:1px solid #e8d5ab;color:#6b4a12;
  font-size:13px;line-height:1.45}
:is(#pgWiz,#schWiz,#latePts) .step-note b{display:block;color:#5a3d0e;margin-bottom:2px}
:is(#pgWiz,#schWiz,#latePts) .step-note svg{width:16px;height:16px;flex:none;margin-top:1px;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round}

/* Default Points note (POINTS-MATH-05). Occupies the slot the threshold stepper vacates when
   rule 1 is chosen, so the step does not jump in height between the two rules. COOL, not the
   cream of .step-note: that amber means "careful", and choosing the app-wide default is the
   ordinary choice, not a risk. It is stating what the number will be, nothing more.

   Built on the INSET COOL FIELD tokens (--f-rest-*), not on literal colours: they are the
   recessed surface this note is standing in for, and they are the only pair already redefined
   under body.dark, so dark parity comes for free instead of needing a second rule. */
:is(#pgWiz,#schWiz,#latePts) .gc-default-note{padding:11px 13px;border-radius:var(--r-md);
  background:var(--f-rest-bg);border:1px solid var(--f-rest-bd);box-shadow:var(--f-rest-sh)}
:is(#pgWiz,#schWiz,#latePts) .gcd-h{display:block;font-size:12.5px;font-weight:700;color:var(--ink-2);margin-bottom:2px}
:is(#pgWiz,#schWiz,#latePts) .gcd-p{display:block;font-size:12px;font-weight:500;line-height:1.4;color:var(--ink-3)}

/* ---- REQUIRED / VALIDATION - the app's default warning design ------------------
   Ported verbatim from the Enroll Student wizard (#enrollWiz, enroll-wizard.css 161-170),
   which the CEO named as the standard: the field itself goes red (danger border + danger
   wash), its LABEL and asterisk go danger-ink, a red line with a warning glyph appears
   underneath, and the field shakes once so the eye is pulled to it. Same tokens, same
   sizes, same animation curve - this is one design in two places, not a lookalike. */
/* transition:none is LOAD-BEARING, not a tidy-up. :is(#pgWiz,#schWiz,#latePts) .icf transitions background and
   border-color; when Blazor re-renders the field with .err in the same frame, the
   transitioned longhands keep their OLD computed values and the red wash never lands -
   measured: the label and the message went red while the field stayed #DFE4EA, and even an
   inline !important background could not move it until the transition was removed. Same
   family as the flagged dark-mode transitioned-longhand issue. An error should snap into
   view anyway; fading one in is wrong. */
/* AN ERROR OUTRANKS HOVER AND FOCUS. It must hold its red from the moment it appears until
   the user actually fixes the value - pointing at it or typing in it is not a fix.
   Specificity is the whole story: `.field.err .icf` is (1,2,0) but `.icf:hover:not(:focus-within)`
   is (1,3,0) and `.icf:focus-within` is (1,2,0) declared later, so BOTH used to repaint the
   field back to its normal fill the moment the mouse arrived. The error selectors below carry
   the extra pseudo-classes so they win outright. */
:is(#pgWiz,#schWiz,#latePts) .field.err .icf,
:is(#pgWiz,#schWiz,#latePts) .field.err .icf:hover,
:is(#pgWiz,#schWiz,#latePts) .field.err .icf:hover:not(:focus-within),
:is(#pgWiz,#schWiz,#latePts) .field.err .icf:focus-within{border-color:var(--danger);background:var(--danger-bg);transition:none}
:is(#pgWiz,#schWiz,#latePts) .field.err .icf:focus-within{box-shadow:0 0 0 3px rgba(192,71,63,.24)}
:is(#pgWiz,#schWiz,#latePts) .field.err>label,:is(#pgWiz,#schWiz,#latePts) .field.err>label .req{color:var(--danger-ink)}
:is(#pgWiz,#schWiz,#latePts) .field.err .dp .dp-field{border-color:var(--danger) !important;background:var(--danger-bg) !important;box-shadow:none !important}
/* the day picker is a button row, not an .icf - give it the same wash so "at least one day"
   reads as the same kind of error as an empty text box */
:is(#pgWiz,#schWiz,#latePts) .field.err .dow{border-radius:var(--r-md);outline:1px solid var(--danger);outline-offset:4px;background:var(--danger-bg)}
:is(#pgWiz,#schWiz,#latePts) .msg{display:flex;align-items:center;gap:6px;margin:7px 0 0;font-size:12.5px;font-weight:650;line-height:1.35}
:is(#pgWiz,#schWiz,#latePts) .msg.err{color:var(--danger-ink)}
:is(#pgWiz,#schWiz,#latePts) .msg svg{width:14px;height:14px;flex:none;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round}
:is(#pgWiz,#schWiz,#latePts) .field:not(.err) .msg.err{display:none}
/* NO `both` fill-mode. The shake starts and ends at translateX(0), so retaining its final
   state is visually identical - but a retained `transform` makes .field a STACKING CONTEXT
   for good, and the dropdown inside it (z-index:1000) then ranks only WITHIN that field. The
   next field's .icf, later in tree order, painted straight over the open list: measured with
   Delivery type open, "Cohort" and "Ongoing" were covered and unclickable. Same trap as the
   overflow menu vs .dv-scrim - a z-index only ever competes inside its own context. */
:is(#pgWiz,#schWiz,#latePts) .shake{animation:pgShk .34s cubic-bezier(.36,.07,.19,.97)}
@keyframes pgShk{10%,90%{transform:translateX(-1.5px)}20%,80%{transform:translateX(3px)}30%,50%,70%{transform:translateX(-5px)}40%,60%{transform:translateX(5px)}}

:is(#pgWiz,#schWiz,#latePts) .icf{position:relative;display:flex;align-items:center;gap:11px;min-height:50px;padding:0 15px;background:var(--f-rest-bg);
  border:1px solid var(--f-rest-bd);box-shadow:var(--f-rest-sh);border-radius:var(--r-md);
  transition:background var(--t),border-color var(--t),box-shadow var(--t)}
:is(#pgWiz,#schWiz,#latePts) .icf:hover:not(:focus-within){background:var(--f-hover-bg)}
:is(#pgWiz,#schWiz,#latePts) .icf:focus-within{background:var(--f-focus-bg);border-color:var(--f-focus-bd);box-shadow:var(--f-focus-sh)}
:is(#pgWiz,#schWiz,#latePts) .icf input,:is(#pgWiz,#schWiz,#latePts) .icf select,:is(#pgWiz,#schWiz,#latePts) .icf textarea{flex:1;min-width:0;border:none;background:none;outline:none;font-family:var(--font-sans);font-size:15px;font-weight:500;color:var(--ink-1)}
/* KILL the app-global .mh-app :is(input,textarea,select) look (fill + border + box-shadow +
   green focus ring) that otherwise renders a "field inside the field" ghost and a green
   outline. The visible field is the .icf shell ONLY; the raw control is fully transparent
   in every state. */
:is(#pgWiz,#schWiz,#latePts) .icf :is(input,select,textarea),
:is(#pgWiz,#schWiz,#latePts) .icf :is(input,select,textarea):hover,
:is(#pgWiz,#schWiz,#latePts) .icf :is(input,select,textarea):focus,
:is(#pgWiz,#schWiz,#latePts) .icf :is(input,select,textarea):focus-visible{
  background:transparent !important;border:0 !important;box-shadow:none !important;
  border-radius:0 !important;padding:0 !important;min-height:0 !important;height:auto !important;
  outline:none !important;color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .icf input::placeholder,:is(#pgWiz,#schWiz,#latePts) .icf textarea::placeholder{color:var(--ink-4);font-weight:400}
:is(#pgWiz,#schWiz,#latePts) .icf select{appearance:none;-webkit-appearance:none;cursor:pointer}
:is(#pgWiz,#schWiz,#latePts) .icf.area{align-items:stretch;padding:13px 15px;min-height:104px}
:is(#pgWiz,#schWiz,#latePts) .icf.area textarea{resize:none;min-height:78px;line-height:1.55}
:is(#pgWiz,#schWiz,#latePts) .ic{width:19px;height:19px;flex:none;display:grid;place-items:center;color:var(--ink-3)}
:is(#pgWiz,#schWiz,#latePts) .ic svg{width:100%;height:100%;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;fill:none}
:is(#pgWiz,#schWiz,#latePts) .chev{transition:transform var(--t)}

/* custom dropdown popup (native <select> mirrored) - matches inset-field kit */
:is(#pgWiz,#schWiz,#latePts) .icf.has-sel{cursor:pointer}
/* THE FIELD WITH THE OPEN LIST MUST OUT-RANK THE FIELDS AFTER IT.
   .selpop carries z-index:1000, but a z-index only competes inside its own stacking context -
   and .field.err is one, because the shake animation keeps a transform on it (it re-triggers
   on Blazor re-renders, so it never settles back to `none`). The popup was therefore trapped
   inside its field and the NEXT field's .icf, later in tree order, painted over it: with
   Delivery type open, "Cohort" and "Ongoing" were covered and unclickable.
   Lifting the whole FIELD is what fixes it, not raising the popup again. */
:is(#pgWiz,#schWiz,#latePts) .field:has(> .icf.open){position:relative;z-index:5}
:is(#pgWiz,#schWiz,#latePts) .sel-face{flex:1;min-width:0;font-family:var(--font-sans);font-size:15px;font-weight:500;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;cursor:pointer}
:is(#pgWiz,#schWiz,#latePts) .sel-face.ph{color:var(--ink-4);font-weight:400}
:is(#pgWiz,#schWiz,#latePts) .icf.open{background:var(--f-focus-bg);border-color:var(--f-focus-bd);box-shadow:var(--f-focus-sh)}
:is(#pgWiz,#schWiz,#latePts) .icf.open .chev{transform:rotate(180deg)}
:is(#pgWiz,#schWiz,#latePts) .selpop{position:absolute;left:0;right:0;top:calc(100% + 8px);z-index:1000;background:var(--f-focus-bg);border:1px solid var(--f-focus-bd);border-radius:var(--r-md);box-shadow:var(--f-focus-sh),0 22px 48px -18px rgba(28,39,51,.34);padding:7px;display:flex;flex-direction:column;gap:3px;max-height:288px;overflow:auto;animation:selpop .16s var(--ease)}
@keyframes selpop{from{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:none}}
:is(#pgWiz,#schWiz,#latePts) .selpop.up{top:auto;bottom:calc(100% + 8px);animation-name:selpopUp}
@keyframes selpopUp{from{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}
:is(#pgWiz,#schWiz,#latePts) .selpop::-webkit-scrollbar{width:10px}
:is(#pgWiz,#schWiz,#latePts) .selpop::-webkit-scrollbar-thumb{background:rgba(40,60,80,.16);border-radius:99px;border:3px solid var(--f-focus-bg)}
:is(#pgWiz,#schWiz,#latePts) .sel-opt{text-align:left !important;border:none;background:none;font-family:var(--font-sans);font-size:14.5px;font-weight:600;color:var(--ink-1);padding:11px 14px;border-radius:var(--r-sm);cursor:pointer;display:flex !important;align-items:center;justify-content:flex-start !important;gap:10px;width:100%;transition:background var(--t),color var(--t)}
:is(#pgWiz,#schWiz,#latePts) .sel-face{text-align:left}
:is(#pgWiz,#schWiz,#latePts) .sel-opt:hover{background:var(--f-rest-bg)}
:is(#pgWiz,#schWiz,#latePts) .sel-opt.on{background:var(--brand-tint);color:var(--brand-600);font-weight:700}
:is(#pgWiz,#schWiz,#latePts) .sel-opt.on::after{content:"\2713";margin-left:auto;color:var(--brand);font-weight:800}
/* transparent click-away catcher rendered while any dropdown is open */
:is(#pgWiz,#schWiz,#latePts) .sel-scrim{position:fixed;inset:0;z-index:999;background:transparent}

:is(#pgWiz,#schWiz,#latePts) .stepper{width:32px;height:32px;flex:none;border-radius:8px;border:1px solid var(--f-rest-bd);background:rgba(var(--tg-rgb,255,255,255),calc(.5*var(--tg-k,1)));cursor:pointer;display:grid;place-items:center;color:var(--ink-2);font-family:var(--font-sans);font-size:18px;font-weight:500;line-height:1;transition:background var(--t),color var(--t)}
:is(#pgWiz,#schWiz,#latePts) .stepper:hover{background:rgb(var(--tg-rgb,255,255,255));color:var(--brand-600)}
:is(#pgWiz,#schWiz,#latePts) .icf .num{text-align:center}

/* toggle switch */
:is(#pgWiz,#schWiz,#latePts) .switch-row{display:flex;align-items:center;justify-content:space-between;gap:16px;cursor:pointer;user-select:none;padding:4px 0}
:is(#pgWiz,#schWiz,#latePts) .switch-row .txt{font-size:14.5px;font-weight:600;color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .switch-row .txt small{display:block;font-size:12.5px;font-weight:400;color:var(--ink-3);margin-top:2px}
:is(#pgWiz,#schWiz,#latePts) .switch{position:relative;width:48px;height:28px;flex:none;border-radius:999px;background:var(--f-rest-bg);border:1px solid var(--f-rest-bd);box-shadow:var(--f-rest-sh);transition:background var(--t),border-color var(--t)}
:is(#pgWiz,#schWiz,#latePts) .switch input{position:absolute;opacity:0;width:0;height:0}
:is(#pgWiz,#schWiz,#latePts) .switch .knob{position:absolute;top:2px;left:2px;width:22px;height:22px;border-radius:999px;background:rgb(var(--tg-rgb,255,255,255));box-shadow:0 2px 5px rgba(40,60,80,.28);transition:transform var(--t)}
:is(#pgWiz,#schWiz,#latePts) .switch input:checked~.knob{transform:translateX(20px)}
:is(#pgWiz,#schWiz,#latePts) .switch:has(input:checked){background:var(--brand);border-color:var(--brand)}

/* day of week */
:is(#pgWiz,#schWiz,#latePts) .dow{display:grid;grid-template-columns:repeat(7,1fr);gap:8px}
:is(#pgWiz,#schWiz,#latePts) .dow button{height:46px;border-radius:12px;border:1px solid var(--f-rest-bd);background:var(--f-rest-bg);box-shadow:var(--f-rest-sh);font-family:var(--font-sans);font-weight:700;font-size:13px;color:var(--ink-3);cursor:pointer;transition:background var(--t),color var(--t),border-color var(--t),box-shadow var(--t)}
:is(#pgWiz,#schWiz,#latePts) .dow button:hover{background:var(--f-hover-bg);color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .dow button.on{background:var(--brand);border-color:var(--brand);color:#fff;box-shadow:0 4px 10px var(--brand-glow)}

/* =========================================================
   BUTTONS
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .ui-btn{height:48px;padding:0 22px;border-radius:var(--r-md);font-family:var(--font-sans);font-size:14.5px;font-weight:700;cursor:pointer;border:1px solid transparent;display:inline-flex;align-items:center;justify-content:center;gap:9px;white-space:nowrap;transition:background var(--t),border-color var(--t),box-shadow var(--t),color var(--t),transform var(--t)}
:is(#pgWiz,#schWiz,#latePts) .ui-btn svg{width:18px;height:18px;stroke:currentColor;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.primary{background:var(--pg-cta);color:#fff;box-shadow:0 8px 18px -4px var(--pg-cta-glow)}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.primary:hover{background:var(--pg-cta-hover);box-shadow:0 10px 22px -4px var(--pg-cta-glow)}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.primary:active{transform:translateY(1px)}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.secondary{background:var(--f-focus-bg);color:var(--brand-600);border-color:var(--f-focus-bd);box-shadow:0 1px 2px rgba(40,60,80,.06)}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.secondary:hover{background:var(--tg-cream,rgb(238,242,244))}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.is-cancel{background:transparent;color:var(--ink-2);border-color:transparent;box-shadow:none}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.is-cancel:hover{background:rgba(40,60,80,.07);color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .ui-btn.is-cancel .bk-ic{display:none}
:is(#pgWiz,#schWiz,#latePts) .ui-btn:disabled{opacity:.45;cursor:not-allowed;box-shadow:none}

/* =========================================================
   WZ2 - SIDEBAR RAIL
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .wz2{flex-direction:row}
/* Left rail gradient matched to the New Client Wizard's .dzaside (deep teal +
   top-right glow) so both wizards' side panels read as one system. */
:is(#pgWiz,#schWiz,#latePts) .wz2 .rail{width:340px;flex:none;position:relative;overflow:hidden;background:radial-gradient(420px 260px at 110% -6%,rgba(110,156,144,.30),transparent 60%),linear-gradient(165deg,#2E4A43,#213A33 55%,#16261F);border-right:1px solid var(--line);padding:0;display:flex;flex-direction:column;color:#fff}
:is(#pgWiz,#schWiz,#latePts) .rail-head{flex:none;position:relative;padding:26px 26px 22px;display:flex;align-items:center;gap:14px;border-bottom:1px solid rgba(255,255,255,.15)}
:is(#pgWiz,#schWiz,#latePts) .rail-ic{flex:none;width:48px;height:48px;border-radius:14px;background:rgba(var(--tg-rgb,255,255,255),calc(.15*var(--tg-k,1)));color:#fff;display:grid;place-items:center;box-shadow:inset 0 0 0 1px rgba(255,255,255,.14)}
:is(#pgWiz,#schWiz,#latePts) .rail-ic svg{width:26px;height:26px;fill:currentColor}
:is(#pgWiz,#schWiz,#latePts) .rail-title{font-size:23px;font-weight:800;letter-spacing:-.02em;line-height:1.1;text-align:left;text-transform:uppercase}
:is(#pgWiz,#schWiz,#latePts) .rail-scroll{flex:1;min-height:0;overflow:auto;padding:24px 26px 26px;display:flex;flex-direction:column}
:is(#pgWiz,#schWiz,#latePts) .rail-scroll::-webkit-scrollbar{width:10px}
:is(#pgWiz,#schWiz,#latePts) .rail-scroll::-webkit-scrollbar-thumb{background:rgba(var(--tg-rgb,255,255,255),calc(.24*var(--tg-k,1)));border-radius:99px;border:3px solid transparent;background-clip:padding-box}
:is(#pgWiz,#schWiz,#latePts) .sum{display:flex;flex-direction:column}
:is(#pgWiz,#schWiz,#latePts) .sum-name{font-size:22px;font-weight:800;letter-spacing:-.02em;color:#fff;line-height:1.14;margin-top:2px;text-align:center}
:is(#pgWiz,#schWiz,#latePts) .sum-name.empty{color:rgba(255,255,255,.55);font-weight:700}
:is(#pgWiz,#schWiz,#latePts) .sum-type{align-self:center;margin-top:12px;font-size:12px;font-weight:700;letter-spacing:.01em;color:#fff;background:rgba(var(--tg-rgb,255,255,255),calc(.17*var(--tg-k,1)));border-radius:999px;padding:5px 13px}
:is(#pgWiz,#schWiz,#latePts) .sum-list{margin-top:20px;padding-top:6px;border-top:1px solid rgba(255,255,255,.16);display:flex;flex-direction:column}
:is(#pgWiz,#schWiz,#latePts) .sum-row{display:flex;align-items:center;gap:13px;padding:11px 0}
:is(#pgWiz,#schWiz,#latePts) .sum-rc{min-width:0;display:flex;flex-direction:column;gap:3px}
:is(#pgWiz,#schWiz,#latePts) .sum-k{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6)}
:is(#pgWiz,#schWiz,#latePts) .sum-v{font-size:15px;font-weight:600;color:#fff;line-height:1.35}
:is(#pgWiz,#schWiz,#latePts) .sum-v small{display:block;font-size:13.5px;font-weight:500;color:rgba(255,255,255,.72);margin-top:3px}
:is(#pgWiz,#schWiz,#latePts) .sum-empty{margin-top:20px;font-size:13.5px;color:rgba(255,255,255,.62);line-height:1.55}

/* EXISTING TERMS on the rail (#schWiz only, Aug 3 2026). Adding a term is the one wizard
   where the thing you are adding TO already has history, and choosing dates blind is how you
   end up with two live terms on one program. So the rail lists what is already there.
   Same translucent-lift language as .sum-qr - a tile on a dark rail is a lift of the rail,
   never an opaque light card. A clashing row goes amber, the app's advisory colour, never
   the validation red: an overlap is a warning the user may knowingly accept. */
:is(#pgWiz,#schWiz,#latePts) .sum-terms{margin-top:18px;padding-top:16px;border-top:1px solid rgba(255,255,255,.16)}
:is(#pgWiz,#schWiz,#latePts) .sum-terms-h{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6);margin-bottom:10px}
:is(#pgWiz,#schWiz,#latePts) .sum-terms-empty{font-size:12.5px;color:rgba(255,255,255,.55);line-height:1.5}
:is(#pgWiz,#schWiz,#latePts) .sum-term{display:flex;flex-direction:column;gap:2px;padding:9px 11px;margin-bottom:7px;
  border-radius:var(--r-sm);background:rgba(var(--tg-rgb,255,255,255),calc(.09*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(255,255,255,.13)}
:is(#pgWiz,#schWiz,#latePts) .sum-term .st-n{font-size:13px;font-weight:650;color:#fff}
:is(#pgWiz,#schWiz,#latePts) .sum-term .st-d{font-size:11.5px;color:rgba(255,255,255,.62);font-variant-numeric:tabular-nums}
:is(#pgWiz,#schWiz,#latePts) .sum-term.is-clash{background:rgba(216,155,61,.20);box-shadow:inset 0 0 0 1px rgba(216,155,61,.55)}
:is(#pgWiz,#schWiz,#latePts) .sum-term .st-x{margin-top:3px;font-size:11px;font-weight:700;letter-spacing:.02em;color:#F0C27B}

/* A derived, non-editable field. Reads as a field so the grid rhythm holds, but flat and
   dimmed so it never invites a click that would do nothing. */
:is(#pgWiz,#schWiz,#latePts) .icf.is-locked{background:transparent;box-shadow:inset 0 0 0 1px var(--f-rest-bd);color:var(--ink-2);cursor:default}
/* QR TILE ON THE RAIL - CLIENT DETAIL IS THE STANDARD (CEO, Aug 3 2026).
   This carried --f-rest-bg / --f-rest-bd / --f-rest-sh, the INSET COOL FIELD kit. That kit is
   correct for a field recessed into the light form on the right; here it put a pale cool slab on
   the dark pine rail, which is the white block the CEO flagged. The rail is a dark surface, so a
   tile on it is a translucent lift of the rail itself - never an opaque light card.
   Values are #mhDetail .sum-qr verbatim (detail-view.css) so the two rails cannot drift.
   The white QR FRAME inside stays white: that is scan contrast, not decoration. */
:is(#pgWiz,#schWiz,#latePts) .sum-qr{margin-top:18px;display:flex;align-items:center;gap:14px;padding:13px;border-radius:var(--r-md);
  background:rgba(var(--tg-rgb,255,255,255),calc(.11*var(--tg-k,1)));border:none;box-shadow:inset 0 0 0 1px rgba(255,255,255,.15);
  cursor:pointer;transition:background var(--t)}
:is(#pgWiz,#schWiz,#latePts) .sum-qr:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.17*var(--tg-k,1)))}
:is(#pgWiz,#schWiz,#latePts) .sum-qr .qr-frame{width:78px;height:78px;flex:none;display:block;border-radius:8px;background:#fff;padding:5px;position:relative}
:is(#pgWiz,#schWiz,#latePts) .sum-qr .qr-frame svg{width:100%;height:100%;display:block}
:is(#pgWiz,#schWiz,#latePts) .sum-qr .qr-logo{position:absolute;inset:0;margin:auto;width:20px;height:20px;background:var(--brand-700);border-radius:6px;display:grid;place-items:center;box-shadow:0 0 0 3px #fff}
:is(#pgWiz,#schWiz,#latePts) .sum-qr .qr-logo img{width:13px;height:13px;display:block}
:is(#pgWiz,#schWiz,#latePts) .sum-qr-meta{display:flex;flex-direction:column;gap:4px;min-width:0}
/* Ink follows the tile. These were --ink-4 / --ink-1, which are DARK inks meant for the light
   form; on the translucent rail tile above they would be dark-on-dark. Client Detail values. */
:is(#pgWiz,#schWiz,#latePts) .sum-qr-k{font-size:10.5px;font-weight:700;letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6)}
:is(#pgWiz,#schWiz,#latePts) .sum-qr-v{font-family:var(--font-mono);font-size:15px;font-weight:600;letter-spacing:.02em;color:#fff;overflow-wrap:anywhere}
/* `pointer`, not the zoom-out glass - no zoom icon anywhere in the app (CEO, Jul 29 2026). */
:is(#pgWiz,#schWiz,#latePts) .qr-zoom{position:absolute;inset:0;z-index:20;display:grid;place-items:center;padding:28px;background:rgba(24,36,30,.55);opacity:0;transition:opacity .2s var(--ease);cursor:pointer}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom.in{opacity:1}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-card{background:#fff;border-radius:20px;padding:26px;display:flex;flex-direction:column;align-items:center;gap:13px;box-shadow:0 30px 70px -20px rgba(0,0,0,.5);transform:scale(.94);transition:transform .2s var(--ease)}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom.in .qr-zoom-card{transform:none}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-card .qr-frame{width:min(300px,44vmin);height:min(300px,44vmin);display:block;position:relative;background:#fff;border-radius:10px;padding:10px}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-card .qr-frame svg{width:100%;height:100%;display:block}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-card .qr-logo{position:absolute;inset:0;margin:auto;width:46px;height:46px;background:var(--brand-700);border-radius:11px;display:grid;place-items:center;box-shadow:0 0 0 6px #fff}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-card .qr-logo img{width:30px;height:30px;display:block}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-code{font-family:var(--font-mono);font-size:20px;font-weight:600;letter-spacing:.04em;color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .qr-zoom-hint{font-size:12px;color:var(--ink-4)}

:is(#pgWiz,#schWiz,#latePts) .wz2{background:var(--bg-canvas)}
:is(#pgWiz,#schWiz,#latePts) .wz2 .pane{flex:1;min-width:0;display:flex;flex-direction:column;background:var(--bg-canvas)}
:is(#pgWiz,#schWiz,#latePts) .wz2 .m-body::-webkit-scrollbar-thumb{border-color:var(--bg-canvas)}
:is(#pgWiz,#schWiz,#latePts) .pane-top{flex:none;padding:28px 36px 0}
:is(#pgWiz,#schWiz,#latePts) .pane-top-row{display:flex;align-items:center;gap:16px}
:is(#pgWiz,#schWiz,#latePts) .prog-count{font-size:12.5px;font-weight:700;color:var(--brand-600);letter-spacing:.01em}
:is(#pgWiz,#schWiz,#latePts) .prog-bar{flex:1;min-width:0;height:7px;border-radius:99px;background:var(--f-rest-bg);overflow:hidden}
:is(#pgWiz,#schWiz,#latePts) .prog-bar i{display:block;height:100%;width:25%;border-radius:99px;background:var(--pg-cta);transition:width .35s var(--ease)}
:is(#pgWiz,#schWiz,#latePts) .pane-head{flex:none;padding:22px 36px 20px}
/* Wizard titles are uppercase app-wide - see the note in detail-view.css. This wizard's
   Titles array is already typed in capitals; the transform is what stops that being load
   bearing. Tracking matches #enrollWiz .pane-title, the shipped 27px wizard title. */
:is(#pgWiz,#schWiz,#latePts) .pane-title{font-size:27px;font-weight:800;letter-spacing:-.025em;color:var(--ink-1);margin:0;line-height:1.08;
  text-transform:uppercase}
:is(#pgWiz,#schWiz,#latePts) .pane-sub{font-size:15px;color:var(--ink-3);margin:9px 0 0;font-weight:500;line-height:1.45}
/* DRAFTS (Jul 28 2026) - the resume banner + Discard, same design as the Client intake's
   #clWiz bar, retuned to this wizard's own tokens and 36px pane gutter. Shared by the
   Enroll wizard below via the #enrollWiz rule. */
:is(#pgWiz,#schWiz,#latePts) .wz-draftbar{display:flex;align-items:center;gap:9px;margin:0 36px 4px;padding:9px 14px;border-radius:12px;border:1px solid rgba(78,124,114,.30);background:rgba(78,124,114,.08);font-size:12.5px;color:var(--brand-600)}
:is(#pgWiz,#schWiz,#latePts) .wz-draftbar .ico{flex:none;width:15px;height:15px;color:var(--brand-600);display:inline-flex}
:is(#pgWiz,#schWiz,#latePts) .wz-draftbar .ico svg{width:100%;height:100%}
:is(#pgWiz,#schWiz,#latePts) .wz-drafttx{flex:1;min-width:0;line-height:1.35}
:is(#pgWiz,#schWiz,#latePts) .wz-discard{flex:none;border:0;background:none;padding:4px 6px;font:inherit;font-weight:800;font-size:12px;color:var(--danger);cursor:pointer;border-radius:8px}
:is(#pgWiz,#schWiz,#latePts) .wz-discard:hover{background:rgba(176,70,60,.10);text-decoration:underline}
body.dark :is(#pgWiz,#schWiz,#latePts) .wz-draftbar{border-color:rgba(120,170,158,.30);background:rgba(78,124,114,.16);color:var(--mh-sage-300,#9fc3b8)}
body.dark :is(#pgWiz,#schWiz,#latePts) .wz-draftbar .ico{color:var(--mh-sage-300,#9fc3b8)}
body.dark :is(#pgWiz,#schWiz,#latePts) .wz-discard{color:#e0a892}
body.dark :is(#pgWiz,#schWiz,#latePts) .wz-discard:hover{background:rgba(201,123,90,.16)}

:is(#pgWiz,#schWiz,#latePts) .wz2 .m-body{padding:0 36px 22px}
:is(#pgWiz,#schWiz,#latePts) .wz2 .m-foot{padding:18px 36px;background:var(--bg-canvas);border-top-color:var(--line)}

/* =========================================================
   REVIEW STEP (from mock inline <style>)
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .rvw{display:flex;flex-direction:column;gap:15px}
:is(#pgWiz,#schWiz,#latePts) .rvw-hero{display:flex;align-items:center;gap:14px;padding:16px 18px;border-radius:16px;background:linear-gradient(150deg,var(--brand),var(--brand-700));color:#fff}
:is(#pgWiz,#schWiz,#latePts) .rvw-hero .rvw-ic{width:46px;height:46px;flex:none;border-radius:12px;background:rgba(var(--tg-rgb,255,255,255),calc(.18*var(--tg-k,1)));display:grid;place-items:center}
:is(#pgWiz,#schWiz,#latePts) .rvw-hero .rvw-ic svg{width:22px;height:22px;stroke:#fff;stroke-width:2;fill:none;stroke-linecap:round;stroke-linejoin:round}
:is(#pgWiz,#schWiz,#latePts) .rvw-hero b{font-size:18px;font-weight:800;letter-spacing:-.01em;display:block}
:is(#pgWiz,#schWiz,#latePts) .rvw-hero span{font-size:12.5px;color:rgba(255,255,255,.82);display:block;margin-top:2px}
:is(#pgWiz,#schWiz,#latePts) .rvw-g{border:1px solid var(--line);border-radius:14px;overflow:hidden}
:is(#pgWiz,#schWiz,#latePts) .rvw-g .h{font-size:11.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--brand);padding:11px 16px;background:var(--f-rest-bg);border-bottom:1px solid var(--line)}
:is(#pgWiz,#schWiz,#latePts) .rvw-g .r{display:flex;justify-content:space-between;gap:16px;padding:10px 16px;font-size:14px}
:is(#pgWiz,#schWiz,#latePts) .rvw-g .r+.r{border-top:1px solid var(--line)}
:is(#pgWiz,#schWiz,#latePts) .rvw-g .r .k{color:var(--ink-3);font-weight:600}
:is(#pgWiz,#schWiz,#latePts) .rvw-g .r .v{color:var(--ink-1);font-weight:700;text-align:right}

/* =========================================================
   SUCCESS OVERLAY (from mock inline <style>)
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .m-ok{position:absolute;inset:0;z-index:6;background:rgb(var(--tg-rgb,255,255,255));display:flex;flex-direction:column;align-items:center;justify-content:center;text-align:center;gap:8px;padding:44px;animation:stepIn .32s var(--ease)}
:is(#pgWiz,#schWiz,#latePts) .m-ok h3{font-size:22px;font-weight:800;letter-spacing:-.01em;margin:6px 0 0}
:is(#pgWiz,#schWiz,#latePts) .m-ok p{font-size:14.5px;color:var(--ink-3);margin:0 0 18px;max-width:300px;line-height:1.5}
:is(#pgWiz,#schWiz,#latePts) .m-ok p b{color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .ok-ic{width:76px;height:76px;border-radius:999px;background:var(--brand);color:#fff;display:grid;place-items:center;box-shadow:0 14px 30px -8px var(--brand-glow)}
:is(#pgWiz,#schWiz,#latePts) .ok-ic svg{width:36px;height:36px;stroke:#fff;stroke-width:2.6;fill:none;stroke-linecap:round;stroke-linejoin:round}

:is(#pgWiz,#schWiz,#latePts) a,:is(#pgWiz,#schWiz,#latePts) a:hover{color:var(--brand-600)}

/* =========================================================
   NATIVE TIME INPUT (mock clock field) + MhDatePicker RESKIN
   The frozen MhDatePicker (.dp-field) is themed to match the mock's
   inset cool field so date pickers stay functional and on-brand.
   ========================================================= */
:is(#pgWiz,#schWiz,#latePts) .icf input[type="time"]{color:var(--ink-1);font-weight:500}
:is(#pgWiz,#schWiz,#latePts) .icf input[type="time"]::-webkit-calendar-picker-indicator{filter:grayscale(1) opacity(.5);cursor:pointer}

:is(#pgWiz,#schWiz,#latePts) .mh-dp{width:100%}
:is(#pgWiz,#schWiz,#latePts) .mh-dp .dp-field{display:flex;align-items:center;width:100%;min-height:50px;height:50px;padding:0 15px !important;gap:11px;background:var(--f-rest-bg) !important;
  border:1px solid var(--f-rest-bd) !important;box-shadow:var(--f-rest-sh) !important;border-radius:var(--r-md) !important;
  transition:background var(--t),border-color var(--t),box-shadow var(--t)}
:is(#pgWiz,#schWiz,#latePts) .mh-dp .dp-field:hover{background:var(--f-hover-bg) !important;border-color:var(--f-rest-bd) !important;box-shadow:var(--f-rest-sh) !important}
:is(#pgWiz,#schWiz,#latePts) .mh-dp.open .dp-field,:is(#pgWiz,#schWiz,#latePts) .mh-dp .dp-field:focus,:is(#pgWiz,#schWiz,#latePts) .mh-dp .dp-field:focus-within{background:var(--f-focus-bg) !important;border-color:var(--f-focus-bd) !important;box-shadow:var(--f-focus-sh) !important}
:is(#pgWiz,#schWiz,#latePts) .mh-dp .dpf-ico{width:19px;height:19px;color:var(--ink-3);flex:none}
:is(#pgWiz,#schWiz,#latePts) .mh-dp .dpf-val{flex:1;min-width:0;text-align:left;font-family:var(--font-sans);font-size:15px;font-weight:500;color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .mh-dp .dpf-val.empty{color:var(--ink-4);font-weight:400}
:is(#pgWiz,#schWiz,#latePts) .mh-dp .dpf-chev{flex:none;color:var(--ink-3)}

/* =========================================================
   DARK MODE - driven by the app's OWN switch (body.dark), NOT a wizard toggle.
   The dark tokens are scoped to the RIGHT PANE (and the success overlay) only, so
   the LEFT rail keeps its light tokens: the pine gradient, white rail text and the
   light/white QR card are unaffected. Custom properties inherit, so redefining them
   on .pane recolours every field/heading/footer inside it while the sibling .rail
   still reads the light values from :is(#pgWiz,#schWiz,#latePts). The MhDatePicker popover brings its own
   body.dark styling (frozen component); the QR zoom card stays white by design.
   ========================================================= */
body.dark :is(#pgWiz,#schWiz,#latePts) .pane,
body.dark :is(#pgWiz,#schWiz,#latePts) .m-ok{
  --bg-canvas:#1A232B;
  --ink-1:#EAF0F4; --ink-2:#C2CDD5; --ink-3:#8C9AA5; --ink-4:#5E6E7A;
  --brand-600:#8FBBA5;
  --brand-tint:rgba(126,180,150,.18); --brand-tint-2:rgba(126,180,150,.26);
  --f-rest-bg:#121A20; --f-rest-bd:rgba(180,210,235,.10); --f-rest-sh:inset 0 1px 2px rgba(0,0,0,.4);
  --f-hover-bg:#16202A;
  --f-focus-bg:#222E38; --f-focus-bd:rgba(150,190,225,.28); --f-focus-sh:0 12px 30px rgba(0,0,0,.5);
  --line:rgba(180,210,235,.12);
}
body.dark :is(#pgWiz,#schWiz,#latePts) .m-ok{background:var(--bg-canvas)}
body.dark :is(#pgWiz,#schWiz,#latePts) .pane .stepper{background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)))}
body.dark :is(#pgWiz,#schWiz,#latePts) .pane .stepper:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)))}

/* THE ALWAYS-VISIBLE EXIT (CEO, Jul 29 2026). The backdrop stopped closing this wizard, so
   there has to be a real button - and it has to be reachable on EVERY step, not only step 1
   where Back doubles as Cancel. Sits at the end of the progress row, on the shared cool
   field shell so it reads as chrome rather than an action. */
:is(#pgWiz,#schWiz,#latePts) .pane-top-row .wz-x{margin-left:auto;flex:none;width:40px;height:40px;border-radius:12px;
  display:grid;place-items:center;cursor:pointer;padding:0;
  background:var(--f-rest-bg);border:1px solid var(--f-rest-bd);box-shadow:var(--f-rest-sh);
  color:var(--ink-3);transition:background .2s,color .2s,border-color .2s}
:is(#pgWiz,#schWiz,#latePts) .pane-top-row .wz-x:hover{background:var(--f-focus-bg);border-color:var(--f-focus-bd);color:var(--ink-1)}
:is(#pgWiz,#schWiz,#latePts) .pane-top-row .wz-x:focus-visible{outline:none;border-color:var(--brand);box-shadow:0 0 0 3px var(--brand-tint)}
:is(#pgWiz,#schWiz,#latePts) .pane-top-row .wz-x svg{width:18px;height:18px;display:block}

/* =============================================================================
   #latePts  -  STAFF MANUAL POINTS AFTER A KIOSK REFUSAL (LATE-CHECKIN-01)
   -----------------------------------------------------------------------------
   Everything above already styles this overlay (shell, modal, .field, .icf,
   .ui-btn). Only what is unique to it lives here.
   ============================================================================= */
#latePts .modal.lp2{width:min(560px,100%);animation:pgRise .42s var(--ease)}
#latePts .lp-body{padding:26px 30px 22px;display:flex;flex-direction:column;gap:20px}
/* Who this is about. The name is the largest thing on the card because staff are
   recording a decision ABOUT A PERSON, and the grid behind them has many rows. */
#latePts .lp-who{display:flex;align-items:center;gap:14px}
#latePts .lp-av{width:46px;height:46px;border-radius:99px;flex:none;display:grid;place-items:center;overflow:hidden;
  color:#fff;background:linear-gradient(140deg,var(--brand),var(--brand-700));font-weight:800;font-size:15px}
#latePts .lp-av img{width:100%;height:100%;object-fit:cover}
#latePts .lp-nm{font-size:19px;font-weight:800;color:var(--ink-1);line-height:1.2}
#latePts .lp-sub{font-size:12.5px;color:var(--ink-3);margin-top:2px}
/* Quick picks. They are an ACCELERATOR, not the whole choice - the field stays
   free to type into, because the CEO's rule is any value from 0 to the full day. */
#latePts .lp-chips{display:flex;gap:8px;flex-wrap:wrap}
#latePts .lp-chip{border:1px solid var(--line);background:rgb(var(--tg-rgb,255,255,255));border-radius:99px;padding:6px 14px;
  font:inherit;font-size:12.5px;font-weight:700;color:var(--ink-2);cursor:pointer;transition:background .15s,border-color .15s,color .15s}
#latePts .lp-chip:hover{border-color:var(--brand);color:var(--brand)}
#latePts .lp-chip.on{background:var(--brand);border-color:var(--brand);color:#fff}
#latePts .lp-cap{font-size:12px;color:var(--ink-3)}
/* The children. Shown only when there are any - an empty "no children" block on
   every late check-in would be noise on the common case. */
#latePts .lp-kids{border-top:1px solid var(--line);padding-top:18px;display:flex;flex-direction:column;gap:10px}
#latePts .lp-kids-h{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3)}
#latePts .lp-kid{display:flex;align-items:center;gap:12px;padding:10px 12px;border:1px solid var(--line);
  border-radius:12px;cursor:pointer;background:rgb(var(--tg-rgb,255,255,255));text-align:left;font:inherit;transition:border-color .15s,background .15s}
#latePts .lp-kid:hover{border-color:var(--brand)}
#latePts .lp-kid.on{border-color:var(--brand);background:var(--brand-tint)}
#latePts .lp-kid-box{width:20px;height:20px;flex:none;border-radius:6px;border:1.5px solid var(--line);
  display:grid;place-items:center;color:#fff;background:rgb(var(--tg-rgb,255,255,255))}
#latePts .lp-kid.on .lp-kid-box{background:var(--brand);border-color:var(--brand)}
#latePts .lp-kid-box svg{width:13px;height:13px}
#latePts .lp-kid-nm{font-size:14px;font-weight:700;color:var(--ink-1)}
#latePts .lp-kid-sub{font-size:11.5px;color:var(--ink-3);margin-top:1px}
#latePts .lp-foot{display:flex;justify-content:flex-end;gap:10px;padding:16px 30px 24px;border-top:1px solid var(--line)}
/* Header - the wizard's own head bar is built for a 4-step flow, so this small
   single-question card carries a compact version in the same type and colour. */
#latePts .lp-head{padding:24px 30px 0}
#latePts .lp-kicker{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--brand)}
#latePts .lp-title{margin:6px 0 0;font-size:21px;font-weight:800;color:var(--ink-1);letter-spacing:-.01em}
/* The number field is the shared .icf shell; only the input inside it is local. */
#latePts .lp-body .icf input{width:100%;border:0;background:transparent;outline:none;font:inherit;
  font-size:16px;font-weight:700;color:var(--ink-1);padding:0}


/* ============================================================
   PGWIZ18 - THE + NEW PROGRAM WIZARD JOINS THE FIELD STANDARD.  22 September 2026.

   His instruction: land the standard interface fields and the backgrounds on the Add New Program
   wizard, the way they were landed on the client side.

   SCOPED TO `#pgWiz` ALONE, AND THAT IS NOT TIDINESS. Every rule above this block is written
   `:is(#pgWiz,#schWiz,#latePts)` - THREE wizards share this stylesheet (New Program, New Term and
   Late Points). He named the Program wizard, so the Term and Late-Points wizards must come out of
   this pass untouched. `:is()` takes the specificity of its most specific argument, so
   `:is(#pgWiz,#schWiz,#latePts) .field` and `#pgWiz .field` are BOTH (1,1,0) - equal. These rules
   therefore win on ORDER alone, which is why this block must stay at the END of the file. Move it
   up and it silently stops applying.

   WHY NOT WIDEN THE CLIENT WIZARD'S SELECTOR INSTEAD. The documented way to add a host to the
   wizard standard is to widen `:is(#clWiz,#clMbr)` - that is how Add Family Member was brought on
   - and it appears 701 times in mh-clientwizard.css. It CANNOT be widened to `#pgWiz`: the two
   sheets share 36 class names, including `.step`, `.stepper`, `.icf`, `.selpop`, `.sel-opt`,
   `.dp-field`, `.full`, `.open`, `.on` and `.err`. Both sheets would then paint the same elements
   with load order picking the winner for each, in a flow that creates real programs. Measured
   before deciding, not guessed. So this is a PORT: the kit's structure and its measured values,
   re-scoped - never a second design.

   EVERY NUMBER BELOW WAS READ OFF THE LIVE CLIENT WIZARD with getComputedStyle, not re-picked.
   That is the rule that keeps the two wizards one object, and the trap it avoids is the one that
   shrank every tile on the client record by 2px when a line-height was re-derived instead of
   copied.
   ============================================================ */

/* ---- 1. THE SECTION CARD. Measured: `#clWiz .fsec` is rgba(255,255,255,.4) on a .72 white rim,
        22px radius, 0 22px 54px -26px rgba(30,55,48,.42). That is the SAME recipe as
        `.pd-card.mint` on the detail record - the wizard and the record are cut from one
        material, which is the whole point of the standard. ---- */

/* The capsule head. 56px tall, 13px/18px padding - measured off `.fsec-h`. */
/* The icon bubble: 30px, 10px radius, WHITE on the glass with a pine hairline drawn INSIDE so it
   cannot grow the box. Measured off `.fsec-h .bub`. */
/* The rule between the title and the meter. It is what stops the two reading as one clump. */
/* DONE IS A STATE, NOT A COLOUR CHANGE FOR ITS OWN SAKE - it is the one moment the step tells you
   it is finished, so it goes solid the way a selected segment does. */

/* ---- 2. THE FIELD IS THE TILE. Measured on `#clWiz .fld`: padding 12px 16px 14px 30px,
        radius 16px - character-identical to `.mint-w` on the detail record. An EMPTY field is
        rgba(255,255,255,.4) with a 1px DASHED rgba(30,55,48,.18) rim; a filled one goes solid.
        The 30px of left padding is the dot's lane. ---- */
:is(#pgWiz,#schWiz) .field{
  position:relative;
  display:flex;flex-direction:column;gap:4px;min-width:0;
  padding:12px 16px 14px 30px;border-radius:16px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));
  border:1px solid rgba(255,255,255,.85);border-right-color:var(--tg-edge-r,rgba(255,255,255,.85));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.85));
  box-shadow:0 6px 16px -12px rgba(30,55,48,.35);
  transition:background .18s ease,border-color .18s ease,box-shadow .18s ease;
}
/* THE DOT. 7px, at 14px/15px - measured off `.fld::before`. Hollow while the field is empty,
   solid pine once it holds something: the same two states the record's tiles use, so "filled"
   looks the same everywhere in the app. */
:is(#pgWiz,#schWiz) .field::before{
  content:"";position:absolute;left:14px;top:15px;
  width:7px;height:7px;border-radius:50%;
  background:#2F6B57;box-shadow:0 0 0 3px rgba(47,107,87,.14);
}
:is(#pgWiz,#schWiz) .field.pgw-empty{
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));
  border:1px dashed rgba(30,55,48,.18);
  box-shadow:none;
}
:is(#pgWiz,#schWiz) .field.pgw-empty::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.22)}
:is(#pgWiz,#schWiz) .field:focus-within{
  background:rgb(var(--tg-rgb,255,255,255));
  border:1px solid rgba(47,107,87,.55);
  box-shadow:0 0 0 3px rgba(47,107,87,.13), 0 4px 10px -6px rgba(30,55,48,.16), 0 18px 38px -18px rgba(30,55,48,.3);
}
/* The label is the tile's label: 10px/800/1px tracking, uppercase, muted. Measured. */
:is(#pgWiz,#schWiz) .field>label{
  font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;
  color:#7A8A84;display:flex;align-items:center;gap:6px;
  /* 12.5px is the kit's OWN declared line-height, read off `#clWiz .fld label`, not 1.25
     re-derived from it. Without it the label box came out 15px and every tile measured 71px
     against the kit's 69 - a 2px drift from exactly the mistake the field standard warns about
     under "copy the computed value; do not re-derive it". */
  line-height:12.5px;
}

/* ---- 3. THE WELL INSIDE THE TILE IS REMOVED. A well inside a tile is the "double border"
        defect the field standard names explicitly - `.icf` must never sit inside a Mint tile.
        So `.icf` keeps its JOB (it is the flex row that lays out icon + control + chevron and it
        is what the dropdown positions against) and loses its SURFACE entirely. Nothing about the
        wizard's behaviour moves; only the box it drew disappears. ---- */
:is(#pgWiz,#schWiz) .field .icf{
  min-height:24px;padding:0;gap:9px;
  background:none;border:none;box-shadow:none;border-radius:0;
}
:is(#pgWiz,#schWiz) .field .icf:hover:not(:focus-within),
:is(#pgWiz,#schWiz) .field .icf:focus-within{background:none;border:none;box-shadow:none}
/* The value line takes the tile's own typography - 16px/650, the figure the record's read span
   computes to. COPIED, never re-derived: writing a line-height here instead of taking the one
   the tile already uses is exactly what shrank every tile on the client record by 2px. */
:is(#pgWiz,#schWiz) .field .icf input,
:is(#pgWiz,#schWiz) .field .icf textarea,
:is(#pgWiz,#schWiz) .field .icf .sel-face{
  font-size:16px;font-weight:650;color:#1C2A25;
}
:is(#pgWiz,#schWiz) .field .icf textarea{min-height:92px;line-height:22px;resize:vertical}
/* The leading icon was the well's furniture. Inside a tile the LABEL already says what the field
   is, so a second glyph beside the value is noise - the record's tiles carry none. The chevron
   stays: it is the control's affordance, not decoration. */
:is(#pgWiz,#schWiz) .field .icf > .ic:not(.chev){display:none}
:is(#pgWiz,#schWiz) .field .icf .chev{color:#2F6B57;opacity:.75}

/* ---- 4. THE ERROR STATE follows the tile, not the well. Same danger ink and wash the wizard
        already used; it just paints the tile now that the well has no surface. ---- */
:is(#pgWiz,#schWiz) .field.err{
  background:var(--danger-bg);
  border:1px solid var(--danger);
  box-shadow:none;
}
:is(#pgWiz,#schWiz) .field.err::before{background:var(--danger);box-shadow:0 0 0 3px rgba(192,71,63,.16)}
:is(#pgWiz,#schWiz) .field.err:focus-within{box-shadow:0 0 0 3px rgba(192,71,63,.24)}

/* ---- 5. THE GRID. 11px gap, measured off `.dzgrid` - tighter than the well-based 18/20px,
        because tiles carry their own padding and do not need to be held apart. ---- */
:is(#pgWiz,#schWiz) .fgrid{gap:11px}

/* The switch row and the "next: add a term" note are NOT fields - they are a control and a
   caption - so they stay off the tile and simply get the room the tighter grid took away. */
:is(#pgWiz,#schWiz) .fgrid > .full > .switch-row{margin-top:3px}
:is(#pgWiz,#schWiz) .pgsec-out{margin-top:11px}

/* ---- 6. THE PANE IS THE CANVAS THE CARDS SIT ON. It was a flat panel holding flat wells; with
        the fields on glass cards it has to stop being a surface of its own, exactly as the client
        wizard's `.dzpane` is transparent and lets its sections read as the only objects. ---- */
:is(#pgWiz,#schWiz) .pane-head .pane-title{font-size:21px;font-weight:800;letter-spacing:.42px}
:is(#pgWiz,#schWiz) .pane-head .pane-sub{font-size:13.5px}

/* ---- DARK ---- */
body.dark :is(#pgWiz,#schWiz) .field{
  background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));
  border-color:rgba(180,210,235,.14);
  box-shadow:0 6px 16px -12px rgba(0,0,0,.55);
}
body.dark :is(#pgWiz,#schWiz) .field::before{background:#5FCFA4;box-shadow:0 0 0 3px rgba(95,207,164,.18)}
body.dark :is(#pgWiz,#schWiz) .field.pgw-empty{
  background:rgba(var(--tg-rgb,255,255,255),calc(.03*var(--tg-k,1)));
  border:1px dashed rgba(180,210,235,.2);
  box-shadow:none;
}
body.dark :is(#pgWiz,#schWiz) .field.pgw-empty::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(180,210,235,.3)}
body.dark :is(#pgWiz,#schWiz) .field:focus-within{
  background:rgba(var(--tg-rgb,255,255,255),calc(.1*var(--tg-k,1)));
  border-color:rgba(95,207,164,.5);
  box-shadow:0 0 0 3px rgba(95,207,164,.14);
}
body.dark :is(#pgWiz,#schWiz) .field>label{color:#93A79D}
body.dark :is(#pgWiz,#schWiz) .field .icf input,
body.dark :is(#pgWiz,#schWiz) .field .icf textarea,
body.dark :is(#pgWiz,#schWiz) .field .icf .sel-face{color:#EAF0F4}


/* ============================================================
   PGWIZ18b - THE DROPDOWN, THE TILE HOVER AND THE FOOTER, AS THE CLIENT WIZARD HAS THEM.
   23 September 2026.

   Owner, on PGWIZ18: "check the drop down fields - the list when appearing it's not matching with
   the size of the field, and check the list when it's appearing it must be adjusted below the
   fields, and look what you have done - the menu is in the back ... look back to the Client Wizard
   how you did it."

   MEASURED BEFORE (Type, 1440px): tile 389px wide at 496-885, list 341px at 527-868; list top 368
   against the tile's bottom 388, i.e. it opened ON the tile; and `.pgsec{overflow:hidden}` cut it
   off at the card's edge - only 4 of 17 options were hit-testable, the rest landed on the pane, the
   footer or nothing. THREE causes, and the client wizard had already fixed all three on 18 Sep:
     1. `.icf` was the list's containing block, so "full width" meant the value line;
     2. the section card clipped its own children;
     3. no JS placer, so nothing flipped or clamped the list inside the scrolling body.

   REFERENCE, READ OFF THE LIVE CLIENT WIZARD (Status, #clWiz .dzpane.mf) WITH getComputedStyle:
     tile 389 at 493-882  ->  list 387 at 494-881 (left:0/right:0 inside the tile's 1px border),
     list top = tile bottom + 9 (10px from the padding edge); list #fff, 1px rgba(40,60,80,.16),
     radius 16, padding 8, gap 3, max-height 288, shadow 0 26px 52px -20px rgba(16,40,34,.42),
     0 2px 6px rgba(16,40,34,.06), scrollbar hidden; option 650 15px/22.5px, padding 11px 13px,
     radius 11, #1C2733; the open tile z-index 60; search 650 16px/24px #1C2A25, placeholder
     #98A5AE / 500. Copied - never re-picked.

   STILL `#pgWiz` ONLY, AND STILL AT THE END OF THE FILE - see PGWIZ18 for why both matter.
   ============================================================ */

/* ---- 1. NOTHING CLIPS THE LIST. The card has no child that needs clipping - the head carries its
        own radius - and a clipping card cuts every dropdown in half (the client wizard's rule:
        "NO overflow:hidden ON THE PANEL"). ---- */

/* ---- 2. THE LIST BELONGS TO THE TILE, NOT TO THE VALUE LINE. The row stops being positioned, so
        the TILE (.field, already position:relative) is the containing block and left:0 / right:0 /
        top:100% + gap mean the tile's own width and a real gap below its edge. The face is then
        stretched back over the tile's padding on three sides (never the top - it must not ride up
        over its label), so a click ANYWHERE on the tile opens the list. Values = the client's. ---- */
:is(#pgWiz,#schWiz) .field .icf,
:is(#pgWiz,#schWiz) .field .icf.open{position:static}
:is(#pgWiz,#schWiz) .field .icf.has-sel{margin:0 -16px -14px -30px;padding:0 16px 14px 30px;cursor:pointer}
:is(#pgWiz,#schWiz) .field .icf.has-sel:focus{outline:none}

/* ---- 3. THE OPEN TILE PAINTS ABOVE EVERY SIBLING (the next row, the switch, the note) - the
        client's z-index 60. ---- */
:is(#pgWiz,#schWiz) .field:has(.icf.open){z-index:60}

/* ---- 4. THE LIST - the client wizard's page-1 list, value for value. ---- */
:is(#pgWiz,#schWiz) .field .selpop{
  left:0;right:0;top:calc(100% + 10px);z-index:1000;
  background:rgb(var(--tg-rgb,255,255,255));border:1px solid rgba(40,60,80,.16);border-radius:16px;
  padding:8px;gap:3px;max-height:288px;
  box-shadow:0 26px 52px -20px rgba(16,40,34,.42), 0 2px 6px rgba(16,40,34,.06);
  scrollbar-width:none;-ms-overflow-style:none;
}
:is(#pgWiz,#schWiz) .field .selpop::-webkit-scrollbar{width:0;height:0;display:none}
:is(#pgWiz,#schWiz) .field .selpop.up{top:auto;bottom:calc(100% + 10px)}
:is(#pgWiz,#schWiz) .field .sel-opt{
  font-size:15px;font-weight:650;line-height:1.5;padding:11px 13px;border-radius:11px;color:#1C2733;
}
:is(#pgWiz,#schWiz) .field .sel-opt:hover{background:var(--tg-well,rgb(223,228,234))}
:is(#pgWiz,#schWiz) .field .sel-opt.on{background:rgba(46,74,67,.12);color:#375A50;font-weight:700}
:is(#pgWiz,#schWiz) .field .sel-opt.on::after{color:#375A50}
/* THE KEYBOARD RING (ARROWSEL18) - where the arrows are, never confused with the saved value,
   which keeps its tint and tick. Declared after .on so a ringed selected row shows both. */
:is(#pgWiz,#schWiz) .field .sel-opt.hi{background:var(--tg-well,rgb(223,228,234));box-shadow:inset 0 0 0 2px #2F6B57}
:is(#pgWiz,#schWiz) .field .selpop .cb-empty{padding:13px 14px;font-size:13.5px;font-weight:600;color:var(--ink-3)}

/* ---- 5. THE SEARCH BOX takes the tile's value line exactly, so opening the list does not move a
        pixel of the tile (16px/650/24px - the value line's own figures). ---- */
:is(#pgWiz,#schWiz) .field .icf .sel-search{
  flex:1;min-width:0;padding:0;border:none;background:none;outline:none;
  font-family:var(--font-sans);font-size:16px;font-weight:650;line-height:24px;color:#1C2A25;cursor:text;
}
:is(#pgWiz,#schWiz) .field .icf .sel-search::placeholder{color:#98A5AE;font-weight:500}
:is(#pgWiz,#schWiz) .field .icf .sel-face{line-height:24px}

/* ---- 6. THE TILE HOVER - the household lift the client wizard wears (HHGLASS18): 3px up, the
        tile's two-layer shadow, the fill firms to .85 and a dashed empty rim goes solid. Focus
        lifts the same way and keeps its ring. NEVER a refused tile (it shakes in place). The
        transition sits on the BASE rule so it rises AND settles smoothly. ---- */
:is(#pgWiz,#schWiz) .field{
  transition:transform .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease;
}
:is(#pgWiz,#schWiz) .field:not(.err):hover{
  background:rgba(var(--tg-rgb,255,255,255),.85);border-style:solid;border-color:rgba(255,255,255,.85);
  transform:translateY(-3px);
  box-shadow:0 4px 10px -6px rgba(30,55,48,.16), 0 18px 38px -18px rgba(30,55,48,.30);
}
:is(#pgWiz,#schWiz) .field:not(.err):focus-within{
  background:rgb(var(--tg-rgb,255,255,255));border-style:solid;border-color:rgba(47,107,87,.55);
  transform:translateY(-3px);
  box-shadow:0 0 0 3px rgba(47,107,87,.13), 0 4px 10px -6px rgba(30,55,48,.16), 0 18px 38px -18px rgba(30,55,48,.30);
}

/* ---- 7. THE FOOTER PAIR - THE FOOTER BUTTON STANDARD (HANDOFF 3o-b, FOOTBTN18). Primary = the
        mint gradient (Edit Record / Continue / Create Program); secondary = the glass Close -
        Cancel, Back and Clear Draft ALL wear it (Clear Draft keeps its red ink, .wz-clear).
        Cancel was bare text on the canvas - the one control on the screen with no surface. ---- */
:is(#pgWiz,#schWiz) .m-foot{
  --fb-grad:radial-gradient(120% 55% at 90% 3%, rgba(255,255,255,.18), rgba(255,255,255,0) 42%),
            linear-gradient(162deg, #42856E 0%, #2F6B57 60%, #2A5749 100%);
  --fb-glow:0 4px 12px -2px rgba(47,107,87,.42);
  --fb-glow-hi:0 8px 20px -4px rgba(47,107,87,.5);
  --fb-glass:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));
  --fb-glass-hi:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));
  --fb-rim:rgba(255,255,255,.72);
  --fb-rim-hi:rgba(255,255,255,.85);
  --fb-float:0 3px 8px -5px rgba(30,55,48,.14), 0 16px 34px -18px rgba(30,55,48,.26);
  --fb-lift:0 3px 7px -4px rgba(30,55,48,.18), 0 10px 20px -10px rgba(30,55,48,.26);
  --fb-ink:#375A50;
  --fb-ink-hi:#1C2733;
}
body.dark :is(#pgWiz,#schWiz) .m-foot{
  --fb-grad:radial-gradient(120% 55% at 90% 3%, rgba(255,255,255,.14), rgba(255,255,255,0) 42%),
            linear-gradient(162deg, #3E7A66 0%, #2E5F4E 60%, #274F42 100%);
  --fb-glow:0 4px 12px -2px rgba(0,0,0,.5);
  --fb-glow-hi:0 8px 20px -4px rgba(0,0,0,.6);
  --fb-glass:rgba(255,255,255,.05);
  --fb-glass-hi:rgba(255,255,255,.12);
  --fb-rim:rgba(180,210,235,.14);
  --fb-rim-hi:rgba(180,210,235,.16);
  --fb-float:0 3px 8px -5px rgba(0,0,0,.45), 0 16px 34px -18px rgba(0,0,0,.6);
  --fb-lift:0 3px 7px -4px rgba(0,0,0,.5), 0 10px 20px -10px rgba(0,0,0,.6);
  --fb-ink:#8FBBA5;
  --fb-ink-hi:#EAF0F4;
}
/* the shape, and THE BUTTON HOVER STANDARD (3o): transition on the base rule, never `all` */
:is(#pgWiz,#schWiz) .m-foot .ui-btn{
  position:relative;height:48px;padding:0 22px;border-radius:12px;gap:9px;
  font-size:14.5px;font-weight:700;
  transition:transform .18s ease, box-shadow .18s ease, background-color .18s ease,
             border-color .18s ease, color .18s ease;
}
/* (3o rule 1) the hover region that does not move with the button - no flicker on its bottom edge */
:is(#pgWiz,#schWiz) .m-foot .ui-btn::after{content:"";position:absolute;left:0;right:0;top:-4px;bottom:-4px;border-radius:inherit}
:is(#pgWiz,#schWiz) .m-foot .ui-btn svg{width:18px;height:18px}
:is(#pgWiz,#schWiz) .m-foot .ui-btn.primary{
  background:var(--fb-grad);color:#fff;border:1px solid transparent;box-shadow:var(--fb-glow);
}
:is(#pgWiz,#schWiz) .m-foot .ui-btn.primary:hover:not(:disabled){background:var(--fb-grad);box-shadow:var(--fb-glow-hi)}
:is(#pgWiz,#schWiz) .m-foot .ui-btn.secondary{
  background:var(--fb-glass);color:var(--fb-ink);
  border:1px solid var(--fb-rim);box-shadow:var(--fb-float);
  -webkit-backdrop-filter:blur(24px) saturate(150%);backdrop-filter:blur(24px) saturate(150%);
}
:is(#pgWiz,#schWiz) .m-foot .ui-btn.secondary:hover:not(:disabled){
  background:var(--fb-glass-hi);color:var(--fb-ink-hi);border-color:var(--fb-rim);
  box-shadow:var(--fb-lift), inset 0 0 0 1px var(--fb-rim-hi);
}
/* the lift, one rule for both, so they cannot disagree - and (3o rule 3) never on a disabled one */
:is(#pgWiz,#schWiz) .m-foot .ui-btn:hover:not(:disabled){transform:translateY(-2px)}
:is(#pgWiz,#schWiz) .m-foot .ui-btn.primary:active:not(:disabled),
:is(#pgWiz,#schWiz) .m-foot .ui-btn.secondary:active:not(:disabled){
  transform:translateY(0);
  box-shadow:0 2px 5px -3px rgba(30,55,48,.22), inset 0 0 0 1px rgba(255,255,255,.7);
}
:is(#pgWiz,#schWiz) .m-foot .ui-btn:disabled,
:is(#pgWiz,#schWiz) .m-foot .ui-btn:disabled:hover,
:is(#pgWiz,#schWiz) .m-foot .ui-btn:disabled:active{transform:none;cursor:default}
@media (prefers-reduced-motion: reduce){
  :is(#pgWiz,#schWiz) .field:not(.err):hover,
  :is(#pgWiz,#schWiz) .field:not(.err):focus-within,
  :is(#pgWiz,#schWiz) .m-foot .ui-btn:hover:not(:disabled){transform:none}
}

/* ---- DARK - the client wizard's own dark tokens (mh-clientwizard.css, body.dark :is(#clWiz,#clMbr)),
        copied value for value: list = --f-focus-bg #222E38 on --f-focus-bd; hover and ring ground =
        --f-rest-bg #121A20; selected = --brand-tint / --brand-600; ink = --ink-1; placeholder
        = --mt-un. ---- */
body.dark :is(#pgWiz,#schWiz) .field .selpop{
  background:#222E38;border-color:rgba(150,190,225,.28);
  box-shadow:0 26px 52px -20px rgba(0,0,0,.75), 0 2px 6px rgba(0,0,0,.4);
}
body.dark :is(#pgWiz,#schWiz) .field .sel-opt{color:#EAF0F4}
body.dark :is(#pgWiz,#schWiz) .field .sel-opt:hover{background:#121A20}
body.dark :is(#pgWiz,#schWiz) .field .sel-opt.on{background:rgba(143,187,165,.18);color:#8FBBA5}
body.dark :is(#pgWiz,#schWiz) .field .sel-opt.on::after{color:#8FBBA5}
body.dark :is(#pgWiz,#schWiz) .field .sel-opt.hi{background:#121A20;box-shadow:inset 0 0 0 2px #8FBBA5}
body.dark :is(#pgWiz,#schWiz) .field .icf .sel-search{color:#EAF0F4}
body.dark :is(#pgWiz,#schWiz) .field .icf .sel-search::placeholder{color:#6E7E88}
body.dark :is(#pgWiz,#schWiz) .field:not(.err):hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.10*var(--tg-k,1)));border-color:rgba(180,210,235,.14);
  box-shadow:0 4px 10px -6px rgba(0,0,0,.4), 0 18px 38px -18px rgba(0,0,0,.55);
}
body.dark :is(#pgWiz,#schWiz) .field:not(.err):focus-within{
  background:rgba(var(--tg-rgb,255,255,255),calc(.13*var(--tg-k,1)));border-color:rgba(143,187,165,.55);
  box-shadow:0 0 0 3px rgba(143,187,165,.16), 0 4px 10px -6px rgba(0,0,0,.4), 0 18px 38px -18px rgba(0,0,0,.55);
}


/* ============================================================
   PGREV18 - STEP 3 (REVIEW & CONFIRM) WEARS THE CLIENT WIZARD'S STEP 4.  23 September 2026.

   Owner: "change the step 3 too same as our new standard interface designs, find it how we are
   doing it." How we do it = NewClientWizard step 4 (STD18 + P4ORDER18, mh-clientwizard.css): each
   group is a GLASS PANEL, its head the household's WHITE CAPSULE with a mini glass "Edit", and every
   value a TILE - solid with a pine dot when filled, dashed with a hollow dot when "Not set" - lifting
   3px on hover. One column, the panel's full width, 16px apart.

   Before: flat bordered boxes, a grey #DFE4EA header strip, label-left / value-right rows, a hyphen
   for an empty value, and the note on the recessed #DFE4EA field ground - the same flat-fill-on-glass
   defect the toolbar sweep chased across twelve pages.

   Every value is COPIED from mh-clientwizard.css (the .rev-card / .rh / .re / .rb / .rev-item rules,
   the --mt-* tile tokens and the HHGLASS18 panel + lift), light and dark - not re-picked. Class
   names are pgr-* (grepped app-wide: unused), `#pgWiz` only, END of file.
   ============================================================ */
:is(#pgWiz,#schWiz) .rvw{gap:16px}

/* the card - the household glass panel */
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-card{
  padding:12px;border-radius:22px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.40*var(--tg-k,1)));border:1px solid rgba(255,255,255,.72);border-right-color:var(--tg-edge-r,rgba(255,255,255,.72));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.72));
  box-shadow:0 22px 54px -26px rgba(30,55,48,.42);
}
/* the head - the white capsule */
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-h{
  display:flex;align-items:center;justify-content:space-between;gap:12px;
  padding:10px 12px 10px 16px;border-radius:14px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));border:1px solid rgba(255,255,255,.85);border-right-color:var(--tg-edge-r,rgba(255,255,255,.85));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.85));
  box-shadow:0 6px 16px -12px rgba(30,55,48,.35);
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-t{font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#1C2A25}
/* "Edit" is a secondary action - the standard's glass button in miniature, with the 3o hit area */
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e{
  position:relative;padding:5px 12px;border-radius:10px;font-family:var(--font-sans);
  font-size:12px;font-weight:700;cursor:pointer;
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));border:1px solid rgba(255,255,255,.72);border-right-color:var(--tg-edge-r,rgba(255,255,255,.72));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.72));color:#375A50;
  box-shadow:0 3px 8px -5px rgba(30,55,48,.14),0 10px 20px -14px rgba(30,55,48,.22);
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease;
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e::after{content:"";position:absolute;left:0;right:0;top:-4px;bottom:-4px;border-radius:inherit}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));color:#1C2733;transform:translateY(-2px);
  box-shadow:0 3px 7px -4px rgba(30,55,48,.18),0 10px 20px -10px rgba(30,55,48,.26),inset 0 0 0 1px rgba(255,255,255,.85);
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e:focus-visible{outline:2px solid #2F6B57;outline-offset:3px}

/* the tiles - two columns, a wide value (the description) spans */
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-b{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:11px 0 0}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i{
  position:relative;min-width:0;padding:12px 16px 13px 30px;border-radius:16px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));border:1px solid rgba(255,255,255,.85);border-right-color:var(--tg-edge-r,rgba(255,255,255,.85));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.85));
  box-shadow:0 6px 16px -12px rgba(30,55,48,.35);
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease;
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.wide{grid-column:1 / -1}
/* The step 1-2 field tiles (PGWIZ18) carried the SAME 1.0px: dot centre below the label's text middle on
   all four tiles of step 1, measured with a Range rect as DOTLINE18 does. 14px reads 0.0 on all four. */
:is(#pgWiz,#schWiz) .field::before{top:14px}
/* DOTLINE: top 14px, MEASURED here - at the client's 15px every dot sat 1.0px below its title's middle
   (Range rect of the label text: middle 18.5px from the tile top; 15px put the dot's at 19.5). At 14px all
   seven measure 0.0. Same rule as DOTLINE18, measured on this host rather than copied blind. */
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i::before{
  content:"";position:absolute;left:14px;top:14px;width:7px;height:7px;border-radius:50%;
  background:#2F6B57;box-shadow:0 0 0 3px rgba(47,107,87,.16);
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.none{background:rgba(var(--tg-rgb,255,255,255),calc(.40*var(--tg-k,1)));border-style:dashed;border-color:rgba(30,55,48,.18);box-shadow:none}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.none::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.22)}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i:hover{
  background:rgba(var(--tg-rgb,255,255,255),.85);border-style:solid;border-color:rgba(255,255,255,.85);transform:translateY(-3px);
  box-shadow:0 4px 10px -6px rgba(30,55,48,.16), 0 18px 38px -18px rgba(30,55,48,.30);
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-l{font-size:10px;font-weight:800;letter-spacing:.1em;line-height:1.25;text-transform:uppercase;color:#7A8A84;margin-bottom:4px}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-v{font-size:15px;font-weight:650;line-height:1.35;color:#1C2A25;overflow-wrap:anywhere}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.wide .pgr-v{white-space:pre-wrap}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.none .pgr-v{color:#9CA8A3;font-weight:500}

/* the note ("This program will have no sessions yet", and step 2's "Next: add ... first term") is a
   TILE on the glass, not the recessed #DFE4EA field ground - no dot: it is information, not a value */
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gc-default-note{
  padding:14px 16px;border-radius:16px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));border:1px solid rgba(255,255,255,.85);border-right-color:var(--tg-edge-r,rgba(255,255,255,.85));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.85));
  box-shadow:0 6px 16px -12px rgba(30,55,48,.35);
}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gcd-h{font-size:13px;font-weight:800;color:#1C2A25;margin-bottom:3px}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gcd-p{font-size:12.5px;line-height:1.5;color:#7A8A84}
:is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gcd-p b{color:#1C2A25}

@media (prefers-reduced-motion: reduce){
  :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i:hover, :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e:hover{transform:none}
}

/* ---- DARK - the client wizard's own dark values (--acc-* / --mt-* dark blocks, .re dark) ---- */
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-card{background:rgba(var(--tg-rgb,255,255,255),calc(.035*var(--tg-k,1)));border-color:rgba(180,210,235,.12);box-shadow:0 10px 24px -20px rgba(0,0,0,.7)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-h{background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));border-color:rgba(180,210,235,.14);box-shadow:0 6px 16px -12px rgba(0,0,0,.55)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-t{color:#EAF0F4}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e{background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.14);color:#8FBBA5}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-e:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i{background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));border-color:rgba(180,210,235,.14);box-shadow:0 6px 16px -12px rgba(0,0,0,.55)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i::before{background:#5FCFA4;box-shadow:0 0 0 3px rgba(95,207,164,.18)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.none{background:rgba(var(--tg-rgb,255,255,255),calc(.025*var(--tg-k,1)));border-color:rgba(180,210,235,.16);box-shadow:none}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.none::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(180,210,235,.30)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.10*var(--tg-k,1)));border-color:rgba(180,210,235,.14);box-shadow:0 4px 10px -6px rgba(0,0,0,.4),0 18px 38px -18px rgba(0,0,0,.55)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-l{color:#8C9AA5}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-v{color:#EAF0F4}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .pgr-i.none .pgr-v{color:#6E7E88}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gc-default-note{background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));border-color:rgba(180,210,235,.14);box-shadow:0 6px 16px -12px rgba(0,0,0,.55)}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gcd-h,
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gcd-p b{color:#EAF0F4}
body.dark :is(#pgWiz,#schWiz,:is(#subWiz,#volWiz)) .gcd-p{color:#8C9AA5}

/* ============================================================
   PGBG18 - THE WINDOW AND ITS BACKGROUNDS MATCH THE CLIENT WIZARD.  23 September 2026.

   Owner: "check the background of the Client Wizard - they are matching or not?"
   Measured both live with getComputedStyle (1440x900, light + dark):
     MATCHED ALREADY  body canvas + footer fill (rgb 225,230,235 light / 26,35,43 dark - the theme
                      token), and the rail gradient (identical, 165deg pine + sheen).
     DID NOT MATCH    backdrop  client rgba(33,42,38,.5) green-grey | program rgba(28,39,51,.5) blue-grey
                      frame     client radius 26, 1px rgba(255,255,255,.6), 0 30px 80px rgba(33,58,51,.26),
                                max height 900 | program radius 24, grey hairline, two blue-grey shadows, 884
                      footer    client rule #D9DFE7 (dark rgb 51,64,58), 18/34/24 = 91px tall |
                                program rgba(40,60,80,.08), 18/36 = 85px
                      rail edge client rgba(255,255,255,.08) | program the grey --line
   Every value below is the client's, copied. The footer keeps its 36px SIDES on purpose: they line
   the buttons up with this wizard's own 36px content inset - only the bottom (24px) is the client's.
   `#pgWiz` only (New Term and Late Points share this file and keep their own window). END of file.
   ============================================================ */
:is(#pgWiz,#schWiz){background:rgba(33,42,38,.5)}
:is(#pgWiz,#schWiz) .modal.wz2{
  height:min(calc(92 * var(--mh-vh)),900px);
  border-radius:26px;border:1px solid rgba(255,255,255,.6);
  box-shadow:0 30px 80px rgba(33,58,51,.26);
}
:is(#pgWiz,#schWiz) .wz2 .rail{border-right-color:rgba(255,255,255,.08)}
:is(#pgWiz,#schWiz) .wz2 .m-foot{padding:18px 36px 24px;border-top-color:#D9DFE7}
body.dark :is(#pgWiz,#schWiz) .modal.wz2{background:rgb(34,43,39)}
body.dark :is(#pgWiz,#schWiz) .wz2 .m-foot{border-top-color:rgb(51,64,58)}

/* ============================================================
   TERMWIZ18 - THE + NEW TERM WIZARD JOINS THE WIZARD STANDARD.  24 September 2026.

   Owner: "deploy all PROGRAM TAB ... follow our new standard roles everywhere". The four blocks
   above (PGWIZ18 / PGWIZ18b / PGREV18 / PGBG18) were WIDENED from `#pgWiz` to
   `:is(#pgWiz,#schWiz)` - one recipe, two wizards (playbook 15f). The two wizards already shared
   every class name, their base rules were already written `:is(#pgWiz,#schWiz,#latePts)`, and
   `:is()` keeps (1,x,x), so + New Program did not move a pixel. Late Points (#latePts) is NOT in
   the list - it is not a stepped wizard and keeps its own sheet.

   What follows is only what the Term wizard has and the Program wizard does not, each put on an
   object the standard already has:
     date field    = the tile's value line (EWIZ18 section 2 / the client's .mf .dp rules)
     time field    = the tile's value line, the native clock glyph kept as the control's affordance
     day picker    = the record's tab row (PGLIST18's Schedule filter): glass buttons, mint on
     number        = the value line + the - / + she asked for (Feedback #13/#14) as mini glass
     hint / warn   = the tile's caption line; notes = tiles (PGREV18's note), amber when careful
   `#schWiz` ONLY, END of file.
   ============================================================ */

/* ---- 1. the refusal on a tile outranks the old well's error paint ---- */
#schWiz .field.err .icf,
#schWiz .field.err .icf:hover,
#schWiz .field.err .icf:hover:not(:focus-within),
#schWiz .field.err .icf:focus-within{background:none;border:none;box-shadow:none}
#schWiz .field .msg.err{margin:6px 0 0}
#schWiz .field.err .dow{outline:none;background:none}

/* ---- 2. THE DATE FIELD IS THE VALUE LINE. The base sheet paints `.mh-dp .dp-field` as a 50px well
        with !important, so the strip is !important at a higher weight. ---- */
#schWiz .field .mh-dp .dp-field,
#schWiz .field .mh-dp .dp-field:hover,
#schWiz .field .mh-dp.open .dp-field,
#schWiz .field .mh-dp .dp-field:focus,
#schWiz .field .mh-dp .dp-field:focus-within{
  min-height:0 !important;height:auto !important;padding:0 !important;gap:8px;
  background:none !important;border:0 !important;box-shadow:none !important;border-radius:0 !important;
}
#schWiz .field .mh-dp .dpf-ico{display:none}
#schWiz .field .mh-dp .dpf-val{font-size:16px;font-weight:650;line-height:24px;color:#1C2A25}
#schWiz .field .mh-dp .dpf-val.empty{color:#9CA8A3;font-weight:500}
#schWiz .field .mh-dp .dpf-chev{color:#2F6B57;opacity:.75}
#schWiz .field.err .mh-dp .dp-field{background:none !important;border:0 !important;box-shadow:none !important}

/* ---- 3. THE TIME FIELD - 16px/650/24px like every value line; the native clock is the affordance ---- */
#schWiz .field .icf input[type="time"]{height:24px;line-height:24px;padding:0;color:#1C2A25;font-variant-numeric:tabular-nums}
#schWiz .field .icf input[type="time"]::-webkit-calendar-picker-indicator{filter:none;opacity:.55;cursor:pointer}

/* ---- 4. THE DAY PICKER - the tab row's glass buttons inside the tile; the chosen days wear the
        mint gradient and its glow, the rest firm and lift 2px on hover. ---- */
#schWiz .field .dow{gap:6px;margin-top:5px}
#schWiz .field .dow button{
  height:40px;border-radius:11px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.5*var(--tg-k,1)));border:1px solid rgba(255,255,255,.85);border-right-color:var(--tg-edge-r,rgba(255,255,255,.85));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.85));
  box-shadow:0 3px 8px -5px rgba(30,55,48,.14),0 10px 20px -14px rgba(30,55,48,.22);
  font-size:12.5px;font-weight:800;letter-spacing:.045em;text-transform:uppercase;color:#677579;
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,color .18s ease;
}
#schWiz .field .dow button:not(.on):hover{
  background:rgb(var(--tg-rgb,255,255,255));color:#1C2733;transform:translateY(-2px);
  box-shadow:0 3px 7px -4px rgba(30,55,48,.18),0 10px 20px -10px rgba(30,55,48,.26);
}
#schWiz .field .dow button.on{
  background:radial-gradient(120% 55% at 90% 3%, rgba(var(--tg-rgb,255,255,255),calc(.18*var(--tg-k,1))), rgba(255,255,255,0) 42%),
             linear-gradient(162deg,#42856E 0%,#2F6B57 60%,#2A5749 100%);
  border-color:transparent;color:#fff;box-shadow:0 4px 12px -2px rgba(47,107,87,.42);
}
#schWiz .field .dow button.on:hover{transform:translateY(-2px);box-shadow:0 8px 20px -4px rgba(47,107,87,.5)}
#schWiz .field .dow button:focus-visible{outline:2px solid #2F6B57;outline-offset:2px}

/* ---- 5. THE NUMBER - the value on the line, the two steppers as mini glass at its right edge.
        26px controls with -1px margins keep the line box at 24px, so the tile stays 69px. ---- */
#schWiz .field.tw-num .icf{gap:8px}
#schWiz .field.tw-num .icf .num{flex:1;min-width:0;text-align:left;font-variant-numeric:tabular-nums}
#schWiz .field.tw-num .stepper{
  width:26px;height:26px;margin:-1px 0;border-radius:9px;
  background:linear-gradient(180deg,rgba(var(--tg-rgb,255,255,255),.95) 0%,rgba(var(--tg-rgb,255,255,255),calc(.6*var(--tg-k,1))) 100%);
  border:1px solid rgba(47,107,87,.26);color:#2F6B57;font-size:16px;font-weight:700;
  box-shadow:inset 0 1px 0 #fff,0 6px 16px -10px rgba(30,55,48,.32);
  transition:transform .18s ease,background .18s ease,color .18s ease;
}
#schWiz .field.tw-num .stepper:hover{background:#2F6B57;color:#fff;border-color:#2F6B57;transform:translateY(-1px)}
#schWiz .field.tw-num .stepper:focus-visible{outline:2px solid #2F6B57;outline-offset:2px}

/* ---- 6. HINTS AND WARNINGS are the tile's caption line; a warning note is an AMBER TILE ---- */
#schWiz .field .fhint{font-size:11.5px;line-height:1.4;color:#7A8A84;margin-top:3px}
#schWiz .field .fwarn{margin-top:3px}
#schWiz .tw-note,
#schWiz .step-note{
  display:flex;align-items:flex-start;gap:9px;margin:14px 0 0;padding:12px 16px;border-radius:16px;
  background:rgba(216,155,61,.12);border:1px solid rgba(216,155,61,.38);color:#7A5213;
  font-size:12.5px;font-weight:600;line-height:1.45;
  box-shadow:0 6px 16px -12px rgba(30,55,48,.3);
}
#schWiz .fgrid > .step-note{margin:0}
#schWiz .step-note b{color:#5A3D0E}

/* ---- 7. THE ERROR BANNER - the record's .mint-err, not the pink box ---- */
#schWiz .tw-err{
  display:flex;align-items:center;gap:9px;margin:0 0 14px;padding:11px 14px;border-radius:14px;
  background:var(--danger-bg);border:1px solid rgba(176,70,60,.35);color:var(--danger-ink,#8A2F28);
  font-size:13.5px;font-weight:650;
}
#schWiz .tw-err svg{width:16px;height:16px;flex:none}

/* ---- 8. the switch row sits in the card like + New Program's ---- */
#schWiz .ecs-secg .fgrid > .full > .switch-row{margin-top:0}

@media (prefers-reduced-motion: reduce){
  #schWiz .field .dow button:hover,
  #schWiz .field.tw-num .stepper:hover{transform:none}
}

/* ---- DARK ---- */
body.dark #schWiz .field .mh-dp .dpf-val{color:#EAF0F4}
body.dark #schWiz .field .mh-dp .dpf-val.empty{color:#6E7E88}
body.dark #schWiz .field .icf input[type="time"]{color:#EAF0F4;color-scheme:dark}
body.dark #schWiz .field .dow button{background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.14);color:#8C9AA5;box-shadow:none}
body.dark #schWiz .field .dow button:not(.on):hover{background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4}
body.dark #schWiz .field .dow button.on{
  background:radial-gradient(120% 55% at 90% 3%, rgba(var(--tg-rgb,255,255,255),calc(.14*var(--tg-k,1))), rgba(255,255,255,0) 42%),
             linear-gradient(162deg,#3E7A66 0%,#2E5F4E 60%,#274F42 100%);color:#fff;
}
body.dark #schWiz .field.tw-num .stepper{background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));border-color:rgba(180,210,235,.18);color:#8FBBA5;box-shadow:none}
body.dark #schWiz .field.tw-num .stepper:hover{background:#3E7A66;color:#fff}
body.dark #schWiz .field .fhint{color:#8C9AA5}
body.dark #schWiz .tw-note,
body.dark #schWiz .step-note{background:rgba(216,155,61,.12);border-color:rgba(216,155,61,.3);color:#F0C27B}
body.dark #schWiz .step-note b{color:#F5D39E}
