/* ============================================================
   CLIENT DETAIL - the Client-only surfaces inside the app-wide DetailShell.

   Everything the shell already owns (rail, tab pill, footer, overflow menu,
   cards, the .field / .icf kit, dropdowns, dates, the required / error design)
   lives in detail-view.css and is NOT repeated here. This sheet is only what is
   genuinely Client's: the rail furniture the shell hands back through
   RailExtras, the expiry KPI cards, the document grid and its modal, the case
   notes, the movement table.

   EVERY selector is scoped `#mhDetail` AND prefixed `.cl-`, so it can neither
   leak out of the shell nor collide with Student Detail's `.sd-` vocabulary
   inside it. The two hosts share one id.

   Tokens are the shell's (--ink-*, --brand*, --line, --f-*, --danger*, --r-*,
   --t). Nothing hard-codes a colour that dark mode needs to change.
   ============================================================ */

/* ============================================================
   THE MINT GLASS TOKENS, AND THE HOST CLASS THAT GATES THEM.  7 Sep 2026.

   `.mint-host` is passed by ClientDetailOverlay through DetailShell's StageClass
   hook - the same hook ProfileOverlay uses for `.mp-host`. It exists because
   `#mhDetail` is the SHARED shell id: all six DetailShell hosts render inside it,
   so a rule written on `#mhDetail .pd-tabs` would restyle Student, Program,
   Subsidy, ChildCare and My Profile at the same moment, unannounced. That is the
   shared-component blast radius, and it is exactly the trap the whole Mint pass
   avoided by never redefining `--brand-tint`. The tab row is chrome the shell
   owns, so it needs a gate of its own; these three lines are that gate.

   ONE VALUE, ONE HOME. The glass recipe was about to be written out twice - once
   on the tab row, once on the expiry banner - which is the same trap that made
   the orange severity silent on 5 Sep and cost nine edits for one hover. Named
   here, used in both places, and `.pd-card.mint` keeps its own literals only
   because those are the mock's approved colours and are deliberately frozen.
   ============================================================ */
#mhDetail.mint-host,
#hhDetail.mint-host,
#view-settings.mint-host,
#cnPop.mint-host,
#view-help.mint-host {
  --mint-glass:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));
  --mint-rim:rgba(255,255,255,.72);
  --mint-blur:blur(24px) saturate(150%);
  /* TWO LAYERS, NOT ONE. A tab row is ~1050px wide and ~56px tall, and the 5 Sep
     lesson was learned on exactly that geometry: a single wide, shallow shadow has
     no room to fade and draws a straight-edged BAR under the element. Tight contact
     layer + wide soft layer, both at low opacity because they stack. Same shape as
     --mint-lift, softer, because this one is at rest and never lifts. */
  --mint-float:0 3px 8px -5px rgba(30,55,48,.14), 0 16px 34px -18px rgba(30,55,48,.26);

  /* THE SAME LIFT AS A FIELD TILE, RE-PITCHED FOR A SHALLOW BOX.  7 Sep 2026.

     His words: "apply the effect of the fields of the details KPI cards on the TABS
     too ... the mouse hover effect when mouse hovering the fields and not set it's
     coming up so I need same mouse hover effect style there."

     `--mint-lift` itself could not be reused verbatim, and the reason is the 5 Sep
     lesson, not taste: its wide layer is `0 18px 38px -18px`, which reaches ~19px
     BELOW the element. The tab row is an `overflow:auto` box, AN OVERFLOW CONTAINER
     CLIPS ITS OWN CHILDREN, and clearing 19px + the lift would have meant ~21px of
     bottom padding - a 72px tab row where a 53px one used to be. Growing his header
     by 19px to fit a shadow is the tail wagging the dog.

     So the SHAPE is kept exactly - two layers, tight contact plus wide soft, which is
     the fix for the "shadow looks rectengle" geometry - and the reach is halved. The
     row is padded to clear it: measured, the widest layer now falls ~10px below and
     the -2px lift needs 2px above, so 7px top / 13px bottom. The bar goes 53 -> 63px.
     That is the honest cost of the effect and it is the smallest one that does not clip. */
  --mint-lift-sm:0 3px 7px -4px rgba(30,55,48,.18), 0 10px 20px -10px rgba(30,55,48,.26);

  /* THE MATTHEW HOUSE GRADIENT, ONE HOME.  7 Sep 2026.
     The selected tab and the primary button are the same statement - "this is the
     live one" - so they are the same paint. Written out twice it would drift the
     first time either is tuned, which is the trap that made the orange silent on
     5 Sep and cost nine edits for one hover. A custom property holds the whole
     multi-layer background list, sheen included, so both sites read one line. */
  --mint-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%);
  --mint-grad-glow:0 4px 12px -2px rgba(47,107,87,.42);
  --mint-grad-glow-hi:0 8px 20px -4px rgba(47,107,87,.5);
}
body.dark #mhDetail.mint-host,
body.dark #hhDetail.mint-host,
body.dark #view-settings.mint-host,
body.dark #view-help.mint-host {
  --mint-glass:rgba(255,255,255,.05);
  --mint-rim:rgba(180,210,235,.14);
  --mint-float:0 3px 8px -5px rgba(0,0,0,.45), 0 16px 34px -18px rgba(0,0,0,.6);
  --mint-lift-sm:0 3px 7px -4px rgba(0,0,0,.5), 0 10px 20px -10px rgba(0,0,0,.6);
  --mint-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%);
  --mint-grad-glow:0 4px 12px -2px rgba(0,0,0,.5);
  --mint-grad-glow-hi:0 8px 20px -4px rgba(0,0,0,.6);
}

/* ============================================================
   THE TAB ROW ON THE MINT MATERIAL.  7 September 2026.

   His words: "change the menu taps background same as the KPI detail KPI cards
   background glassy look but keep the effects that will looks great".

   IT WAS THE SAME FLAT #DFE4EA as the expiry banner - `--f-rest-bg`, the recessed
   field ground. Correct for an input well; wrong for a floating control bar sitting
   on the canvas beside eight frosted cards. Now glass with the white rim, so the row
   reads as the same pane of material the cards are cut from.

   "KEEP THE EFFECTS" IS THE OPERATIVE HALF, so nothing about the behaviour moved:
   the active tab is still solid `--brand` pine with its glow, the count pill still
   sits inside it, the hover still fills, the scroll variant still scrolls. Only the
   two greys underneath them changed - and they had to, for the reason below.

   THE SLATE WASHES WOULD HAVE GONE GREY ON GLASS. `rgba(40,60,80,.05)` on hover and
   `rgba(40,60,80,.1)` on the count pill are the same dark-slate-at-low-alpha shape as
   `--brand-tint`: over an opaque panel they read as a soft shade, over frosted glass
   they have no chroma and render as a smudge. Hover is now a WHITE lift (glass gets
   more solid as you approach it, which is what every other Mint surface does) and the
   count pill takes the pine tint the small chrome was standardised on 6 Sep.

   NOT A DROP SHADOW ON THE INACTIVE TABS. `.pd-tabs` carries `overflow-x:auto`, and
   an overflow container clips its own children - the same thing that made the Key
   Dates hover "look broken" on 5 Sep. The active tab's glow lives inside that box,
   so the row's own float is on the ROW, where nothing clips it.
   ============================================================ */
#mhDetail.mint-host .pd-tabs{
  background:var(--mint-glass);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);
  border-radius:18px;
  box-shadow:var(--mint-float);
  /* ROOM FOR THE LIFT. See --mint-lift-sm above: this box clips its own children,
     so the hover shadow only exists if the padding pays for it. */
  padding:7px 6px 13px;
}

/* ============================================================
   ⭐ THE MINT BUTTON STANDARD.  7 September 2026. HIS INSTRUCTION:
   "note this button behavior and effects in any mock that we will go we will apply
   same thing, and make and call it standard roles for button behavior."

   SO THIS BLOCK IS THE RULE, NOT AN IMPLEMENTATION. Every button on a Mint surface
   obeys it, and every host we deploy to next copies it from here. The prose lives in
   `_handoff/MATTHEW_HOUSE_FIELD_STANDARD.md` under THE MINT BUTTON STANDARD.

   THE FIVE STATES:
     REST      the surface's own material - glass for chrome, --mint-grad for primary
     HOVER     IT COMES UP. -2px + --mint-lift-sm + the material FIRMS + white hairline
     PRESS     it settles back to 0 and drops to the contact layer. Press = arrival
     CURRENT   --mint-grad, and NO LIFT - you are already there, so it cannot rise
     DISABLED  no lift, no shadow, no hairline. A dead control must not answer a hover

   WHY THE HOVER IS A LIFT AND NOT A COLOUR CHANGE: it is the same sentence the field
   tiles speak, and he asked for exactly that - "the mouse hover effect when mouse
   hovering the fields and not set it's coming up so I need same mouse hover effect
   style there". One vocabulary across tiles, rows, tabs and buttons.

   TWO RULES THAT ARE NOT OPTIONAL, both learned the hard way:
   1. THE TRANSITION GOES ON THE BASE RULE, NEVER ONLY ON :hover - otherwise the
      control rises smoothly and SNAPS back, which reads as a stutter, not a lift.
   2. A LIFT NEEDS ROOM. An overflow container clips its own children, so before
      adding this to any new host, MEASURE the space between the control and its
      clipping ancestor. The tab row needed 7px/13px of padding; the footer already
      had 18px and needed nothing. Do not assume either way.
   ============================================================ */
#mhDetail.mint-host .pd-tabs button,
#mhDetail.mint-host .dv-more-btn,
#mhDetail.mint-host .dv-close-btn,
#mhDetail.mint-host .dv-mi,
#mhDetail.mint-host .ui-btn.primary,
#cnPop.mint-host .ui-btn.primary{
  transition:transform .18s ease,box-shadow .18s ease,background var(--t),
             border-color var(--t),color var(--t);
}

/* HOVER - the glass firms up and the control comes up. */
#mhDetail.mint-host .pd-tabs button:not([aria-selected="true"]):hover,
#mhDetail.mint-host .dv-more-btn:hover,
#mhDetail.mint-host .dv-close-btn:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));color:var(--ink-1);
  transform:translateY(-2px);
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(255,255,255,.85);
}
/* A MENU ROW IS A BUTTON, SO IT OBEYS THE SAME STANDARD - his ask: "each of them must
   comes up". It firms to .95 rather than .72 because the MENU is already .78: a row that
   only went to .82 would lift with almost no change of material, and the rise would read
   as a wobble rather than a lift. The state has to be legible against ITS OWN ground,
   not against the canvas - that is the general rule when this reaches a new host. */
#mhDetail.mint-host .dv-mi:not(:disabled):hover{
  background:rgba(var(--tg-rgb,255,255,255),.95);color:var(--ink-1);
  transform:translateY(-2px);
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(255,255,255,.9);
}
#mhDetail.mint-host .dv-mi.danger:not(:disabled):hover{
  background:var(--danger-bg);color:var(--danger-ink);
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(255,255,255,.5);
}
#mhDetail.mint-host .pd-tabs button:hover .n{background:rgba(47,107,87,.14);color:var(--brand-600)}

/* AN OPTION IN A TILE'S DROPDOWN IS A MENU ROW, SO IT TAKES THE SAME LIFT.  7 September 2026.

   His words: "apply the mouse hover effect too that you did it on (...) menu on the client detail
   mock". He is asking for the rule this block already states - "A MENU ROW IS A BUTTON, SO IT
   OBEYS THE SAME STANDARD" - to reach the one menu that had been left out of it. An option row in
   a `.selpop` is exactly the same thing as a row in the overflow menu: a list of choices you
   point at and press.

   BOTH HOSTS, ONE RULE. Applying it only to the household would make the same picker behave
   differently on the client record, which is the confusion he called out on the subsidy card.

   SCOPED TO `.mint-pop`, NOT TO `.selpop`. The plain `.selpop` is the app-wide list used by the
   New Client wizard, enrolment, the case-note wizards, the programme wizards and the event
   sheet - six surfaces that are NOT Mint and must keep the flat wash they already have.

   THE SHADOW IS TIGHTER THAN --mint-lift-sm AND THAT IS MEASURED, NOT TASTE. `.selpop.mint-pop`
   is `overflow-y:auto` with 8px of padding, and AN OVERFLOW CONTAINER CLIPS ITS OWN CHILDREN -
   the same law that cost the tab row 12px of header on the client record. --mint-lift-sm reaches
   ~10px below the element and would have been sliced off at the popup's edge. This pair reaches
   ~6px, which fits inside the 8px that is already there, so the effect costs the list no
   geometry at all.

   AND THE HOVERED ROW IS RAISED. The rows are stacked with no gap, so the row BELOW paints after
   the lifted one and would cover the shadow it just grew. `z-index` on hover only - nothing is
   left raised once the pointer leaves. */
#mhDetail .selpop.mint-pop .sel-opt,
#hhDetail .selpop.mint-pop .sel-opt,
#view-settings .selpop.mint-pop .sel-opt,
#cnPop .selpop.mint-pop .sel-opt{
  transition:transform .18s ease,box-shadow .18s ease,background var(--t),color var(--t);
}
#mhDetail .selpop.mint-pop .sel-opt:hover,
#hhDetail .selpop.mint-pop .sel-opt:hover,
#view-settings .selpop.mint-pop .sel-opt:hover,
#cnPop .selpop.mint-pop .sel-opt:hover{
  position:relative;z-index:1;
  background:rgba(var(--tg-rgb,255,255,255),.95);color:var(--ink-1);
  transform:translateY(-2px);
  box-shadow:0 2px 6px -3px rgba(30,55,48,.20),0 6px 12px -6px rgba(30,55,48,.28),
             inset 0 0 0 1px rgba(255,255,255,.9);
}
/* THE SELECTED ROW STILL LIFTS, but it keeps its pine identity rather than washing to white -
   the same reasoning as the current tab, which keeps the gradient. You can still point at it;
   it just does not stop being the answer while you do. */
#mhDetail .selpop.mint-pop .sel-opt.on:hover,
#hhDetail .selpop.mint-pop .sel-opt.on:hover,
#view-settings .selpop.mint-pop .sel-opt.on:hover,
#cnPop .selpop.mint-pop .sel-opt.on:hover{
  background:rgba(47,107,87,.16);color:var(--brand-600);
}
#mhDetail .selpop.mint-pop .sel-opt:active,
#hhDetail .selpop.mint-pop .sel-opt:active,
#view-settings .selpop.mint-pop .sel-opt:active,
#cnPop .selpop.mint-pop .sel-opt:active{
  transform:translateY(0);
  box-shadow:0 1px 3px -2px rgba(30,55,48,.22),inset 0 0 0 1px rgba(255,255,255,.7);
}

/* THE + ADD ROW. It is a sel-opt so it inherits the list's hover, lift and press unchanged -
   it moves like the rows around it because it is one of them. Only two things separate it:
   pine text, because it CREATES something rather than choosing something that exists, and a
   hairline above it, because the rows above are the answers and this one is the escape hatch
   when none of them is. Twinned to #hhDetail in the same rule, per the standard - the
   household record gets it the day a lookup there needs the same behaviour. */
#mhDetail .selpop.mint-pop .sel-opt.sel-add,
#hhDetail .selpop.mint-pop .sel-opt.sel-add,
#view-settings .selpop.mint-pop .sel-opt.sel-add,
#cnPop .selpop.mint-pop .sel-opt.sel-add{
  color:var(--brand-600);font-weight:700;
  border-top:1px solid rgba(47,107,87,.14);margin-top:2px;padding-top:9px;
}
body.dark #mhDetail .selpop.mint-pop .sel-opt.sel-add,
body.dark #hhDetail .selpop.mint-pop .sel-opt.sel-add,
body.dark #view-settings .selpop.mint-pop .sel-opt.sel-add{
  border-top-color:rgba(255,255,255,.10);
}
body.dark #mhDetail .selpop.mint-pop .sel-opt:hover,
body.dark #hhDetail .selpop.mint-pop .sel-opt:hover,
body.dark #view-settings .selpop.mint-pop .sel-opt:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4;
  box-shadow:0 2px 6px -3px rgba(0,0,0,.5),0 6px 12px -6px rgba(0,0,0,.6),
             inset 0 0 0 1px rgba(180,210,235,.16);
}

/* PRESS - settles to 0 and keeps only the contact layer. The click LANDS. */
#mhDetail.mint-host .pd-tabs button:active,
#mhDetail.mint-host .dv-more-btn:active,
#mhDetail.mint-host .dv-close-btn:active,
#mhDetail.mint-host .dv-mi:active,
#mhDetail.mint-host .ui-btn.primary:active,
#cnPop.mint-host .ui-btn.primary:active{
  transform:translateY(0);
  box-shadow:0 2px 5px -3px rgba(30,55,48,.22),inset 0 0 0 1px rgba(255,255,255,.7);
}

/* CURRENT - the selected tab carries the gradient and must NOT rise. Declared
   AFTER :hover because equal specificity means the later rule wins, and a tab that
   lifts while it is the one you are already on is a lie about what a lift means. */
#mhDetail.mint-host .pd-tabs button[aria-selected="true"]:hover,
#mhDetail.mint-host .pd-tabs button[aria-selected="true"]:active{
  transform:none;box-shadow:var(--mint-grad-glow);
}

/* DISABLED - a dead control never answers a hover. */
#mhDetail.mint-host .ui-btn:disabled:hover,
#cnPop.mint-host .ui-btn:disabled:hover,
#mhDetail.mint-host .dv-more-btn:disabled:hover,
#mhDetail.mint-host .dv-close-btn:disabled:hover,
#mhDetail.mint-host .dv-mi:disabled:hover{
  transform:none;box-shadow:none;background:none;
}

body.dark #mhDetail.mint-host .pd-tabs button:not([aria-selected="true"]):hover,
body.dark #mhDetail.mint-host .dv-more-btn:hover,
body.dark #mhDetail.mint-host .dv-close-btn:hover,
body.dark #mhDetail.mint-host .dv-mi:not(:disabled):hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(180,210,235,.16);
}

/* ============================================================
   THE FOOTER PAIR JOIN THE STANDARD.  His words: "apply the same effect to the
   Edit Record and Close and ... buttons to the mouse hover and also you can change
   the color of the Edit Record button to that too."

   EDIT RECORD takes --mint-grad - the SAME token as the selected tab, because they
   are the same statement: this is the live one. It was flat `--brand` #2E4A43 with
   a #2E4A43 glow; both move together, or a pine glow sits under a mint face.

   MEASURED BEFORE TOUCHING IT: `.m-foot` has 18px of padding and every ancestor up
   to `.modal` is overflow:visible, so a -2px lift plus --mint-lift-sm (~10px reach)
   has 18px to live in and needs NO geometry change. That check is part of the
   standard, not a nicety - the tab row failed it and cost 12px of header.
   ============================================================ */
#mhDetail.mint-host .ui-btn.primary,
#cnPop.mint-host .ui-btn.primary{
  background:var(--mint-grad);color:#fff;box-shadow:var(--mint-grad-glow);
}
#mhDetail.mint-host .ui-btn.primary:hover,
#cnPop.mint-host .ui-btn.primary:hover{
  background:var(--mint-grad);
  transform:translateY(-2px);
  box-shadow:var(--mint-grad-glow-hi);
}
#mhDetail.mint-host .dv-close-btn{
  background:var(--mint-glass);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);
  box-shadow:var(--mint-float);
  color:var(--brand-600);
}

/* THE SCROLL FADES HAD TO FOLLOW THE BAR. They were `--f-rest-bg` - flat #DFE4EA
   again - drawn ON TOP of the row to fake "the tabs continue past this edge". Over
   an opaque grey bar that was invisible; over glass it would have been two solid
   grey blocks sitting on the frosted material at either end. They are only visible
   when the row actually scrolls (`data-l`/`data-r`), which is why nothing showed on
   his screenshots - it would have surfaced on a narrower pane, i.e. on someone
   else's screen. #F1F3F6 is the composite the glass renders as over --bg-canvas. */
#mhDetail.mint-host .dv-fade.l{background:linear-gradient(90deg,color-mix(in srgb, var(--tg-cream2,rgb(241,243,246)) 97%, transparent) 30%,rgba(241,243,246,0))}
#mhDetail.mint-host .dv-fade.r{background:linear-gradient(270deg,color-mix(in srgb, var(--tg-cream2,rgb(241,243,246)) 97%, transparent) 30%,rgba(241,243,246,0))}
body.dark #mhDetail.mint-host .dv-fade.l{background:linear-gradient(90deg,rgba(28,38,46,.97) 30%,rgba(28,38,46,0))}
body.dark #mhDetail.mint-host .dv-fade.r{background:linear-gradient(270deg,rgba(28,38,46,.97) 30%,rgba(28,38,46,0))}
/* The count pill takes the pine tint every other piece of small chrome took on 6 Sep. */
#mhDetail.mint-host .pd-tabs button .n{background:rgba(47,107,87,.13);color:var(--brand-600)}
/* ============================================================
   THE SELECTED TAB TAKES THE RAIL'S GRADIENT.  7 September 2026.

   His words: "when you click on that TAB it's changing the Matthew House branding
   color but that is too dark change that clicked color when land to current TAB to
   Matthew House Gradient color like we do have it on the left side panel."

   IT WAS FLAT `--brand` #2E4A43 - a single dead-flat block of the darkest pine in the
   palette, dropped on a frosted row. The left rail is the same family and does not
   read heavy, and MEASURING IT SAYS WHY: it is not one colour but three moves -
   `linear-gradient(162deg,#2E4A43,#213A33)` for depth, plus a radial white sheen at
   the top-right that catches a light source. The gradient is what gives it life.

   SO THE RAIL'S TREATMENT IS COPIED AND ITS PITCH IS RAISED. Same 162deg axis, same
   sheen geometry, but keyed to the MOCK'S pine #2F6B57 rather than the shell's #2E4A43,
   because "too dark" is the other half of the instruction and copying the rail's exact
   stops would have made the tab DARKER, not lighter - the rail runs #2E4A43 -> #213A33,
   which is beneath where it already was. Lightest stop #42856E, so white 12.5px caps
   still clear 4.2:1; deepest #2A5749, so it is unmistakably Matthew House and not mint
   candy. THE GLOW IS RE-KEYED TOO - a #2E4A43 glow under a #2F6B57 tab is a dirty edge.

   NO LIFT ON THE SELECTED TAB. It is where you already are, not somewhere to go - the
   same reason a finished row does not pretend to be clickable.
   ============================================================ */
#mhDetail.mint-host .pd-tabs button[aria-selected="true"]{
  background:var(--mint-grad);color:#fff;box-shadow:var(--mint-grad-glow);
}
#mhDetail.mint-host .pd-tabs button[aria-selected="true"] .n{background:rgba(var(--tg-rgb,255,255,255),calc(.24*var(--tg-k,1)));color:#fff}


/* ============================================================
   THE OVERFLOW BUTTON AND ITS MENU JOIN THE ROW.  7 September 2026.

   His words: "turn the ... button to background same is the TAB background too and
   the menu appearing change that too to that background."

   The button is `ui-btn secondary`, which is an APP-WIDE class - so this is scoped
   `.mint-host` like everything else, or every secondary button in all six hosts moves.

   ITS OPEN STATE WAS `--brand-tint` AGAIN. Third instance of the same token in one
   day: dark slate at 12%, grey the moment it sits on glass. Pine tint.

   THE MENU IS THE ONE PLACE I DID NOT TAKE THE RECIPE LITERALLY. `--mint-glass` is
   .4 white, and a dropdown at .4 is drawn over arbitrary record content rather than
   over the canvas - the text behind it shows through the labels. It is the same
   frosted material and the same rim, firmed to .78 so it stays readable. An
   unreadable menu is a defect, not a style. Say so rather than shipping it quietly.
   ============================================================ */
#mhDetail.mint-host .dv-more-btn{
  background:var(--mint-glass);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);
  box-shadow:var(--mint-float);
  color:var(--brand-600);
}
/* hover lives in THE MINT BUTTON STANDARD above - not repeated here. */
#mhDetail.mint-host .dv-more-btn[aria-expanded="true"]{
  background:rgba(47,107,87,.14);border-color:rgba(47,107,87,.22);color:var(--brand-600);
}
#mhDetail.mint-host .dv-menu{
  /* ROOM FOR THE LIFT - standard rule 2. The menu is overflow:VISIBLE, so nothing is
     clipped; the failure here is the opposite one. Measured before changing anything:
     8px below the last row, against a shadow that reaches 8px below the resting edge.
     The lift would have thrown its shadow PAST the menu's own rounded corner and onto
     the page - a shadow escaping its container reads as a rendering fault.

     THE REACH IS ARITHMETIC, NOT A GUESS, and the formula belongs in the standard:
       below = offsetY + spread + blur/2 - lift
     For --mint-lift-sm's widest layer (0 10px 20px -10px) at a -2px lift that is
       10 + (-10) + 10 - 2 = 8px.
     12px padding clears it with 4px to spare; the gap goes 2 -> 5px so a raised row is
     not touching its neighbour while it is up. */
  padding:12px;gap:5px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.78*var(--tg-k,1)));
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);
  border-radius:18px;
  box-shadow:0 22px 54px -26px rgba(30,55,48,.42),0 4px 10px -6px rgba(30,55,48,.16);
}
/* Row hover lives in THE MINT BUTTON STANDARD above - not repeated here. */

body.dark #mhDetail.mint-host .dv-more-btn[aria-expanded="true"]{
  background:rgba(143,187,165,.18);border-color:rgba(143,187,165,.26)}
body.dark #mhDetail.mint-host .dv-menu{
  background:rgba(28,38,46,.86);border-color:rgba(180,210,235,.16);
  box-shadow:0 22px 54px -26px rgba(0,0,0,.75),0 4px 10px -6px rgba(0,0,0,.5)}


body.dark #mhDetail.mint-host .pd-tabs button:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.1*var(--tg-k,1)))}
body.dark #mhDetail.mint-host .pd-tabs button .n,
body.dark #mhDetail.mint-host .pd-tabs button:hover .n{
  background:rgba(143,187,165,.18);color:#B7D6C8}
body.dark #mhDetail.mint-host .pd-tabs button[aria-selected="true"] .n{
  background:rgba(var(--tg-rgb,255,255,255),calc(.24*var(--tg-k,1)));color:#fff}

/* ============================================================
   THE IN-PLACE EDIT ENGINE.  7 September 2026.

   His rule, and it is the whole specification: "you never change this interface only you'll
   turn it to editing one", and "the fields that you turning to editable shouldn't get another
   interface must match with our interface design and smooth and looks good for staff".

   SO THERE IS NO EDIT SKIN. The tile keeps its size, its radius, its dot, its label, its two
   states and its hover lift. The ONLY thing that changes is that the value line stops being a
   <span> and becomes a control wearing that span's exact typography - 16px/650, #1C2A25, the
   same 'un' grey when empty. Measured equal, not eyeballed: see the change log.

   WHY NOT THE .icf FIELD KIT, WHICH IS THE APP'S FIELD. Because `.icf` is a RECESSED WELL with
   its own background, border, radius and 44px height - dropping it inside a tile is a box drawn
   inside a box, the exact "double border" defect the field standard already records for
   `.dpf-mask`. And `.icf` appears 258 times across 10 CSS files, so touching it to fit here
   would silently restyle eight other screens. The tile IS the field on this record.

   AFFORDANCE COMES FROM THE TILE, NOT FROM A BORDER. At rest an editable tile looks exactly
   like a read one. Hover firms it to white (the lift the whole record already teaches), and
   FOCUS is where it commits - white, a pine ring, and the caret. That is the same
   rest -> hover -> focus escalation `.icf` performs; it is just performed by the tile.
   ============================================================ */

/* The control, dressed as the value line it replaced. Every one of these declarations exists to
   REMOVE browser chrome or to restate a .mint-vl value - there is nothing here that is new
   design, which is the point. */
#mhDetail .mint-w.ed .mint-in,
#hhDetail .mint-w.ed .mint-in,
#mhDetail .mint-w.ed .mint-sel,
#hhDetail .mint-w.ed .mint-sel,
#view-settings .mint-w.ed .mint-in,
#cnPop .mint-w.ed .mint-in,
#view-settings .mint-w.ed .mint-sel,
#cnPop .mint-w.ed .mint-sel{
  display:block;width:100%;min-width:0;
  margin:0;padding:0;border:0;background:none;box-shadow:none;outline:none;border-radius:0;
  font-family:var(--font-sans);font-size:16px;font-weight:650;line-height:24px;
  color:#1C2A25;letter-spacing:normal;
  -webkit-appearance:none;appearance:none;
}
/* 24px, NOT 1.35. The read span computes to 650 16px/24px; a 1.35 line-height computes to
   21.6px and the tile measured 69px instead of 71 - a 2px shrink on every tile the moment the
   card flipped. Invisible to the eye, and exactly the kind of drift that makes "the interface
   does not change" a claim rather than a fact. Copy the computed value, do not re-derive it. */
#mhDetail .mint-w.ed .mint-in,
#hhDetail .mint-w.ed .mint-in,
#view-settings .mint-w.ed .mint-in,
#cnPop .mint-w.ed .mint-in{height:24px}
#mhDetail .mint-w.ed .mint-in::placeholder,
#hhDetail .mint-w.ed .mint-in::placeholder,
#view-settings .mint-w.ed .mint-in::placeholder,
#cnPop .mint-w.ed .mint-in::placeholder{color:#8A9A94;font-weight:650;opacity:1}

/* NOT SET, WHILE EDITING. Declared BEFORE :hover and :focus-within on purpose - all three are
   the same specificity (1 id, 3 classes), so the later rule wins, and reaching for the field must
   always beat resting on it. Values copied from `.mint-w:has(.un)` rather than re-picked, so the
   two states are literally the same paint in both modes. */
#mhDetail .mint-w.ed.empty,
#hhDetail .mint-w.ed.empty,
#view-settings .mint-w.ed.empty,
#cnPop .mint-w.ed.empty{
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));border-style:dashed;border-color:rgba(30,55,48,.18);box-shadow:none;
}
#mhDetail .mint-w.ed.empty::before,
#hhDetail .mint-w.ed.empty::before,
#view-settings .mint-w.ed.empty::before,
#cnPop .mint-w.ed.empty::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.22)}
body.dark #mhDetail .mint-w.ed.empty,
body.dark #hhDetail .mint-w.ed.empty,
body.dark #view-settings .mint-w.ed.empty{background:rgba(var(--tg-rgb,255,255,255),calc(.025*var(--tg-k,1)));border-color:rgba(180,210,235,.16)}
body.dark #mhDetail .mint-w.ed.empty::before,
body.dark #hhDetail .mint-w.ed.empty::before,
body.dark #view-settings .mint-w.ed.empty::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(180,210,235,.3)}

/* THE TILE IS THE FIELD, so the tile carries the focus state. `:focus-within` rather than
   `:focus`, because the thing that takes focus is the input INSIDE the tile and the ring has to
   appear on the tile around it. The dot and label do not move. */
#mhDetail .mint-w.ed:hover,
#hhDetail .mint-w.ed:hover,
#view-settings .mint-w.ed:hover,
#cnPop .mint-w.ed:hover{background:rgba(var(--tg-rgb,255,255,255),.85)}
#mhDetail .mint-w.ed:focus-within,
#hhDetail .mint-w.ed:focus-within,
#view-settings .mint-w.ed:focus-within,
#cnPop .mint-w.ed:focus-within{
  background:rgb(var(--tg-rgb,255,255,255));border-style:solid;border-color:rgba(47,107,87,.55);
  box-shadow:0 0 0 3px rgba(47,107,87,.13), var(--mint-lift-sm);
  transform:translateY(-2px);
}

/* A REQUIRED FIELD SAYS SO ONLY WHILE IT CAN BE EDITED - a red star on a read-only record is
   noise, because there is nothing the reader can do about it. */
#mhDetail .mint-w .mint-req,
#hhDetail .mint-w .mint-req,
#view-settings .mint-w .mint-req,
#cnPop .mint-w .mint-req{color:#C0473F;font-weight:800;margin-left:3px}

/* THE REFUSAL LANDS ON THE TILE. This is the advantage the old stepper could not give: it
   validated a step you might not be looking at. Red border + ring, and the dot goes red too so
   the row reads wrong at a glance, not only where the caret is. */
#mhDetail .mint-w.ed.bad,
#hhDetail .mint-w.ed.bad,
#view-settings .mint-w.ed.bad,
#cnPop .mint-w.ed.bad{
  border-style:solid;border-color:rgba(192,71,63,.6);
  box-shadow:0 0 0 3px rgba(192,71,63,.12);
}
#mhDetail .mint-w.ed.bad::before,
#hhDetail .mint-w.ed.bad::before,
#view-settings .mint-w.ed.bad::before,
#cnPop .mint-w.ed.bad::before{background:#C0473F;box-shadow:0 0 0 3px rgba(192,71,63,.18)}
#mhDetail .mint-err,
#hhDetail .mint-err,
#view-settings .mint-err,
#cnPop .mint-err{
  margin:12px 4px 2px;padding:10px 14px;border-radius:12px;
  background:rgba(192,71,63,.1);box-shadow:inset 0 0 0 1px rgba(192,71,63,.28);
  color:#8E332D;font-size:12.5px;font-weight:700;
}

/* THE DROPDOWN, RE-DRESSED NOT REBUILT. The face is the value line; the chevron is the only
   thing added, and it is muted so the tile does not read as a control at rest. `position` is
   static-turned-relative here purely so .selpop anchors to the tile. */
/* STATIC ON PURPOSE - the popup must anchor to the TILE, not to this value line. Anchored
   here it measured 326px against a 346px tile (20px narrow) and opened at -5px, i.e.
   OVERLAPPING the tile's own bottom edge with no gap at all. He caught both. */
#mhDetail .mint-w.ed .mint-sel,
#hhDetail .mint-w.ed .mint-sel,
#view-settings .mint-w.ed .mint-sel,
#cnPop .mint-w.ed .mint-sel{position:static;display:flex;align-items:center;gap:8px;cursor:pointer}
#mhDetail .mint-w.ed .mint-sel .mint-vl,
#hhDetail .mint-w.ed .mint-sel .mint-vl,
#view-settings .mint-w.ed .mint-sel .mint-vl,
#cnPop .mint-w.ed .mint-sel .mint-vl{flex:1;min-width:0}
#mhDetail .mint-w.ed .mint-chev,
#hhDetail .mint-w.ed .mint-chev,
#view-settings .mint-w.ed .mint-chev,
#cnPop .mint-w.ed .mint-chev{
  flex:none;width:15px;height:15px;display:grid;place-items:center;color:#8A9A94;
  transition:transform var(--t),color var(--t);
}
#mhDetail .mint-w.ed .mint-chev svg,
#hhDetail .mint-w.ed .mint-chev svg,
#view-settings .mint-w.ed .mint-chev svg,
#cnPop .mint-w.ed .mint-chev svg{width:15px;height:15px;stroke:currentColor;stroke-width:2.2;fill:none}
#mhDetail .mint-w.ed:hover .mint-chev,
#hhDetail .mint-w.ed:hover .mint-chev,
#mhDetail .mint-w.ed:focus-within .mint-chev,
#hhDetail .mint-w.ed:focus-within .mint-chev,
#view-settings .mint-w.ed:hover .mint-chev,
#cnPop .mint-w.ed:hover .mint-chev,
#view-settings .mint-w.ed:focus-within .mint-chev,
#cnPop .mint-w.ed:focus-within .mint-chev{color:var(--brand-600)}
#mhDetail .mint-w.ed .mint-sel.open .mint-chev,
#hhDetail .mint-w.ed .mint-sel.open .mint-chev,
#view-settings .mint-w.ed .mint-sel.open .mint-chev,
#cnPop .mint-w.ed .mint-sel.open .mint-chev{transform:rotate(180deg);color:var(--brand-600)}

/* THE POPUP HAS TO ESCAPE THE TILE, and the tile is inside a card that scrolls. z-index alone
   is not enough - see the transform-traps-dropdowns law - so this is the same treatment every
   other .selpop on this record already gets, just anchored to a tile. */
/* FLUSH TO THE TILE, WITH AIR UNDER IT. left/right 0 against .mint-w means the list is
   exactly as wide as the field it belongs to - his ask - and 100% now measures from the
   TILE's bottom, so the 8px is a real gap instead of a 5px overlap. */
#mhDetail .mint-w.ed .selpop.mint-pop,
#hhDetail .mint-w.ed .selpop.mint-pop,
#view-settings .mint-w.ed .selpop.mint-pop,
#cnPop .mint-w.ed .selpop.mint-pop{
  /* -1px, NOT 0. An absolutely-positioned child anchors to its container's PADDING box, so
     left:0 sits INSIDE the tile's 1px border and the list measured 344 against a 346 tile.
     Two pixels, and it is the difference between "matches the field" and "nearly matches".
     The +9 pays back the same 1px so the gap below the tile is a true 8. */
  position:absolute;top:calc(100% + 9px);left:-1px;right:-1px;z-index:120;
  max-height:260px;overflow-y:auto;padding:8px;border-radius:16px;
  background:rgba(var(--tg-rgb,255,255,255),.94);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);
  box-shadow:0 22px 54px -26px rgba(30,55,48,.5),0 4px 10px -6px rgba(30,55,48,.2);
}
/* ============================================================
   THE POPUP WAS PAINTING UNDER THE NEXT CARD.  7 September 2026.

   His report, with a screenshot: "the drop down menu is on the back of the other fields make
   sure all drop down menus during the editing mode must be in front."

   AND z-index ON THE POPUP WAS NEVER GOING TO FIX IT. `z-index:120` only competes inside the
   nearest stacking context, and the popup's context is its own CARD. The Contact and US
   address card is a LATER SIBLING in the grid, so it paints after the whole Personal card -
   popup included - no matter how high the popup's own number goes. THE TRAPPING ELEMENT IS
   THE CARD, so the card is what has to be raised. Same law as the transform-traps-dropdowns
   case: raise the ancestor, not the thing you can see.

   `:has()` keeps it self-clearing - the card is only lifted while one of its tiles is open, so
   nothing is left sitting above its neighbours after the list closes. */
#mhDetail .mint-grid,
#hhDetail .mint-grid,
#view-settings .mint-grid,
#cnPop .mint-grid,
#view-help .mint-grid {position:relative}
#mhDetail .mint-w.selopen,
#hhDetail .mint-w.selopen,
#view-settings .mint-w.selopen,
#cnPop .mint-w.selopen{z-index:121}
#mhDetail .pd-card.mint:has(.mint-w.selopen),
#hhDetail .pd-card.mint:has(.mint-w.selopen),
#view-settings .pd-card.mint:has(.mint-w.selopen),
#cnPop .pd-card.mint:has(.mint-w.selopen){position:relative;z-index:400}
#mhDetail .pd-grid:has(.mint-w.selopen){position:relative;z-index:400}

/* FLIPPED UP. placeSel measures the room below inside the scrolling pane and adds `.up` when
   the list would run off the end - his second point: "if the screen is in the end they must
   open on top or bottom". The engine is the app's existing one; only this rule, which turns
   the measurement into a position, had to be written for the tile. */
#mhDetail .mint-w.ed .selpop.mint-pop.up,
#hhDetail .mint-w.ed .selpop.mint-pop.up,
#view-settings .mint-w.ed .selpop.mint-pop.up,
#cnPop .mint-w.ed .selpop.mint-pop.up{
  top:auto;bottom:calc(100% + 9px);
  box-shadow:0 -22px 54px -26px rgba(30,55,48,.5),0 -4px 10px -6px rgba(30,55,48,.2);
}

/* KEYBOARD. The picker is a div with tabindex, so it needs the ring drawn explicitly - a real
   input gets it from :focus-within, this does not. Same ring, so a staff member tabbing through
   sees ONE highlight travelling across the card rather than two different ideas of "focused". */
#mhDetail .mint-w.ed .mint-sel:focus,
#hhDetail .mint-w.ed .mint-sel:focus,
#view-settings .mint-w.ed .mint-sel:focus,
#cnPop .mint-w.ed .mint-sel:focus{outline:none}
#mhDetail .mint-w.ed:has(.mint-sel:focus-visible),
#hhDetail .mint-w.ed:has(.mint-sel:focus-visible),
/* AND ON A PLAIN :focus, ON THE HOUSEHOLD RECORD ONLY.  7 Sep 2026.
   "Where do I start" is answered by focusing the FIRST tile, and on the household record the
   first tile is a PICKER, not a text input. A div takes focus programmatically but never
   :focus-visible - that flag is the browser's judgement about whether a human used the
   keyboard - so the ring simply did not appear and the answer to his question was drawn on
   the second field instead. Added as a SELECTOR on the existing rule rather than as a second
   copy of it, so there is still one definition of what a focused tile looks like.
   Not added to #mhDetail: its first tile is a text input, which already rings on :focus-within
   whatever put the caret there, so nothing there is broken to fix. */
#hhDetail .mint-w.ed:has(.mint-sel:focus),
#view-settings .mint-w.ed:has(.mint-sel:focus),
#cnPop .mint-w.ed:has(.mint-sel:focus){
  background:rgb(var(--tg-rgb,255,255,255));border-style:solid;border-color:rgba(47,107,87,.55);
  box-shadow:0 0 0 3px rgba(47,107,87,.13), var(--mint-lift-sm);
  transform:translateY(-2px);
}

/* DARK - the same recipe re-keyed, never ported. */
body.dark #mhDetail .mint-w.ed .mint-in,
body.dark #hhDetail .mint-w.ed .mint-in,
body.dark #mhDetail .mint-w.ed .mint-sel,
body.dark #hhDetail .mint-w.ed .mint-sel,
body.dark #view-settings .mint-w.ed .mint-in,
body.dark #view-settings .mint-w.ed .mint-sel{color:#EAF0F4}
body.dark #mhDetail .mint-w.ed .mint-in::placeholder,
body.dark #hhDetail .mint-w.ed .mint-in::placeholder,
body.dark #view-settings .mint-w.ed .mint-in::placeholder{color:#6E7E88}
body.dark #mhDetail .mint-w.ed:hover,
body.dark #hhDetail .mint-w.ed:hover,
body.dark #view-settings .mint-w.ed:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.1*var(--tg-k,1)))}
body.dark #mhDetail .mint-w.ed:focus-within,
body.dark #hhDetail .mint-w.ed:focus-within,
body.dark #view-settings .mint-w.ed:focus-within{
  background:rgba(var(--tg-rgb,255,255,255),calc(.14*var(--tg-k,1)));border-color:rgba(143,187,165,.6);
  box-shadow:0 0 0 3px rgba(143,187,165,.16), var(--mint-lift-sm);
}
body.dark #mhDetail .mint-w.ed .selpop.mint-pop,
body.dark #hhDetail .mint-w.ed .selpop.mint-pop,
body.dark #view-settings .mint-w.ed .selpop.mint-pop{
  background:rgba(28,38,46,.96);border-color:rgba(180,210,235,.16);
}

/* ============================================================
   NOT EDITABLE - THE THREE SHAPES OF IT.  7 September 2026.

   His rules: "the OVERVIEW TAB the SERVICE & ENROLLMENTS and HISTORY TABS is not editable staff
   can go there but they should get a message not editable fields", and "some of our Detail KPI
   cards like KEY DATES and DEADLINES is not editable show them for staff but never allow them to
   click on them gray them out".

   THE GREY IS A STATEMENT, AND IT IS THE THIRD STATE THIS RECORD SPEAKS. The card already has
   two: something is there (white, pine hairline, filled dot) and nothing yet (dashed, hollow
   dot). "Not editable" cannot borrow either - a locked tile usually HAS a value, so the dashed
   empty look would lie about it. It is the value drawn at rest with the colour taken out: the
   data still readable, the affordance gone.

   AND IT ONLY EXISTS WHILE EDITING. Outside edit mode nothing on the record is interactive, so
   greying a tile there would read as "this data is unavailable" rather than "you cannot change
   this here" - a different and wrong message. `.lockt` is only ever set when _inline is true.
   ============================================================ */

/* 1. THE LOCKED TILE. No lift, no pointer, no caret - and it keeps its value legible. */
#mhDetail .mint-w.ed.lockt,
#hhDetail .mint-w.ed.lockt,
#view-settings .mint-w.ed.lockt,
#cnPop .mint-w.ed.lockt{
  background:rgba(var(--tg-rgb,255,255,255),calc(.28*var(--tg-k,1)));
  border-style:solid;border-color:rgba(30,55,48,.1);
  box-shadow:none;cursor:default;
}
#mhDetail .mint-w.ed.lockt:hover,
#hhDetail .mint-w.ed.lockt:hover,
#view-settings .mint-w.ed.lockt:hover,
#cnPop .mint-w.ed.lockt:hover{transform:none;box-shadow:none;background:rgba(var(--tg-rgb,255,255,255),calc(.28*var(--tg-k,1)))}
#mhDetail .mint-w.ed.lockt .mint-vl,
#hhDetail .mint-w.ed.lockt .mint-vl,
#view-settings .mint-w.ed.lockt .mint-vl,
#cnPop .mint-w.ed.lockt .mint-vl{color:#7E8D88}
#mhDetail .mint-w.ed.lockt .mint-lb,
#hhDetail .mint-w.ed.lockt .mint-lb,
#view-settings .mint-w.ed.lockt .mint-lb,
#cnPop .mint-w.ed.lockt .mint-lb{color:#96A29D}
/* The dot goes hollow-grey: it must not read as the pine "this is filled" dot, because the
   question a locked tile answers is not whether it has a value. */
#mhDetail .mint-w.ed.lockt::before,
#hhDetail .mint-w.ed.lockt::before,
#view-settings .mint-w.ed.lockt::before,
#cnPop .mint-w.ed.lockt::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.16)}
#mhDetail .mint-w .mint-lock,
#hhDetail .mint-w .mint-lock,
#view-settings .mint-w .mint-lock,
#cnPop .mint-w .mint-lock{
  display:inline-flex;align-items:center;margin-left:6px;vertical-align:-1px;color:#A0ACA7;
}
#mhDetail .mint-w .mint-lock svg,
#hhDetail .mint-w .mint-lock svg,
#view-settings .mint-w .mint-lock svg,
#cnPop .mint-w .mint-lock svg{width:11px;height:11px;stroke:currentColor;stroke-width:2;fill:none}
/* THE REASON, NOT JUST THE GREY. A locked field with no explanation is a dead end; one line
   turns it into an instruction - "Edit on the Documents tab." */
#mhDetail .mint-w.ed.lockt .mint-note,
#hhDetail .mint-w.ed.lockt .mint-note,
#view-settings .mint-w.ed.lockt .mint-note,
#cnPop .mint-w.ed.lockt .mint-note{
  display:block;margin-top:5px;font-size:10.5px;font-weight:600;color:#98A4A0;line-height:1.35;
}

/* 2. THE WHOLE CARD, when nothing on it can be edited. Key dates and deadlines is his named
   example. The card is NOT hidden and NOT dimmed to unreadability - staff still need the
   deadlines while they work - it simply stops offering anything. */
#mhDetail .pd-card.mint.noedit .mint-w,
#hhDetail .pd-card.mint.noedit .mint-w,
#mhDetail .pd-card.mint.noedit .cl-tl,
#mhDetail .pd-card.mint.noedit .mint-prow,
#hhDetail .pd-card.mint.noedit .mint-prow,
#view-settings .pd-card.mint.noedit .mint-w,
#cnPop .pd-card.mint.noedit .mint-w,
#view-settings .pd-card.mint.noedit .mint-prow,
#cnPop .pd-card.mint.noedit .mint-prow{pointer-events:none}
#mhDetail .pd-card.mint.noedit .mint-w:hover,
#hhDetail .pd-card.mint.noedit .mint-w:hover,
#mhDetail .pd-card.mint.noedit .cl-tl:hover,
#view-settings .pd-card.mint.noedit .mint-w:hover,
#cnPop .pd-card.mint.noedit .mint-w:hover{transform:none;box-shadow:none}
/* KEY DATES draws TIMELINE ROWS, not tiles, so the grey has to reach them too - otherwise the
   one card he named by name would be the only thing on the record still looking live. Muted,
   NOT faded away: he was explicit that staff must still see these while they work, and a
   deadline you cannot read is worse than one you cannot edit. */
#mhDetail .pd-card.mint.noedit .cl-tl{filter:grayscale(1);opacity:.72}
#mhDetail .pd-card.mint.noedit .mint-ph .mint-tag,
#hhDetail .pd-card.mint.noedit .mint-ph .mint-tag,
#view-settings .pd-card.mint.noedit .mint-ph .mint-tag,
#cnPop .pd-card.mint.noedit .mint-ph .mint-tag{
  background:rgba(30,55,48,.08);box-shadow:inset 0 0 0 1px rgba(30,55,48,.12);color:#7E8D88;
}
body.dark #mhDetail .pd-card.mint.noedit .cl-tl{opacity:.62}

/* 3. THE TAB BANNER. Same material and same shape as the expiry banner at the top of Overview,
   so it reads as part of the record rather than an alert bolted on. */
#mhDetail .mint-noedit,
#hhDetail .mint-noedit,
#view-settings .mint-noedit,
#cnPop .mint-noedit{
  display:flex;align-items:center;gap:14px;padding:16px 20px;margin-bottom:16px;
  border:1px solid rgba(30,55,48,.1);border-radius:22px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
}
#mhDetail .mint-noedit .ic,
#hhDetail .mint-noedit .ic,
#view-settings .mint-noedit .ic,
#cnPop .mint-noedit .ic{
  width:38px;height:38px;flex:none;display:grid;place-items:center;border-radius:var(--r-md);
  background:rgba(30,55,48,.07);box-shadow:inset 0 0 0 1px rgba(30,55,48,.1);color:#7E8D88;
}
#mhDetail .mint-noedit .ic svg,
#hhDetail .mint-noedit .ic svg,
#view-settings .mint-noedit .ic svg,
#cnPop .mint-noedit .ic svg{width:17px;height:17px;stroke:currentColor;stroke-width:1.9;fill:none}
#mhDetail .mint-noedit .t,
#hhDetail .mint-noedit .t,
#view-settings .mint-noedit .t,
#cnPop .mint-noedit .t{font-size:13px;font-weight:800;color:#55635E}
#mhDetail .mint-noedit .s,
#hhDetail .mint-noedit .s,
#view-settings .mint-noedit .s,
#cnPop .mint-noedit .s{margin-top:3px;font-size:11.5px;font-weight:600;color:#8A9891;line-height:1.45}

/* THE PERSON SUB-HEADING inside a grouped card. 7 September 2026.

   Emergency contacts stopped being one card each while editing and became sections of a single
   card - his words: "all must be in the same KPI card and it must be like this person 1 person 2".

   IT IS DELIBERATELY QUIETER THAN THE CARD CAPSULE. A second full capsule inside a card would
   compete with the one above it and the eye would read two cards again, which is the exact thing
   this change removes. A hairline, a small label and that person's own count - enough to separate
   two people, not enough to look like a new card.
   ============================================================ */
/* IT IS A BUTTON NOW, so the browser's own defaults have to be undone before anything else -
   MudBlazor centres every bare <button> (bare `button{justify-content:center}`), and
   `text-align:left` does NOT beat it. That is a known app-wide trap; this row is a flex
   container so `justify-content:flex-start` is the line that actually wins. */
/* ONE CONNECTED PANEL, NOT A STACK OF FLOATING ROWS. His note: "both of them must connected
   with each others". So the people share a single bordered container and are divided by a
   hairline, the way a list of files in an upload panel reads - the border belongs to the GROUP,
   and each row only owns the line under it. First and last corners are rounded, the ones in
   between are square, which is what makes it read as one object instead of several. */
#mhDetail .pd-card.mint .mint-sub{
  display:flex;align-items:center;justify-content:flex-start;gap:9px;
  width:100%;margin:0;padding:12px 14px;
  border:1px solid rgba(30,55,48,.09);border-bottom:none;border-radius:0;
  background:rgba(var(--tg-rgb,255,255,255),calc(.34*var(--tg-k,1)));
  font-family:var(--font-sans);text-align:left;cursor:pointer;
  transition:background var(--t),border-color var(--t);
}
#mhDetail .pd-card.mint .mint-sub:first-of-type{margin-top:6px;border-radius:14px 14px 0 0}
/* The LAST row in the panel closes it. `:last-of-type` is not enough on its own because an open
   section puts a .mint-drop after its button - so the bottom border is carried by whichever
   element actually ends the group. */
#mhDetail .pd-card.mint .mint-sub:last-child{border-bottom:1px solid rgba(30,55,48,.09);border-radius:0 0 14px 14px}
#mhDetail .pd-card.mint .mint-drop:last-child{
  border:1px solid rgba(30,55,48,.09);border-top:none;border-radius:0 0 14px 14px;
}

/* HOVER DOES NOT LIFT HERE, deliberately - a row inside a joined panel that rises off its
   neighbours breaks the very connection he asked for. It brightens instead, which is the same
   "the material firms up" idea the standard uses, minus the movement that would split the group. */
#mhDetail .pd-card.mint .mint-sub:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)))}
#mhDetail .pd-card.mint .mint-sub.open{background:rgba(var(--tg-rgb,255,255,255),calc(.62*var(--tg-k,1)));border-color:rgba(47,107,87,.18)}

/* THE + / - ON THE RIGHT, and it is the only thing on the row that carries the card's own
   background - his ask: "center them with the back color". So it reads as a well cut into the
   row rather than a chip sitting on it, and it is optically centred (the minus glyph sits a
   hair high against a plus at the same size). */
#mhDetail .pd-card.mint .mint-sub .pm{
  flex:none;margin-left:12px;width:26px;height:26px;
  display:grid;place-items:center;border-radius:8px;
  background:var(--bg-canvas,#E8EBF0);
  box-shadow:inset 0 0 0 1px rgba(30,55,48,.1);
  color:var(--brand-600);font-size:15px;font-weight:800;line-height:1;
  transition:background var(--t),color var(--t),box-shadow var(--t);
}
#mhDetail .pd-card.mint .mint-sub:hover .pm{
  background:rgb(var(--tg-rgb,255,255,255));box-shadow:inset 0 0 0 1px rgba(47,107,87,.28);
}
#mhDetail .pd-card.mint .mint-sub.open .pm{
  background:rgb(var(--tg-rgb,255,255,255));box-shadow:inset 0 0 0 1px rgba(47,107,87,.32);
}

/* THE DROP. His note: "add a smooth drop animation too now it's dropping but very fast".
   320ms on a cubic-bezier that decelerates - long enough to read as a drawer opening, short
   enough that it never feels like waiting. Height is animated to a generous max rather than a
   fixed one, because the content height is unknown; the easing is what carries the feel, and
   opacity/translate are staggered slightly behind so the tiles arrive rather than stretch. */
@keyframes mhDrop{
  from{max-height:0;opacity:0;transform:translateY(-6px)}
  to{max-height:620px;opacity:1;transform:translateY(0)}
}
#mhDetail .pd-card.mint .mint-drop{
  overflow:hidden;
  border-left:1px solid rgba(30,55,48,.09);
  border-right:1px solid rgba(30,55,48,.09);
  background:rgba(var(--tg-rgb,255,255,255),calc(.2*var(--tg-k,1)));
  /* 14px, NOT a number picked by eye. He reported the fields "touching the TITLE of the PERSONS",
     and measuring said 4px here against **14px** between the capsule and the first row on every
     other Mint card. So this was not a taste question - the panel was breaking the record's own
     spacing. Copy the value the rest of the card already uses. */
  padding:14px 12px 12px;
  animation:mhDrop .32s cubic-bezier(.22,.61,.36,1) both;
}
/* THE ACTION ROW inside a locked person's panel. It is the only thing in that panel that is not
   greyed - everything above it says "you cannot edit this", so the one live control has to look
   live or it reads as more of the same. Sits on its own line under the tiles with the reason
   beside it, because a button labelled "Make primary" with no sentence next to it is asking the
   staff member to already know why they would press it. */
#mhDetail .pd-card.mint .mint-act{
  display:flex;align-items:center;gap:14px;flex-wrap:wrap;
  margin:4px 4px 2px;padding:12px 14px;border-radius:14px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.5*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(255,255,255,.8);
}
#mhDetail .pd-card.mint .mint-act .why{
  flex:1;min-width:200px;font-size:11.5px;font-weight:600;color:#8A9891;line-height:1.45;
}
/* Smaller than a footer button - it is a row-level action, not a decision about the record. It
   still obeys THE MINT BUTTON STANDARD, so it comes up on hover like every other button. */
#mhDetail .pd-card.mint .mint-mkp{
  height:36px;padding:0 16px;font-size:13px;flex:none;
  background:var(--mint-glass);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);box-shadow:var(--mint-float);color:var(--brand-600);
  transition:transform .18s ease,box-shadow .18s ease,background var(--t),border-color var(--t);
}
#mhDetail .pd-card.mint .mint-mkp:hover:not(:disabled){
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));transform:translateY(-2px);
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(255,255,255,.85);
}
#mhDetail .pd-card.mint .mint-mkp:active:not(:disabled){transform:translateY(0)}
#mhDetail .pd-card.mint .mint-mkp svg{width:15px;height:15px;stroke:currentColor;stroke-width:2.4;fill:none}
body.dark #mhDetail .pd-card.mint .mint-act{
  background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(180,210,235,.14);
}
body.dark #mhDetail .pd-card.mint .mint-mkp:hover:not(:disabled){background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)))}

/* ============================================================
   "+ ADD EMERGENCY CONTACT".  7 September 2026.

   His words: "when the editing triggered you must add a big + button like document has to add
   Emergency contact then the fields appear". So it is the SAME tile as Add Document, not a new
   idea - a dashed surface with a circled plus. It has to be, because the two-state recipe already
   calls an empty slot dashed, and this is the emptiest slot on the record.

   THE PINE ARRIVES ONLY ON HOVER, like the Add Document tile: at rest it is a place where nothing
   is yet, and it becomes an action when you reach for it.
   ============================================================ */
#mhDetail .pd-card.mint .mint-addem,
#hhDetail .pd-card.mint .mint-addem,
#view-settings .pd-card.mint .mint-addem,
#cnPop .pd-card.mint .mint-addem{
  display:flex;align-items:center;justify-content:center;gap:12px;flex-wrap:wrap;
  width:100%;margin:6px 0 2px;padding:22px 18px;
  border:1.6px dashed rgba(30,55,48,.18);border-radius:16px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));
  font-family:var(--font-sans);font-size:13.5px;font-weight:700;color:var(--brand-600);
  cursor:pointer;
  transition:transform .18s ease,box-shadow .18s ease,background var(--t),border-color var(--t);
}
#mhDetail .pd-card.mint .mint-addem .plus,
#hhDetail .pd-card.mint .mint-addem .plus,
#view-settings .pd-card.mint .mint-addem .plus,
#cnPop .pd-card.mint .mint-addem .plus{
  width:36px;height:36px;flex:none;display:grid;place-items:center;border-radius:50%;
  background:rgba(47,107,87,.13);box-shadow:inset 0 0 0 1px rgba(47,107,87,.2);
  transition:background var(--t),box-shadow var(--t);
}
#mhDetail .pd-card.mint .mint-addem .plus svg,
#hhDetail .pd-card.mint .mint-addem .plus svg,
#view-settings .pd-card.mint .mint-addem .plus svg,
#cnPop .pd-card.mint .mint-addem .plus svg{width:19px;height:19px;stroke:var(--brand-600);stroke-width:2.2;fill:none}
#mhDetail .pd-card.mint .mint-addem:hover:not(:disabled),
#hhDetail .pd-card.mint .mint-addem:hover:not(:disabled),
#view-settings .pd-card.mint .mint-addem:hover:not(:disabled),
#cnPop .pd-card.mint .mint-addem:hover:not(:disabled){
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));border-style:solid;border-color:rgba(47,107,87,.3);
  transform:translateY(-2px);box-shadow:var(--mint-lift-sm);
}
#mhDetail .pd-card.mint .mint-addem:hover:not(:disabled) .plus,
#hhDetail .pd-card.mint .mint-addem:hover:not(:disabled) .plus,
#view-settings .pd-card.mint .mint-addem:hover:not(:disabled) .plus,
#cnPop .pd-card.mint .mint-addem:hover:not(:disabled) .plus{background:rgba(47,107,87,.2)}
#mhDetail .pd-card.mint .mint-addem:active:not(:disabled),
#hhDetail .pd-card.mint .mint-addem:active:not(:disabled),
#view-settings .pd-card.mint .mint-addem:active:not(:disabled),
#cnPop .pd-card.mint .mint-addem:active:not(:disabled){transform:translateY(0);box-shadow:none}

/* BLOCKED, NOT HIDDEN. The proc can only INSERT when there is no primary yet, so with one already
   there this would overwrite a real person. It says so rather than vanishing - the same honesty
   the Volunteering card uses for a module that does not exist yet. */
#mhDetail .pd-card.mint .mint-addem.off,
#hhDetail .pd-card.mint .mint-addem.off,
#view-settings .pd-card.mint .mint-addem.off,
#cnPop .pd-card.mint .mint-addem.off{
  cursor:not-allowed;color:#8A9891;background:rgba(var(--tg-rgb,255,255,255),calc(.24*var(--tg-k,1)));border-color:rgba(30,55,48,.12);
}
#mhDetail .pd-card.mint .mint-addem.off .plus,
#hhDetail .pd-card.mint .mint-addem.off .plus,
#view-settings .pd-card.mint .mint-addem.off .plus,
#cnPop .pd-card.mint .mint-addem.off .plus{
  background:rgba(30,55,48,.06);box-shadow:inset 0 0 0 1px rgba(30,55,48,.1);
}
#mhDetail .pd-card.mint .mint-addem.off .plus svg,
#hhDetail .pd-card.mint .mint-addem.off .plus svg,
#view-settings .pd-card.mint .mint-addem.off .plus svg,
#cnPop .pd-card.mint .mint-addem.off .plus svg{stroke:#9AA6A1}
#mhDetail .pd-card.mint .mint-addem .why,
#hhDetail .pd-card.mint .mint-addem .why,
#view-settings .pd-card.mint .mint-addem .why,
#cnPop .pd-card.mint .mint-addem .why{
  flex-basis:100%;text-align:center;font-size:11px;font-weight:600;color:#98A4A0;
}

/* A CARD-LEVEL NOTE - one line under the capsule saying why this card is here, or why the
   card above it is shorter than usual. Added 9 Sep 2026 for the child view: a card that
   appears only for under-18s reads as a bug the first time somebody opens an adult and
   cannot find it, so the card explains itself where it stands.

   It borrows `.why`'s type and colour deliberately - same voice, same weight, same grey -
   and differs only in being left-aligned and full width, because this one is a sentence
   rather than a caption under a button. Twinned to #hhDetail in the same rule so the
   household record can use it without anybody copying the declarations. */
#mhDetail .pd-card.mint .mint-cardnote,
#hhDetail .pd-card.mint .mint-cardnote,
#view-settings .pd-card.mint .mint-cardnote,
#cnPop .pd-card.mint .mint-cardnote,
#view-help .pd-card.mint .mint-cardnote {
  margin:-2px 2px 8px;font-size:11px;font-weight:600;line-height:1.45;color:#98A4A0;
}

/* THE NEW-CONTACT FORM. Wears the accordion's own header so it reads as one more person in the
   same list rather than a different kind of thing bolted underneath it. `.static` is the header
   without the button behaviour - there is nothing to collapse, this section is always open. */
#mhDetail .pd-card.mint .mint-newem{margin-top:6px}
#mhDetail .pd-card.mint .mint-sub.static{
  cursor:default;border-radius:14px;border-bottom:1px solid rgba(30,55,48,.09);
}
/* HE CAUGHT THIS: "the fields are not align well so it's attached with the title". The header is
   a bordered bar and the grid began at zero, so the first row of tiles sat welded to it with no
   breathing space at all. The header closes itself now (full radius, its own bottom border) and
   the grid starts 10px below it - the same air every other card has between its capsule and its
   first row. */
#mhDetail .pd-card.mint .mint-newem .mint-grid{margin-top:10px}
#mhDetail .pd-card.mint .mint-sub.static:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.62*var(--tg-k,1)))}

body.dark #mhDetail .pd-card.mint .mint-addem,
body.dark #hhDetail .pd-card.mint .mint-addem,
body.dark #view-settings .pd-card.mint .mint-addem{
  background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.18);color:#B7D6C8;
}
body.dark #mhDetail .pd-card.mint .mint-addem:hover:not(:disabled),
body.dark #hhDetail .pd-card.mint .mint-addem:hover:not(:disabled),
body.dark #view-settings .pd-card.mint .mint-addem:hover:not(:disabled){background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)))}
body.dark #mhDetail .pd-card.mint .mint-addem .plus,
body.dark #hhDetail .pd-card.mint .mint-addem .plus,
body.dark #view-settings .pd-card.mint .mint-addem .plus{
  background:rgba(143,187,165,.18);box-shadow:inset 0 0 0 1px rgba(143,187,165,.24);
}
body.dark #mhDetail .pd-card.mint .mint-addem .plus svg,
body.dark #hhDetail .pd-card.mint .mint-addem .plus svg,
body.dark #view-settings .pd-card.mint .mint-addem .plus svg{stroke:#B7D6C8}

/* Respect the setting - a drawer that animates for someone who asked for no motion is a bug. */
@media (prefers-reduced-motion:reduce){
  #mhDetail .pd-card.mint .mint-drop{animation:none}
}
body.dark #mhDetail .pd-card.mint .mint-sub .pm{
  background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(180,210,235,.16);color:#B7D6C8;
}
body.dark #mhDetail .pd-card.mint .mint-drop{
  border-color:rgba(180,210,235,.12);background:rgba(var(--tg-rgb,255,255,255),calc(.03*var(--tg-k,1)));
}
/* THE NAME IS VISIBLE WHILE COLLAPSED - the whole point. Truncated rather than wrapped so the
   row height never changes as you open and close. */
#mhDetail .pd-card.mint .mint-sub .nm{
  min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;
  font-size:13.5px;font-weight:650;color:#1C2A25;
}
body.dark #mhDetail .pd-card.mint .mint-sub{background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.12)}
body.dark #mhDetail .pd-card.mint .mint-sub:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)))}
body.dark #mhDetail .pd-card.mint .mint-sub .nm{color:#EAF0F4}
#mhDetail .pd-card.mint .mint-sub .t{
  font-size:11px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:#55635E;
}
/* THE REASON, CARRIED ONCE, on the person row rather than repeated under every tile. */
#mhDetail .pd-card.mint .mint-sub .mint-why{
  font-size:11px;font-weight:600;color:#8A9891;white-space:nowrap;
  overflow:hidden;text-overflow:ellipsis;min-width:0;
}
#mhDetail .pd-card.mint .mint-sub .s{
  margin-left:auto;font-size:10.5px;font-weight:800;letter-spacing:.05em;color:#8A9891;
  font-variant-numeric:tabular-nums;
}
#mhDetail .pd-card.mint .mint-sub .mint-tag.off{
  background:rgba(30,55,48,.07);box-shadow:inset 0 0 0 1px rgba(30,55,48,.11);color:#8A9891;
}
body.dark #mhDetail .pd-card.mint .mint-sub{border-top-color:rgba(180,210,235,.12)}
body.dark #mhDetail .pd-card.mint .mint-sub .t{color:#C6D3CE}

/* 4. THE PROSE FIELD. Language notes is one wide tile, not a grid cell - a paragraph in a
   third of a row is unusable. Same tile, same typography, just taller. */
#mhDetail .mint-w.ed.wide,
#hhDetail .mint-w.ed.wide,
#view-settings .mint-w.ed.wide,
#cnPop .mint-w.ed.wide{grid-column:1 / -1}
#mhDetail .mint-w.ed .mint-ta,
#hhDetail .mint-w.ed .mint-ta,
#view-settings .mint-w.ed .mint-ta,
#cnPop .mint-w.ed .mint-ta{
  min-height:92px;height:auto;resize:vertical;line-height:22px;display:block;
}

body.dark #mhDetail .mint-w.ed.lockt,
body.dark #hhDetail .mint-w.ed.lockt,
body.dark #view-settings .mint-w.ed.lockt{background:rgba(var(--tg-rgb,255,255,255),calc(.03*var(--tg-k,1)));border-color:rgba(180,210,235,.1)}
body.dark #mhDetail .mint-w.ed.lockt .mint-vl,
body.dark #hhDetail .mint-w.ed.lockt .mint-vl,
body.dark #view-settings .mint-w.ed.lockt .mint-vl{color:#8494A0}
body.dark #mhDetail .mint-noedit,
body.dark #hhDetail .mint-noedit,
body.dark #view-settings .mint-noedit{background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.14)}
body.dark #mhDetail .mint-noedit .t,
body.dark #hhDetail .mint-noedit .t,
body.dark #view-settings .mint-noedit .t{color:#C6D3CE}
body.dark #mhDetail .mint-noedit .s,
body.dark #hhDetail .mint-noedit .s,
body.dark #view-settings .mint-noedit .s{color:#8C9AA5}

/* ============================================================
   THE CALENDAR INSIDE A TILE.  7 September 2026. A REAL FIX, NOT A NUDGE.

   His report: the calendar "is located on the back of the fields", and "when I am moving the
   mouse to another area it's appearing on the left up side ... it must stay on it's place".

   MEASURED, AND IT IS TWO STATES OF ONE CAUSE - the popover's position is written as INLINE
   STYLE by the placement interop, and everything else is a consequence of that:

     BEFORE the interop lands, .dp-pop is `position:absolute; z-index:40`. Forty loses to the
     sibling tiles that paint after it, which is screenshot 1 exactly - the calendar UNDER
     Marital status and Employment status.

     AFTER it lands it is `position:fixed` with inline left/top. Measured live: left:42px,
     top:67px - two-digit numbers for something 1432px across the screen, because
     .pd-card.mint carries BOTH `backdrop-filter` AND `container-type:inline-size`, and EITHER
     ONE makes the card the containing block for a fixed descendant. MHpop corrects for that by
     measuring where the box actually landed - but the correction lives in an inline style, and
     ANY re-render of the tile grid throws those inline styles away. What is left is
     `position:absolute` against the card: the top-left corner. Screenshot 2.

   SO THE FIX IS TO STOP DEPENDING ON INLINE STYLE. Inside a tile the calendar is anchored by
   CSS to the tile itself - the same way the dropdown list already is - so its position is a
   fact of the stylesheet, not a value some JS wrote once and a re-render can erase. It cannot
   drift, because there is nothing left to drift.

   `!important` IS LOAD-BEARING HERE AND IS NOT LAZINESS: the interop writes inline
   position/left/top, and an inline style beats any selector. This is the one way to hold the
   anchor without editing MhDatePicker, which is a SHARED control used in 28 places across 15
   files - changing its placement engine to fix one card is the shared-component blast radius.
   Every rule below is scoped `#mhDetail .mint-w.ed`, so the calendar behaves exactly as it
   always has in all 28 of those other places.
   ============================================================ */
/* STATIC, so the calendar anchors to the TILE and not to this inner wrapper. Measured before
   this line: dx 30, dy -6 - the popover was hanging off .dp, which is inset by the tile's own
   padding and only ~24px tall, so "100%" meant the value line rather than the tile. Same
   correction .mint-sel needed; an anchor is only as good as the box it is measured from. */
#mhDetail .mint-w.ed .dp,
#hhDetail .mint-w.ed .dp,
#view-settings .mint-w.ed .dp,
#cnPop .mint-w.ed .dp{position:static}
#mhDetail .mint-w.ed .dp-pop,
#hhDetail .mint-w.ed .dp-pop,
#view-settings .mint-w.ed .dp-pop,
#cnPop .mint-w.ed .dp-pop{
  position:absolute !important;
  top:calc(100% + 9px) !important;
  left:-1px !important;
  right:auto !important;
  bottom:auto !important;
  z-index:130;
}
/* Near the bottom of the pane it opens UPWARD. placeSel measures the room and puts `.dpup` on
   the TILE - on the tile, not the popover, because the tile is the element that survives a
   re-render of its own contents. */
#mhDetail .mint-w.ed.dpup .dp-pop,
#hhDetail .mint-w.ed.dpup .dp-pop,
#view-settings .mint-w.ed.dpup .dp-pop,
#cnPop .mint-w.ed.dpup .dp-pop{
  top:auto !important;
  bottom:calc(100% + 9px) !important;
}

/* THE TILE AND ITS CARD BOTH RISE WHILE THE CALENDAR IS OPEN - and the card is the one that
   matters. z-index on the popover was never going to be enough: its stacking context is the
   card, and the next card is a later sibling that paints after ALL of it. Same law as the
   dropdown, and `:has()` keeps it self-clearing. */
#mhDetail .mint-w.ed:has(.dp.open),
#hhDetail .mint-w.ed:has(.dp.open),
#view-settings .mint-w.ed:has(.dp.open),
#cnPop .mint-w.ed:has(.dp.open){z-index:131}
#mhDetail .pd-card.mint:has(.dp.open),
#hhDetail .pd-card.mint:has(.dp.open),
#view-settings .pd-card.mint:has(.dp.open),
#cnPop .pd-card.mint:has(.dp.open){position:relative;z-index:400}
#mhDetail .pd-grid:has(.dp.open){position:relative;z-index:400}

/* ============================================================
   WHILE A PICKER IS OPEN, THE REST OF THE CARD HOLDS STILL.

   His words: "when date picker triggered the back fields shouldn't do anything any behavior
   until the date selected otherwise it will make issues for staff."

   He is right, and it is not only cosmetic. A tile that lifts under the calendar drags the
   eye away from the thing being chosen, and a tile that is still clickable can be clicked
   THROUGH the moment the calendar closes. So every OTHER tile stops lifting and stops taking
   the pointer until the picker closes. The open one is exempt, obviously.

   `pointer-events:none` on the siblings rather than a full-screen backdrop, deliberately: a
   backdrop swallows the click that closes the picker, which is the inert-backdrop law and the
   reason the app's dropdowns use a passive capture listener instead.
   ============================================================ */
#mhDetail .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)),
#hhDetail .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)),
#mhDetail .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen),
#hhDetail .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen),
#view-settings .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)),
#cnPop .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)),
#view-settings .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen),
#cnPop .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen){
  pointer-events:none;
}
#mhDetail .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)):hover,
#hhDetail .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)):hover,
#mhDetail .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen):hover,
#hhDetail .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen):hover,
#view-settings .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)):hover,
#cnPop .pd-card.mint:has(.dp.open) .mint-w.ed:not(:has(.dp.open)):hover,
#view-settings .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen):hover,
#cnPop .pd-card.mint:has(.mint-w.selopen) .mint-w.ed:not(.selopen):hover{
  transform:none;box-shadow:none;background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));
}

/* THE DATE FIELD KEEPS ITS BEHAVIOUR AND LOSES ITS SHELL. MhDatePicker is the house control -
   masked MM/DD/YYYY entry plus a calendar popover, and the field standard forbids replacing it
   with a native <input type=date>. So the COMPONENT stays and only its chrome is stripped: the
   well, the border, the 44px height and the padding go, and what is left is a caret on the
   value line plus the calendar the standard requires. Behaviour intact, look unchanged. */
#mhDetail .mint-w.ed .mh-dp-tile,
#hhDetail .mint-w.ed .mh-dp-tile,
#mhDetail .mint-w.ed .mh-dp-tile .dp-field,
#hhDetail .mint-w.ed .mh-dp-tile .dp-field,
#mhDetail .mint-w.ed .mh-dp-tile .icf,
#view-settings .mint-w.ed .mh-dp-tile,
#cnPop .mint-w.ed .mh-dp-tile,
#view-settings .mint-w.ed .mh-dp-tile .dp-field,
#cnPop .mint-w.ed .mh-dp-tile .dp-field{
  background:none;border:0;box-shadow:none;padding:0;min-height:0;height:auto;border-radius:0;
}
#mhDetail .mint-w.ed .mh-dp-tile .dpf-mask,
#hhDetail .mint-w.ed .mh-dp-tile .dpf-mask,
#mhDetail .mint-w.ed .mh-dp-tile input,
#hhDetail .mint-w.ed .mh-dp-tile input,
#view-settings .mint-w.ed .mh-dp-tile .dpf-mask,
#cnPop .mint-w.ed .mh-dp-tile .dpf-mask,
#view-settings .mint-w.ed .mh-dp-tile input,
#cnPop .mint-w.ed .mh-dp-tile input{
  padding:0;border:0;background:none;box-shadow:none;height:24px;line-height:24px;
  font-family:var(--font-sans);font-size:16px;font-weight:650;color:#1C2A25;
}
#mhDetail .mint-w.ed .mh-dp-tile input::placeholder,
#hhDetail .mint-w.ed .mh-dp-tile input::placeholder,
#view-settings .mint-w.ed .mh-dp-tile input::placeholder,
#cnPop .mint-w.ed .mh-dp-tile input::placeholder{color:#8A9A94;font-weight:650;opacity:1}
body.dark #mhDetail .mint-w.ed .mh-dp-tile input,
body.dark #hhDetail .mint-w.ed .mh-dp-tile input,
body.dark #view-settings .mint-w.ed .mh-dp-tile input{color:#EAF0F4}

/* "N left" - the thing he actually asked the bar to tell him: "it will count how many fields
   are remain to fill". It sits inside the existing chip rather than beside it, so the capsule
   keeps its shape and the header does not grow when the card flips into edit. */
#mhDetail .mint-chip .mint-left,
#hhDetail .mint-chip .mint-left,
#view-settings .mint-chip .mint-left,
#cnPop .mint-chip .mint-left,
#view-help .mint-chip .mint-left {
  margin-right:8px;padding:2px 8px;border-radius:999px;
  background:rgba(47,107,87,.14);box-shadow:inset 0 0 0 1px rgba(47,107,87,.2);
  color:var(--brand-600);font-size:10px;font-weight:800;letter-spacing:.06em;text-transform:uppercase;
}
body.dark #mhDetail .mint-chip .mint-left,
body.dark #hhDetail .mint-chip .mint-left,
body.dark #view-settings .mint-chip .mint-left,
body.dark #view-help .mint-chip .mint-left {
  background:rgba(143,187,165,.18);box-shadow:inset 0 0 0 1px rgba(143,187,165,.24);color:#B7D6C8;
}

/* ============================================================
   RAIL EXTRAS - drawn ON the pine rail gradient, so these are the only
   rules in the sheet that use white-alpha rather than the ink tokens.
   ============================================================ */
#mhDetail .cl-railrow{display:grid;grid-template-columns:1fr 1fr;gap:9px}
#mhDetail .cl-railbtn{display:flex;align-items:center;justify-content:center;gap:8px;min-height:40px;padding:0 12px;
  border:1px solid rgba(255,255,255,.18);border-right-color:var(--tg-edge-r,rgba(255,255,255,.18));border-bottom-color:var(--tg-edge-b,rgba(255,255,255,.18));border-radius:var(--r-md);background:rgba(var(--tg-rgb,255,255,255),calc(.08*var(--tg-k,1)));
  font-family:var(--font-sans);font-size:12.5px;font-weight:700;color:rgba(255,255,255,.92);cursor:pointer;
  transition:background var(--t),border-color var(--t),transform var(--t)}
#mhDetail .cl-railbtn:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.16*var(--tg-k,1)));border-color:rgba(255,255,255,.3)}
#mhDetail .cl-railbtn:active{transform:translateY(1px)}
#mhDetail .cl-railbtn .rb-ico{width:17px;height:17px;flex:none;stroke:currentColor;stroke-width:1.8;fill:none;stroke-linecap:round;stroke-linejoin:round}
#mhDetail .cl-railbtn span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* documents-collected ring */
#mhDetail .cl-health{display:flex;align-items:center;gap:14px}
#mhDetail .cl-ring2{position:relative;width:64px;height:64px;flex:none}
#mhDetail .cl-ring2 svg{width:100%;height:100%;display:block}
#mhDetail .cl-ring2 b{position:absolute;inset:0;display:grid;place-items:center;font-size:14.5px;font-weight:800;color:#fff}
#mhDetail .cl-health .tx{min-width:0}
#mhDetail .cl-health .t{font-size:12.5px;font-weight:700;color:rgba(255,255,255,.92);line-height:1.3}
#mhDetail .cl-health .s{margin-top:3px;font-size:11.5px;font-weight:600;color:rgba(255,255,255,.6)}
#mhDetail .cl-health .s b{color:rgba(255,255,255,.9)}

/* DOCUMENT STATUS - collapsible, the heading is the toggle */
#mhDetail .cl-dswrap{display:flex;flex-direction:column;gap:9px}
#mhDetail .cl-seclab{display:flex;align-items:center;gap:8px;margin:0;font-size:10.5px;font-weight:700;
  letter-spacing:.1em;text-transform:uppercase;color:rgba(255,255,255,.6)}
#mhDetail .cl-secclk{cursor:pointer;user-select:none;transition:color var(--t)}
#mhDetail .cl-secclk:hover{color:rgba(255,255,255,.9)}
#mhDetail .cl-secclk:focus-visible{outline:2px solid rgba(255,255,255,.5);outline-offset:3px;border-radius:4px}
#mhDetail .cl-secword{margin-left:auto;font-size:10.5px;font-weight:800;letter-spacing:.04em;text-transform:none;
  padding:3px 9px;border-radius:999px;white-space:nowrap}
#mhDetail .cl-secword.ok{background:rgba(143,211,180,.18);color:#8FD3B4}
#mhDetail .cl-secword.attn{background:rgba(216,155,61,.2);color:#E9B769}
#mhDetail .cl-secarr{width:14px;height:14px;flex:none;transition:transform var(--t)}
#mhDetail .cl-secarr.open{transform:rotate(90deg)}

#mhDetail .cl-dslist{display:flex;flex-direction:column;gap:8px}
#mhDetail .cl-alert{display:flex;align-items:flex-start;gap:10px;padding:10px 11px;border-radius:var(--r-md);
  background:rgba(var(--tg-rgb,255,255,255),calc(.07*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(255,255,255,.12)}
#mhDetail .cl-alert.clk{cursor:pointer;transition:background var(--t)}
#mhDetail .cl-alert.clk:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.14*var(--tg-k,1)))}
#mhDetail .cl-alert .ic{width:26px;height:26px;flex:none;display:grid;place-items:center;border-radius:8px;
  background:rgba(var(--tg-rgb,255,255,255),calc(.1*var(--tg-k,1)))}
#mhDetail .cl-alert .ic svg{width:15px;height:15px}
#mhDetail .cl-alert .t{font-size:12.5px;font-weight:700;color:rgba(255,255,255,.94);line-height:1.3}
#mhDetail .cl-alert .s{margin-top:2px;font-size:11px;font-weight:600;color:rgba(255,255,255,.58);line-height:1.35}
/* severity: danger red, warning amber, healthy mint - the SAME three states the
   overview KPI cards use, driven by the one shared classifier. */
#mhDetail .cl-alert.d .ic{background:rgba(192,71,63,.28);color:#F0A9A3}
#mhDetail .cl-alert.w .ic{background:rgba(216,155,61,.26);color:#E9B769}
#mhDetail .cl-alert.ok .ic{background:rgba(143,211,180,.2);color:#8FD3B4}

/* ============================================================
   OVERVIEW - the expiry KPI cards
   ============================================================ */
/* The card is the ORIGINAL vertical KPI tile restored (CEO, Jul 27 2026) - ring on top,
   centred, label / date / status stacked beneath - rebuilt on the detail-shell tokens rather
   than the old #clDetail ones, and scaled UP from the original 70px ring / 14.5px number. */
/* padding-top gives the hover LIFT somewhere to go. `.m-body` is the scroll container, its
   padding-top is 0 and this row is the first thing in it, so the card sits flush on the
   boundary at rest - `transform:translateY(-3px)` on hover pushed the top edge OUT of an
   overflow:auto box and Chrome clipped it, flattening both top corners. 10px clears the lift
   and the upward bleed of the hover shadow. */
#mhDetail .cl-exprow{display:grid;grid-template-columns:repeat(4,1fr);gap:14px;padding-top:10px;margin-bottom:16px}
#mhDetail .cl-exp{position:relative;display:flex;flex-direction:column;align-items:center;text-align:center;gap:12px;
  padding:22px 16px 19px;background:var(--f-focus-bg);border:1px solid var(--line);border-radius:var(--r-lg);
  cursor:pointer;min-width:0;box-shadow:0 2px 10px rgba(33,58,51,.05);
  transition:border-color var(--t),box-shadow var(--t),transform var(--t),background var(--t)}
#mhDetail .cl-exp:hover{transform:translateY(-3px);border-color:var(--brand-600);box-shadow:0 14px 30px -10px var(--brand-glow)}
#mhDetail .cl-exp:focus-visible{outline:2px solid var(--brand-600);outline-offset:2px}
/* The open-Documents affordance is ALWAYS visible, as in the original - a card you can click
   should say so before you hover it. */
#mhDetail .cl-exp-arrow{position:absolute;top:12px;right:12px;width:28px;height:28px;border-radius:50%;
  border:1.5px solid var(--line);background:var(--f-focus-bg);color:var(--ink-2);display:grid;place-items:center;
  transition:background var(--t),border-color var(--t),color var(--t),transform var(--t)}
#mhDetail .cl-exp-arrow svg{width:14px;height:14px}
#mhDetail .cl-exp:hover .cl-exp-arrow{background:linear-gradient(135deg,var(--dv-rail-a),var(--dv-rail-b));
  border-color:transparent;color:#fff;transform:translate(1px,-1px)}
/* Ring 92px (was 70) and the number 24px (was 14.5) - the CEO asked for the DAYS figure to
   read big, so it is the loudest thing on the card. */
#mhDetail .cl-exp .ring{position:relative;width:92px;height:92px;flex:none}
#mhDetail .cl-exp .ring svg{width:100%;height:100%;display:block}
#mhDetail .cl-exp .rv{position:absolute;inset:0;display:flex;flex-direction:column;align-items:center;justify-content:center;
  gap:2px;line-height:1;text-align:center}
#mhDetail .cl-exp .rv b{font-size:24px;font-weight:800;line-height:1;letter-spacing:.2px;color:var(--ink-1);font-variant-numeric:tabular-nums}
#mhDetail .cl-exp .rv span{font-size:9px;font-weight:800;letter-spacing:.09em;text-transform:uppercase;color:var(--ink-4);line-height:1}
/* the figure itself carries the severity, exactly as the original did */
#mhDetail .cl-exp.x-expired .rv b,#mhDetail .cl-exp.x-danger .rv b{color:var(--danger)}
#mhDetail .cl-exp.x-warn .rv b{color:#A9761F}
#mhDetail .cl-exp.x-none .rv b{font-size:15px;color:var(--ink-4)}
#mhDetail .cl-exp .xm{display:flex;flex-direction:column;align-items:center;min-width:0;width:100%}
#mhDetail .cl-exp .xt{display:flex;align-items:center;justify-content:center;gap:6px;font-size:10.5px;font-weight:800;
  letter-spacing:.075em;text-transform:uppercase;color:var(--ink-3);max-width:100%}
#mhDetail .cl-exp .xt svg{width:14px;height:14px;flex:none;stroke:currentColor}
#mhDetail .cl-exp:hover .xt{color:var(--brand-600)}
#mhDetail .cl-exp .xd{margin-top:8px;font-size:15px;font-weight:800;color:var(--ink-1);font-variant-numeric:tabular-nums}
#mhDetail .cl-exp .xs{margin-top:5px;font-size:11px;font-weight:700;color:var(--ink-3);line-height:1.35}
/* "Valid - N days remaining" is green in the original, and stays green: this is a STATUS
   readout on a KPI tile, not a form field, so it is not covered by the no-green field rule. */
#mhDetail .cl-exp .xs.ok{color:var(--brand-600)}
#mhDetail .cl-exp .xs.bad{color:var(--danger)}
#mhDetail .cl-exp .xs.warn{color:#B4802E}
#mhDetail .cl-exp .xs.none{color:var(--ink-4)}
/* Like the original, the CARD stays on the plain surface - the severity is carried by the
   figure in the ring and by the status line, not by washing the whole tile. Only a border
   tint is kept so an expired document is still findable at a glance across four cards. */
#mhDetail .cl-exp.x-expired,#mhDetail .cl-exp.x-danger{border-color:rgba(192,71,63,.45)}
#mhDetail .cl-exp.x-warn{border-color:rgba(216,155,61,.5)}
#mhDetail .cl-exp.x-none{border-style:dashed}
body.dark #mhDetail .cl-exp .xs.warn{color:#E9B769}
body.dark #mhDetail .cl-exp.x-warn .rv b{color:#E9B769}

/* ============================================================
   THE HEADLINE SLOT JOINS THE MINT MATERIAL.  7 September 2026.

   His words: "change the Upcoming document expiry dates will appear here background
   same to the KPI details cards background that will match the fulley design".

   HE POINTED AT ONE BAR AND THE CAUSE IS THE SAME ONE AS 6 SEP: it was painted
   `--f-rest-bg`, which is FLAT #DFE4EA - the exact colour the whole Mint pass exists
   to remove. The tab row above it was wearing it too. One root cause, two symptoms,
   and both are fixed here rather than tinted away.

   IT TAKES THE "NOT SET" HALF OF THE RECIPE, NOT THE LIVE HALF, because that is
   literally what it says: nothing is on file yet. So glass + DASHED + no lift, the
   same sentence every empty field tile on this record already speaks. When documents
   DO exist the .cl-exp cards replace it, and they take the live half below.

   THE ICON BUBBLE HAD TO MOVE WITH IT. `--brand-tint` is a dark SLATE-pine, and at
   12% over a white tile it has no chroma left - it renders GREY. That was fine on the
   old opaque #DFE4EA panel; the moment the bar became frosted glass it would have been
   the same grey smudge he made me sweep out of the Documents tab on 6 Sep. Pine tint
   plus a pine hairline, so the icon keeps its brand presence on the new material.
   ============================================================ */
#mhDetail .cl-exp-empty{display:flex;align-items:center;gap:14px;padding:18px 20px;margin-bottom:16px;
  border:1px dashed rgba(30,55,48,.18);border-radius:22px;
  background:var(--mint-glass);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  box-shadow:none}
#mhDetail .cl-exp-empty .ic{width:42px;height:42px;flex:none;display:grid;place-items:center;border-radius:var(--r-md);
  background:rgba(47,107,87,.13);box-shadow:inset 0 0 0 1px rgba(47,107,87,.18);color:var(--brand-600)}
body.dark #mhDetail .cl-exp-empty{border-color:rgba(180,210,235,.16)}
body.dark #mhDetail .cl-exp-empty .ic{
  background:rgba(143,187,165,.16);box-shadow:inset 0 0 0 1px rgba(143,187,165,.22)}
#mhDetail .cl-exp-empty .ic svg{width:21px;height:21px;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}
#mhDetail .cl-exp-empty .t{font-size:13.5px;font-weight:700;color:var(--ink-1)}
#mhDetail .cl-exp-empty .s{margin-top:3px;font-size:12px;font-weight:600;color:var(--ink-3);line-height:1.4}

/* ============================================================
   LIST ROW - enrollments, consents. One shape for both.
   ============================================================ */
#mhDetail .cl-prow,
#hhDetail .cl-prow{display:flex;align-items:center;gap:12px;padding:11px 0;border-bottom:1px solid var(--line)}
#mhDetail .cl-prow:last-child,
#hhDetail .cl-prow:last-child{border-bottom:none;padding-bottom:0}
#mhDetail .cl-av,
#hhDetail .cl-av{width:36px;height:36px;flex:none;border-radius:11px;display:grid;place-items:center;
  font-size:12px;font-weight:800;color:#fff;letter-spacing:.02em}
#mhDetail .cl-prow .pi,
#hhDetail .cl-prow .pi{min-width:0;flex:1}
#mhDetail .cl-prow .nm,
#hhDetail .cl-prow .nm{font-size:14px;font-weight:700;color:var(--ink-1);overflow-wrap:anywhere}
#mhDetail .cl-prow .sub,
#hhDetail .cl-prow .sub{margin-top:2px;font-size:12px;font-weight:600;color:var(--ink-3)}
#mhDetail .cl-consent-ic{width:36px;height:36px;flex:none;border-radius:11px;display:grid;place-items:center}
#mhDetail .cl-consent-ic svg{width:18px;height:18px}
#mhDetail .cl-consent-ic.on{background:var(--brand-tint);color:var(--brand-600)}
#mhDetail .cl-consent-ic.off{background:var(--f-rest-bg);color:var(--ink-4)}

/* ============================================================
   TIMELINE - key dates, journey history
   ============================================================ */
#mhDetail .cl-tl{position:relative;padding:0 0 18px 22px;border-left:2px solid var(--line);margin-left:6px}
#mhDetail .cl-tl:last-child{border-left-color:transparent;padding-bottom:0}
#mhDetail .cl-tldot{position:absolute;left:-7px;top:2px;width:12px;height:12px;border-radius:50%;
  background:var(--brand-600);box-shadow:0 0 0 3px var(--f-focus-bg)}
#mhDetail .cl-tldot.warn{background:#C97B5A}
#mhDetail .cl-tldot.muted{background:var(--ink-4)}
#mhDetail .cl-tlwhen{font-size:10.5px;font-weight:700;letter-spacing:.07em;text-transform:uppercase;color:var(--ink-4)}
#mhDetail .cl-tlttl{margin-top:4px;font-size:14px;font-weight:700;color:var(--ink-1);overflow-wrap:anywhere}
#mhDetail .cl-tlsub{margin-top:2px;font-size:12px;font-weight:600;color:var(--ink-3)}

/* ============================================================
   TABLE - the movement / audit trail. Scrolls in its OWN box so the
   pane never scrolls sideways.
   ============================================================ */
#mhDetail .cl-tablewrap{margin-top:16px;overflow-x:auto;border:1px solid var(--line);border-radius:var(--r-md)}
#mhDetail .cl-table{width:100%;border-collapse:collapse;font-size:12.5px;min-width:640px}
#mhDetail .cl-table th{position:sticky;top:0;text-align:left;padding:10px 13px;background:var(--f-rest-bg);
  font-size:10.5px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3);white-space:nowrap}
#mhDetail .cl-table td{padding:11px 13px;border-top:1px solid var(--line);color:var(--ink-2);font-weight:600;vertical-align:top}
#mhDetail .cl-table td.empty{color:var(--ink-4);font-style:italic}

/* ============================================================
   CASE NOTES
   ============================================================ */
#mhDetail .cl-noteadd{position:relative;display:flex;align-items:flex-end;gap:11px;margin-bottom:18px}
#mhDetail .cl-noteadd .icf{flex:1}
#mhDetail .cl-noteadd .ui-btn{flex:none}
#mhDetail .cl-note{padding:13px 0;border-top:1px solid var(--line)}
#mhDetail .cl-note-h{display:flex;align-items:center;gap:9px;margin-bottom:7px}

/* EDIT REPLACED DELETE (CEO, 31 Aug 2026). The X is no longer drawn on any comment
   screen, so the old delete rule went with its button.

   margin-left:auto rather than a spacer keeps the control at the far end when the
   author's name wraps. No justify-content is needed: this button is not a flex
   container, so MudBlazor's bare `button{justify-content:center}` has nothing to
   centre - unlike the mention rows, which are. */
#mhDetail .cl-cmtedit{
  margin-left:auto; flex:none; padding:2px 9px;
  border:1px solid var(--line); border-radius:999px; background:none; cursor:pointer;
  font-family:var(--font-sans); font-size:11.5px; font-weight:700; color:var(--ink-3);
  transition:background .14s ease, color .14s ease, border-color .14s ease;
}
#mhDetail .cl-cmtedit:hover{background:var(--brand-tint); color:var(--brand); border-color:var(--brand)}

/* "edited" - a MARKER, not a badge. Readable and ignorable at once: a colleague
   scanning the thread should not have their eye pulled to it, but anyone asking "did
   this say something else?" finds the answer without leaving the row. Who and when is
   on the title attribute. */
#mhDetail .cl-note-edited{
  flex:none; font-size:11px; font-weight:650; font-style:italic; color:var(--ink-4);
  cursor:help;
}

/* THE IN-PLACE EDITOR - the body is replaced by the field, so the message stays in the
   thread it belongs to instead of jumping into a modal. */
#mhDetail .cl-cmtedit-wrap{margin-top:4px}
#mhDetail .cl-cmtedit-wrap .icf.area textarea{min-height:64px}
#mhDetail .cl-cmtedit-acts{display:flex; justify-content:flex-end; gap:8px; margin-top:8px}
#mhDetail .cl-cmtedit-err{margin-top:6px; font-size:12px; font-weight:600; color:var(--danger-ink)}
/* SMALL BUTTONS, as asked. Save carries the weight; Cancel is quiet but never hidden -
   somebody who opens the editor and thinks better of it needs a way out that is not
   "save something". */
#mhDetail .cl-cmtedit-btn{
  padding:5px 13px; border-radius:9px; cursor:pointer;
  font-family:var(--font-sans); font-size:12px; font-weight:700;
  transition:background .14s ease, color .14s ease, border-color .14s ease, opacity .14s ease;
}
#mhDetail .cl-cmtedit-btn.ghost{border:1px solid var(--line); background:none; color:var(--ink-2)}
#mhDetail .cl-cmtedit-btn.ghost:hover{background:rgba(40,60,80,.06); color:var(--ink-1)}
#mhDetail .cl-cmtedit-btn.go{border:1px solid var(--brand); background:var(--brand); color:#fff}
#mhDetail .cl-cmtedit-btn.go:hover{filter:brightness(1.06)}
#mhDetail .cl-cmtedit-btn:disabled{opacity:.5; cursor:not-allowed}
#mhDetail .cl-note-av{width:28px;height:28px;flex:none;border-radius:50%;display:grid;place-items:center;color:#fff}
#mhDetail .cl-note-av svg{width:16px;height:16px}
#mhDetail .cl-note-who{font-size:13px;font-weight:800;color:var(--ink-1)}
#mhDetail .cl-note-when{margin-left:auto;font-size:11px;font-weight:650;color:var(--ink-4);white-space:nowrap}
#mhDetail .cl-note-b{font-size:13.5px;line-height:1.6;color:var(--ink-2);white-space:pre-wrap;overflow-wrap:anywhere}

/* @-mention picker */
#mhDetail .cl-mentionpop{position:absolute;left:0;bottom:calc(100% + 6px);z-index:60;width:min(320px,100%);
  background:var(--f-focus-bg);border:1px solid var(--f-focus-bd);border-radius:var(--r-md);box-shadow:var(--f-focus-sh);overflow:hidden}
#mhDetail .cl-mentionpop.mh-pop-below{bottom:auto;top:calc(100% + 6px)}
#mhDetail .cl-mentionscroll{max-height:232px;overflow-y:auto;padding:5px}
/* justify-content:flex-start is NOT redundant. MudBlazor.min.css ships a bare
   `button{justify-content:center}` (measured in the running app, 31 Aug 2026), and a
   bare element selector is beaten by any class - but ONLY if that class actually
   declares the property. This rule declared `text-align:left` and nothing else, and
   text-align does not govern the main axis of a flex container, so every row centred
   its avatar+name pair: the four candidates started at x=168/165/166/180 instead of a
   single left edge. The Teams (.tm-mentionopt) and Student Detail (.sd-mentionopt)
   pickers already carry this line; this one was the outlier. Same trap as the Planner
   event menu - see .ed-more-item in mh-theme.css. */
#mhDetail .cl-mentionopt{display:flex;align-items:center;justify-content:flex-start;gap:9px;width:100%;padding:8px 9px;border:none;border-radius:var(--r-sm);
  background:none;cursor:pointer;text-align:left;font-family:var(--font-sans)}
#mhDetail .cl-mentionopt:hover,#mhDetail .cl-mentionopt.on{background:var(--brand-tint)}
#mhDetail .cl-mentionav{width:26px;height:26px;flex:none;border-radius:50%;display:grid;place-items:center;
  font-size:10.5px;font-weight:800;color:#fff}
#mhDetail .cl-mentionnm{font-size:13px;font-weight:700;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}

/* ============================================================
   DOCUMENTS
   ============================================================ */
#mhDetail .cl-docgrid{display:grid;grid-template-columns:repeat(3,1fr);gap:13px}
#mhDetail .cl-doc{display:flex;flex-direction:column;gap:10px;padding:15px 16px;background:var(--f-rest-bg);
  border:1px solid var(--line);border-radius:var(--r-lg);min-width:0}
#mhDetail .cl-doc .dt{display:flex;align-items:center;gap:9px;min-width:0}
#mhDetail .cl-doc .dt .ic{width:30px;height:30px;flex:none;display:grid;place-items:center;border-radius:9px;
  background:var(--brand-tint);color:var(--brand-600)}
#mhDetail .cl-doc .dt .ic svg{width:16px;height:16px}
#mhDetail .cl-doc .dt .nm{font-size:13.5px;font-weight:800;color:var(--ink-1);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#mhDetail .cl-doc .dt .exp{margin-left:auto;font-size:8.5px;font-weight:800;letter-spacing:.08em;padding:3px 7px;
  border-radius:999px;background:var(--brand-tint-2);color:var(--brand-600);white-space:nowrap}
#mhDetail .cl-pillst{align-self:flex-start;font-size:11px;font-weight:700;padding:4px 10px;border-radius:999px;white-space:nowrap}
#mhDetail .cl-pillst.ps-ok{background:var(--brand-tint);color:var(--brand-600)}
#mhDetail .cl-pillst.ps-expiring{background:rgba(216,155,61,.2);color:#B4802E}
#mhDetail .cl-pillst.ps-expired{background:var(--danger-bg);color:var(--danger-ink)}
#mhDetail .cl-pillst.ps-missing{background:rgba(40,60,80,.09);color:var(--ink-3)}
#mhDetail .cl-doc .dates{display:grid;grid-template-columns:1fr 1fr;gap:10px}
#mhDetail .cl-doc .dates label{display:block;font-size:9.5px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-4)}
#mhDetail .cl-doc .dates b{display:block;margin-top:3px;font-size:12.5px;font-weight:700;color:var(--ink-1)}
#mhDetail .cl-doc .dates b.none{color:var(--ink-4);font-weight:600}
#mhDetail .cl-doc .acts{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:auto;padding-top:4px}
#mhDetail .cl-doc .file{display:inline-flex;align-items:center;gap:6px;font-size:11.5px;font-weight:700;color:var(--brand-600);
  text-decoration:none;min-width:0;max-width:100%;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#mhDetail .cl-doc .file svg{width:13px;height:13px;flex:none;stroke:currentColor;stroke-width:1.8;fill:none}
#mhDetail .cl-doc .file:hover{text-decoration:underline}
#mhDetail .cl-doc .file.none{color:var(--ink-4);font-weight:600}
/* STORED size, beside the file name (CEO, Jul 30 2026). This is what is on disk AFTER the
   browser-side shrink, so it is the number that shows whether compression did its job.
   flex:none so it never squeezes the file name; tabular numerals so a stack of documents
   lines their sizes up. */
#mhDetail .cl-doc .file-size{flex:none;font-size:10.5px;font-weight:800;color:var(--ink-3);
  background:rgba(40,60,80,.07);border-radius:7px;padding:2px 7px;margin-left:8px;
  font-variant-numeric:tabular-nums;white-space:nowrap}
/* Dragging a file OVER the zone - the affordance that was missing entirely, so a drop felt
   like it did nothing before the browser navigated away. */
/* Re-encoding a 1-5 MB scan takes a second or two - the zone says so rather than sitting
   silent, which is how a working feature gets reported as broken. */
#mhDetail .cl-docmodal .drop.busy{border-style:solid;border-color:var(--brand-600);
  background:rgba(46,74,67,.06);color:var(--brand-600)}
#mhDetail .cl-docmodal .drop.busy svg{opacity:.55;animation:docPulse 1s ease-in-out infinite}
@keyframes docPulse{0%,100%{opacity:.35}50%{opacity:.9}}
@media (prefers-reduced-motion:reduce){#mhDetail .cl-docmodal .drop.busy svg{animation:none}}
#mhDetail .cl-docmodal .drop.dragging{border-color:var(--brand-600);border-style:solid;
  background:rgba(46,74,67,.08);color:var(--brand-600)}
/* What the shrink did to the file just picked, under the drop zone in the document modal. */
#mhDetail .cl-docmodal .doc-shrunk{margin:2px 0 8px;font-size:11.5px;font-weight:700;
  color:var(--brand-600);background:rgba(46,74,67,.10);border-radius:8px;padding:7px 10px}
#mhDetail .cl-dbtn{margin-left:auto;height:30px;padding:0 12px;border-radius:var(--r-sm);border:1px solid var(--f-focus-bd);
  background:var(--f-focus-bg);font-family:var(--font-sans);font-size:11.5px;font-weight:700;color:var(--brand-600);cursor:pointer;
  transition:background var(--t),border-color var(--t)}
#mhDetail .cl-dbtn+.cl-dbtn{margin-left:0}
#mhDetail .cl-dbtn:hover{background:var(--brand-tint)}
#mhDetail .cl-dbtn.danger{color:var(--danger)}
#mhDetail .cl-dbtn.danger:hover{background:var(--danger-bg);border-color:rgba(192,71,63,.35)}
#mhDetail .cl-docadd{align-items:center;justify-content:center;gap:9px;border-style:dashed;background:none;cursor:pointer;
  font-family:var(--font-sans);font-size:13px;font-weight:700;color:var(--brand-600);min-height:150px;
  transition:background var(--t),border-color var(--t)}
#mhDetail .cl-docadd:hover{background:var(--brand-tint);border-color:var(--brand-600)}
#mhDetail .cl-docadd .plus{width:36px;height:36px;display:grid;place-items:center;border-radius:50%;background:var(--brand-tint-2)}
#mhDetail .cl-docadd .plus svg{width:19px;height:19px;stroke:var(--brand-600)}

/* ============================================================
   DOCUMENT MODAL - a host overlay INSIDE the shell, so it is scoped
   #mhDetail (the old rules were scoped #clDetail and would not have
   applied here at all).
   ============================================================ */
#mhDetail .cl-docmodal{position:fixed;inset:0;z-index:120;display:grid;place-items:center;padding:24px;
  background:rgba(20,30,26,.55);backdrop-filter:blur(3px)}
#mhDetail .cl-docmodal .mbox{width:min(560px,100%);max-height:calc(88 * var(--mh-vh,1vh));display:flex;flex-direction:column;
  background:var(--bg-canvas);border:1px solid var(--line);border-radius:var(--r-lg);box-shadow:0 30px 70px rgba(0,0,0,.35);overflow:hidden}
#mhDetail .cl-docmodal .mhead{display:flex;align-items:center;gap:12px;padding:17px 20px;border-bottom:1px solid var(--line)}
#mhDetail .cl-docmodal .mhead h3{margin:0;flex:1;font-size:15px;font-weight:800;color:var(--ink-1)}
#mhDetail .cl-docmodal .x{width:32px;height:32px;flex:none;border:none;border-radius:9px;background:none;cursor:pointer;
  font-size:22px;line-height:1;color:var(--ink-3);transition:background var(--t),color var(--t)}
#mhDetail .cl-docmodal .x:hover{background:rgba(40,60,80,.08);color:var(--ink-1)}
#mhDetail .cl-docmodal .mbody{flex:1;min-height:0;overflow-y:auto;padding:18px 20px;display:flex;flex-direction:column;gap:14px}
#mhDetail .cl-docmodal .mfoot{display:flex;justify-content:flex-end;gap:10px;padding:15px 20px;border-top:1px solid var(--line)}
#mhDetail .cl-docmodal .mfoot .ui-btn{height:42px}
#mhDetail .cl-docmodal .mfld{display:flex;flex-direction:column;gap:7px}
#mhDetail .cl-docmodal .mfld>label{font-size:11.5px;font-weight:700;letter-spacing:.05em;text-transform:uppercase;color:var(--ink-3)}
#mhDetail .cl-docmodal .star{color:var(--danger)}
/* The raw controls reuse the inset cool shell so the modal matches the field kit. */
#mhDetail .cl-docmodal select:not(.mint-in),
#mhDetail .cl-docmodal input[type=text]:not(.mint-in),
#mhDetail .cl-docmodal textarea:not(.mint-in){width:100%;min-height:48px;padding:12px 15px;border-radius:var(--r-md);
  background:var(--f-rest-bg);border:1px solid var(--f-rest-bd);box-shadow:var(--f-rest-sh) inset;
  font-family:var(--font-sans);font-size:14.5px;font-weight:500;color:var(--ink-1);outline:none;transition:background var(--t),border-color var(--t),box-shadow var(--t)}
#mhDetail .cl-docmodal textarea:not(.mint-in){min-height:84px;resize:vertical;line-height:1.5}
#mhDetail .cl-docmodal select:not(.mint-in):focus,
#mhDetail .cl-docmodal input[type=text]:not(.mint-in):focus,
#mhDetail .cl-docmodal textarea:not(.mint-in):focus{background:var(--f-focus-bg);border-color:var(--f-focus-bd);box-shadow:var(--f-focus-sh)}
#mhDetail .cl-docmodal .bad:not(.mint-w){border-color:var(--danger);background:var(--danger-bg)}
#mhDetail .cl-docmodal .err{padding:10px 13px;border-radius:var(--r-sm);background:var(--danger-bg);
  font-size:12.5px;font-weight:700;color:var(--danger-ink)}
#mhDetail .cl-docmodal .drop{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:9px;
  min-height:118px;padding:18px;border:1.5px dashed var(--f-rest-bd);border-radius:var(--r-md);
  background:rgba(var(--tg-rgb,255,255,255),calc(.2*var(--tg-k,1)));font-size:13.5px;font-weight:650;color:var(--ink-3);cursor:pointer;text-align:center;
  transition:border-color var(--t),background var(--t),color var(--t)}
#mhDetail .cl-docmodal .drop:hover{border-color:var(--brand-600);background:var(--f-hover-bg);color:var(--ink-2)}
/* "A file is attached" is a VALUE, not a success state. The field standard has rest, hover,
   focus, error and locked - no green - so the filled state reads as a normal settled field
   (solid border, ink text) instead of painting the whole control brand green. The leading
   icon stays brand, which is what an active .icf icon does anyway. */
#mhDetail .cl-docmodal .drop.has{border-style:solid;border-color:var(--f-focus-bd);background:var(--f-focus-bg);color:var(--ink-1)}
#mhDetail .cl-docmodal .drop svg{width:23px;height:23px;stroke:var(--brand-600);stroke-width:1.8;fill:none;stroke-linecap:round;stroke-linejoin:round}
#mhDetail .cl-docmodal .cd-hidden-file{position:absolute;width:1px;height:1px;opacity:0;pointer-events:none}
#mhDetail .cl-docmodal .note{display:flex;align-items:flex-start;gap:9px;padding:11px 13px;border-radius:var(--r-sm);
  background:var(--brand-tint);font-size:12px;font-weight:650;color:var(--ink-2);line-height:1.45}
#mhDetail .cl-docmodal .note svg{width:16px;height:16px;flex:none;margin-top:1px;stroke:var(--brand-600);stroke-width:2;fill:none}

/* ============================================================
   FIELD NOTE - the one-line plain-English reason under a LOCKED field.
   A greyed field with no explanation reads as broken; with one it reads
   as "this value is owned somewhere else".
   ============================================================ */
#mhDetail .fld-note{margin:6px 0 0;font-size:11.5px;font-weight:600;color:var(--ink-4);line-height:1.4}
#mhDetail .field.locked .fld-note{color:var(--ink-3)}

/* ============================================================
   DOCUMENT STATUS AND FOLLOW-UP CARD (Overview).  4 September 2026.

   These twelve rules are UNCHANGED except for their selector. They were written
   for `.cl-narrowrail` - the copy of the ring and the status list that Overview
   re-hosted below 1100px, because the shell stops drawing RailExtras there. The
   ring and the list have now MOVED to Overview permanently, at every width, so
   that conditional copy is deleted and its light-theme overrides simply follow
   the content to its new home.

   WHY THEY EXIST AT ALL: the base .cl-health / .cl-alert rules are painted for the
   DARK PINE RAIL - white-alpha text on a dark ground. On a light card that is
   invisible, so every colour is re-stated in ink tokens. Nothing else changes -
   same layout, same sizes, same severity classes.
   ============================================================ */
#mhDetail .cl-doccard .cl-ring2 b{color:var(--ink-1)}
#mhDetail .cl-doccard .cl-health .t{color:var(--ink-1)}
#mhDetail .cl-doccard .cl-health .s{color:var(--ink-3)}
#mhDetail .cl-doccard .cl-health .s b{color:var(--ink-1)}
#mhDetail .cl-doccard .cl-dslist{margin-top:15px}
#mhDetail .cl-doccard .cl-alert{background:var(--f-rest-bg);box-shadow:inset 0 0 0 1px var(--line)}
#mhDetail .cl-doccard .cl-alert.clk:hover{background:var(--f-hover-bg)}
#mhDetail .cl-doccard .cl-alert .t{color:var(--ink-1)}
#mhDetail .cl-doccard .cl-alert .s{color:var(--ink-3)}
#mhDetail .cl-doccard .cl-alert.d .ic{background:var(--danger-bg);color:var(--danger)}
/* ABOUT TO EXPIRE IS ORANGE, not amber.  His call, 5 September 2026: "when documents are
   about to expire the color will change to orange". The old rgba(216,155,61) is a
   yellow-brown that reads as a note rather than a deadline - and it is the EXACT orange the
   Immigration timeline dot already uses, so the two surfaces describing the same date now
   say it in the same colour instead of two near-misses. */
#mhDetail .cl-doccard .cl-alert.w .ic{background:rgba(201,123,90,.18);color:#B4552F}
#mhDetail .cl-doccard .cl-alert.w .t{color:#8E4526}
body.dark #mhDetail .cl-doccard .cl-alert.w .ic{background:rgba(201,123,90,.26);color:#E8A98C}
body.dark #mhDetail .cl-doccard .cl-alert.w .t{color:#E8A98C}

/* AND EXPIRED IS RED IN THE TITLE TOO - his follow-up the same minute: "Work Authorization
   Expired ... change it to red". Only the icon carried the severity before; the words sat in
   the same ink as a healthy row, so the two states differed by a small glyph. The title is
   the thing you actually read, so it says it. Both severities now colour icon AND title. */
#mhDetail .cl-doccard .cl-alert.d .t{color:#B0332A}
body.dark #mhDetail .cl-doccard .cl-alert.d .t{color:#F0A9A3}
#mhDetail .cl-doccard .cl-alert.ok .ic{background:var(--brand-tint);color:var(--brand-600)}

/* ============================================================
   RESPONSIVE - container queries, NOT @media: the app-wide zoom makes
   viewport units lie, so everything here keys off the pane's own width.
   ============================================================ */
@container (max-width:1000px){
  #mhDetail .cl-exprow{grid-template-columns:repeat(2,1fr)}
  #mhDetail .cl-docgrid{grid-template-columns:repeat(2,1fr)}
}
@container (max-width:640px){
  #mhDetail .cl-exprow{grid-template-columns:1fr}
  #mhDetail .cl-docgrid{grid-template-columns:1fr}
  #mhDetail .cl-noteadd{flex-direction:column;align-items:stretch}
}


/* =============================================================================
   CASENOTES-09 - THE CLIENT NOTES TAB AS A WINDOW ON THE CASE-NOTE FILE.

   The tab used to render four things: avatar, author, date, body. A note the Case
   Notes section shows with its title, type, minutes, follow-up and Completed tick
   arrived here stripped of all five. These rules are the section's note footer,
   restated for this pane's tokens exactly as mh-casenotes.css already restates
   .cn-chip for #mhDetail.

   COMPLETED IS MUTED, NOT HIDDEN (CEO ruling, Aug 22). A finished note reads as
   finished at a glance and every word of it stays on screen. The negative side
   margin cancels the padding, so a muted note's text stays on the same left edge
   as the notes above and below it - a tinted card that shifted its own text would
   read as a different KIND of note rather than the same note, finished.
   ============================================================================= */
#mhDetail .cl-notelink{display:flex;justify-content:flex-end;margin:-4px 0 12px}
#mhDetail .cl-note-t{font-size:13.5px;font-weight:800;color:var(--ink-1);margin:0 0 5px}
#mhDetail .cl-note-out{margin-top:9px;padding:9px 11px;border-radius:var(--r-sm);
  background:var(--f-rest-bg);border:1px solid var(--f-rest-bd)}
#mhDetail .cl-note-out label{display:block;font-size:10.5px;font-weight:800;letter-spacing:.06em;
  text-transform:uppercase;color:var(--ink-4);margin-bottom:3px}
#mhDetail .cl-note-out>div{font-size:13px;line-height:1.55;color:var(--ink-2);
  white-space:pre-wrap;overflow-wrap:anywhere}
#mhDetail .cl-note-f{display:flex;flex-wrap:wrap;gap:6px;margin-top:9px}
#mhDetail .cl-note-f:empty{display:none}

#mhDetail .cl-note.done{background:var(--f-rest-bg);border-radius:var(--r-md);
  border-top:none;padding:13px 12px;margin:9px -12px 0}
#mhDetail .cl-note.done .cl-note-b,
#mhDetail .cl-note.done .cl-note-t{opacity:.72}

/* A stub is a STATE, not a failed render - give it room so it cannot be mistaken
   for a note whose body simply did not arrive.

   THE MODIFIER IS cn-locked, NOT stub. "stub" is already a GLOBAL class in
   mh-theme.css - the centred "coming soon" panel the unbuilt screens wear. Naming
   the modifier "stub" here silently inherited max-width:560px, margin:40px auto and
   text-align:center: the locked note rendered 254px wide and indented 200px beside
   siblings 531px wide at 62px. The build was 0/0 and the page looked populated.
   Measured, not reasoned. THE NEWCOMER YIELDS - grep a class before claiming it. */
#mhDetail .cl-note.cn-locked .cn-stub{margin-top:8px}


/* ============================================================
   THE TWO NEW PIECES.  4 September 2026.

   1) .cl-docchip - the rail SIGNAL. The rail is drawn on every tab and Overview is
      only one of them, so stripping the rail bare would hide "this document needs
      attention" from anybody working in Immigration. One line survives: the label,
      the aggregate word, a chevron. It reuses .cl-seclab / .cl-secword verbatim, so
      it cannot drift from the word on the card - both come from DocStatusItems.

   2) .cl-dsgo - the destination, said out loud. The rows were already clickable and
      already routed to the right tab, but nothing on the row SAID so; you had to
      hover to find the tooltip. The CEO's Aug 5 rule is that a status item must open
      the surface where the date can be corrected - this makes that rule visible.
      margin-left:auto pins it right whatever the row's text does, and it is
      pointer-events:none because the whole row is the button, not this label.
   ============================================================ */
#mhDetail .cl-docchip{cursor:pointer}
#mhDetail .cl-docchip .cl-secarr{transition:transform var(--t)}
#mhDetail .cl-docchip:hover .cl-secarr{transform:translateX(2px)}

#mhDetail .cl-doccard .cl-alert{align-items:center}
#mhDetail .cl-dsgo{display:inline-flex;align-items:center;gap:2px;margin-left:auto;flex:none;
  padding-left:10px;font-size:11px;font-weight:800;letter-spacing:.01em;
  color:var(--brand-600);opacity:.85;white-space:nowrap;pointer-events:none}
#mhDetail .cl-dsgo svg{width:13px;height:13px}
#mhDetail .cl-doccard .cl-alert.clk:hover .cl-dsgo{opacity:1}

/* ============================================================
   THE SPLIT.  4 September 2026.

   Left is the WORK (what is expiring, every row a link); right is the RECORD
   (what we hold). The left column is minmax(0,1fr) - NOT 1fr - because a long
   document name in a grid child would otherwise refuse to shrink and push the
   stat panel off the card. That is the same min-width:0 grid law the client
   wizard already carries.

   The stat panel is a RECESSED surface (--f-rest-bg), the app's token for
   "information, not a control", so it reads as a readout and never invites a
   click the way the alert rows on its left do.
   ============================================================ */
#mhDetail .cl-docsplit{display:grid;grid-template-columns:minmax(0,1fr) 236px;gap:16px;align-items:start}

#mhDetail .cl-docprog{display:flex;flex-direction:column;align-items:center;text-align:center;gap:4px;
  padding:18px 16px;border-radius:var(--r-md);background:var(--f-rest-bg);
  box-shadow:inset 0 0 0 1px var(--line)}
#mhDetail .cl-ring-lg{width:84px;height:84px;margin-bottom:6px}
#mhDetail .cl-ring-lg b{font-size:18px;color:var(--ink-1)}
#mhDetail .cl-dpt{font-size:12.5px;font-weight:800;color:var(--ink-1);letter-spacing:-.01em}
#mhDetail .cl-dps{font-size:11.5px;font-weight:600;color:var(--ink-3)}
#mhDetail .cl-dps b{color:var(--ink-1);font-weight:800}
#mhDetail .cl-dpnote{margin-top:2px;font-size:10.5px;font-weight:700;color:var(--ink-3);
  line-height:1.4;text-wrap:pretty}
#mhDetail .cl-dpempty{display:flex;flex-direction:column;align-items:center;gap:5px}
#mhDetail .cl-dpempty .ic{display:grid;place-items:center;width:38px;height:38px;margin-bottom:4px;
  border-radius:50%;background:var(--brand-tint);color:var(--brand-600)}
#mhDetail .cl-dpempty .ic svg{width:18px;height:18px}

/* Under a narrow pane the fixed 236px column stops being a luxury and starts being a
   squeeze, so the panel drops below the list it summarises - detail first, tally after,
   which is the order somebody reads them in anyway. */
@container (max-width:860px){
  #mhDetail .cl-docsplit{grid-template-columns:1fr}
  #mhDetail .cl-docprog{flex-direction:row;justify-content:flex-start;text-align:left;gap:14px;padding:14px 16px}
  #mhDetail .cl-docprog .cl-ring-lg{width:56px;height:56px;margin-bottom:0;flex:none}
  #mhDetail .cl-docprog .cl-ring-lg b{font-size:13px}
  #mhDetail .cl-dpempty{flex-direction:row;align-items:center;text-align:left;gap:12px}
  #mhDetail .cl-dpempty .ic{margin-bottom:0;flex:none}
}

/* SCHOOL ENROLLMENT POPUP (14 Sep 2026) - Remove sits on the far left of the footer, away from
   Save, and reads as a destructive action. The "+ Add" row in a dropdown is the brand tint. */
#mhDetail .kd-foot .kd-remove{margin-right:auto;color:#A2392F}
#mhDetail .kd-foot .kd-remove:hover{background:rgba(192,71,63,.10)}
body.dark #mhDetail .kd-foot .kd-remove{color:#F0A097}
#mhDetail .selpop .sel-opt.sel-add{color:var(--mh-green-d,#2F6B57);font-weight:700;border-top:1px dashed rgba(30,55,48,.14)}

/* A GREYED TAB (14 Sep 2026, the child record): visible, dimmed, never lit by hover or press. */
#mhDetail .pd-tabs button.tab-off,
#mhDetail.mint-host .pd-tabs button.tab-off{opacity:.4;cursor:not-allowed}
#mhDetail .pd-tabs button.tab-off:hover,
#mhDetail.mint-host .pd-tabs button.tab-off:hover,
#mhDetail.mint-host .pd-tabs button.tab-off:active{background:none;box-shadow:none;transform:none;color:var(--ink-3)}
body.dark #mhDetail.mint-host .pd-tabs button.tab-off:hover{background:none}

/* SCHOOL READINESS on a child's Schools card (15 Sep 2026) - the same three tones as Clients >
   Children & Schools: ok enrolled (pine), due eligible (amber), req required by law (clay). */
#mhDetail .sch-ready{display:flex;flex-wrap:wrap;align-items:baseline;gap:4px 12px;margin:0 0 12px;padding:10px 14px;border-radius:12px;border:1px solid transparent;font-size:12.5px;line-height:1.45}
#mhDetail .sch-ready b{font-weight:800}
#mhDetail .sch-ready span{font-weight:600;opacity:.85}
#mhDetail .sch-ready .nx{font-weight:700;opacity:1}
#mhDetail .sch-ready.ok{color:#2F6B57;background:rgba(78,124,114,.10);border-color:rgba(78,124,114,.28)}
#mhDetail .sch-ready.due{color:#8A5210;background:rgba(216,155,61,.13);border-color:rgba(216,155,61,.36)}
#mhDetail .sch-ready.req{color:#9A4226;background:rgba(201,123,90,.13);border-color:rgba(201,123,90,.38)}
body.dark #mhDetail .sch-ready.ok{color:#9fc3b8}
body.dark #mhDetail .sch-ready.due{color:#E8B96A}
body.dark #mhDetail .sch-ready.req{color:#E59A7B}

/* MOVED UP OR STAYING (owner, 18 Sep 2026) - the two choices in the School enrollment popup, the optional reason,
   and the year-by-year line under a school on the Schools card. */
#mhDetail .sy-block{display:flex;flex-direction:column;gap:8px}
#mhDetail .sy-opts{display:grid;grid-template-columns:repeat(auto-fit,minmax(min(100%,190px),1fr));gap:8px}
#mhDetail .sy-opt{display:flex;align-items:flex-start;gap:10px;text-align:left;padding:10px 12px;border-radius:12px;cursor:pointer;
  font:inherit;color:var(--ink-1,#1F2A28);background:var(--f-rest-bg,rgb(var(--tg-rgb,255,255,255)));border:1.5px solid var(--line,#DDE3E0);transition:border-color .15s,background .15s,box-shadow .15s}
#mhDetail .sy-opt:hover{border-color:rgba(47,107,87,.55)}
#mhDetail .sy-opt:focus-visible{outline:2px solid #2F6B57;outline-offset:2px}
#mhDetail .sy-opt.on{border-color:#2F6B57;background:rgba(78,124,114,.08);box-shadow:0 0 0 2px rgba(47,107,87,.18)}
#mhDetail .sy-dot{flex:none;width:16px;height:16px;margin-top:2px;border-radius:50%;border:2px solid #9AA8A3;display:grid;place-items:center}
#mhDetail .sy-opt.on .sy-dot{border-color:#2F6B57}
#mhDetail .sy-opt.on .sy-dot::after{content:"";width:8px;height:8px;border-radius:50%;background:#2F6B57}
#mhDetail .sy-t{display:flex;flex-direction:column;gap:1px;min-width:0}
#mhDetail .sy-t b{font-size:13px;font-weight:800}
#mhDetail .sy-t small{font-size:11.5px;font-weight:600;opacity:.7}
#mhDetail .sy-reason{display:flex;flex-direction:column;gap:6px}
#mhDetail .sy-reason label .opt-l{font-weight:600;opacity:.6;text-transform:none;letter-spacing:0}
#mhDetail .sy-tick{display:flex}
#mhDetail .sy-hint{font-size:11.5px;font-weight:600;opacity:.65;line-height:1.4}
#mhDetail .sub.sy-hist{font-weight:700;color:#3D655D}
body.dark #mhDetail .sy-opt{background:rgba(var(--tg-rgb,255,255,255),calc(.03*var(--tg-k,1)));color:inherit}
body.dark #mhDetail .sy-opt.on{background:rgba(159,195,184,.10);border-color:#9fc3b8}
body.dark #mhDetail .sy-opt.on .sy-dot{border-color:#9fc3b8}
body.dark #mhDetail .sy-opt.on .sy-dot::after{background:#9fc3b8}
body.dark #mhDetail .sub.sy-hist{color:#9fc3b8}


/* ============================================================
   PGMINT18 - THE PROGRAM RECORD JOINS THE MINT STANDARD.  22 September 2026.

   His instruction: deploy the standard interface fields and the standard edit engine onto the
   Program tab the way they were deployed on Client and Household, backgrounds included.

   ALMOST NOTHING WAS NEEDED HERE, AND THAT IS THE POINT. ProgramDetailView now passes
   StageClass="mint-host pg-host", and `.mint-host` is the gate that already turns on the tokens,
   the glass tab row and the gradient buttons; `.pd-card.mint`, `.mint-ph` and `.mint-w` are keyed
   on the CLASS, not the host, so the cards and tiles arrived dressed. What follows is only the
   three things the Program record has that the other two do not.

   EVERY RULE IS SCOPED TO `.pg-host`, NEVER TO BARE `#mhDetail`. That id is the SHARED shell -
   Client, Student, Subsidy, Child Care and My Profile all render inside it - so an ungated rule
   here would restyle five other records unannounced. That is the shared-component blast radius,
   and it is not theoretical: `.mint-w.wide` is emitted by the client record too, so writing this
   spanning rule without a gate would have re-laid-out the client's own tiles. `#mhDetail.ud-host`
   in mh-admin.css is the precedent this follows.
   ============================================================ */

/* 1. A WIDE TILE SPANS. `.wide` was written for the household only (mh-hh-mint.css), so the
      Description tile - a paragraph - was rendering in a 292px column and being ellipsised to
      its first line. Measured before: grid-column `auto`, tile 292px inside a 3-column grid. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .mint-w.wide{grid-column:1 / -1}

/* 2. THE CARD NOTE. Same one-line caption the household card carries, twinned for this host
      rather than widened to bare `#mhDetail` - see the gate rule above. It is TEXT ONLY: the
      household's note has no icon, and an unsized inline SVG in this slot rendered 414px square
      and swallowed the card. Matching the original exactly was the fix. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .mint-cardnote{
  margin:-2px 2px 8px;font-size:11px;font-weight:600;line-height:1.45;color:#98A4A0;
}

/* 3. THE CAPACITY BLOCK ON GLASS. The occupancy meter, its legend swatch and the three stat
      tiles are the Program record's own furniture and they all painted `--f-rest-bg` (#DFE4EA),
      the RECESSED FIELD GROUND. That is correct inside an opaque panel and wrong on a frosted
      card - it is the same flat-fill-on-glass defect the toolbar sweep chased across twelve
      pages, and here it sat directly beside `.mint-w` tiles at 72% white.

      THE STAT TILES TAKE THE FIELD TILE'S EXACT MATERIAL - 72% white, the .85 rim, the same
      -12px shadow, copied from `.mint-w` (detail-view.css ~1572) rather than re-picked - so a
      number tile and a field tile read as the same object. The meter TRACK is deliberately a
      step lighter and keeps its inset: it is a groove, not a tile, and it has to read as
      something the fill sits inside. The pine fill and the waitlist hatch are untouched - they
      carry meaning and were never the defect. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .tile{
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));
  border-color:rgba(255,255,255,.85);
  box-shadow:0 6px 16px -12px rgba(30,55,48,.35);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .meter{
  background:rgba(var(--tg-rgb,255,255,255),calc(.55*var(--tg-k,1)));
  box-shadow:inset 0 1px 2px rgba(30,55,48,.12);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .lgnd .o{
  background:rgba(var(--tg-rgb,255,255,255),calc(.55*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(255,255,255,.85);
}
/* The seat defaults sit under the stat block, so they need the air the grid would have given
   them if they were the card's first row. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .tiles + .mint-grid{margin-top:14px}

body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .tile{
  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 #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .meter{
  background:rgba(var(--tg-rgb,255,255,255),calc(.08*var(--tg-k,1)));box-shadow:inset 0 1px 2px rgba(0,0,0,.4);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .lgnd .o{
  background:rgba(var(--tg-rgb,255,255,255),calc(.08*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(180,210,235,.14);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .mint-cardnote{color:#8B9A95}

/* 4. THE PROSE TILE MUST BE THE SAME HEIGHT IN BOTH MODES - field standard 4a rule 16, and it
      bit here with the identical numbers it was first written from: the Description tile
      measured 71px reading and 139px editing, a 68px jump the moment Edit was pressed, because
      a textarea has a floor and a one-line value line does not.

      The floor is the SAME 92px min-height and 22px line-height the textarea already declares -
      COPIED, not re-derived, which is the trap that shrank every tile on the client record by
      2px. Keyed to `.prose` (emitted from the descriptor's own "ta" kind) and never to `.wide`:
      a full-width PICKER must not inherit a 92px body for a one-word answer. Twinned from
      `#hhDetail .mint-w.prose .mint-vl` (mh-hh-mint.css) rather than widened to bare #mhDetail,
      for the gate reason at the top of this block. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .mint-w.prose .mint-vl{
  white-space:pre-wrap;overflow:visible;text-overflow:clip;
  min-height:92px;line-height:22px;
}

/* 5. THE REFUSAL BANNER spans the grid. `.mint-err` is already the app's inline validation bar
      (it is what the client record uses); the only thing Program adds is that its Overview is a
      two-column grid, so without this the sentence would sit in one column with a card beside it
      and read as that card's own note rather than the record's refusal. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-grid > .mint-err{grid-column:1 / -1;margin:0 0 2px}


/* ============================================================
   PGLIST18 - THE ROSTER, THE STUDENT PREVIEW AND THE SCHEDULE JOIN THE STANDARD.  24 September 2026.

   His words, on three screenshots: change the roster's Active and QR to the new standard; the
   Student Details preview - its fields, its Active, a background for attendance, the buttons; the
   profile photo must be the photo studio's default, never "PA"; the Schedule filter, the Today and
   Remove buttons and the THU 24 SEP day blocks - "they have the old designs in it". Then: "double
   check whole PROGRAM DETAIL mock bit by bit and deploy our new standard background fields and roles
   there I don't want any mistake".

   NOTHING HERE IS A NEW LOOK. Every value is COPIED from an object the standard already has:
     list section        = .pd-card.mint.full + .mint-ph capsule, count on the right   (household 4i)
     list row            = the household member card (.mcard on --mint-glass, MEMBH18 / HHGLASS18)
     status + attendance = the database-contract pill .st.st--glass (status-unify.css)
     QR                  = the household member card's .mc-qr (real code on a white tile)
     photo with no photo = the photo studio's default (.mh-photo: pine gradient + person glyph);
                           the zoom is the shared PhotoZoom lightbox, given that same pine
     filter              = the record's own tab row, one size down (glass + --mint-grad current)
     day block           = the field tile (.mint-w material); the NEXT day wears --mint-grad
     Remove / Restore    = the mini glass button (PGREV18 .pgr-e); destructive = red ink on the
                           glass, the Clear Draft exception of FOOTBTN18
     preview window      = the record's own window (#E1E6EB, #D9DFE7 rim, radius 20) + its footer pair
   The mint tokens (--mint-glass/-rim/-blur/-float/-grad/-lift-sm) are the ones `.mint-host` already
   defines, light and dark, so the dark mode arrives with them.

   EVERY RULE IS GATED ON `#mhDetail.pg-host` - the shell id is shared by Client, Student, Subsidy,
   Child Care and My Profile, and `.dv-row`, `.day`, `.dv-seg`, `.dv-sx`, `.pk-*`, `.sheet` are all
   shared classes (StudentDetailView renders .pk-* too). New class names are `pgl-*`, grepped
   app-wide first: `.pg-qr` was ALREADY TAKEN (mh-passcard.css), which is why these are pgl-.
   ============================================================ */

/* ---- 1. THE LIST SECTIONS ARE CARDS. They stack at the Overview grid's own 16px gap. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card + .pgl-card{margin-top:16px}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-rows{gap:11px}
/* the "Showing 1 of 1 ... tap a student to preview" line is the card's caption now */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .mint-cardnote.pgl-note{margin:14px 2px 0;text-align:center}

/* ---- 2. A ROW IS A MEMBER CARD. Same material, same rim, same two-layer lift as #hhDetail .mcard.
       It lifts UP 3px (the tile sentence) instead of the old 2px slide to the right. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row{
  gap:14px;padding:12px 16px;border-radius:17px;
  background:var(--mint-glass);border:1px solid var(--mint-rim);
  box-shadow:0 14px 34px -22px rgba(30,55,48,.38);
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,border-color .18s ease;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row:hover{
  transform:translateY(-3px);
  background:rgba(var(--tg-rgb,255,255,255),calc(.62*var(--tg-k,1)));border-color:rgba(255,255,255,.9);
  box-shadow:0 4px 10px -6px rgba(30,55,48,.16),0 18px 38px -18px rgba(30,55,48,.30);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.act:focus-visible{
  outline:2px solid #2F6B57;outline-offset:3px;border-color:rgba(255,255,255,.9);
}
/* THE NEXT SESSION is the live one: a pine hairline and a pine glow, and its day block wears
   the gradient (section 7). The old version was a near-black 1px frame. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next{
  background:rgba(var(--tg-rgb,255,255,255),calc(.62*var(--tg-k,1)));border-color:rgba(47,107,87,.30);
  box-shadow:0 14px 34px -22px rgba(47,107,87,.55);
}
/* A CANCELLED DAY takes the "Not set" recipe - dashed, quieter, no shadow - instead of the flat
   #DFE4EA field ground it used to paint on the glass. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.is-cancelled{
  background:rgba(var(--tg-rgb,255,255,255),calc(.25*var(--tg-k,1)));border-style:dashed;border-color:rgba(30,55,48,.18);box-shadow:none;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.is-cancelled:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.45*var(--tg-k,1)))}

/* ---- 3. NO PHOTO = THE PHOTO STUDIO'S DEFAULT. The .mh-photo recipe (detail-view.css): the
       150deg #5E8C81 -> #2F4640 pine, the cream #F4F0E6 person glyph at 46%, the pale rim and
       the soft inner ring - scaled, not redrawn. Never initials (Avatars.cs, the app-wide rule). ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .av,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pk-av{
  background:linear-gradient(150deg,#5E8C81,#2F4640);color:#F4F0E6;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .av svg,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pk-av svg{width:46%;height:46%}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .av{
  width:48px;height:48px;
  border:1px solid rgba(234,241,237,.5);
  box-shadow:inset 0 0 0 1.5px rgba(255,255,255,.16),0 2px 7px rgba(40,60,80,.12);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .av-btn:hover{box-shadow:0 0 0 3px rgba(47,107,87,.18)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .av-btn:focus-visible{box-shadow:0 0 0 3px rgba(47,107,87,.32)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pk-av{
  border:2.5px solid rgba(234,241,237,.5);
  box-shadow:inset 0 0 0 3px rgba(255,255,255,.16),0 6px 18px rgba(0,0,0,.26);
}

/* ---- 4. ATTENDANCE IS A PILL WITH A GROUND. It is the .st.st--glass contract pill in the
       neutral hue (#677579, status-unify's muted badge) with a chart glyph where a status has
       its dot - a figure, not a state, so it must not read as one. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-att svg{
  width:13px;height:13px;flex:none;
  stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .st{flex:none}

/* ---- 5. THE QR IS THE REAL CODE ON A WHITE TILE - #hhDetail .mc-qr, value for value. It stays
       white in dark mode too, because a scanner needs the contrast (mh-household.css:350). ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr{
  position:relative;flex:none;width:50px;height:50px;padding:5px;border-radius:11px;
  background:#fff;border:1px solid #D9DFE7;cursor:pointer;line-height:0;
  transition:border-color .16s ease,box-shadow .16s ease;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr:hover{border-color:var(--f-focus-bd);box-shadow:0 1px 3px rgba(40,60,80,.12)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr:focus-visible{outline:2px solid #2F6B57;outline-offset:3px}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr svg{width:100%;height:100%;display:block;color:#3D655D}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr .qr-logo{
  position:absolute;inset:0;margin:auto;width:13px;height:13px;padding:2px;border-radius:4px;
  display:grid;place-items:center;pointer-events:none;
  background:linear-gradient(135deg,#2E4A43,#213A33);box-shadow:0 0 0 1.8px #fff;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr .qr-logo img{width:100%;height:100%;object-fit:contain;display:block}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-qr{background:#fff;border-color:rgba(180,210,235,.2)}

/* ---- 6. THE SCHEDULE FILTER IS THE TAB ROW, ONE SIZE DOWN. Same glass, rim and float as
       .pd-tabs; the current bucket wears --mint-grad with its glow and does not lift; the others
       lift 2px on hover with the firmed glass; the counts are the tab row's .n pills. Measured
       off the live tab row: 12.5px / 800 / .045em uppercase, radius 10 inside the holder. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg{
  gap:4px;padding:5px;border-radius:15px;
  background:var(--mint-glass);
  backdrop-filter:var(--mint-blur);-webkit-backdrop-filter:var(--mint-blur);
  border:1px solid var(--mint-rim);box-shadow:var(--mint-float);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button{
  gap:8px;padding:9px 14px;border-radius:10px;
  font-size:12.5px;font-weight:800;letter-spacing:.045em;text-transform:uppercase;color:#677579;
  transition:transform .18s ease,box-shadow .18s ease,background var(--t),color var(--t);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button span{
  font-size:11px;font-weight:800;letter-spacing:.045em;padding:2px 7px;border-radius:999px;
  background:rgba(47,107,87,.13);color:var(--brand-600);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:not(.on):hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));color:var(--ink-1);transform:translateY(-2px);
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(255,255,255,.85);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:not(.on):hover span{background:rgba(47,107,87,.14)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button.on{background:var(--mint-grad);color:#fff;box-shadow:var(--mint-grad-glow)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button.on span{background:rgba(var(--tg-rgb,255,255,255),calc(.24*var(--tg-k,1)));color:#fff}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:active{
  transform:translateY(0);box-shadow:0 2px 5px -3px rgba(30,55,48,.22),inset 0 0 0 1px rgba(255,255,255,.7);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button.on:active{box-shadow:var(--mint-grad-glow)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:focus-visible{outline:2px solid #2F6B57;outline-offset:2px}

/* ---- 7. THE DAY BLOCK IS A TILE. The .mint-w material (72% white, .85 rim, the -12px shadow);
       weekday in the pine, date in the tile ink, month in the tile label grey. The NEXT session's
       block is the current-tab gradient - "this is the live one" is one paint across the record. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day{
  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);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day .w{color:#2F6B57}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day .d{color:#1C2A25}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day .m{color:#7A8A84}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next .day{
  background:var(--mint-grad);border-color:transparent;box-shadow:var(--mint-grad-glow);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next .day .d,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next .day .m{color:#fff}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next .day .w{color:rgba(255,255,255,.8)}
/* the attendance bars on a recorded day: the mint pine on a pine groove, not slate */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .bars i{background:rgba(47,107,87,.16)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .bars i.on{background:#2F6B57}

/* ---- 8. REMOVE / RESTORE ARE THE MINI GLASS BUTTON (PGREV18 .pgr-e), AT FULL STRENGTH. The old
       one rested at 55% opacity on the flat field grey, so it read as DISABLED until hovered - the
       thing he pointed at. Destructive = red ink on the glass (FOOTBTN18's Clear Draft exception),
       and it answers a hover with the danger wash the record's own menu uses. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf{
  position:relative;display:inline-flex;align-items:center;gap:6px;flex:none;opacity:1;
  padding:6px 12px;border-radius:10px;cursor:pointer;
  font-family:var(--font-sans);font-size:12px;font-weight:700;line-height:1.2;
  background:var(--mint-glass);border:1px solid var(--mint-rim);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,border-color .18s ease;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx::after,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf::after{content:"";position:absolute;left:0;right:0;top:-4px;bottom:-4px;border-radius:inherit}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx svg,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf svg{
  width:13px;height:13px;flex:none;
  stroke:currentColor;stroke-width:2.4;fill:none;stroke-linecap:round;stroke-linejoin:round;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx:not(.danger):hover,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.no:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));border-color:var(--mint-rim);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);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx.danger,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.yes{color:#B0463C}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx.danger:hover,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.yes:hover:not(:disabled){
  background:var(--danger-bg);border-color:rgba(255,255,255,.5);color:var(--danger-ink);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,.5);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx:active,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf: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);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx:focus-visible,
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf:focus-visible{outline:2px solid #2F6B57;outline-offset:3px;box-shadow:none}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.yes:disabled{opacity:.55;cursor:default;transform:none}

/* ---- 9. THE INLINE CANCEL CONFIRM keeps its amber - it is a decision, not decoration - but on the
       glass: a translucent amber panel with the tile radius, and the reason box is a field tile. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-confirm{
  margin:0;padding:14px 16px;border-radius:16px;gap:10px;
  background:rgba(255,248,230,.78);border:1px solid rgba(240,217,160,.9);
  box-shadow:0 6px 16px -12px rgba(30,55,48,.35);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-confirm-in{
  font-size:14px;padding:10px 14px;border-radius:12px;
  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);color:#1C2A25;
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-confirm-in::placeholder{color:#98A5AE;font-weight:500}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-confirm-in:focus-visible{
  outline:none;border-color:rgba(47,107,87,.55);box-shadow:0 0 0 3px rgba(47,107,87,.16);
}

/* ---- 10. THE STUDENT PREVIEW IS THE RECORD'S OWN WINDOW. Same ground, rim, radius and shadow as
       the .modal it opens over; the footer carries the record's rule and the record's footer PAIR
       (the markup now uses `ui-btn secondary dv-close-btn` + `ui-btn primary`, the same classes,
       so the pair is inherited, not copied). The values are TILES in two columns. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .sheet.sm{
  width:460px;border:1px solid #D9DFE7;border-radius:20px;
  box-shadow:0 50px 110px -22px rgba(8,18,14,.62);
}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .sheet.sm .m-foot{padding:18px 26px;gap:12px;border-top:1px solid #D9DFE7}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pk-chips{gap:8px}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-tiles{
  --mint-lift:0 4px 10px -6px rgba(30,55,48,.16), 0 18px 38px -18px rgba(30,55,48,.30);
  grid-template-columns:1fr 1fr;margin-top:18px;text-align:left;
}

@media (prefers-reduced-motion: reduce){
  #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row:hover,
  #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:hover,
  #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx:hover,
  #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf:hover{transform:none}
}

/* ---- DARK - the same objects' own dark values: --mint-* flip with .mint-host, the member card's
       .65 shadow and .1 hover (mh-hh-mint.css), the tile's .06 / .14 rim, the tab row's pills. ---- */
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row{box-shadow:0 14px 34px -22px rgba(0,0,0,.65)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.1*var(--tg-k,1)));border-color:rgba(180,210,235,.16);
  box-shadow:0 4px 10px -6px rgba(0,0,0,.4),0 18px 38px -18px rgba(0,0,0,.55);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next{
  background:rgba(var(--tg-rgb,255,255,255),calc(.08*var(--tg-k,1)));border-color:rgba(95,207,164,.32);box-shadow:0 14px 34px -22px rgba(0,0,0,.7);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.is-cancelled{background:rgba(var(--tg-rgb,255,255,255),calc(.02*var(--tg-k,1)));border-color:rgba(180,210,235,.16)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day{
  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 #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day .w{color:#8FBBA5}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day .d{color:#EAF0F4}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .day .m{color:#8C9AA5}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .dv-row.next .day{border-color:transparent}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .bars i{background:rgba(143,187,165,.18)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-card .bars i.on{background:#5FCFA4}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button{color:#8C9AA5}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button span{background:rgba(143,187,165,.18);color:#B7D6C8}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:not(.on):hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4;
  box-shadow:var(--mint-lift-sm),inset 0 0 0 1px rgba(180,210,235,.16);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button:not(.on):hover span{background:rgba(143,187,165,.18)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-seg button.on span{background:rgba(var(--tg-rgb,255,255,255),calc(.24*var(--tg-k,1)));color:#fff}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx,
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf{color:#8FBBA5;box-shadow:0 3px 8px -5px rgba(0,0,0,.45),0 10px 20px -14px rgba(0,0,0,.6)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx:not(.danger):hover,
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.no:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4;
  box-shadow:0 3px 7px -4px rgba(0,0,0,.5),0 10px 20px -10px rgba(0,0,0,.6),inset 0 0 0 1px rgba(180,210,235,.16);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx.danger,
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.yes{color:#F0A9A3}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-row .dv-sx.danger:hover,
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-cf.yes:hover:not(:disabled){
  box-shadow:0 3px 7px -4px rgba(0,0,0,.5),0 10px 20px -10px rgba(0,0,0,.6),inset 0 0 0 1px rgba(180,210,235,.16);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-confirm{
  background:rgba(154,110,18,.16);border-color:rgba(240,217,160,.28);box-shadow:0 6px 16px -12px rgba(0,0,0,.55);
}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .dv-confirm-in{
  background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));border-color:rgba(180,210,235,.14);color:#EAF0F4;
  box-shadow:0 6px 16px -12px rgba(0,0,0,.55);
}
/* the preview window takes the record window's own dark rim and footer rule, measured off
   #mhDetail .modal in dark: rgba(180,210,235,.12) for both */
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .sheet.sm{border-color:rgba(180,210,235,.12)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .sheet.sm .m-foot{border-top-color:rgba(180,210,235,.12)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pgl-tiles{
  --mint-lift:0 4px 10px -6px rgba(0,0,0,.4), 0 18px 38px -18px rgba(0,0,0,.55);
}

/* ---- 11. THE DOT SITS ON THE LABEL LINE - MEASURED, 0.0 (checklist point 11). The shared
       .mint-w dot is top:17px, and on THIS record a Range rect of the label text put its middle
       1.0px ABOVE the dot on all 15 Overview tiles and all 5 preview tiles. 16px measures 0.0.
       Gated to .pg-host: the other hosts are measured on their own, never corrected blind. ---- */
/* DOTFIX01 (1 Oct 2026) - RETIRED. Re-measured today (dot centre vs the label box middle, read AND edit tiles) this 16px
   put every dot 1.0px ABOVE its label on all three hosts it covered - Program, Student, Child Care - and on the subsidy
   record it was widened to. The label line has moved since 22 Sep; the shared .mint-w top:17px now measures 0.0 on all
   four. Same method as DOTLINE18: measured per host, never corrected blind. */

/* ---- 12. CAPACITY - THE THREE STATS ARE ONE ROW OF FIELD TILES. The card is ~440px of content,
       which the shared @container rule reads as "one column"; three short numbers fit three across
       (~138px each, measured) and a lone Waitlist tile on its own row was the defect. The seat
       defaults follow at the grid's own 11px gap. Only on a genuinely tiny card do they stack. ---- */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .mint-grid.pgl-stats{grid-template-columns:repeat(3,1fr)}
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .pgl-stats + .mint-grid{margin-top:11px}
@container mintcard (max-width:330px){
  #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .mint-grid.pgl-stats{grid-template-columns:1fr}
}
/* the "Open" swatch was the groove's own .55 white on .4 glass - invisible. It takes the hollow
   ring a "Not set" dot wears, so the legend names all three parts of the bar. */
#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .lgnd .o{box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.22)}
body.dark #mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host)) .pd-card.mint .lgnd .o{box-shadow:inset 0 0 0 1.5px rgba(180,210,235,.3)}


/* ============================================================
   SDMINT18 - THE STUDENT RECORD JOINS THE MINT STANDARD.  24 September 2026.

   His instruction: land the new standard - interface, fields, backgrounds and rules - on the
   Student Detail mock "everything you have learned do it here now". StudentDetailView passes
   StageClass="mint-host sd-host", so the Mint tokens, the glass tab row, the gradient primary
   and the glass menu arrive with the switch, and the Program record's two gated blocks
   (PGMINT18, PGLIST18) were WIDENED to `#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host))` rather than copied -
   the cards, the list rows, the contract pills, the preview window, the tile dot fix and the
   stat tiles are ONE set of rules for both records. `:is()` keeps their specificity equal to
   the single-class gate, so nothing moved on Program.

   What follows is only what the Student record has and Program does not: the child cards and
   their add tile, the completion picker on an enrollment row, the comments stream, the
   tick-to-enrol rows, the program glyph chip, and the status sheet's text. Every value is
   COPIED from an object the standard already has - named on each rule. Every selector is
   `#mhDetail.sd-host` (the shared-shell law). New class names are `sdl-*`, grepped first.
   ============================================================ */

/* ---- 1. small furniture ---- */
#mhDetail.sd-host .sdl-errbar{margin:0 0 16px}
#mhDetail.sd-host .pd-card.mint .mint-cardnote.sdl-note{margin:14px 2px 0}
#mhDetail.sd-host .sdl-blurb{margin:0 0 14px;font-size:13.5px;line-height:1.55;color:#5E7268;text-align:left}
#mhDetail.sd-host .sdl-sheet .mint-err{margin:0 0 12px;text-align:left}
/* a PROGRAM or a GIFT CARD is not a person: its chip is the glyph on the same pine the
   person default wears, so the row still reads as one family with the roster */
#mhDetail.sd-host .av.sdl-prog svg{width:44%;height:44%;stroke:currentColor;stroke-width:1.9;fill:none;stroke-linecap:round;stroke-linejoin:round}

/* ---- 2. THE CHILD CARD IS A MEMBER CARD - #hhDetail .mcard, value for value: --mint-glass,
       the .72 rim, radius 17, the -22px float; hover .62 + the .9 rim + a 3px lift + the
       two-layer shadow. The portrait is the photo studio default (pine + cream glyph). ---- */
#mhDetail.sd-host .kids-grid{gap:14px;margin-top:0}
#mhDetail.sd-host .kid-card{
  gap:8px;padding:18px 14px 16px;border-radius:17px;
  background:var(--mint-glass);border:1px solid var(--mint-rim);
  box-shadow:0 14px 34px -22px rgba(30,55,48,.38);
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,border-color .18s ease;
}
#mhDetail.sd-host .kid-card[role="button"]:hover{
  transform:translateY(-3px);background:rgba(var(--tg-rgb,255,255,255),calc(.62*var(--tg-k,1)));border-color:rgba(255,255,255,.9);
  box-shadow:0 4px 10px -6px rgba(30,55,48,.16),0 18px 38px -18px rgba(30,55,48,.30);
}
#mhDetail.sd-host .kid-card:focus-visible{outline:2px solid #2F6B57;outline-offset:3px;box-shadow:0 14px 34px -22px rgba(30,55,48,.38)}
#mhDetail.sd-host .kid-card:not([role="button"]){cursor:default}
#mhDetail.sd-host .kc-av{
  background:linear-gradient(150deg,#5E8C81,#2F4640);color:#F4F0E6;
  border:2px solid rgba(234,241,237,.5);
  box-shadow:inset 0 0 0 2px rgba(255,255,255,.16),0 6px 16px -6px rgba(0,0,0,.28);
}
#mhDetail.sd-host .kc-av .mh-ini{color:#F4F0E6}
#mhDetail.sd-host .kc-av .mh-ini svg{width:46%;height:46%}
#mhDetail.sd-host .kc-nm{font-size:15px;font-weight:750;color:#1C2A25}
#mhDetail.sd-host .kc-meta{font-size:12px;font-weight:600;color:#7A8A84}
#mhDetail.sd-host .sdl-kst{margin-top:2px}
/* EDIT on the card = the mini glass button (PGREV18 .pgr-e / PGLIST18 .dv-sx) */
#mhDetail.sd-host .kc-act{
  position:relative;height:auto;padding:6px 12px;border-radius:10px;gap:6px;
  font-size:12px;font-weight:700;line-height:1.2;
  background:var(--mint-glass);border:1px solid var(--mint-rim);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,border-color .18s ease;
}
#mhDetail.sd-host .kc-act::after{content:"";position:absolute;left:0;right:0;top:-4px;bottom:-4px;border-radius:inherit}
#mhDetail.sd-host .kc-act:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));border-color:var(--mint-rim);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);
}
#mhDetail.sd-host .kc-act:focus-visible{outline:2px solid #2F6B57;outline-offset:3px}
#mhDetail.sd-host .kc-act.sdl-danger{color:#B0463C}
#mhDetail.sd-host .kc-act.sdl-danger:hover{background:var(--danger-bg);color:var(--danger-ink);border-color:rgba(255,255,255,.5)}
#mhDetail.sd-host .kc-edit-b{margin-top:6px}
#mhDetail.sd-host .sdl-kacts{display:flex;gap:8px;justify-content:center;flex-wrap:wrap}
#mhDetail.sd-host .sdl-kacts .kc-edit-b{margin-top:6px}

/* ---- 3. THE ADD TILE = the household's Add Family Member (.add-fam on mint): the member-card
       material, the round plus and the pine label; the plus is a tile (.72) at rest and goes
       pine with a quarter turn on hover, as the household's does. ---- */
#mhDetail.sd-host .kid-add{
  min-height:178px;gap:13px;border-radius:17px;
  background:var(--mint-glass);border:1px solid var(--mint-rim);
  box-shadow:0 14px 34px -22px rgba(30,55,48,.38);color:#375A50;
  transition:transform .18s ease,box-shadow .18s ease,background .18s ease,border-color .18s ease;
}
#mhDetail.sd-host .kid-add:hover{
  transform:translateY(-3px);background:rgba(var(--tg-rgb,255,255,255),calc(.62*var(--tg-k,1)));border-color:rgba(255,255,255,.9);color:#375A50;
  box-shadow:0 4px 10px -6px rgba(30,55,48,.16),0 18px 38px -18px rgba(30,55,48,.30);
}
#mhDetail.sd-host .kid-add:focus-visible{outline:2px solid #2F6B57;outline-offset:3px}
#mhDetail.sd-host .kid-plus{
  width:46px;height:46px;font-size:24px;color:#375A50;
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(255,255,255,.85),0 6px 16px -12px rgba(30,55,48,.35);
  transition:background .2s,color .2s,transform .25s,box-shadow .2s;
}
#mhDetail.sd-host .kid-add:hover .kid-plus{background:#2F6B57;color:#fff;transform:rotate(90deg);box-shadow:none}
#mhDetail.sd-host .kid-add-l{font-size:14px;font-weight:700;color:#375A50}
#mhDetail.sd-host .kid-card.is-staged{border-style:dashed;border-color:rgba(216,155,61,.55)}

/* ---- 4. THE COMPLETION PICKER on an enrollment row is a glass pill (the control glass of the
       filter segments), its chevron turning, its list the mint-pop list every tile uses. ---- */
#mhDetail.sd-host .sd-comp{
  gap:8px;padding:6px 12px;border-radius:999px;min-width:132px;cursor:pointer;
  background:var(--mint-glass);border:1px solid var(--mint-rim);
  box-shadow:0 3px 8px -5px rgba(30,55,48,.14),0 10px 20px -14px rgba(30,55,48,.22);
  transition:background .18s ease,box-shadow .18s ease,border-color .18s ease;
}
#mhDetail.sd-host .sd-comp:hover{background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));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)}
#mhDetail.sd-host .sd-comp.open{background:rgba(var(--tg-rgb,255,255,255),.95);border-color:rgba(47,107,87,.45);box-shadow:0 0 0 3px rgba(47,107,87,.14)}
#mhDetail.sd-host .sd-comp-face{font-size:12.5px;font-weight:700;color:#375A50}
#mhDetail.sd-host .sd-comp-chev{color:#375A50}
#mhDetail.sd-host .pgl-card .dv-row:has(.sd-comp.open){z-index:70;transform:none}

/* ---- 5. THE COMMENTS - each comment a tile (.mint-w material), the author the person glyph
       on the studio pine (the client record's own treatment), Edit the mini glass button,
       Cancel/Save the footer pair in miniature. ---- */
#mhDetail.sd-host .sd-noteadd{margin:0 0 14px}
#mhDetail.sd-host .sd-noteact{display:flex;justify-content:flex-end}
#mhDetail.sd-host .sdl-notes{display:flex;flex-direction:column;gap:11px}
#mhDetail.sd-host .sd-note,
#mhDetail.sd-host .sd-note:first-of-type{
  border-top:none;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);
}
#mhDetail.sd-host .sd-note-av{
  background:linear-gradient(150deg,#5E8C81,#2F4640);color:#F4F0E6;
}
#mhDetail.sd-host .sd-note-av svg{width:52%;height:52%;stroke:currentColor;fill:none}
#mhDetail.sd-host .sd-note-b{color:#1C2A25}
#mhDetail.sd-host .sd-cmtedit,
#mhDetail.sd-host .sd-cmtedit-btn{
  position:relative;display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border-radius:10px;
  font-size:12px;font-weight:700;line-height:1.2;cursor:pointer;
  background:var(--mint-glass);border:1px solid var(--mint-rim);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;
}
#mhDetail.sd-host .sd-cmtedit svg,
#mhDetail.sd-host .sd-cmtedit-btn svg{width:13px;height:13px;stroke:currentColor;stroke-width:2.2;fill:none;stroke-linecap:round;stroke-linejoin:round}
#mhDetail.sd-host .sd-cmtedit:hover,
#mhDetail.sd-host .sd-cmtedit-btn.ghost:hover:not(:disabled){
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));color:#1C2733;border-color:var(--mint-rim);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);
}
#mhDetail.sd-host .sd-cmtedit-btn.go{background:var(--mint-grad);border-color:transparent;color:#fff;box-shadow:var(--mint-grad-glow)}
#mhDetail.sd-host .sd-cmtedit-btn.go:hover:not(:disabled){filter:none;transform:translateY(-2px);box-shadow:var(--mint-grad-glow-hi)}
#mhDetail.sd-host .sd-cmtedit-btn:disabled{opacity:.55;cursor:default;transform:none}

/* ---- 6. TICK-TO-ENROL ROWS (the client's household minors, edit mode) - a picked row takes
       the pine the tile focus ring uses, so "will be added" reads before the pill is read. ---- */
#mhDetail.sd-host .pgl-card .dv-row.sd-pickrow{cursor:pointer}
#mhDetail.sd-host .pgl-card .dv-row.sd-pickrow.is-on{
  background:rgba(47,107,87,.10);border-color:rgba(47,107,87,.40);
}

@media (prefers-reduced-motion: reduce){
  #mhDetail.sd-host .kid-card:hover,#mhDetail.sd-host .kid-add:hover,#mhDetail.sd-host .kc-act:hover,
  #mhDetail.sd-host .sd-cmtedit:hover,#mhDetail.sd-host .sd-cmtedit-btn:hover{transform:none}
  #mhDetail.sd-host .kid-add:hover .kid-plus{transform:none}
}

/* ---- DARK - the same objects' own dark values (mh-hh-mint .mcard, the tile's .06 / .14 rim,
       the mini button's #8FBBA5 ink) ---- */
body.dark #mhDetail.sd-host .kid-card,
body.dark #mhDetail.sd-host .kid-add{box-shadow:0 14px 34px -22px rgba(0,0,0,.65)}
body.dark #mhDetail.sd-host .kid-card[role="button"]:hover,
body.dark #mhDetail.sd-host .kid-add:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.1*var(--tg-k,1)));border-color:rgba(180,210,235,.16);
  box-shadow:0 4px 10px -6px rgba(0,0,0,.4),0 18px 38px -18px rgba(0,0,0,.55);
}
body.dark #mhDetail.sd-host .kc-nm{color:#EAF0F4}
body.dark #mhDetail.sd-host .kc-meta{color:#8C9AA5}
body.dark #mhDetail.sd-host .kc-act,
body.dark #mhDetail.sd-host .sd-cmtedit,
body.dark #mhDetail.sd-host .sd-cmtedit-btn.ghost,
body.dark #mhDetail.sd-host .sd-comp{color:#8FBBA5;box-shadow:0 3px 8px -5px rgba(0,0,0,.45),0 10px 20px -14px rgba(0,0,0,.6)}
body.dark #mhDetail.sd-host .kc-act:hover,
body.dark #mhDetail.sd-host .sd-cmtedit:hover,
body.dark #mhDetail.sd-host .sd-cmtedit-btn.ghost:hover:not(:disabled),
body.dark #mhDetail.sd-host .sd-comp:hover{
  background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4;
  box-shadow:0 3px 7px -4px rgba(0,0,0,.5),0 10px 20px -10px rgba(0,0,0,.6),inset 0 0 0 1px rgba(180,210,235,.16);
}
body.dark #mhDetail.sd-host .kc-act.sdl-danger{color:#F0A9A3}
body.dark #mhDetail.sd-host .sd-comp-face,
body.dark #mhDetail.sd-host .sd-comp-chev{color:#8FBBA5}
body.dark #mhDetail.sd-host .sd-comp.open{background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));border-color:rgba(95,207,164,.4)}
body.dark #mhDetail.sd-host .kid-plus{color:#8FBBA5;background:rgba(var(--tg-rgb,255,255,255),calc(.06*var(--tg-k,1)));box-shadow:inset 0 0 0 1px rgba(180,210,235,.14)}
body.dark #mhDetail.sd-host .kid-add-l{color:#8FBBA5}
body.dark #mhDetail.sd-host .sd-note,
body.dark #mhDetail.sd-host .sd-note:first-of-type{
  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 #mhDetail.sd-host .sd-note-b{color:#EAF0F4}
body.dark #mhDetail.sd-host .sdl-blurb{color:#93A79D}
body.dark #mhDetail.sd-host .pgl-card .dv-row.sd-pickrow.is-on{background:rgba(95,207,164,.10);border-color:rgba(95,207,164,.32)}

/* =============================================================================
   TMMINT18 (24 September 2026) - TERM SETTINGS (ChildCarePanel, host #6) JOINS THE MINT STANDARD.

   Owner: "deploy all PROGRAM TAB ... follow our new standard roles everywhere". The Program record's
   blocks (PGMINT18 + PGLIST18) were WIDENED to `#mhDetail:is(.pg-host,.sd-host,.tm-host,:is(.sb-host,.vl-host))` - one
   recipe, three hosts (playbook 15f). What follows is only what a TERM has and a program does not:
   the meeting-day buttons and the time on a tile's value line, the two-up stat row, the amber note.
   `#mhDetail.tm-host` ONLY - the shell id is shared by six hosts. END of file.
   ============================================================================= */
/* the two facts above the seat / place tiles sit two-up, like the tiles under them */
#mhDetail.tm-host .pd-card.mint .mint-grid.pgl-stats.tm-stats2{grid-template-columns:1fr 1fr}
/* THE TIME is the value line: 16px/650/24px, the native clock kept as the control's affordance */
#mhDetail.tm-host .mint-w.ed input.tm-time{
  height:24px;line-height:24px;padding:0;border:0;background:none;box-shadow:none;
  font-family:var(--font-sans);font-size:16px;font-weight:650;color:#1C2A25;font-variant-numeric:tabular-nums;
}
#mhDetail.tm-host .mint-w.ed input.tm-time::-webkit-calendar-picker-indicator{opacity:.55;cursor:pointer}
/* THE MEETING DAYS - the tab row's glass buttons inside the tile; the chosen days wear the mint */
#mhDetail.tm-host .tm-dow2{display:grid;grid-template-columns:repeat(7,1fr);gap:6px;margin-top:4px}
#mhDetail.tm-host .tm-dow2 button{
  height:34px;border-radius:10px;cursor:pointer;
  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);
  font-family:var(--font-sans);font-size:12px;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;
}
#mhDetail.tm-host .tm-dow2 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)}
#mhDetail.tm-host .tm-dow2 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);
}
#mhDetail.tm-host .tm-dow2 button:focus-visible{outline:2px solid #2F6B57;outline-offset:2px}
/* the date-change question sits above the tiles it is about */
#mhDetail.tm-host .dv-confirm.tm-confirm{margin:0 0 12px}
/* a gift card nobody can reach - amber, a decision to make, not a failure */
#mhDetail.tm-host .mint-cardnote.tm-warn{
  margin-top:12px;padding:11px 14px;border-radius:14px;
  background:rgba(216,155,61,.12);border:1px solid rgba(216,155,61,.38);color:#7A5213;font-weight:600;
}
@media (prefers-reduced-motion: reduce){ #mhDetail.tm-host .tm-dow2 button:hover{transform:none} }
body.dark #mhDetail.tm-host .mint-w.ed input.tm-time{color:#EAF0F4;color-scheme:dark}
body.dark #mhDetail.tm-host .tm-dow2 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 #mhDetail.tm-host .tm-dow2 button:not(.on):hover{background:rgba(var(--tg-rgb,255,255,255),calc(.12*var(--tg-k,1)));color:#EAF0F4}
body.dark #mhDetail.tm-host .tm-dow2 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 #mhDetail.tm-host .mint-cardnote.tm-warn{background:rgba(216,155,61,.12);border-color:rgba(216,155,61,.3);color:#F0C27B}

/* =============================================================================
   KIDWIZ18 (24 September 2026) - THE STUDENT RECORD'S CHILD WIZARD JOINS THE WIZARD STANDARD.

   The last surface of the Program tab still on the old kit (4q NOT DONE): the record's own Add /
   Edit Child wizard (.kid-shell). It takes, value for value, what + New Program (PGWIZ18 / 18b /
   PGREV18 / PGBG18) and + Enroll Student (EWIZ18) wear:
     window    = PGBG18: 26 radius, .6 white rim, 0 30px 80px pine shadow, rgba(33,42,38,.5) backdrop
     section   = the glass section card (.4 / .72 rim / 22 / -26px) + capsule head + live meter
     field     = the TILE (12/16/14/30, 16 radius, .72 filled / .4 dashed + hollow dot when empty)
     list      = anchored to the tile (static row, face over the padding, left/right 0, +10px)
     review    = the client wizard's step-4 card (white capsule, mini glass Edit, value tiles)
     footer    = FOOTBTN18 (mint gradient primary, glass secondary)
   `#mhDetail.sd-host .kid-shell` ONLY - the shell id is shared by six hosts. END of file.
   ============================================================================= */
#mhDetail.sd-host .kid-ov{background:rgba(33,42,38,.5);-webkit-backdrop-filter:none;backdrop-filter:none}
#mhDetail.sd-host .kid-shell{
  border-radius:26px;border:1px solid rgba(255,255,255,.6);box-shadow:0 30px 80px rgba(33,58,51,.26);
}
#mhDetail.sd-host .kid-rail{border-right:1px solid rgba(255,255,255,.08)}
#mhDetail.sd-host .kid-head h3{font-size:21px;letter-spacing:.42px}

/* ---- the section card ---- */
#mhDetail.sd-host .kid-shell .fgrid{gap:11px}
#mhDetail.sd-host .kid-shell .dv-formnote{color:#7A8A84}

/* ---- the field IS the tile ---- */
#mhDetail.sd-host .kid-shell .field{
  position:relative;gap:4px;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:transform .18s ease,background .18s ease,border-color .18s ease,box-shadow .18s ease;
}
#mhDetail.sd-host .kid-shell .field::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,.14);
}
#mhDetail.sd-host .kid-shell .field.kw-e{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}
#mhDetail.sd-host .kid-shell .field.kw-e::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.22)}
#mhDetail.sd-host .kid-shell .field:not(.err):not(.locked):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);
}
#mhDetail.sd-host .kid-shell .field:not(.err):not(.locked):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);
}
#mhDetail.sd-host .kid-shell .field>label{
  font-size:10px;font-weight:800;letter-spacing:1px;text-transform:uppercase;color:#7A8A84;line-height:12.5px;
}
#mhDetail.sd-host .kid-shell .field.locked{background:rgba(var(--tg-rgb,255,255,255),calc(.3*var(--tg-k,1)));border-style:solid;box-shadow:none}
#mhDetail.sd-host .kid-shell .field.locked .icf{opacity:1}
#mhDetail.sd-host .kid-shell .field.locked :is(input,.sel-face){color:#8A9A94 !important}
/* the well inside the tile goes; the row keeps its job */
#mhDetail.sd-host .kid-shell .field .icf,
#mhDetail.sd-host .kid-shell .field .icf:hover:not(:focus-within),
#mhDetail.sd-host .kid-shell .field .icf:focus-within,
#mhDetail.sd-host .kid-shell .field .icf.open,
#mhDetail.sd-host .kid-shell .field.err .icf,
#mhDetail.sd-host .kid-shell .field.err .icf:hover,
#mhDetail.sd-host .kid-shell .field.err .icf:hover:not(:focus-within),
#mhDetail.sd-host .kid-shell .field.err .icf:focus-within,
#mhDetail.sd-host .kid-shell .field.err .icf.open{
  min-height:24px;padding:0;gap:9px;background:none;border:none;box-shadow:none;border-radius:0;animation:none;
}
#mhDetail.sd-host .kid-shell .field .icf :is(input,textarea),
#mhDetail.sd-host .kid-shell .field .icf .sel-face{font-size:16px !important;font-weight:650 !important;line-height:24px;color:#1C2A25}
#mhDetail.sd-host .kid-shell .field .icf input::placeholder{color:#98A5AE;font-weight:500}
#mhDetail.sd-host .kid-shell .field .icf .sel-face.ph{color:#9CA8A3;font-weight:500 !important}
#mhDetail.sd-host .kid-shell .field .icf > .ic:not(.chev){display:none}
#mhDetail.sd-host .kid-shell .field .icf .chev{color:#2F6B57;opacity:.75}
/* the date: the value line (masked MM/DD/YYYY + calendar kept) */
#mhDetail.sd-host .kid-shell .field .dp .dp-field,
#mhDetail.sd-host .kid-shell .field .dp:not(.open) .dp-field:hover,
#mhDetail.sd-host .kid-shell .field .dp.open .dp-field{
  min-height:0;height:auto;padding:0;gap:8px;background:none;border:0;box-shadow:none;border-radius:0;
}
#mhDetail.sd-host .kid-shell .field .dp .dpf-ico{display:none}
#mhDetail.sd-host .kid-shell .field .dp :is(.dpf-mask,.dpf-mask:hover,.dpf-mask:focus,.dpf-mask:focus-visible,.dpf-val){
  font-size:16px !important;font-weight:650 !important;line-height:24px;height:24px !important;color:#1C2A25 !important;
}
/* the refusal paints the TILE */
#mhDetail.sd-host .kid-shell .field.err{background:var(--danger-bg);border:1px solid var(--danger);box-shadow:none}
#mhDetail.sd-host .kid-shell .field.err::before{background:var(--danger);box-shadow:0 0 0 3px rgba(192,71,63,.16)}
#mhDetail.sd-host .kid-shell .field.err .dp .dp-field{background:none !important;border:0 !important;box-shadow:none !important}

/* ---- the list belongs to the TILE ---- */
#mhDetail.sd-host .kid-shell .field .icf.has-sel{position:static;margin:0 -16px -14px -30px;padding:0 16px 14px 30px;cursor:pointer}
#mhDetail.sd-host .kid-shell .field.kw-open{z-index:60}
#mhDetail.sd-host .kid-shell .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);
}
#mhDetail.sd-host .kid-shell .field .selpop.up{top:auto;bottom:calc(100% + 10px)}
#mhDetail.sd-host .kid-shell .field .sel-opt{font-size:15px;font-weight:650;padding:11px 13px;border-radius:11px;color:#1C2733}
#mhDetail.sd-host .kid-shell .field .sel-opt:hover{background:var(--tg-well,rgb(223,228,234))}
#mhDetail.sd-host .kid-shell .field .sel-opt.on{background:rgba(46,74,67,.12);color:#375A50;font-weight:700}
#mhDetail.sd-host .kid-shell .field .icf .sel-search{font-size:16px !important;font-weight:650 !important;line-height:24px;color:#1C2A25}

/* the "same as the parent" tick = a glass tile row */
#mhDetail.sd-host .kid-shell .kid-same{
  padding:12px 16px;border-radius:16px;margin:0 0 11px;
  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);
}
#mhDetail.sd-host .kid-shell .kid-same .opt-txt{font-size:13px;font-weight:700;color:#1C2A25}

/* ---- the error bar ---- */
#mhDetail.sd-host .kid-shell .mint-err.kw-err{margin:0 0 14px}

/* ---- the review: the client wizard's step-4 card ---- */
#mhDetail.sd-host .kid-shell .kid-rev.kwr-card{
  overflow:visible;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);
}
#mhDetail.sd-host .kid-shell .kwr-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);
}
#mhDetail.sd-host .kid-shell .kwr-t{font-size:11.5px;font-weight:800;letter-spacing:.1em;text-transform:uppercase;color:#1C2A25}
#mhDetail.sd-host .kid-shell .kwr-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;
}
#mhDetail.sd-host .kid-shell .kwr-e:hover:not(:disabled){background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));color:#1C2733;transform:translateY(-2px)}
#mhDetail.sd-host .kid-shell .kwr-b{display:grid;grid-template-columns:1fr 1fr;gap:11px;padding:11px 0 0}
#mhDetail.sd-host .kid-shell .kwr-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;
}
#mhDetail.sd-host .kid-shell .kwr-i.wide{grid-column:1 / -1}
#mhDetail.sd-host .kid-shell .kwr-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);
}
#mhDetail.sd-host .kid-shell .kwr-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}
#mhDetail.sd-host .kid-shell .kwr-i.none::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(30,55,48,.22)}
#mhDetail.sd-host .kid-shell .kwr-i:hover{background:rgba(var(--tg-rgb,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)}
#mhDetail.sd-host .kid-shell .kwr-l{font-size:10px;font-weight:800;letter-spacing:.1em;line-height:1.25;text-transform:uppercase;color:#7A8A84;margin-bottom:4px}
#mhDetail.sd-host .kid-shell .kwr-v{font-size:15px;font-weight:650;line-height:1.35;color:#1C2A25;overflow-wrap:anywhere}
#mhDetail.sd-host .kid-shell .kwr-i.none .kwr-v{color:#9CA8A3;font-weight:500}

/* ---- the footer pair (FOOTBTN18) ---- */
#mhDetail.sd-host .kid-foot{padding:18px 32px 24px;border-top-color:#D9DFE7}
#mhDetail.sd-host .kid-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;
}
#mhDetail.sd-host .kid-foot .ui-btn::after{content:"";position:absolute;left:0;right:0;top:-4px;bottom:-4px;border-radius:inherit}
#mhDetail.sd-host .kid-foot .ui-btn svg{width:18px;height:18px}
#mhDetail.sd-host .kid-foot .ui-btn.primary{
  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%);
  color:#fff;border:1px solid transparent;box-shadow:0 4px 12px -2px rgba(47,107,87,.42);
}
#mhDetail.sd-host .kid-foot .ui-btn.primary:hover:not(:disabled){box-shadow:0 8px 20px -4px rgba(47,107,87,.5)}
#mhDetail.sd-host .kid-foot .ui-btn.secondary{
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));color:#375A50;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 3px 8px -5px rgba(30,55,48,.14),0 16px 34px -18px rgba(30,55,48,.26);
}
#mhDetail.sd-host .kid-foot .ui-btn.secondary:hover:not(:disabled){
  background:rgba(var(--tg-rgb,255,255,255),calc(.72*var(--tg-k,1)));color:#1C2733;
  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);
}
#mhDetail.sd-host .kid-foot .ui-btn:hover:not(:disabled){transform:translateY(-2px)}
@media (prefers-reduced-motion: reduce){
  #mhDetail.sd-host .kid-shell .field:hover, #mhDetail.sd-host .kid-shell .field:focus-within,
  #mhDetail.sd-host .kid-shell .kwr-i:hover, #mhDetail.sd-host .kid-foot .ui-btn:hover{transform:none}
}

/* ---- DARK ---- */
body.dark #mhDetail.sd-host .kid-shell{border-color:rgba(180,210,235,.14)}
body.dark #mhDetail.sd-host .kid-shell .kid-rev.kwr-card{background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.14);box-shadow:0 22px 54px -26px rgba(0,0,0,.7)}
body.dark #mhDetail.sd-host .kid-shell .kwr-t{color:#EAF0F4}
body.dark #mhDetail.sd-host .kid-shell :is(.field,.kwr-i,.kwr-h,.kid-same){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 #mhDetail.sd-host .kid-shell :is(.field.kw-e,.kwr-i.none){background:rgba(var(--tg-rgb,255,255,255),calc(.03*var(--tg-k,1)));border-color:rgba(180,210,235,.2);box-shadow:none}
body.dark #mhDetail.sd-host .kid-shell :is(.field,.kwr-i)::before{background:#5FCFA4;box-shadow:0 0 0 3px rgba(95,207,164,.18)}
body.dark #mhDetail.sd-host .kid-shell :is(.field.kw-e,.kwr-i.none)::before{background:transparent;box-shadow:inset 0 0 0 1.5px rgba(180,210,235,.3)}
body.dark #mhDetail.sd-host .kid-shell .field .icf :is(input,textarea,.sel-face,.sel-search),
body.dark #mhDetail.sd-host .kid-shell .field .dp :is(.dpf-mask,.dpf-val),
body.dark #mhDetail.sd-host .kid-shell :is(.kwr-v,.kid-same .opt-txt){color:#EAF0F4 !important}
body.dark #mhDetail.sd-host .kid-shell .field .selpop{background:#222E38;border-color:rgba(150,190,225,.28)}
body.dark #mhDetail.sd-host .kid-shell .field .sel-opt{color:#EAF0F4}
body.dark #mhDetail.sd-host .kid-shell .field .sel-opt:hover{background:#121A20}
body.dark #mhDetail.sd-host .kid-foot{border-top-color:rgb(51,64,58)}
body.dark #mhDetail.sd-host .kid-foot .ui-btn.secondary,
body.dark #mhDetail.sd-host .kid-shell .kwr-e{background:rgba(var(--tg-rgb,255,255,255),calc(.05*var(--tg-k,1)));border-color:rgba(180,210,235,.14);color:#8FBBA5;box-shadow:none}

/* IMMLAY30 (owner, 30 Sep 2026): "the drop down menus values are getting two rows". The Identity card is now full
   width (tile 346px), but two values still wrapped in the open list - "Lawful Permanent Resident (LPR / Green Card)"
   and "LPR - Other basis (DV, H-1B, family, marriage)" need ~303px of text + padding + the scrollbar. The Immigration
   status list therefore grows to its longest value. It never gets narrower than the tile, and it is capped. The tile is
   always the first column, so the list grows to the right inside the card. Scoped to this one field by its key. */
#mhDetail .mint-w[data-fk="imm"] .selpop.mint-pop{
  right:auto;width:max-content;min-width:calc(100% + 2px);max-width:min(520px,calc(100vw - 48px));
  scrollbar-gutter:stable}

/* ============================================================
   CNSTD01 - THE CASE NOTE POPUP (#cnPop) ON THE MINT TILES.  1 October 2026.
   Owner: "start landing our new interface and fields and roles standards to the CASE NOTE wizards and
   detail mocks all in one go". The popup is page-rooted (outside #mhDetail), so it joined the kit the way
   Settings did - every `#view-settings` Mint rule in detail-view.css / client-detail-view.css carries a
   `#cnPop` twin, and the footer button rules carry a `#cnPop.mint-host` twin. The rules below are the
   record rules that are gated per host (`#mhDetail:is(.pg-host,...)`), restated for the popup: a
   full-width tile spans the grid, and a prose tile reads at the textarea's own floor so Edit moves
   nothing (field standard rule 16).
   ============================================================ */
#cnPop .mint-w.wide{grid-column:1 / -1}
#cnPop .mint-w.prose .mint-vl{white-space:pre-wrap;overflow:visible;text-overflow:clip;min-height:92px;line-height:22px}
#cnPop .cn-pc{margin:0}
#cnPop .cn-pc .mint-grid{grid-template-columns:1fr 1fr}

/* CNSTD01 - THE POPUP FOOTER PAIR. The record's button SHAPE is defined for #mhDetail's footer only, so on the
   page-rooted popup Edit Note took the gradient but not the shape (measured 58x36, wrapping, 14px/400, radius 0).
   These are the record footer's own computed values, READ OFF THE LIVE #mhDetail footer (Close + Write a note),
   not re-picked: 48px / 0 22px / 12px / 14.5px 700 / gap 9 / 18px icons, nowrap, and the 3o hover lift. */
#cnPop :is(.ft,.sfoot) .ui-btn{
  display:inline-flex;align-items:center;justify-content:center;gap:9px;flex:none;
  height:48px;padding:0 22px;border-radius:12px;white-space:nowrap;
  font-family:inherit;font-size:14.5px;line-height:21.75px;font-weight:700;letter-spacing:normal;
  border:1px solid transparent;cursor:pointer;
  transition:transform .18s, box-shadow .18s, background .2s cubic-bezier(.2,.7,.25,1), border-color .2s cubic-bezier(.2,.7,.25,1);
}
#cnPop :is(.ft,.sfoot) .ui-btn svg{width:18px;height:18px;flex:none;stroke-width:2}
#cnPop :is(.ft,.sfoot) .ui-btn.secondary{
  background:rgba(246,249,253,.58);border-color:rgba(255,255,255,.72);color:#375A50;
  -webkit-backdrop-filter:blur(24px) saturate(1.5);backdrop-filter:blur(24px) saturate(1.5);
  box-shadow:0 3px 8px -5px rgba(30,55,48,.14), 0 16px 34px -18px rgba(30,55,48,.26);
}
#cnPop :is(.ft,.sfoot) .ui-btn.secondary:hover:not(:disabled){background:rgba(255,255,255,.72);color:#1C2733;transform:translateY(-2px)}
#cnPop :is(.ft,.sfoot) .ui-btn.primary{color:#fff}
#cnPop :is(.ft,.sfoot) .ui-btn.primary:hover:not(:disabled){transform:translateY(-2px)}
#cnPop :is(.ft,.sfoot) .ui-btn:disabled{opacity:.55;cursor:not-allowed;transform:none}
/* the case-actions "..." = the record header's glass square, same 48px as its neighbours */
#cnPop .ft #dmore{
  width:48px;height:48px;border-radius:12px;padding:0;display:inline-grid;place-items:center;
  background:rgba(246,249,253,.58);border:1px solid rgba(255,255,255,.72);color:#375A50;
  box-shadow:0 3px 8px -5px rgba(30,55,48,.14), 0 16px 34px -18px rgba(30,55,48,.26);
}
#cnPop .ft #dmore svg{width:20px;height:20px}
#cnPop .ft #dmore[aria-expanded="true"]{background:#fff;border-color:#2F6B57;color:#2F6B57}
#cnPop .ft #dmore:disabled{opacity:.55;cursor:not-allowed}
#cnPop .ft .sp{gap:10px;align-items:center}

#cnPop .sfoot{display:flex;justify-content:flex-end;gap:10px;align-items:center}
#cnPop .cn-futile{margin-top:4px}
/* the record frame lets its tiles inherit line-height 1.5 (14px -> 21, label 10px -> 15, value 16px -> 24 - measured);
   the popup frame is "normal", so its tiles read 66px against the record's 71 and grew 3px on Edit. Same 1.5 here. */
#cnPop .cn-pc{line-height:1.5}

/* STAFFQA01 (1 Oct 2026) - THE ADD DOCUMENT WINDOW ON THE STANDARD (found on the staff pass: grey labels over flat
   inset fields on a flat card). Fields = the Mint tile (.mint-kit on .mbox); the window = the theme wallpaper with
   the white rim, head and foot clear on it, as the Teams windows (GRPPHOTO01); the drop zone takes the empty-tile
   dashed look so it reads as one more field. */
body:not(.dark) #mhDetail .cl-docmodal .mbox.mint-kit{
  background-color:var(--mh-canvas,#E1E6EB);background-image:var(--mh-canvas-img,none);
  border:1px solid rgba(255,255,255,.72);border-radius:22px;
  box-shadow:0 30px 80px -24px rgba(20,40,34,.45),0 8px 22px -12px rgba(20,40,34,.25);
}
#mhDetail .cl-docmodal .mbox.mint-kit :is(.mhead,.mfoot){border-color:rgba(255,255,255,.55)}
#mhDetail .cl-docmodal .mbox.mint-kit .mbody{gap:12px}
#mhDetail .cl-docmodal .mbox.mint-kit .drop{
  border-radius:16px;border:1px dashed rgba(30,55,48,.22);
  background:rgba(var(--tg-rgb,255,255,255),calc(.4*var(--tg-k,1)));color:#5E6E68;
}
#mhDetail .cl-docmodal .mbox.mint-kit .drop:hover{background:rgba(var(--tg-rgb,255,255,255),.72);border-color:rgba(47,107,87,.4)}
#mhDetail .cl-docmodal .mbox.mint-kit .drop.has{border-style:solid;border-color:rgba(47,107,87,.4);background:rgba(var(--tg-rgb,255,255,255),.72);color:#2F6B57}
