/* Generated by scripts/assets.py from the files below; edit those. */
/* --- css/reset.css --- */
/* Minimal reset. The site no longer ships daisyUI/Tailwind: every component
   has its own nd-* rule. Keep this file first in scripts/assets.py SOURCES. */
*,*::before,*::after { box-sizing:border-box; }
html { -webkit-text-size-adjust:100%; text-size-adjust:100%; tab-size:4; }
body { margin:0; }
h1,h2,h3,h4,p,figure,blockquote,dl,dd { margin:0; }
ul,ol { margin:0; padding:0; list-style:none; }
img,svg,video { display:block; max-width:100%; }
img { height:auto; }
button,input,select,textarea { margin:0; color:inherit; font:inherit; }
button { padding:0; border:0; background:none; cursor:pointer; }
a { color:inherit; text-decoration:inherit; }
table { border-collapse:collapse; border-spacing:0; }
fieldset { min-width:0; margin:0; padding:0; border:0; }
legend { padding:0; }
[hidden] { display:none!important; }
/* --- css/fonts.css --- */
/* URW Bookman Demi and Nimbus Sans (URW)++, subset to Latin as WOFF2; source, license and
   exception in /assets/fonts/LICENSE.txt. How they were made: docs/design.md §6. */
@font-face { font-family:'Non Ducor Bookman'; src:url(/assets/fonts/non-ducor-bookman-600-74f5aa5accd255a23b70d3d552f18d22.woff2?vsn=d) format('woff2'); font-style:normal; font-weight:600; font-display:swap; }
@font-face { font-family:'Non Ducor Sans'; src:url(/assets/fonts/non-ducor-sans-400-ba4eeee0ee70d635953ac0d1c11e87bd.woff2?vsn=d) format('woff2'); font-style:normal; font-weight:400; font-display:swap; }
@font-face { font-family:'Non Ducor Sans'; src:url(/assets/fonts/non-ducor-sans-700-549816542e79e1bc84b659e097b7254c.woff2?vsn=d) format('woff2'); font-style:normal; font-weight:700; font-display:swap; }
/* --- css/tokens.css --- */
/* Identity tokens from the Malote visual language (docs/design.md §6). */
:root {
  --paper:#f4eee1; --ink:#29251f; --muted:#625c53; --primary:#15130f; --secondary:#294b8d; --accent:#dfa63b;
  --soft:#e7dbca; --line:#d0c5b5; --on-primary:#fffaf0; --panel:#fbf7ef; --sheet:var(--panel);
  --serif:'Non Ducor Bookman',Georgia,serif; --sans:'Non Ducor Sans',Arial,sans-serif;

  /* Paper and ink textures: engraved hatching drawn with gradients, no images.
     The first layer is the pointer light published as --px/--py by ui.js. */
  --hatch-light-color:rgb(from var(--accent) r g b / .24);
  --hatch-light:radial-gradient(240px circle at var(--px,-100vmax) var(--py,-100vmax),var(--hatch-light-color),transparent 72%) fixed;
  --hatch-lines:var(--hatch-light),repeating-linear-gradient(62deg,transparent 0 2.4px,rgb(from var(--ink) r g b / .32) 2.4px 3px);
  --hatch-soft:var(--hatch-light),repeating-linear-gradient(62deg,transparent 0 2.4px,rgb(from var(--ink) r g b / .16) 2.4px 3px);
  --cross:var(--hatch-light),repeating-linear-gradient(-28deg,transparent 0 2.6px,rgb(from var(--ink) r g b / .22) 2.6px 3.2px);
  --desk-hatch:var(--hatch-light),repeating-linear-gradient(62deg,transparent 0 3.4px,rgb(from var(--ink) r g b / .07) 3.4px 4px);
  /* Engraving primary (Malote): solid ink with a paper hatch. */
  --primary-surface:repeating-linear-gradient(62deg,transparent 0 2px,rgb(from var(--on-primary) r g b / .28) 2px 3px) 0 0/auto,var(--primary);
  --secondary-surface:linear-gradient(180deg,rgba(255,255,255,.5),rgba(255,255,255,0) 50%),rgb(from var(--secondary) r g b / .08);
  --frosted-surface:rgba(252,249,243,.72);

  --forest:#3f6549; --ochre:#795a18;
  --status-success:var(--forest); --status-info:var(--secondary); --status-warning:var(--ochre);
  --status-danger:color-mix(in srgb,#ae3f2e 90%,var(--ink));
  --status-success-surface:color-mix(in srgb,var(--status-success) 10%,var(--paper));
  --status-info-surface:color-mix(in srgb,var(--status-info) 10%,var(--paper));
  --status-danger-surface:color-mix(in srgb,var(--status-danger) 10%,var(--paper));

  /* Type scale and layout measures (spec 2.1). */
  --text-display:clamp(34px,5vw,48px); --text-h1:clamp(30px,4.5vw,40px);
  --text-h2:24px; --text-h3:19px; --text-lead:18px; --text-body:16px;
  --text-small:14px; --text-caption:12px;
  --content-max:1120px; --prose-max:42rem; --aside-width:340px;
  --radius-sm:6px; --radius-md:10px; --radius-lg:14px;
  --space-1:4px; --space-2:8px; --space-3:12px; --space-4:16px; --space-5:24px; --space-6:32px;
  /* Two layout steps beyond Malote's scale (a Non Ducor extension, design §6). */
  --space-7:48px; --space-8:64px;
  --rule:rgb(from var(--ink) r g b / .1); --rule-strong:rgb(from var(--ink) r g b / .24);
  --band:color-mix(in srgb,var(--soft) 45%,var(--paper));
  --shadow-1:0 1px 2px rgb(from var(--ink) r g b / .06),0 1px 1px rgb(from var(--ink) r g b / .04);
  --shadow-2:0 1px 2px rgb(from var(--ink) r g b / .05),0 8px 24px -12px rgb(from var(--ink) r g b / .22);
  --shadow-3:0 2px 4px rgb(from var(--ink) r g b / .06),0 24px 48px -20px rgb(from var(--ink) r g b / .4);
}
/* --- css/buttons.css --- */
/* The pill button from the Malote visual language: primary, secondary, tertiary,
   danger and link variants, two sizes and an icon-only form. The pointer lamp,
   click ripple and hatch light are live (ui.js); see docs/design.md §6. */
.nd-button { box-sizing:border-box; --h:46px; --pad:26px; position:relative; isolation:isolate; display:inline-flex; align-items:center; justify-content:center; gap:12px;
  flex:none; height:var(--h); padding:0 var(--pad); border:0; border-radius:999px; background:none; color:var(--ink);
  font:700 13px/1 var(--sans); text-decoration:none; white-space:nowrap; cursor:pointer;
  transition:transform .3s ease,background-position .7s ease,background-color .25s ease,box-shadow .25s ease,color .25s ease; }
.nd-button.sm { --h:36px; --pad:18px; gap:9px; font-size:12px; }
.nd-button.wide { width:100%; }
.nd-button > * { position:relative; z-index:1; }
.nd-button-fx { position:absolute; inset:0; z-index:-1; overflow:hidden; border-radius:inherit; pointer-events:none; }
.nd-button.icon-only { width:var(--h); padding:0; }
.nd-button:focus-visible { outline:3px solid var(--secondary); outline-offset:4px; }
.nd-button:disabled { cursor:not-allowed; opacity:.45; filter:saturate(.5); }
.nd-button:disabled .nd-button-lamp { display:none; }
.nd-button:not(:disabled):active { transform:translateY(1px) scale(.98); }
.nd-button-label { text-box:trim-both cap alphabetic; }

/* Lead: a fine line between label and icon, like the lead between two pieces of glass */
.nd-button .nd-button-lead { align-self:center; width:1px; height:46%; background:currentColor; opacity:.3; }

/* Pointer light: a warm light follows the pointer over the glass */
.nd-button-lamp { position:absolute; inset:0; z-index:0; border-radius:inherit; pointer-events:none; opacity:0; transition:opacity .3s ease;
  background:radial-gradient(var(--lamp-radius,70px) circle at var(--mx,50%) var(--my,50%),rgba(255,244,222,.42),transparent 72%); }
.nd-button:not(:disabled):hover .nd-button-lamp,[data-surface-effects]:hover .nd-button-lamp { opacity:1; }
.nd-button:not(.primary) .nd-button-lamp,[data-surface-effects] .nd-button-lamp { background:radial-gradient(var(--lamp-radius,70px) circle at var(--mx,50%) var(--my,50%),rgb(from var(--accent) r g b / .3),transparent 72%); }

/* Click: the surface gives, and a drop of light spreads from the pointer */
:is(.nd-button,[data-surface-effects]).clicked { animation:nd-press .65s cubic-bezier(.3,1.5,.5,1); }
@keyframes nd-press { 30% { transform:scale(.94); } }
:is(.nd-button,[data-surface-effects]) .nd-button-fx::before { content:''; position:absolute; left:var(--x,50%); top:var(--y,50%); width:var(--ripple-size,12px); height:var(--ripple-size,12px); margin:calc(var(--ripple-size,12px) / -2) 0 0 calc(var(--ripple-size,12px) / -2); border-radius:50%; opacity:0; background:rgb(from var(--accent) r g b / .32); }
.nd-button.primary .nd-button-fx::before { background:rgb(from var(--on-primary) r g b / .6); }
.nd-button.secondary .nd-button-fx::before { background:rgb(from var(--secondary) r g b / .3); }
.nd-button.danger .nd-button-fx::before { background:rgb(from var(--on-primary) r g b / .45); }
:is(.nd-button,[data-surface-effects]).clicked .nd-button-fx::before { animation:nd-ripple .6s ease-out; }
@keyframes nd-ripple { from { opacity:1; transform:scale(0); } to { opacity:0; transform:scale(28); } }

/* Primary: engraved ink with a paper hatch; hover: the hatching drifts and an ink offset appears */
.nd-button.primary { color:var(--on-primary); background:var(--primary-surface); box-shadow:inset 0 0 0 1.5px var(--ink); }
.nd-button.primary:not(:disabled):hover { transform:translateY(-1px); background-position:14px 0,0 0;
  box-shadow:inset 0 0 0 1.5px var(--ink),0 4px 0 -1px rgb(from var(--ink) r g b / .22); }

/* Danger: a solid, darker red for destructive admin actions; always follows a confirmation step */
.nd-button.danger { color:var(--on-primary); text-shadow:0 1px 2px rgb(from var(--ink) r g b / .35); background:var(--status-danger);
  box-shadow:inset 0 0 0 1.5px var(--ink),inset 0 2px 0 rgb(from var(--on-primary) r g b / .2),inset 0 -2px 0 rgb(from var(--ink) r g b / .22),0 6px 14px -8px rgb(from var(--status-danger) r g b / .7); }
.nd-button.danger:not(:disabled):hover { transform:translateY(-1px); background:color-mix(in srgb,var(--status-danger) 88%,var(--ink));
  box-shadow:inset 0 0 0 1.5px var(--ink),inset 0 2px 0 rgb(from var(--on-primary) r g b / .2),inset 0 -2px 0 rgb(from var(--ink) r g b / .22),0 10px 18px -8px rgb(from var(--status-danger) r g b / .75); }

/* Secondary: clear glass with a blue tint and a fine ink edge */
.nd-button.secondary { color:var(--secondary); background:var(--secondary-surface); box-shadow:inset 0 0 0 1px var(--ink),inset 0 2px 0 rgba(255,255,255,.55); }
.nd-button.secondary:not(:disabled):hover { transform:translateY(-1px); background-color:rgb(from var(--secondary) r g b / .14); }

/* Tertiary: no glass until the pointer arrives; then frosted paper appears */
.nd-button.tertiary { background-color:transparent; }
.nd-button.tertiary:hover { background-color:var(--frosted-surface); box-shadow:inset 0 0 0 1px rgb(from var(--ink) r g b / .2),inset 0 1px 0 #fff; -webkit-backdrop-filter:blur(6px); backdrop-filter:blur(6px); }

/* Link: plain ink words that hatch into a pill on hover; no underline and no strip in any state */
.nd-button.link { --pad:var(--space-3); height:auto; min-height:32px; padding:var(--space-2) var(--pad); gap:6px; color:var(--primary); }
.nd-button.link:not(:disabled):hover { background:var(--hatch-soft); }
.nd-button.link .nd-icon { width:14px; height:14px; }

/* Text pills: statuses, drafts, navigation links and seal discs hold bare text. Chromium puts the caps of
   Non Ducor Sans 0.136em above the middle of the em box, so centring the box leaves the text high. Where
   text-box exists the block is trimmed to the cap box and the padding centres it; without it, the top padding
   shifts the text down by the same measured offset. */
:is(.nd-status,.nd-draft-notice strong,.nd-nav-link,.nd-seal-disc) { box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center;
  height:var(--pill-h); padding:.27em var(--pill-x,0) 0; line-height:1; text-align:center; }
@supports (text-box:trim-both cap alphabetic) {
  :is(.nd-status,.nd-draft-notice strong,.nd-nav-link,.nd-seal-disc) { display:inline-block; height:auto; padding:calc((var(--pill-h) - 1cap) / 2) var(--pill-x,0);
    text-box:trim-both cap alphabetic; }
}
.nd-status { --pill-h:28px; --pill-x:var(--space-3); }
.nd-draft-notice strong { --pill-h:20px; --pill-x:var(--space-2); }
.nd-nav-link { --pill-h:40px; --pill-x:var(--space-3); }
.nd-seal-disc { --pill-h:22px; }

/* Icons */
.nd-icon { width:20px; height:20px; flex:none; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; stroke-linejoin:round; }
.nd-button .nd-icon { width:17px; height:17px; transition:transform .3s cubic-bezier(.3,1.4,.5,1); }
.nd-button-hidden { display:none; }
.nd-button.sm .nd-icon { width:15px; height:15px; }
.nd-button.icon-only .nd-icon { width:19px; height:19px; }
.nd-button.sm.icon-only .nd-icon { width:16px; height:16px; }
.nd-button .nd-button-processing { display:none; width:17px; height:17px; flex:none; border:2px solid currentColor; border-right-color:transparent; border-radius:50%; }
.nd-button.sm .nd-button-processing { width:15px; height:15px; }
.phx-submit-loading .nd-button[type=submit] .nd-button-processing,
.nd-button.phx-click-loading .nd-button-processing { display:block; animation:nd-spin .9s linear infinite; }
.nd-button.icon-only.phx-click-loading > .nd-icon:not(.nd-button-processing) { display:none; }
.phx-submit-loading .nd-button.icon-only[type=submit] > .nd-icon:not(.nd-button-processing) { display:none; }
.phx-submit-loading .nd-button[type=submit],.nd-button.phx-click-loading { cursor:progress; }

/* Icon motion: each icon moves the way its action goes, a small step on hover and a full gesture on click */
.nd-button:not(:disabled):hover .nd-icon[data-icon="send"],
.nd-button:not(:disabled):hover .nd-icon[data-icon="open"] { transform:translate(2px,-2px); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="compose"] { transform:rotate(-12deg); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="back"] { transform:translateX(-2px); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="forward"] { transform:translateX(2px); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="signout"] { transform:translateX(2px); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="close"] { transform:rotate(90deg); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="check"] { transform:scale(1.15); }
.nd-button:not(:disabled):hover .nd-icon[data-icon="spam"] { transform:translateY(-1px); }
.nd-button.clicked .nd-icon[data-icon="send"],
.nd-button.clicked .nd-icon[data-icon="open"] { animation:nd-icon-fly .6s ease-in-out; }
.nd-button.clicked .nd-icon[data-icon="back"] { animation:nd-icon-fly-back .6s ease-in-out; }
.nd-button.clicked .nd-icon[data-icon="forward"] { animation:nd-icon-fly-out .6s ease-in-out; }
.nd-button.clicked .nd-icon[data-icon="signout"] { animation:nd-icon-fly-out .6s ease-in-out; }
.nd-button.clicked .nd-icon[data-icon="close"] { animation:nd-icon-pop .5s cubic-bezier(.3,1.5,.5,1); }
.nd-button.clicked .nd-icon[data-icon="compose"] { animation:nd-icon-scribble .6s ease-in-out; }
.nd-button.clicked .nd-icon[data-icon="spam"] { animation:nd-icon-shake .5s ease-in-out; }
.nd-button.clicked .nd-icon[data-icon="check"] path { stroke-dasharray:24; animation:nd-icon-draw .55s ease-out; }
@keyframes nd-icon-fly { 40% { transform:translate(16px,-16px); opacity:0; } 41% { transform:translate(-16px,16px); opacity:0; } }
@keyframes nd-icon-fly-back { 40% { transform:translateX(-16px); opacity:0; } 41% { transform:translateX(16px); opacity:0; } }
@keyframes nd-icon-fly-out { 40% { transform:translateX(16px); opacity:0; } 41% { transform:translateX(-16px); opacity:0; } }
@keyframes nd-icon-pop { 40% { transform:scale(.55) rotate(180deg); } }
@keyframes nd-icon-scribble { 20% { transform:rotate(-20deg) translate(-1px,1px); } 40% { transform:rotate(8deg) translate(2px,-1px); } 60% { transform:rotate(-14deg); } 80% { transform:rotate(4deg); } }
@keyframes nd-icon-shake { 20% { transform:translateX(-2px); } 40% { transform:translateX(2px); } 60% { transform:translateX(-2px); } 80% { transform:translateX(1px); } }
@keyframes nd-icon-draw { from { stroke-dashoffset:24; } }
@keyframes nd-spin { to { transform:rotate(360deg); } }

/* Small buttons become full touch targets on phones. */
@media(pointer:coarse) {
  .nd-button.sm { min-height:44px; }
  .nd-button.sm.icon-only { min-width:44px; }
  .nd-button.link { min-height:44px; }
  .nd-nav-link { --pill-h:44px; }
}

@media(prefers-reduced-motion:reduce) { :is(.nd-button,[data-surface-effects]),:is(.nd-button,[data-surface-effects]) *,:is(.nd-button,[data-surface-effects])::before,:is(.nd-button,[data-surface-effects])::after,:is(.nd-button,[data-surface-effects]) *::before,:is(.nd-button,[data-surface-effects]) *::after { animation:none!important; transition:none!important; } }

@media(forced-colors:active) { .nd-button { color:ButtonText; background:ButtonFace; border:1px solid ButtonText; box-shadow:none; text-shadow:none; } .nd-button-fx,.nd-button-lamp { display:none; } .nd-button:disabled { color:GrayText; } }
/* --- css/surfaces.css --- */
/* Paper surfaces: sheets, flash notices, form fields and the skip link. */
.nd-sheet { padding:var(--space-5); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-2); }
@media(min-width:760px) { .nd-sheet { padding:var(--space-6); } }
.nd-main > .nd-sheet + .nd-sheet { margin-top:var(--space-5); }
.nd-sheet h1 { margin:0 0 var(--space-3); font:600 var(--text-h2)/1.2 var(--serif); }
.nd-sheet p { line-height:1.6; }
.nd-sheet > .nd-button { margin-top:var(--space-4); }
/* Text typed by people keeps its line breaks. */
.nd-pre { white-space:pre-line; overflow-wrap:anywhere; }

.nd-flash-group { pointer-events:none; position:fixed; right:var(--space-4); bottom:var(--space-4); z-index:50; display:grid; gap:var(--space-3); width:min(440px,calc(100% - 32px)); }
/* On phones a notice sits in the page flow under the header, so it never covers form fields. */
@media(max-width:759px) { .nd-flash-group.nd-flash-inline { position:static; width:100%; max-width:var(--content-max); margin:0 auto; padding:0 var(--space-4); }
  .nd-flash-group.nd-flash-inline:has([data-flash]:not([hidden])) { margin-top:var(--space-3); } }
.nd-flash { pointer-events:auto; display:flex; align-items:flex-start; gap:var(--space-4); width:100%; padding:var(--space-3) var(--space-3) var(--space-3) var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); color:var(--ink); box-shadow:var(--shadow-3); font:14px/1.45 var(--sans); cursor:pointer; }
.nd-flash[hidden] { display:none; }
.nd-flash > div { flex:1 1 auto; min-width:0; }
.nd-flash .nd-button { flex:none; margin:-6px -2px -6px 0; }
.nd-flash-tag { width:10px; height:10px; margin-top:5px; flex:none; border-radius:50%; background:var(--secondary); }
.nd-flash.error .nd-flash-tag { background:var(--status-danger); }
.nd-flash p { margin:0; }
.nd-flash .title { font-weight:700; }

.nd-divider { display:flex; align-items:center; gap:var(--space-3); margin:var(--space-5) 0; color:var(--muted); font:700 12px/1 var(--sans); letter-spacing:.08em; text-transform:uppercase; }
.nd-divider::before,.nd-divider::after { content:''; flex:1 1 auto; border-top:1px solid var(--rule-strong); }

.nd-skip-link { position:fixed; left:var(--space-3); top:var(--space-3); z-index:100; padding:var(--space-3); background:var(--paper); color:var(--ink); }
/* Hidden by clipping, not by an offset: a viewport offset reappears in element and full-page captures. */
.nd-skip-link:not(:focus-visible) { width:1px; height:1px; padding:0; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }

@media(forced-colors:active) { .nd-sheet,.nd-flash { color:CanvasText; background:Canvas; border-color:CanvasText; box-shadow:none; } }
/* --- css/app.css --- */
/* Page layout: header, main column, hero and footer. Mobile first. */
html,body { margin:0; background:var(--paper); color:var(--ink); font-family:var(--sans); }
h1,h2,h3 { font-family:var(--serif); font-weight:600; line-height:1.15; }
h1,h2 { letter-spacing:-.02em; }
h3 { letter-spacing:-.01em; }
a { color:inherit; }
.nd-eyebrow { margin:0 0 var(--space-2); color:var(--secondary); font:700 12px/1 var(--sans); letter-spacing:.14em; text-transform:uppercase; }

/* Links inside running text stay underlined (WCAG 1.4.1). */
:where(.nd-prose,.nd-legal,.nd-hint,.nd-help) a,.nd-inline-link,.nd-breadcrumbs a { color:var(--secondary); text-decoration:underline; text-decoration-thickness:1px; text-underline-offset:3px;
  text-decoration-color:rgb(from var(--secondary) r g b / .45); }
:where(.nd-prose,.nd-legal,.nd-hint,.nd-help) a:hover,.nd-inline-link:hover,.nd-breadcrumbs a:hover { text-decoration-color:var(--secondary); text-decoration-thickness:2px; }

.nd-header { position:relative; display:flex; align-items:center; justify-content:space-between; gap:var(--space-4); box-sizing:border-box; min-height:60px; max-width:var(--content-max); margin:0 auto; padding:0 var(--space-4) 6px; }
.nd-header::after { content:''; position:absolute; left:var(--space-4); right:var(--space-4); bottom:0; height:6px; background:var(--hatch-soft); border-top:1px solid var(--ink); }
.nd-mark { font:600 26px/1 var(--serif); letter-spacing:-1px; text-decoration:none; color:var(--ink); }

/* Section links (admin tabs, the table of contents of /about): plain words; hover frosts them, the current one sits in an ink-edged pill. */
.nd-nav-link { border-radius:999px; color:var(--ink); font:700 14px/1 var(--sans); text-decoration:none; white-space:nowrap; }
.nd-nav-link:hover { background:var(--frosted-surface); box-shadow:inset 0 0 0 1px var(--rule-strong); }
.nd-nav-link[aria-current="page"],.nd-nav-link[aria-current="true"] { background:var(--band); box-shadow:inset 0 0 0 1px var(--ink); }
.nd-nav-link:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }

/* The page is a column at least as tall as the viewport: the main area grows, so the footer sits at the bottom of a
   short page and follows the content of a long one. Its own stacking context keeps the fixed art behind the content. */
.nd-page { position:relative; isolation:isolate; display:flex; flex-direction:column; min-height:100vh; min-height:100dvh; }
.nd-page > :is(.nd-header,.nd-main,.nd-footer) { width:100%; }
.nd-page > .nd-main { flex:1 0 auto; }
.nd-main { max-width:var(--content-max); margin:0 auto; padding:var(--space-6) var(--space-4) var(--space-7); }
.nd-narrow { max-width:26rem; margin:0 auto; }
.nd-page-stack { display:grid; gap:var(--space-5); }
/* Login: the form column, plus an explainer beside it on wide screens. */
.nd-login { display:grid; gap:var(--space-6); max-width:26rem; margin:0 auto; }
.nd-login-password { margin-top:var(--space-5); padding-top:var(--space-4); border-top:1px solid var(--rule); }
.nd-login-password summary { cursor:pointer; color:var(--secondary); font:700 14px/1.4 var(--sans); }
.nd-login-password summary:focus-visible { outline:3px solid var(--secondary); outline-offset:4px; }
.nd-login-password form { display:grid; gap:var(--space-4); margin-top:var(--space-4); }
.nd-page-stack > .nd-page-title { margin-bottom:0; }
@media(min-width:760px) {
  /* The rail floats in the left margin: the columns keep a margin on both sides at least as wide as the rail and a gap,
     so they stay centred and clear it (the same rule as the search view). */
  :root { --page-side:max(var(--space-5),calc(var(--rail-size) + var(--space-4) * 2 - (100vw - var(--content-max)) / 2)); }
  .nd-header { min-height:72px; padding:0 var(--page-side) 6px; }
  .nd-header::after { left:var(--page-side); right:var(--page-side); }
  .nd-mark { font-size:30px; }
  .nd-main { padding:var(--space-7) var(--page-side) var(--space-8); }
}

.nd-button.wide + .nd-button.wide { margin-top:var(--space-2); }

/* The inner box draws the rule, so it lines up with the header's. */
.nd-footer { box-sizing:border-box; max-width:var(--content-max); margin:0 auto; padding:0 var(--space-4); }
.nd-footer-inner { display:grid; gap:var(--space-5); padding:var(--space-6) 0 var(--space-7); border-top:1px solid var(--rule-strong); color:var(--muted); font-size:var(--text-small); }
.nd-footer-mark { margin:0 0 var(--space-2); color:var(--ink); font:600 20px/1.1 var(--serif); }
.nd-footer-brand p:last-child { margin:0; max-width:24rem; line-height:1.5; }
.nd-footer-links { display:flex; flex-wrap:wrap; gap:var(--space-2) var(--space-5); margin:0; padding:0; list-style:none; }
.nd-footer a { color:var(--muted); text-decoration:none; }
.nd-footer a:hover { color:var(--ink); text-decoration:underline; text-underline-offset:3px; }
.nd-legal-links { margin-top:var(--space-4); font-size:var(--text-caption); }
.nd-legal-links a { color:var(--muted); text-decoration:none; }
.nd-legal-links a:hover { color:var(--ink); text-decoration:underline; text-underline-offset:3px; }
.nd-footer-credit { margin:0; font-size:var(--text-caption); }
@media(max-width:759px) {
  /* The end of the page clears the bottom rail: its height, its offset and the inset. */
  .nd-footer { padding-bottom:calc(var(--rail-size) + var(--space-4) + env(safe-area-inset-bottom)); }
  .nd-footer-inner { gap:var(--space-4); padding-bottom:var(--space-6); }
  .nd-footer-links { display:grid; grid-template-columns:repeat(2,minmax(0,1fr)); gap:0 var(--space-4); }
  .nd-footer-links a { display:flex; align-items:center; min-height:44px; }
  .nd-footer-credit { padding-top:var(--space-4); border-top:1px solid var(--rule); }
}
@media(min-width:760px) {
  .nd-footer { padding:0 var(--page-side); }
  .nd-footer-inner { grid-template-columns:minmax(0,1fr) auto auto; gap:var(--space-5) var(--space-7); padding-bottom:var(--space-8); }
  .nd-footer-links { flex-direction:column; align-content:start; gap:var(--space-2); }
  .nd-footer-credit { max-width:12rem; }
}

@media(pointer:coarse) {
  .nd-mark { display:inline-flex; align-items:center; min-height:44px; }
  .nd-footer a,.nd-legal-links a { display:inline-flex; align-items:center; min-height:44px; }
}
@media(forced-colors:active) { .nd-nav-link[aria-current="page"],.nd-nav-link[aria-current="true"] { border:1px solid CanvasText; } }
/* --- css/catalog.css --- */
/* Public catalog: search form, filters, company cards, sectors and the company page. Mobile first. */
.nd-sr-only { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
.nd-page-title { margin:0 0 var(--space-5); font-size:var(--text-h1); }

/* Legal pages: trusted Markdown on paper, a reading column and, from 1040 px, a sticky table of contents. */
.nd-legal-toc { display:none; }
.nd-legal { max-width:var(--prose-max); color:var(--ink); }
.nd-legal h1 { margin:0 0 var(--space-4); font-size:var(--text-h1); }
.nd-legal h2 { margin:var(--space-7) 0 var(--space-3); font-size:var(--text-h2); scroll-margin-top:var(--space-5); }
.nd-legal p,.nd-legal li { font-size:17px; line-height:1.7; }
.nd-legal p { margin:0; }
.nd-legal p + p { margin-top:var(--space-3); }
.nd-legal ul,.nd-legal ol { margin:var(--space-3) 0; padding-left:1.3rem; }
.nd-legal ul { list-style:disc; }
.nd-legal ol { list-style:decimal; }
/* Legal pages: the article is centred like /about; the contents list hangs in the left margin from 1400px, clear of the site rail. */
.nd-legal-layout { position:relative; max-width:var(--prose-max); margin:0 auto; }
@media(min-width:1400px) {
  .nd-legal-toc { display:block; position:absolute; top:0; bottom:0; right:calc(100% + var(--space-6)); width:200px; }
  .nd-legal-toc > div { position:sticky; top:var(--space-5); max-height:calc(100vh - 48px); overflow:auto; }
  .nd-legal-toc .nd-eyebrow { margin:0 0 var(--space-3); }
  .nd-legal-toc ol { margin:0; padding:0; list-style:none; display:grid; gap:var(--space-2); font-size:var(--text-small); line-height:1.35; }
  .nd-legal-toc a { color:var(--muted); text-decoration:none; }
  .nd-legal-toc a:hover { color:var(--ink); text-decoration:underline; text-underline-offset:3px; }
}
.nd-legal table { width:100%; margin:var(--space-3) 0; border-collapse:collapse; font-size:14px; }
.nd-legal th,.nd-legal td { padding:var(--space-2) var(--space-3); border:1px solid var(--rule); text-align:left; vertical-align:top; }
.nd-legal th { background:var(--band); font:700 12px/1.3 var(--sans); }
.nd-draft-notice { display:grid; gap:var(--space-1); margin:0 0 var(--space-4); padding:var(--space-3) var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--band); }
.nd-draft-notice strong { justify-self:start; border-radius:999px; box-shadow:inset 0 0 0 1px currentColor; color:var(--status-warning); font:700 11px/1 var(--sans); letter-spacing:.08em; text-transform:uppercase; }
.nd-draft-notice p { margin:0; color:var(--muted); font-size:14px; }

/* Fields: labels above inputs, ink rules, paper inside. 16 px text prevents the
   iOS auto-zoom and keeps every generated and hand-written field at 46 px. */
.nd-field { display:grid; gap:var(--space-2); min-width:0; color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.04em; }
.nd-field > label { display:block; }
.nd-field-caption { display:block; color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.04em; }
.nd-field input,.nd-field select,.nd-field textarea { box-sizing:border-box; width:100%; border:1px solid var(--rule-strong); border-radius:var(--radius-md);
  background:var(--sheet); color:var(--ink); font:400 16px/1.5 var(--sans); letter-spacing:0; }
.nd-field input,.nd-field select { height:46px; padding:0 var(--space-4); }
.nd-field textarea { padding:var(--space-3) var(--space-4); resize:vertical; }
.nd-field input[type=file] { height:46px; padding:0 var(--space-3); font-size:14px; }
.nd-field input:focus-visible,.nd-field select:focus-visible,.nd-field textarea:focus-visible,.nd-check input:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
/* Styled select (js/select_menu.js): the native select stays as the form value and the no-JS control, and is hidden
   only once the script has added its trigger. Options are pills like the rail popover; phones get a bottom sheet. */
.nd-select { position:relative; }
.nd-select-ui { display:contents; }
.nd-field.nd-select:has(.nd-select-trigger) > select { position:absolute; width:1px; height:1px; padding:0; border:0; opacity:0; overflow:hidden; pointer-events:none; }
.nd-select-trigger { box-sizing:border-box; display:flex; align-items:center; justify-content:space-between; gap:var(--space-3); width:100%; height:46px; padding:0 var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); color:var(--ink); font:400 16px/1.5 var(--sans); letter-spacing:0; text-align:left; cursor:pointer; }
.nd-select-chevron { display:none; }
.nd-select-trigger .nd-select-chevron { display:block; width:17px; height:17px; transition:transform .15s ease; }
.nd-select-trigger .nd-select-lead { flex:none; align-self:center; width:1px; height:46%; background:currentColor; opacity:.3; }
.nd-select-trigger[aria-expanded="true"] .nd-select-chevron { transform:rotate(180deg); }
.nd-select-trigger:hover { background:var(--frosted-surface); }
.nd-select-trigger:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-select-trigger:disabled { opacity:.55; cursor:not-allowed; }
/* Caps sit 0.136em above the middle of the em box: the top padding centres them, as in the text pills. */
.nd-select-value { flex:1; min-width:0; overflow-x:clip; overflow-y:visible; text-overflow:ellipsis; white-space:nowrap; line-height:1; padding-top:.27em; }
.nd-select-popup { position:fixed; z-index:60; box-sizing:border-box; display:flex; flex-direction:column; overflow:hidden; padding:var(--space-2);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); box-shadow:var(--shadow-3); color:var(--ink); font:600 14px/1.2 var(--sans); letter-spacing:0; }
.nd-select-popup[hidden] { display:none; }
/* A panel with an open popup stands above the rail, whose z-index would otherwise hide the phone sheet. */
.nd-map-panel:has(.nd-select-popup:not([hidden])) { z-index:70; }
.nd-select-title { display:none; margin:0; padding:var(--space-2) var(--space-3) var(--space-3); color:var(--muted); font:700 12px/1.3 var(--sans); letter-spacing:.04em; }
.nd-select-list { display:grid; align-content:start; gap:var(--space-1); flex:1 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain; }
.nd-select-option[hidden], .nd-select-list [role="group"][hidden], .nd-select-filter-box[hidden], .nd-select-empty[hidden] { display:none; }
/* 16 px keeps phone browsers from zooming in on focus. */
.nd-select-filter-box { position:relative; flex:none; margin:0 0 var(--space-2); }
.nd-select-search { display:none; }
.nd-select-filter-box .nd-select-search { display:block; position:absolute; left:16px; top:50%; width:20px; height:20px; margin-top:-10px; color:var(--muted); pointer-events:none; }
.nd-select-filter-box .nd-select-filter { box-sizing:border-box; display:block; width:100%; height:44px; margin:0; padding:0 var(--space-4) 0 44px; border:1px solid var(--rule-strong); border-radius:999px;
  background:var(--sheet); color:var(--ink); font:600 16px/1.2 var(--sans); }
.nd-select-filter-box .nd-select-filter::placeholder { color:var(--muted); opacity:1; }
.nd-select-filter-box .nd-select-filter:focus-visible { outline:3px solid var(--secondary); outline-offset:1px; }
.nd-select-empty { margin:0; padding:var(--space-3); color:var(--muted); }
.nd-select-group { padding:var(--space-3) var(--space-3) var(--space-1); color:var(--muted); font:700 12px/1.3 var(--sans); letter-spacing:.08em; text-transform:uppercase; }
.nd-select-option { box-sizing:border-box; display:flex; align-items:center; justify-content:space-between; gap:var(--space-3); min-height:44px; padding:0 var(--space-3);
  border-radius:999px; cursor:pointer; overflow-wrap:anywhere; }
.nd-select-option.is-active { background:var(--frosted-surface); box-shadow:inset 0 0 0 1px rgb(from var(--ink) r g b / .2); }
.nd-select-option[aria-selected="true"] { background:var(--band); box-shadow:inset 0 0 0 1px var(--ink); }
.nd-select-option[aria-selected="true"]::after { content:""; flex:none; width:16px; height:16px; background:currentColor;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7'/%3E%3C/svg%3E") center/contain no-repeat; }
.nd-select-option[aria-disabled="true"] { opacity:.5; cursor:not-allowed; }
@media(max-width:640px) {
  .nd-select-popup { inset:auto 0 0 0; width:auto; max-height:70dvh; padding:var(--space-4) var(--space-4) calc(var(--space-4) + env(safe-area-inset-bottom));
    border-width:1px 0 0; border-radius:var(--radius-lg) var(--radius-lg) 0 0; box-shadow:0 0 0 100vmax rgb(from var(--ink) r g b / .4); }
  .nd-select-title { display:block; }
  .nd-select-option { min-height:52px; font-size:16px; }
}
@media(prefers-reduced-motion:reduce) { .nd-select-trigger .nd-select-chevron { transition:none; } }
.nd-check-field { display:grid; gap:var(--space-1); }
.nd-check { display:flex; align-items:center; gap:var(--space-2); min-height:46px; color:var(--ink); font-size:14px; line-height:1.35; }
@supports (text-box:trim-both cap alphabetic) { .nd-check:not(.nd-reason) > span { text-box:trim-both cap alphabetic; } }
.nd-check input { width:20px; height:20px; flex:none; accent-color:var(--primary); }
/* Two-way questions: a titled fieldset with two radio pills, 48 px tall. The native radio stays in the
   pill, visually hidden, so the label click, keyboard and screen readers use it. */
/* Start-aligned: beside a question whose pills wrap, the pills keep their 48 px. */
.nd-yes-no { display:grid; align-content:start; gap:var(--space-2); min-width:0; }
/* A floated legend is an ordinary grid item, so the gap spaces it like the other field captions. */
.nd-yes-no > legend { float:left; }
.nd-yes-no-options { display:flex; align-items:flex-start; flex-wrap:wrap; gap:var(--space-2); }
.nd-yes-no-option { position:relative; box-sizing:border-box; display:inline-flex; align-items:center; gap:var(--space-2); min-height:48px; padding:0 var(--space-5);
  border:1px solid var(--rule-strong); border-radius:999px; background:var(--sheet); color:var(--ink); font:600 15px/1.2 var(--sans); cursor:pointer; }
@supports (text-box:trim-both cap alphabetic) { .nd-yes-no-option > span { text-box:trim-both cap alphabetic; } }
/* Centred, so the hidden radio sits on its label text. */
.nd-yes-no-option input { position:absolute; inset:0; width:1px; height:1px; margin:auto; opacity:0; pointer-events:none; }
.nd-yes-no-option:hover { background:var(--frosted-surface); }
.nd-yes-no-option:has(input:checked) { border-color:var(--ink); background:var(--band); box-shadow:inset 0 0 0 1px var(--ink); }
.nd-yes-no-option:has(input:checked)::before { content:""; flex:none; width:16px; height:16px; background:currentColor;
  mask:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='black' stroke-width='2.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M5 12.5l4.5 4.5L19 7'/%3E%3C/svg%3E") center/contain no-repeat; }
.nd-yes-no-option:has(input:focus-visible) { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-yes-no-option:has(input[aria-invalid="true"]) { border-color:var(--status-danger); }
@media(forced-colors:active) { .nd-yes-no-option:has(input:checked) { background:Highlight; color:HighlightText; } }
/* The last wizard step repeats the two answers, with a way back to change them. */
.nd-review { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:var(--space-3); padding:var(--space-3) var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--band); }
.nd-review dl { display:flex; flex-wrap:wrap; gap:var(--space-2) var(--space-6); margin:0; }
.nd-review dt { color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.04em; }
.nd-review dd { margin:var(--space-1) 0 0; color:var(--ink); font-size:15px; }
.nd-hint { grid-column:1/-1; display:flex; align-items:flex-start; gap:var(--space-2); margin:0; padding:var(--space-3) var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--band); color:var(--ink); font-size:14px; line-height:1.5; }
.nd-hint .nd-icon { width:17px; height:17px; margin-top:calc((1lh - 17px) / 2 - .136em); }
@supports (text-box:trim-both cap alphabetic) {
  .nd-hint > span { text-box:trim-both cap alphabetic; }
  .nd-hint .nd-icon { margin-top:calc((1cap - 17px) / 2); }
}
.nd-error { display:flex; align-items:flex-start; gap:var(--space-2); margin:0; color:var(--status-danger); font:400 14px/1.45 var(--sans); }
.nd-error .nd-error-icon { width:17px; height:17px; margin-top:calc((1lh - 17px) / 2); flex:none; }

/* Catalog filters: one column on phones, a row on wide screens. */
.nd-filters { display:grid; gap:var(--space-4); padding:var(--space-5); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-2); }
/* Phones: selects side by side so the results start near the top. */
.nd-filters { grid-template-columns:repeat(2,minmax(0,1fr)); gap:var(--space-3); padding:var(--space-4); }
.nd-filters .grow,.nd-filters .nd-check { grid-column:1/-1; }
.nd-filters .nd-check { min-height:0; }
@media(min-width:760px) {
  .nd-filters { grid-template-columns:repeat(auto-fit,minmax(200px,1fr)); align-items:end; gap:var(--space-4); padding:var(--space-5); }
  .nd-filters .nd-check { grid-column:auto; }
  .nd-filters .nd-check { min-height:46px; }
}

.nd-chip { display:inline-flex; align-items:center; gap:var(--space-2); height:36px; padding:0 var(--space-4); border:0; border-radius:999px; background:var(--secondary-surface);
  box-shadow:inset 0 0 0 1px var(--ink); color:var(--secondary); font:700 12px/1 var(--sans); text-decoration:none; cursor:pointer; }
.nd-chip .nd-icon { width:14px; height:14px; }
.nd-chip:hover { background-color:rgb(from var(--secondary) r g b / .14); }

.nd-empty h2 { margin:0 0 var(--space-3); font-size:var(--text-h2); }

/* Company cards. */
.nd-cards { display:grid; gap:var(--space-4); margin:0; padding:0; list-style:none; }
@media(min-width:760px) { .nd-cards { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media(min-width:1040px) { .nd-cards { grid-template-columns:repeat(3,minmax(0,1fr)); } }
.nd-card-link { display:flex; align-items:center; gap:var(--space-3); height:100%; padding:var(--space-4); border:1px solid var(--rule-strong);
  border-radius:var(--radius-md); background:var(--sheet); box-shadow:var(--shadow-1); text-decoration:none; transition:box-shadow .25s ease,transform .25s ease; }
@media(min-width:760px) { .nd-card-link { padding:var(--space-5); } }
.nd-card-link:hover { transform:translateY(-1px); box-shadow:var(--shadow-2); }
.nd-card-link:focus-visible { outline:3px solid var(--secondary); outline-offset:3px; }
.nd-card-body { display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"name end" "meta end" "place end"; align-items:center; row-gap:var(--space-1); flex:1; min-width:0; }
.nd-card-name { grid-area:name; align-self:end; }
.nd-card-meta { grid-area:meta; align-self:start; }
.nd-card-place { grid-area:place; align-self:start; }
.nd-card-body .nd-row-end { grid-area:end; margin-left:var(--space-3); }
.nd-card { container-type:inline-size; }
/* Cards are narrower than 30 rem: the distance and the seal go under the name. */
@container (max-width:30rem) {
  .nd-card-body { grid-template-columns:minmax(0,1fr); grid-template-areas:"name" "end" "meta" "place"; }
  .nd-card-body .nd-row-end { justify-self:start; justify-content:flex-start; margin-left:0; }
  .nd-card-body .nd-row-end .nd-seal { order:-1; }
}
.nd-card-name { font:600 18px/1.25 var(--serif); overflow-wrap:anywhere; }
.nd-card-meta { color:var(--secondary); font-size:13px; }
.nd-card-place { color:var(--muted); font-size:13px; }
.nd-distance { font:700 14px/1 var(--sans); color:var(--primary); white-space:nowrap; }
/* Trailing end of a row or card: the distance and the seal, vertically centred. */
.nd-row-end { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:var(--space-2); flex:none; }
.nd-row-end .nd-seal { margin:0; }
/* Wide rows: two pills stack at the trailing end, the distance centred beside them, so the place text keeps its width. */
@container (min-width:30rem) {
  .nd-row-end:has(.nd-seal ~ .nd-seal) { display:grid; grid-template-columns:auto auto; justify-items:end; align-items:center; gap:var(--space-2) 0; }
  .nd-row-end:has(.nd-seal ~ .nd-seal) .nd-seal { grid-column:2; }
  .nd-row-end:has(.nd-seal ~ .nd-seal) .nd-distance { grid-column:1; grid-row:1 / span 2; margin-right:var(--space-2); }
}

/* Logo or initials on ochre glass. */
.nd-logo { flex:none; width:48px; height:48px; border-radius:var(--radius-md); object-fit:cover; box-shadow:inset 0 0 0 1px var(--ink); }
.nd-logo.lg { width:88px; height:88px; border-radius:var(--radius-lg); }
.nd-logo.initials { display:inline-grid; place-items:center; background:var(--hatch-soft),color-mix(in srgb,var(--accent) 55%,var(--paper));
  color:var(--ink); font:600 18px/1 var(--serif); }
.nd-logo.initials.lg { font-size:32px; }

.nd-count { color:var(--muted); font:400 13px/1 var(--sans); white-space:nowrap; }

.nd-cta { display:grid; gap:var(--space-4); align-items:center; margin-top:var(--space-7); padding:var(--space-6); border-top:1px solid var(--ink); background:var(--desk-hatch),var(--band); }
.nd-cta h2 { margin:0 0 var(--space-2); font-size:var(--text-h2); }
.nd-cta p { margin:0; color:var(--muted); line-height:1.5; }
@media(min-width:760px) { .nd-cta { grid-template-columns:1fr auto; margin-top:var(--space-8); } }

.nd-empty { padding:var(--space-6) var(--space-5); border:1px dashed var(--rule-strong); border-radius:var(--radius-lg); text-align:center; }
.nd-empty p { margin:0 auto var(--space-5); max-width:30rem; color:var(--muted); line-height:1.6; }
.nd-more { display:flex; justify-content:center; margin-top:var(--space-5); }


@media(prefers-reduced-motion:reduce) { .nd-card-link { transition:none; } }
@media(forced-colors:active) { .nd-card-link,.nd-filters,.nd-chip,.nd-logo { border:1px solid CanvasText; box-shadow:none; } }

/* Breadcrumbs above landing and company pages. */
.nd-breadcrumbs ol { display:flex; flex-wrap:wrap; align-items:baseline; gap:var(--space-1) 0; margin:0 0 var(--space-5); padding:0; list-style:none; color:var(--muted); font-size:14px; }
.nd-breadcrumbs li:not(:last-child)::after { content:'›'; margin:0 var(--space-2); }
.nd-breadcrumbs a { display:inline-block; padding:var(--space-1) 0; }

/* Landing pages: heading, intro sentence and links to neighbouring pages. */
.nd-landing-head { max-width:44rem; margin-bottom:var(--space-5); }
.nd-landing-head .nd-page-title { margin-bottom:var(--space-3); }
.nd-landing-actions { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-3) var(--space-5); margin-top:var(--space-5); }
.nd-lead { margin:0; color:var(--muted); font-size:var(--text-lead); line-height:1.6; }
.nd-related { display:grid; gap:var(--space-5); margin-top:var(--space-7); }
@media(min-width:760px) { .nd-related { grid-template-columns:repeat(auto-fit,minmax(16rem,1fr)); margin-top:var(--space-8); } }
.nd-related h2 { margin:0 0 var(--space-3); font-size:var(--text-h3); }
.nd-related ul { display:grid; gap:var(--space-1); margin:0; padding:0; list-style:none; }
.nd-related li { display:flex; justify-content:space-between; align-items:baseline; gap:var(--space-3); border-bottom:1px solid var(--rule); }
.nd-related a { display:block; flex:1; padding:var(--space-3) 0; color:var(--ink); font-size:15px; }

@media(pointer:coarse) {
  .nd-chip { min-height:44px; }
  .nd-breadcrumbs a,.nd-related a { display:inline-flex; align-items:center; min-height:44px; }
}

/* Company page: the header sits on the art; everything else is in opaque --sheet cards. */
/* One column on phones: header, contacts, content, related companies (order). Two columns from 1040 px. */
.nd-company { display:grid; gap:var(--space-5); max-width:46rem; }
.nd-company-hero { display:grid; grid-template-columns:auto 1fr; align-items:center; gap:var(--space-4); margin-bottom:var(--space-2); }
.nd-company-title { display:grid; gap:var(--space-2); justify-items:start; min-width:0; }
.nd-company-title > * { margin:0; }
.nd-company-title h1 { font-size:clamp(30px,5vw,48px); line-height:1.1; letter-spacing:-.02em; overflow-wrap:anywhere; }
.nd-company-category { color:var(--secondary); font:700 12px/1.3 var(--sans); letter-spacing:.06em; text-transform:uppercase; }
.nd-company-place { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); color:var(--muted); font-size:16px; }
/* Header of the admin company and report pages. */
.nd-company-head { display:flex; align-items:center; gap:var(--space-4); padding-bottom:var(--space-5); border-bottom:1px solid var(--ink); }
.nd-company-head h1 { margin:var(--space-1) 0 var(--space-2); font-size:clamp(28px,6vw,42px); line-height:1.1; letter-spacing:-1px; }
.nd-company-head .nd-seal { margin:0; }
.nd-company-head .nd-company-category,.nd-company-head .nd-company-place { margin:0; }
.nd-company-since { color:var(--muted); font-size:14px; }
.nd-logo.xl { width:72px; height:72px; border-radius:var(--radius-md); }
.nd-logo.initials.xl { font-size:1.75rem; }
.nd-seal { display:inline-flex; align-items:center; gap:var(--space-2); height:30px; margin-top:var(--space-2); padding:0 var(--space-3) 0 var(--space-1);
  border-radius:999px; background:var(--sheet); box-shadow:inset 0 0 0 1.5px var(--ink); color:var(--ink); text-decoration:none; white-space:nowrap; }
.nd-seal-disc { flex:none; width:var(--pill-h); border-radius:50%; background:var(--primary-surface); color:var(--on-primary); font:600 10px/1 var(--serif); }
.nd-seal.sm { height:20px; margin:0; padding:0; box-shadow:none; background:none; }
.nd-seal.sm .nd-seal-disc { --pill-h:20px; }
.nd-seal.btc .nd-seal-disc { background:color-mix(in srgb,var(--accent) 55%,var(--paper)); color:var(--ink); font:700 14px/1 var(--sans); }
.nd-seal-row { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
.nd-seal-label { font:600 13px/1 var(--serif); }
@supports (text-box:trim-both cap alphabetic) { .nd-seal-label { text-box:trim-both cap alphabetic; } }
.nd-seal:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
/* The side wrapper vanishes on phones so the cards take their order; from 1040 px it is the right column. */
.nd-company-side { display:contents; }
.nd-company-card { box-sizing:border-box; min-width:0; padding:var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); box-shadow:var(--shadow-1); }
.nd-contacts { order:1; display:grid; gap:var(--space-2); align-content:start; }
.nd-contacts h3 { margin:0 0 var(--space-2); font-size:var(--text-h3); }
.nd-contacts .nd-button { width:100%; }
.nd-company-main { order:2; display:grid; align-content:start; }
.nd-company-main > * { margin:0; min-width:0; }
.nd-company-related { order:3; display:grid; gap:var(--space-4); align-content:start; }
.nd-company-related h3 { margin:0; font-size:var(--text-h3); }
.nd-company-text h2 { margin:0 0 var(--space-4); font-size:var(--text-h2); }
.nd-company-text p { margin:0; max-width:42rem; font-size:17px; line-height:1.65; overflow-wrap:anywhere; }
.nd-company-text p + p { margin-top:var(--space-4); }
/* Sobre and Valores are 24 px apart; the hairlines before Onde fica and the report row have 32 px on both sides. */
.nd-company-main > .nd-manifesto:not(:first-child) { margin-top:var(--space-5); }
.nd-company-main > :is(.nd-company-where,.nd-company-foot):not(:first-child) { margin-top:var(--space-6); padding-top:var(--space-6); border-top:1px solid var(--rule); }
/* Valores is the only inset panel. */
.nd-manifesto { display:grid; gap:var(--space-2); padding:var(--space-4); border:1px solid var(--rule); border-radius:var(--radius-sm); background:var(--desk-hatch),var(--band); }
.nd-manifesto p { margin:0; }
.nd-manifesto-eyebrow { color:var(--secondary); font:700 12px/1.3 var(--sans); letter-spacing:.06em; text-transform:uppercase; }
.nd-manifesto-text { max-width:42rem; font-size:17px; line-height:1.7; overflow-wrap:anywhere; }
.nd-manifesto-text p + p { margin-top:var(--space-4); }
.nd-manifesto-note { color:var(--muted); font-size:13px; }
.nd-company-foot { display:flex; flex-direction:column; align-items:flex-start; gap:var(--space-2); color:var(--muted); font-size:14px; }
.nd-company-foot p { margin:0; }
.nd-company-actions { display:flex; flex-wrap:wrap; gap:var(--space-4); margin-top:var(--space-4); }
/* Never narrower than the label: a pill that shrinks lets its text spill over the border. */
.nd-company-actions .nd-button { flex:1 1 auto; }
.nd-mini-map-link { display:block; margin-top:var(--space-4); border:1px solid var(--rule); border-radius:var(--radius-sm); overflow:hidden; pointer-events:none; }
.nd-mini-map-link[hidden] { display:none; }
.nd-mini-map { width:100%; height:180px; background:var(--band); }
/* Related companies: rows separated by hairlines in one card, each a link of at least 48 px. */
.nd-related-rows { margin:0; padding:0; list-style:none; }
.nd-related-rows li + li { border-top:1px solid var(--rule); }
.nd-related-row { display:flex; align-items:center; gap:var(--space-2); min-height:48px; padding:var(--space-2) 0; text-decoration:none; }
.nd-related-row:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-related-row:hover .nd-related-name { text-decoration:underline; text-underline-offset:3px; }
.nd-related-row .nd-logo { width:40px; height:40px; border-radius:var(--radius-sm); }
.nd-related-row .nd-logo.initials { font-size:15px; }
.nd-related-body { display:grid; min-width:0; }
.nd-related-name { font:600 16px/1.25 var(--serif); overflow-wrap:anywhere; }
.nd-related-place { color:var(--muted); font-size:13px; }
.nd-company-related .nd-related-all { width:100%; }

@media(min-width:420px) { .nd-company-card { padding:var(--space-5); } .nd-manifesto { padding:var(--space-5); } }
@media(min-width:760px) {
  .nd-company-hero { gap:var(--space-5); }
  .nd-logo.xl { width:112px; height:112px; }
  .nd-logo.initials.xl { font-size:40px; }
  .nd-company-main { padding:var(--space-6); }
  .nd-mini-map { height:240px; }
}
@media(min-width:1040px) {
  .nd-company { max-width:none; gap:var(--space-6) var(--space-7); }
  .nd-company.has-aside { grid-template-columns:minmax(0,1fr) 340px; }
  .nd-company-hero { grid-column:1 / -1; margin-bottom:0; }
  .nd-company-main { grid-column:1; grid-row:2; align-self:start; }
  .nd-company:not(.has-aside) .nd-company-main { grid-column:1 / -1; }
  .nd-company-side { display:grid; grid-column:2; grid-row:2; gap:var(--space-5); align-content:start; align-self:start; }
  .nd-company-actions .nd-button { flex:0 0 auto; }
}
/* The right column follows the reader only when it fits the viewport; never the content card. */
@media(min-width:1040px) and (min-height:860px) { .nd-company-side { position:sticky; top:var(--space-5); } }
@media(min-width:420px) { .nd-company-foot { flex-direction:row; align-items:center; justify-content:space-between; } }
@media(max-width:419px) { .nd-company-hero { grid-template-columns:1fr; } }

/* Near me: the radius chooser, a radio group of pills, and the way out. */
.nd-radius { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2) var(--space-3); margin:0; }
.nd-radius-group { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
.nd-radius-label { color:var(--muted); font-size:13px; }
.nd-radius-pill { position:relative; display:inline-flex; align-items:center; justify-content:center; min-width:56px; height:36px; padding:0 var(--space-3);
  border-radius:999px; background:var(--secondary-surface); box-shadow:inset 0 0 0 1px var(--ink); color:var(--secondary); font:700 12px/1 var(--sans); cursor:pointer; }
.nd-radius-pill:hover { background-color:rgb(from var(--secondary) r g b / .14); }
.nd-radius-pill input { position:absolute; inset:0; width:100%; height:100%; margin:0; opacity:0; appearance:none; cursor:pointer; }
.nd-radius-pill:has(input:checked) { background:var(--primary-surface); color:var(--on-primary); }
.nd-radius-pill:has(input:focus-visible) { outline:3px solid var(--secondary); outline-offset:3px; }
@supports (text-box:trim-both cap alphabetic) { .nd-radius-pill span { text-box:trim-both cap alphabetic; } }
@media(max-width:759px) { .nd-radius-pill { min-height:44px; } }
@media(forced-colors:active) { .nd-radius-pill { border:1px solid CanvasText; box-shadow:none; } .nd-radius-pill:has(input:checked) { background:Highlight; color:HighlightText; } }
/* --- css/panel.css --- */
/* Registration wizard, company edit form and company panel. Mobile first. */
.nd-wizard { display:grid; gap:var(--space-5); max-width:46rem; }
.nd-wizard .nd-page-title { margin:0; }

/* Steps: numbered pills; the current one hatched, finished ones in ink. */
.nd-steps { display:flex; flex-wrap:wrap; gap:var(--space-2); margin:0; padding:0; list-style:none; }
.nd-steps li { display:flex; align-items:center; gap:var(--space-2); padding:var(--space-2) var(--space-3) var(--space-2) var(--space-2); border-radius:999px; box-shadow:inset 0 0 0 1px var(--rule-strong);
  color:var(--muted); font:700 12px/1 var(--sans); letter-spacing:.04em; }
.nd-step-number { --d:24px; box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; width:var(--d); height:var(--d); padding-top:.27em;
  border-radius:50%; background:var(--band); color:var(--ink); line-height:1; }
.nd-step-label { padding-top:.27em; }
/* Same text-box trim and measured fallback as the text pills in buttons.css. */
@supports (text-box:trim-both cap alphabetic) {
  .nd-step-number { display:block; height:auto; padding:calc((var(--d) - 1cap) / 2) 0; text-align:center; text-box:trim-both cap alphabetic; }
  .nd-step-label { padding-top:0; text-box:trim-both cap alphabetic; }
}
.nd-steps li.done { color:var(--ink); }
.nd-steps li.done .nd-step-number { background:var(--ink); color:var(--paper); }
.nd-steps li.current { background:var(--primary-surface); box-shadow:inset 0 0 0 1px var(--ink); color:var(--on-primary); }
.nd-steps li.current .nd-step-number { background:var(--on-primary); color:var(--primary); }
/* Phones: one line "Etapa 2 de 6 · Empresa" over a six-segment bar; the list stays for screen readers. */
.nd-progress { display:grid; gap:var(--space-2); }
.nd-progress-label { margin:0; color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.08em; text-transform:uppercase; }
.nd-progress-bar { display:grid; grid-template-columns:repeat(6,1fr); gap:var(--space-1); }
.nd-progress-bar span { height:6px; border-radius:999px; background:var(--band); }
.nd-progress-bar .done { background:var(--ink); }
.nd-progress-bar .current { background:var(--primary-surface); box-shadow:inset 0 0 0 1px var(--ink); }
@media(max-width:759px) {
  .nd-steps { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
}
@media(min-width:760px) { .nd-progress { display:none; } }

.nd-form { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--space-4); }
.nd-form h2 { margin:0 0 var(--space-2); font-size:var(--text-h2); }
.nd-form h3 { margin:0; font-size:var(--text-h3); }
.nd-form form { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--space-4); }
.nd-form p { margin:0; }
.nd-form-grid { display:grid; gap:var(--space-4); }
@media(min-width:760px) { .nd-form-grid { grid-template-columns:repeat(2,minmax(0,1fr)); column-gap:var(--space-5); } }
/* Voltar on the left, the primary action on the right; on phones they share one row. */
.nd-form-actions { display:flex; flex-wrap:wrap; justify-content:space-between; gap:var(--space-3); margin-top:var(--space-5); }
.nd-form .nd-form-actions { padding-top:var(--space-5); border-top:1px solid var(--rule); }
.nd-form-actions > .primary { margin-left:auto; }
.nd-button.nd-back > .nd-icon { order:-2; }
.nd-button.nd-back > .nd-button-lead { order:-1; }
@media(max-width:759px) {
  .nd-form-actions { flex-wrap:nowrap; }
  .nd-form-actions > .nd-back { flex:none; --pad:12px; }
  .nd-form-actions > .primary { flex:1; }
}
@media(min-width:760px) { .nd-form-actions { margin-top:var(--space-6); } .nd-form .nd-form-actions { padding-top:var(--space-6); } }

/* Closed sign-up, unavailable invite and registered pages: one sheet, short text, two actions. */
.nd-wall { max-width:34rem; margin:0 auto; }
.nd-wall > p { margin:0; }
.nd-wall > p + p { margin-top:var(--space-3); }
.nd-wall h2 { margin:var(--space-5) 0 var(--space-3); font-size:var(--text-h3); }
.nd-wall-steps { margin:0; padding-left:var(--space-5); list-style:decimal; line-height:1.6; }
.nd-wall-steps li + li { margin-top:var(--space-1); }
.nd-actions { display:flex; flex-direction:column-reverse; gap:var(--space-3); margin-top:var(--space-5); }
.nd-wall > .nd-help { margin-top:var(--space-4); }
@media(min-width:760px) { .nd-actions { flex-direction:row; flex-wrap:wrap; } }

/* Invite arrival: who invited, the free months and the seal. */
.nd-invite-welcome { display:grid; gap:var(--space-3); background:var(--secondary-surface); }
.nd-invite-welcome h2 { margin:0; font-size:var(--text-h3); }
.nd-invite-months { display:flex; flex-wrap:wrap; align-items:flex-start; gap:var(--space-3); }
.nd-invite-months .nd-seal { margin-top:0; }
.nd-invite-months p { flex:1 1 14rem; margin:0; line-height:1.5; }
#company-form > .nd-sheet + .nd-sheet { margin-top:var(--space-5); }
.nd-help { color:var(--muted); font-size:14px; line-height:1.5; }
.nd-static { margin:0; padding:var(--space-3) 0; font:400 16px/1.4 var(--sans); }

.nd-choice { display:grid; gap:var(--space-1); margin:0; padding:var(--space-3) var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-md); }
.nd-choice legend { padding:0 var(--space-2); color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.04em; }
.nd-choice .nd-check { min-height:46px; }

.nd-upload { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-4); padding:var(--space-4); border:1px dashed var(--rule-strong); border-radius:var(--radius-md); }
.nd-upload input[type=file] { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
.nd-upload:focus-within .nd-upload-label { outline:3px solid var(--secondary); outline-offset:4px; }
.nd-upload p { margin-top:var(--space-2); }
.nd-upload-label { display:inline-flex; }

/* The values consent stands apart from the terms (LGPD art. 11, I). */
.nd-consent { display:grid; gap:var(--space-2); padding:var(--space-4) var(--space-5); border:2px solid var(--primary); border-radius:var(--radius-md); background:var(--band); }
.nd-consent h3 { margin:0; font-size:var(--text-h3); }
.nd-consent p { line-height:1.55; }

/* Panel. */
.nd-panel-page-head { display:grid; gap:var(--space-1); }
.nd-panel-page-head .nd-page-title { margin:0; }
.nd-panel-page-head p { margin:0; }
/* One company: its sheets in the main column, the seal and the site button beside them on desktop. */
.nd-panel-company { display:grid; grid-template-columns:minmax(0,1fr); gap:var(--space-5); align-items:start; }
.nd-panel-main,.nd-panel-aside { display:grid; gap:var(--space-5); min-width:0; }
@media(min-width:1040px) {
  .nd-panel-company { grid-template-columns:minmax(0,1fr) var(--aside-width); gap:var(--space-6); }
  .nd-panel-company:not(:has(.nd-panel-aside)) { grid-template-columns:minmax(0,1fr); }
}
.nd-panel-card,.nd-panel-section { display:grid; gap:var(--space-3); }
.nd-panel-head { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-3); }
.nd-panel-head > div { flex:1; min-width:12rem; }
.nd-panel-head h2 { margin:0 0 var(--space-1); font-size:var(--text-h2); }
.nd-panel-head p { margin:0; }
.nd-panel-section h3 { margin:0; font-size:var(--text-h3); }
.nd-panel-section p { margin:0; }
.nd-panel-section > .nd-button { justify-self:start; }
.nd-status { border-radius:999px; box-shadow:inset 0 0 0 1px currentColor; font:700 12px/1 var(--sans); letter-spacing:.04em; }
.nd-status::first-letter { text-transform:uppercase; }
.nd-status.pending,.nd-status.warning { color:var(--status-warning); background:color-mix(in srgb,var(--accent) 18%,var(--paper)); }
.nd-status.approved,.nd-status.success { color:var(--status-success); background:var(--status-success-surface); }
.nd-status.rejected,.nd-status.suspended,.nd-status.removed { color:var(--status-danger); background:var(--status-danger-surface); }
.nd-status.neutral { color:var(--muted); background:var(--band); }
.nd-seal-state { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-3); }
.nd-seal-state .nd-seal { margin-top:0; }
.nd-status-note { margin:0; color:var(--muted); line-height:1.5; }
.nd-panel-actions { display:flex; flex-wrap:wrap; gap:var(--space-2); }

.nd-metrics { width:100%; border-collapse:collapse; font-size:14px; }
.nd-metrics caption { padding-bottom:var(--space-2); text-align:left; font:600 18px/1.3 var(--serif); }
.nd-metrics th,.nd-metrics td { padding:var(--space-2) var(--space-3); border-bottom:1px solid var(--rule-strong); text-align:left; }
.nd-metrics thead th { color:var(--muted); font-size:12px; letter-spacing:.04em; }
.nd-metrics tbody th { font-weight:400; }
.nd-metrics td { font-variant-numeric:tabular-nums; white-space:nowrap; }
/* --share is the row's last-30-days count as a percentage of the company's largest one. */
.nd-bar { display:inline-block; width:120px; height:10px; margin-right:var(--space-2); border:0; border-radius:2px; background:var(--band); vertical-align:middle; appearance:none; }
@media(max-width:480px) { .nd-bar { width:48px; } .nd-metrics th,.nd-metrics td { padding-inline:var(--space-2); } }
.nd-bar::-webkit-meter-bar { height:10px; border:0; border-radius:2px; background:var(--band); }
.nd-bar::-webkit-meter-optimum-value { border-radius:2px; background:var(--secondary); }
.nd-bar::-moz-meter-bar { border-radius:2px; background:var(--secondary); }

@media(forced-colors:active) { .nd-steps li,.nd-status,.nd-consent { border:1px solid CanvasText; } .nd-bar { background:CanvasText; } }

/* Declaration upload and the answer forms of the panel. */
.nd-verify-form { display:flex; flex-wrap:wrap; align-items:end; gap:var(--space-3); }
.nd-verify-form .nd-field { flex:1 1 18rem; min-width:0; }
.nd-verify-form .nd-button { flex:none; align-self:end; }

/* Report form (public) and the reports section of a panel company. */
.nd-report { max-width:44rem; margin:0 auto; }
.nd-report .nd-reason { align-items:flex-start; min-height:0; padding:var(--space-3) 0; }
.nd-report .nd-reason + .nd-reason { border-top:1px solid var(--rule); }
.nd-field-group { display:grid; gap:var(--space-2); min-width:0; }
.nd-report .nd-reason input { margin-top:-3px; }
.nd-report .nd-reason .nd-help { display:block; }
.nd-quote { margin:0; padding:var(--space-3) var(--space-4); border:1px solid var(--rule); border-radius:var(--radius-md); background:var(--band); color:var(--ink); line-height:1.55; white-space:pre-line; overflow-wrap:anywhere; }
/* Reports in the panel sheet are told apart by a rule, not a box. */
.nd-report-card { display:grid; gap:var(--space-2); padding-top:var(--space-4); border-top:1px solid var(--rule-strong); }
.nd-report-card header { display:flex; flex-wrap:wrap; align-items:baseline; gap:var(--space-2); }
.nd-report-card p { margin:0; }
.nd-report-part { display:grid; gap:var(--space-1); }
.nd-report-part p { color:var(--ink); }

/* Invites: share block, success note, tree and the phone cards (table below 640 px). */
.nd-success { margin:0 0 var(--space-3); padding:var(--space-3) var(--space-4); border-radius:var(--radius-md); background:var(--status-success-surface); box-shadow:inset 0 0 0 1px var(--status-success); color:var(--status-success); font-weight:600; }
.nd-share { display:grid; gap:var(--space-2); min-width:14rem; margin-bottom:var(--space-2); }
#panel-invites { display:grid; gap:var(--space-4); }
#panel-invites h2 { margin:0; font-size:var(--text-h2); }
#panel-invites p { margin:0; }
#panel-invites > .nd-button { justify-self:start; margin-top:0; }
.nd-share textarea { box-sizing:border-box; width:100%; padding:var(--space-2) var(--space-3); field-sizing:content; resize:none; overflow-wrap:anywhere; border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--paper); color:var(--ink); font:13px var(--sans); }
.nd-share-actions { display:flex; flex-wrap:wrap; gap:var(--space-2); }
.nd-share [hidden] { display:none; }
.nd-tree { margin:var(--space-2) 0 0; }
.nd-tree .nd-tree { padding-left:var(--space-5); margin-left:var(--space-2); }
@media(max-width:639px) {
  .nd-invite-list,.nd-invite-list tbody,.nd-invite-list tr,.nd-invite-list th,.nd-invite-list td { display:block; }
  .nd-invite-list thead { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); }
  .nd-invite-list tr { margin-bottom:var(--space-3); border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--paper); }
  .nd-admin-table.nd-invite-list th,.nd-admin-table.nd-invite-list td { box-sizing:border-box; min-width:0; height:auto; border-bottom:1px solid var(--rule); padding:var(--space-2) var(--space-3); }
  .nd-invite-list tbody th { font-size:15px; }
  .nd-invite-list .nd-share { min-width:0; margin-bottom:0; }
  .nd-invite-list .nd-invite-actions { display:grid; gap:var(--space-2); justify-items:start; }
  .nd-invite-list td[data-label]::before { content:attr(data-label) ": "; color:var(--muted); font-size:12px; font-weight:700; letter-spacing:.04em; }
  .nd-invite-list td:last-child { border-bottom:0; }
  .nd-invite-list .nd-help { display:inline; }
}
@media(forced-colors:active) { .nd-success,.nd-invite-list tr { border:1px solid CanvasText; box-shadow:none; } }

/* Error pages: two actions that wrap on narrow screens. */
.nd-error-actions { display:flex; flex-wrap:wrap; gap:var(--space-3); margin-top:var(--space-5); }
.nd-error-actions > .nd-button { flex:1 1 auto; }
@media(min-width:760px) { .nd-error-actions > .nd-button { flex:none; } }

/* Owner card panel: 16 px between blocks, 8 px from a label to its field. */
#owner-card-panel { display:grid; gap:var(--space-4); }
#owner-card-panel form { display:grid; gap:var(--space-4); }
#owner-card-panel form .nd-button { justify-self:start; }
#owner-card-panel .nd-timeline { display:grid; gap:var(--space-3); }
/* --- css/admin.css --- */
/* Admin area: navigation, counters, lists, the company page and its timeline. */
.nd-admin-nav { display:flex; flex-wrap:nowrap; gap:var(--space-2); margin:0 0 var(--space-6); padding-bottom:var(--space-1); overflow-x:auto; scroll-snap-type:x proximity; }
.nd-admin-nav > * { scroll-snap-align:start; }
@media(min-width:760px) { .nd-admin-nav { flex-wrap:wrap; padding-bottom:0; overflow:visible; } }

.nd-counters { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }
@media(min-width:760px) { .nd-counters { grid-template-columns:repeat(2,minmax(0,1fr)); } }
@media(min-width:1040px) { .nd-counters { grid-template-columns:repeat(4,minmax(0,1fr)); } }
.nd-counters a { display:grid; gap:var(--space-1); padding:var(--space-5); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet);
  box-shadow:var(--shadow-2); color:var(--muted); text-decoration:none; }
.nd-counters strong { color:var(--ink); font:600 40px/1 var(--serif); }
.nd-counters .zero strong { color:var(--muted); }
.nd-counter-open { margin-top:var(--space-2); color:var(--secondary); font:700 13px/1 var(--sans); }
.nd-counters a:hover { background:var(--band); }
.nd-counters a:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }

.nd-admin-list { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }

.nd-admin-filters { display:flex; flex-wrap:wrap; margin-bottom:var(--space-5); }
.nd-admin-filters .nd-field { flex:1 1 14rem; max-width:20rem; }
.nd-admin-table .nd-status { white-space:nowrap; }
.nd-admin-table { width:100%; border-collapse:collapse; font-size:14px; }
.nd-admin-table th,.nd-admin-table td { height:48px; padding:var(--space-3) var(--space-4); border-bottom:1px solid var(--rule); text-align:left; vertical-align:middle; }
.nd-admin-table tbody tr:last-child > * { border-bottom:0; }
.nd-admin-table thead th { background:var(--band); color:var(--muted); font-size:12px; letter-spacing:.04em; }
.nd-admin-table tbody th { font-weight:600; }
.nd-admin-table .nd-help { display:block; }

.nd-owner-switcher { justify-self:start; padding:var(--space-3); }

.nd-admin-company { display:grid; gap:var(--space-5); max-width:52rem; }
@supports (text-box:trim-both cap alphabetic) {
  .nd-admin-company .nd-check > span { text-box:normal; }
}
.nd-admin-company .nd-check input { transform:translateY(-3px); }
.nd-admin-company .nd-sheet { display:grid; gap:var(--space-3); }
.nd-admin-company .nd-sheet h2 { margin:0; font-size:var(--text-h2); }
.nd-admin-company .nd-sheet > .nd-button { justify-self:start; }
.nd-admin-company .nd-company-place { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
.nd-admin-action { display:grid; gap:var(--space-2); padding-top:var(--space-3); border-top:1px solid var(--rule-strong); }
.nd-admin-action h3 { margin:0; font-size:var(--text-h3); }
.nd-admin-action .nd-button { justify-self:start; }

.nd-admin-data { display:grid; gap:var(--space-3); margin:0; }
@media(min-width:760px) { .nd-admin-data { grid-template-columns:repeat(2,minmax(0,1fr)); } }
.nd-admin-data dt { color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.04em; }
.nd-admin-data dd { margin:var(--space-1) 0 0; line-height:1.5; overflow-wrap:anywhere; }
.nd-admin-person { display:block; }
.nd-plain-list { padding-left:1.3rem; list-style:disc; }

.nd-timeline { display:grid; margin:0; padding:0; list-style:none; }
.nd-timeline li { display:grid; gap:var(--space-1); padding:var(--space-3) 0; border-top:1px solid var(--rule); }
.nd-timeline li:first-child { border-top:0; }
.nd-timeline time { color:var(--muted); font-size:12px; font-variant-numeric:tabular-nums; }
@media(min-width:640px) { .nd-timeline li { grid-template-columns:8rem minmax(0,1fr); column-gap:var(--space-4); }
  .nd-timeline li > * { grid-column:2; }
  .nd-timeline time { grid-column:1; grid-row:1; } }
.nd-timeline p { line-height:1.5; }


@media(forced-colors:active) { .nd-counters a { border-color:CanvasText; box-shadow:none; } }

/* Daily statistics (docs/design.md §13). Bars are CSS heights, not inline
   styles, so the page keeps `style-src 'self'`. */
.nd-stats-note { max-width:52rem; margin:0 0 var(--space-4); color:var(--muted); font-size:14px; line-height:1.5; }
.nd-stats-note code { font-family:ui-monospace,monospace; }
.nd-stats-summary { display:grid; gap:var(--space-3); margin-bottom:var(--space-5); }
@media(min-width:760px) { .nd-stats-summary { grid-template-columns:repeat(5,minmax(0,1fr)); } }
.nd-stat-card { display:grid; gap:var(--space-1); padding:var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-2); }
.nd-stat-label { color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.04em; }
.nd-stat-card strong { color:var(--ink); font:600 30px/1.1 var(--serif); font-variant-numeric:tabular-nums; }
.nd-stats-today { margin-bottom:var(--space-5); }
.nd-stats-today h2 { margin:0 0 var(--space-3); font-size:var(--text-h2); }
.nd-stats-block { display:grid; gap:var(--space-3); margin:0 0 var(--space-5); padding:var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-1); }
.nd-stats-block h2 { margin:0; font-size:var(--text-h3); }
.nd-stats-block h2 .nd-help { font-weight:400; }
.nd-stats-chart { display:flex; align-items:flex-end; gap:2px; height:140px; margin:var(--space-2) 0; padding:0 0 var(--space-2); border-bottom:1px solid var(--rule-strong); }
.nd-stat-bar { flex:1 1 0; min-width:3px; border-radius:2px 2px 0 0; background:var(--secondary); }
.nd-stat-bar.level-0 { height:2px; background:var(--rule-strong); }
.nd-stat-bar.level-1 { height:10%; }
.nd-stat-bar.level-2 { height:20%; }
.nd-stat-bar.level-3 { height:30%; }
.nd-stat-bar.level-4 { height:40%; }
.nd-stat-bar.level-5 { height:50%; }
.nd-stat-bar.level-6 { height:60%; }
.nd-stat-bar.level-7 { height:70%; }
.nd-stat-bar.level-8 { height:80%; }
.nd-stat-bar.level-9 { height:90%; }
.nd-stat-bar.level-10 { height:100%; }
.nd-stats-scroll { overflow-x:auto; }
.nd-stats-table { min-width:38rem; }
.nd-stats-columns { display:grid; gap:var(--space-4); }
@media(min-width:760px) { .nd-stats-columns { grid-template-columns:repeat(2,minmax(0,1fr)); } }
.nd-stat-list { display:grid; gap:var(--space-2); margin:0; padding:0; list-style:none; }
.nd-stat-list li { display:flex; align-items:baseline; justify-content:space-between; gap:var(--space-3); padding-bottom:var(--space-2); border-bottom:1px solid var(--rule); }
.nd-stat-list li:last-child { border-bottom:0; padding-bottom:0; }
.nd-stat-list strong { font-variant-numeric:tabular-nums; }

@media(forced-colors:active) { .nd-stat-card,.nd-stats-block { border-color:CanvasText; box-shadow:none; } .nd-stat-bar { background:CanvasText; } }

/* Admin frame (docs/design.md §6.8): title, command bar, search, chips, grouped rows, context menu, confirmation
   dialog and undo toast. Text in pills is trimmed to its cap box like the buttons' labels. */
.nd-admin-title { display:flex; flex-wrap:wrap; align-items:baseline; gap:var(--space-3); margin:0 0 var(--space-4); color:var(--muted);
  font:700 14px/1.3 var(--sans); letter-spacing:.18em; text-transform:uppercase; }
.nd-admin-title > :first-child { color:var(--ink); }
.nd-admin-title-sep { color:var(--secondary); }
@media(max-width:759px) { .nd-admin-nav { gap:var(--space-1); } .nd-admin-nav .nd-nav-link { --pill-x:var(--space-2); } }

.nd-command-bar { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:var(--space-3); margin:0 0 var(--space-4);
  padding:var(--space-3); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-1); }
.nd-command-actions { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
.nd-command-count { margin:0 var(--space-2) 0 auto; color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.14em; text-transform:uppercase; }

.nd-admin-search { box-sizing:border-box; display:flex; align-items:center; gap:var(--space-3); height:46px; margin:0 0 var(--space-3); padding:0 var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--paper); }
.nd-admin-search:focus-within { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-admin-search input { flex:1; min-width:0; height:100%; padding:0; border:0; outline:0; background:transparent; color:var(--ink); font:16px var(--sans); }
.nd-admin-search kbd { box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; flex:none; min-width:24px; height:24px;
  border:1px solid var(--rule-strong); border-radius:var(--radius-sm); color:var(--muted); font:700 12px/1 var(--sans); }
@media(pointer:coarse) { .nd-admin-search kbd { display:none; } }

.nd-chip-group { display:flex; flex-wrap:wrap; gap:var(--space-2); margin:0 0 var(--space-5); }
.nd-toggle-chip { box-sizing:border-box; display:inline-flex; align-items:center; gap:var(--space-2); height:40px; padding:0 var(--space-4); border:0; border-radius:999px;
  background:var(--secondary-surface); box-shadow:inset 0 0 0 1px var(--rule-strong); color:var(--secondary); font:700 12px/1 var(--sans); letter-spacing:.06em; cursor:pointer; }
.nd-toggle-chip > span,.nd-row-group-title > span,.nd-admin-search kbd { text-box:trim-both cap alphabetic; }
.nd-toggle-chip:hover { background-color:rgb(from var(--secondary) r g b / .14); }
.nd-toggle-chip:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-toggle-chip[aria-pressed="true"] { color:var(--on-primary); background:var(--primary-surface); box-shadow:inset 0 0 0 1.5px var(--ink); }
.nd-toggle-chip-count { font-variant-numeric:tabular-nums; opacity:.75; }
@media(pointer:coarse) { .nd-toggle-chip { height:44px; } }

.nd-row-group { margin:0 0 var(--space-5); }
.nd-row-group-title { display:flex; align-items:center; gap:var(--space-3); margin:0 0 var(--space-3); padding-bottom:var(--space-2); border-bottom:1px solid var(--rule-strong);
  color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.14em; text-transform:uppercase; }
.nd-row-group-count { font-variant-numeric:tabular-nums; }
.nd-rows { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }
.nd-rows-empty { margin:var(--space-5) 0; }
.nd-row { display:flex; flex-wrap:wrap; align-items:center; justify-content:space-between; gap:var(--space-3) var(--space-4); padding:var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); box-shadow:var(--shadow-1); }
.nd-row-main { display:grid; flex:1 1 18rem; gap:var(--space-1); min-width:0; }
.nd-row-title { font:600 17px/1.3 var(--serif); overflow-wrap:anywhere; }
.nd-row-meta { color:var(--muted); font-size:13px; line-height:1.5; overflow-wrap:anywhere; }
.nd-row-side { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:var(--space-3); }
/* The status badge and the pills share one 28px row, centred. */
.nd-row-badge { display:flex; flex-wrap:wrap; align-items:center; justify-content:flex-end; gap:var(--space-2); }
.nd-row-badge .nd-seal { height:28px; margin:0; }
.nd-row-actions,.nd-row-share { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }

/* Selection (Empresas): a checkbox per row, a header checkbox, the whole row opens the page through the title link. */
.nd-row { position:relative; }
.nd-row[data-selected="true"] { border-color:var(--secondary); background:color-mix(in srgb,var(--secondary) 12%,var(--sheet)); }
.nd-row-select { display:flex; align-items:center; gap:var(--space-3); min-width:0; }
.nd-row-text { display:grid; gap:var(--space-1); min-width:0; }
.nd-row-check { position:relative; z-index:1; display:inline-flex; align-items:center; justify-content:center; flex:none; width:44px; height:44px; margin:calc(-1 * var(--space-3)) 0; }
.nd-row-check input,.nd-select-all input { width:22px; height:22px; margin:0; accent-color:var(--primary); cursor:pointer; }
.nd-row-check input:focus-visible,.nd-select-all input:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-row-text .nd-row-title::after { content:""; position:absolute; inset:0; border-radius:var(--radius-md); cursor:pointer; }
.nd-row-text .nd-row-title:focus-visible { outline:none; }
.nd-row-text .nd-row-title:focus-visible::after { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-row:has(.nd-row-select):hover { border-color:var(--secondary); }
.nd-select-all { display:inline-flex; align-items:center; gap:var(--space-3); margin:0 0 var(--space-3); padding:var(--space-2) var(--space-4) var(--space-2) var(--space-3);
  border:1px solid var(--rule-strong); border-radius:999px; background:var(--sheet); color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.14em; text-transform:uppercase; cursor:pointer; }
.nd-select-all input { margin:0; }
.nd-select-all > span { text-box:trim-both cap alphabetic; }
.nd-button-count { font-variant-numeric:tabular-nums; opacity:.75; }
.nd-batch-list ul { display:grid; gap:var(--space-1); max-height:12rem; margin:0; padding:0; overflow-y:auto; list-style:none; }
.nd-batch-list li { overflow-wrap:anywhere; font-weight:600; }
.nd-batch-more { color:var(--muted); font-variant-numeric:tabular-nums; }
.nd-row-menu { position:relative; }
.nd-row-menu .nd-pop { top:calc(100% + var(--space-2)); right:0; bottom:auto; left:auto; }

.nd-confirm { box-sizing:border-box; width:min(30rem,calc(100vw - 2 * var(--space-4))); max-height:calc(100dvh - 2 * var(--space-4)); padding:0; overflow-y:auto;
  border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); color:var(--ink); box-shadow:var(--shadow-3); }
.nd-confirm::backdrop { background:rgb(from var(--ink) r g b / .45); }
.nd-confirm-form { display:grid; gap:var(--space-4); padding:var(--space-5); }
.nd-confirm-question { margin:0; font:600 var(--text-h3)/1.3 var(--serif); }
.nd-confirm-body { display:grid; gap:var(--space-4); }
.nd-confirm-body p { margin:0; }
.nd-confirm-subject { color:var(--muted); overflow-wrap:anywhere; }
.nd-confirm-subject:empty { display:none; }
.nd-confirm-actions { display:flex; flex-wrap:wrap; justify-content:flex-end; gap:var(--space-3); }

.nd-undo-region { position:fixed; z-index:50; left:50%; bottom:var(--space-4); width:min(32rem,calc(100% - 2 * var(--space-4))); transform:translateX(-50%); pointer-events:none; }
.nd-undo { pointer-events:auto; display:flex; align-items:center; gap:var(--space-3); padding:var(--space-3) var(--space-3) var(--space-3) var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); box-shadow:var(--shadow-3); }
.nd-undo p { flex:1; margin:0; font:14px/1.45 var(--sans); }
@media(max-width:759px) { .nd-undo-region { bottom:calc(var(--rail-size) + 3 * var(--space-2) + env(safe-area-inset-bottom)); } }

@media(forced-colors:active) { .nd-command-bar,.nd-row,.nd-confirm,.nd-undo,.nd-admin-search,.nd-toggle-chip { border:1px solid CanvasText; box-shadow:none; }
  .nd-toggle-chip[aria-pressed="true"] { background:Highlight; color:HighlightText; } }

/* Operations board (docs/design.md §2.5.2): four columns on wide screens, tabs on the phone, a side panel for one card. */
.nd-board { display:grid; gap:var(--space-4); margin:0 0 var(--space-5); }
@media(min-width:760px) { .nd-board { grid-template-columns:repeat(auto-fit,minmax(15rem,1fr)); align-items:start; } }
.nd-board-col { display:grid; gap:var(--space-3); min-width:0; padding:var(--space-3); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--band); }
.nd-board-col-title { display:flex; align-items:center; gap:var(--space-3); margin:0; padding:var(--space-1) var(--space-2); color:var(--muted);
  font:700 12px/1.2 var(--sans); letter-spacing:.14em; text-transform:uppercase; }
.nd-board-cards { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }
.nd-board-empty { margin:0; padding:var(--space-3) var(--space-2); }
.nd-board-card { box-sizing:border-box; display:grid; gap:var(--space-2); justify-items:start; width:100%; padding:var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-md);
  background:var(--sheet); box-shadow:var(--shadow-1); color:var(--ink); font:inherit; text-align:left; cursor:pointer; }
.nd-board-card:hover { background:var(--paper); }
.nd-board-card:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-board-card[aria-pressed="true"] { box-shadow:inset 0 0 0 2px var(--ink), var(--shadow-1); }
.nd-board-tag { text-transform:uppercase; letter-spacing:.08em; }
.nd-board-card-title { font:600 17px/1.3 var(--serif); overflow-wrap:anywhere; }
.nd-board-card-reason { color:var(--muted); font-size:14px; line-height:1.45; overflow-wrap:anywhere; }
.nd-board-card-foot { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2) var(--space-3); }

.nd-board-tabs { display:none; }
@media(max-width:759px) {
  .nd-board-tabs { display:flex; gap:var(--space-2); margin:0 0 var(--space-4); overflow-x:auto; }
  .nd-board-col[data-active="false"] { display:none; }
}
.nd-board-tab { box-sizing:border-box; display:inline-flex; flex:none; align-items:center; gap:var(--space-2); height:44px; padding:0 var(--space-4); border:0; border-radius:999px;
  background:var(--band); color:var(--ink); font:700 14px/1 var(--sans); cursor:pointer; }
.nd-board-tab > span { text-box:trim-both cap alphabetic; }
.nd-board-tab:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-board-tab[aria-selected="true"] { color:var(--on-primary); background:var(--primary-surface); box-shadow:inset 0 0 0 1.5px var(--ink); }

.nd-board-panel { position:fixed; z-index:30; top:var(--space-4); right:var(--space-4); bottom:var(--space-4); display:flex; flex-direction:column;
  box-sizing:border-box; width:min(26rem,calc(100vw - 2 * var(--space-4))); overflow:hidden; border:1px solid var(--rule-strong);
  border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-2); }
@media(max-width:759px) {
  .nd-board-panel { top:auto; left:var(--space-4); max-height:70dvh; bottom:calc(var(--rail-size) + 3 * var(--space-2) + env(safe-area-inset-bottom)); width:auto; }
}
.nd-board-panel p { margin:0; }
.nd-board-panel-head { display:grid; flex:none; gap:var(--space-3); padding:var(--space-5) var(--space-5) var(--space-4); }
.nd-board-panel-top { display:flex; align-items:center; justify-content:space-between; gap:var(--space-3); }
.nd-board-panel-head h2 { margin:0; font:600 var(--text-h3)/1.3 var(--serif); overflow-wrap:anywhere; }
.nd-board-panel-head h2:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-board-panel-meta { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2) var(--space-3); }
.nd-board-states { display:flex; flex-wrap:wrap; gap:var(--space-2); }
.nd-board-state { box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center; min-height:36px; padding:.27em var(--space-4) 0; border:1.5px solid var(--rule-strong);
  border-radius:999px; background:transparent; color:var(--ink); font:700 14px/1 var(--sans); cursor:pointer; }
.nd-board-state:hover { background:var(--band); }
.nd-board-state:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-board-state[aria-current="true"] { border-color:var(--ink); background:var(--primary-surface); color:var(--on-primary); cursor:default; }
.nd-board-panel-body { display:grid; flex:1 1 auto; align-content:start; gap:var(--space-5); min-height:0; padding:var(--space-4) var(--space-5); overflow-y:auto; }
.nd-board-panel-body:focus-visible { outline:3px solid var(--secondary); outline-offset:-3px; }
.nd-board-section { display:grid; gap:var(--space-3); }
.nd-board-section h3 { margin:0; color:var(--muted); font:700 12px/1.2 var(--sans); letter-spacing:.14em; text-transform:uppercase; }
.nd-board-list { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }
.nd-board-list li { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-1) var(--space-3); }
.nd-board-panel-foot { position:sticky; bottom:0; display:grid; flex:none; justify-items:start; gap:var(--space-3); padding:var(--space-4) var(--space-5); background:var(--band); }
.nd-board-actions { display:flex; flex-wrap:wrap; gap:var(--space-2); }
@media(forced-colors:active) { .nd-board-col,.nd-board-card,.nd-board-panel,.nd-board-tab { border:1px solid CanvasText; box-shadow:none; } }

/* Empresas: the blocked CNPJs under the list, and the company page sections that hold rows. */
.nd-sheet#blocked-cnpjs { display:grid; gap:var(--space-3); margin-top:var(--space-6); }
.nd-sheet#blocked-cnpjs h2 { margin:0; font-size:var(--text-h2); }
.nd-admin-company .nd-rows { gap:var(--space-2); }

/* The one pending badge (docs/design.md §2.5.1). */
.nd-pending-badge {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  box-sizing: border-box;
  height: 16px;
  min-width: 16px;
  padding: 0 4px;
  border-radius: 999px;
  background: var(--ochre);
  color: var(--on-primary);
  font-size: 11px;
  font-weight: 700;
  line-height: 16px;
  font-variant-numeric: tabular-nums;
  text-decoration: none;
}
.nd-pending-badge.is-danger { background: var(--status-danger); }
.nd-nav-link { display: inline-flex; align-items: center; gap: 8px; }
.nd-pop-badge { margin-left: auto; }
.nd-toggle-chip.is-danger { color: var(--status-danger); }
@media (forced-colors: active) {
  .nd-pending-badge { border: 1px solid CanvasText; }
}
.nd-nav-link[aria-current="page"] .nd-pending-badge {
  box-shadow: 0 0 0 2px var(--on-primary);
}
/* --- css/numbers.css --- */
/* Números (/admin/stats): charts are server-rendered SVG; colour classes only, no inline style (CSP). */
.nd-stats-section { display:grid; gap:var(--space-4); margin:0 0 var(--space-6); }
.nd-stats-section > h2 { margin:0; font-size:var(--text-h2); }
.nd-stats-section > .nd-help { margin:0; }
@media(min-width:760px) {
  .nd-stats-summary-2 { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .nd-stats-summary-3 { grid-template-columns:repeat(3,minmax(0,1fr)); }
}
.nd-stats-section .nd-stats-summary { margin-bottom:0; }
.nd-chart-card { display:grid; gap:var(--space-3); min-width:0; padding:var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-1); }
.nd-chart-card h3 { margin:0; font-size:var(--text-h3); }
.nd-chart-summary { margin:0; color:var(--muted); font-size:var(--text-small); line-height:1.5; }
.nd-chart { display:grid; gap:var(--space-2); }
.nd-chart-axis-max { margin:0; color:var(--muted); font:700 var(--text-caption)/1.2 var(--sans); letter-spacing:.04em; }
.nd-chart-axis { display:flex; justify-content:space-between; margin:0; color:var(--muted); font:400 var(--text-caption)/1.2 var(--sans); }
.nd-chart-svg { display:block; width:100%; height:160px; overflow:visible; }
.nd-chart-base { stroke:var(--rule-strong); stroke-width:1; vector-effect:non-scaling-stroke; }
.nd-chart-bar { stroke:var(--sheet); stroke-width:2; vector-effect:non-scaling-stroke; }
.nd-chart-bar-hatch { pointer-events:none; }
.nd-chart-hatch-line { stroke:var(--sheet); stroke-opacity:.6; }
.nd-chart-hit { fill:transparent; }
.nd-chart-hit:hover { fill:rgb(from var(--ink) r g b / .06); }
.nd-chart-track { fill:var(--soft); }
.nd-chart-s1 { fill:var(--status-success); }
.nd-chart-s2 { fill:var(--secondary); }
.nd-chart-s3 { fill:var(--status-warning); }
.nd-chart-s4 { fill:var(--ink); }
.nd-chart-s5 { fill:var(--accent); }
.nd-chart-s6 { fill:var(--muted); }
.nd-chart-legend { display:flex; flex-wrap:wrap; gap:var(--space-2) var(--space-4); margin:0; padding:0; list-style:none; font-size:var(--text-small); }
.nd-chart-legend li { display:inline-flex; align-items:center; gap:var(--space-2); }
.nd-chart-swatch { width:12px; height:12px; flex:none; }
.nd-chart-legend strong { font-variant-numeric:tabular-nums; }
.nd-chart-table summary { cursor:pointer; color:var(--muted); font-size:var(--text-small); }
.nd-chart-table[open] summary { margin-bottom:var(--space-2); }
.nd-chart-table .nd-stats-scroll { max-height:20rem; overflow:auto; }
.nd-hbars { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }
.nd-hbars li { display:grid; grid-template-columns:minmax(0,1fr) auto; align-items:center; gap:var(--space-1) var(--space-3); }
.nd-hbars-label { min-width:0; overflow-wrap:anywhere; }
.nd-hbars-label { grid-row:1; grid-column:1; }
.nd-hbars-value { grid-row:1; grid-column:2; font-variant-numeric:tabular-nums; }
.nd-hbars-svg { grid-row:2; grid-column:1 / -1; display:block; width:100%; height:8px; }
.nd-hbars-detail { grid-row:3; grid-column:1 / -1; }
/* Trend charts (trend_components.ex): the series colour is --c, set by nd-ser-N. */
.nd-ser-1 { --c:var(--status-success); }
.nd-ser-2 { --c:var(--secondary); }
.nd-ser-3 { --c:var(--status-warning); }
.nd-ser-4 { --c:var(--ink); }
.nd-ser-5 { --c:var(--accent); }
.nd-ser-6 { --c:var(--muted); }
@media(min-width:760px) { .nd-stats-kpis { grid-template-columns:repeat(4,minmax(0,1fr)); } }
@media(min-width:760px) { .nd-stats-kpis-5 { grid-template-columns:repeat(5,minmax(0,1fr)); } }
.nd-crumbs ol { display:flex; flex-wrap:wrap; gap:var(--space-2); margin:0; padding:0; list-style:none; }
.nd-crumbs li + li::before { content:"›"; margin-right:var(--space-2); color:var(--muted); }
.nd-crumbs [aria-current] { font-weight:600; }
.nd-kpi { justify-items:center; text-align:center; align-content:start; }
.nd-kpi-change { --pill-h:24px; --pill-x:var(--space-2); font-variant-numeric:tabular-nums; }
.nd-spark { display:block; width:100%; height:32px; margin-top:var(--space-2); overflow:visible; }
.nd-spark-area,.nd-area { fill:var(--c); fill-opacity:.16; stroke:none; }
.nd-line { fill:none; stroke:var(--c); stroke-width:2; stroke-linecap:round; stroke-linejoin:round; vector-effect:non-scaling-stroke; }
.nd-line-faint { stroke-opacity:.45; stroke-dasharray:4 4; stroke-width:1.5; }
.nd-trend { gap:var(--space-3); }
.nd-trend-plot { display:grid; grid-template-columns:auto minmax(0,1fr); gap:var(--space-1) var(--space-2); }
.nd-yaxis { display:flex; flex-direction:column; justify-content:space-between; height:160px; margin:0; padding:0; list-style:none;
  color:var(--muted); font:400 var(--text-caption)/1 var(--sans); font-variant-numeric:tabular-nums; text-align:right; }
.nd-trend-frame,.nd-donut-frame { position:relative; }
.nd-trend-frame { height:160px; }
.nd-trend-svg { display:block; width:100%; height:160px; overflow:visible; }
.nd-xaxis { grid-column:2; display:flex; justify-content:space-between; margin:0; color:var(--muted); font:400 var(--text-caption)/1.2 var(--sans); }
.nd-grid { stroke:var(--rule-strong); stroke-opacity:.5; stroke-width:1; vector-effect:non-scaling-stroke; }
.nd-guide { stroke:var(--muted); stroke-opacity:.6; stroke-width:1; vector-effect:non-scaling-stroke; opacity:0; }
.nd-dot { fill:none; stroke:var(--c); stroke-width:9; stroke-linecap:round; vector-effect:non-scaling-stroke; opacity:0; }
.nd-col:hover :is(.nd-guide,.nd-dot),.nd-col:focus-within :is(.nd-guide,.nd-dot) { opacity:1; }
.nd-hit { fill:transparent; }
.nd-hit:focus-visible { outline:2px solid var(--secondary); outline-offset:-2px; }
.nd-tip { position:absolute; z-index:2; width:max-content; max-width:min(20rem,100%); padding:var(--space-1) var(--space-2); border-radius:var(--radius-sm);
  background:var(--primary); color:var(--on-primary); font:400 var(--text-caption)/1.4 var(--sans); text-align:center; transform:translate(-50%,calc(-100% - 8px));
  pointer-events:none; }
.nd-donut { justify-items:center; gap:var(--space-4); }
.nd-donut-frame { width:180px; height:180px; }
.nd-donut-svg { display:block; width:100%; height:100%; }
.nd-slice { fill:var(--c); fill-rule:evenodd; stroke:var(--sheet); stroke-width:2; }
.nd-slice:hover { fill-opacity:.8; }
.nd-slice:focus-visible { outline:none; stroke:var(--ink); stroke-width:3; }
.nd-donut-centre { position:absolute; inset:0; display:grid; place-content:center; margin:0; text-align:center; pointer-events:none; }
.nd-donut-centre strong { font:600 28px/1.1 var(--serif); font-variant-numeric:tabular-nums; }
.nd-donut-centre span { color:var(--muted); font-size:var(--text-caption); }
.nd-donut-legend { flex-direction:column; width:100%; }
.nd-donut-legend li { display:grid; grid-template-columns:auto minmax(0,1fr) auto auto; gap:var(--space-2); width:100%; }
.nd-donut-share { min-width:5ch; color:var(--muted); font-variant-numeric:tabular-nums; text-align:right; }
.nd-swatch-fill { fill:var(--c); }
.nd-chart-swatch .nd-line { stroke-width:3; }
.nd-funnel,.nd-ranked { display:grid; gap:var(--space-3); margin:0; padding:0; list-style:none; }
.nd-funnel li { display:grid; grid-template-columns:minmax(0,1fr) auto; gap:var(--space-1) var(--space-3); }
.nd-funnel-svg { grid-column:1 / -1; display:block; width:100%; height:12px; }
.nd-funnel-track { fill:var(--soft); }
.nd-funnel-step { fill:var(--c); }
.nd-funnel-value { font-variant-numeric:tabular-nums; }
.nd-funnel-rate { grid-column:1 / -1; color:var(--muted); font-size:var(--text-small); text-align:center; }
.nd-ranked { counter-reset:rank; }
.nd-ranked li { display:flex; align-items:baseline; gap:var(--space-3); counter-increment:rank; }
.nd-ranked li::before { content:counter(rank); min-width:2ch; color:var(--muted); font-variant-numeric:tabular-nums; text-align:right; }
.nd-ranked-label { flex:1 1 auto; min-width:0; overflow-wrap:anywhere; }
.nd-ranked strong { font-variant-numeric:tabular-nums; }
@media(forced-colors:active) {
  .nd-chart-card { border:1px solid CanvasText; box-shadow:none; }
  .nd-chart-s1,.nd-chart-s2,.nd-chart-s3,.nd-chart-s4,.nd-chart-s5,.nd-chart-s6 { fill:CanvasText; }
  .nd-chart-track { fill:Canvas; stroke:CanvasText; }
  .nd-chart-hatch-line { stroke:Canvas; }
  .nd-line,.nd-dot,.nd-spark .nd-line { stroke:CanvasText; }
  .nd-area,.nd-spark-area,.nd-swatch-fill,.nd-slice,.nd-funnel-step { fill:CanvasText; }
  .nd-slice { stroke:Canvas; }
  .nd-tip { border:1px solid CanvasText; background:Canvas; color:CanvasText; }
}
/* --- css/map.css --- */
/* Map-first search: full-screen map, floating panel and map menu. */
.nd-map-shell { position:fixed; inset:0; overflow:hidden; background:var(--paper); }
.nd-map-screen { position:absolute; inset:0; overflow:hidden; }
.nd-map-screen > .nd-map { position:absolute; inset:0; }
.nd-map { position:absolute; inset:0; background:var(--paper); z-index:0; }
.nd-map .maplibregl-canvas:focus-visible { outline:3px solid var(--secondary); outline-offset:-3px; }
.nd-map.is-unavailable { background:var(--desk-hatch),var(--paper); }
.nd-map-fallback { position:absolute; top:50%; left:50%; width:min(28rem,calc(100% - 48px)); margin:0; padding:var(--space-5);
  transform:translate(-50%,-50%); border:1px dashed var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet);
  color:var(--muted); text-align:center; line-height:1.55; z-index:1; }
.nd-map.is-loaded .nd-map-fallback { display:none; }

.nd-map-panel { position:absolute; z-index:10; top:var(--space-4); left:var(--space-4); bottom:var(--space-4); display:flex; width:min(360px,calc(100% - 32px));
  flex-direction:column;
  border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-3); overflow:hidden; }
.nd-map-panel:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-map-panel-body { display:grid; flex:1; align-content:start; gap:var(--space-3); width:100%; min-height:0; padding:var(--space-4); overflow:auto; }
.nd-map-results { display:grid; align-content:start; gap:var(--space-4); }
.nd-map-panel-body.is-filtering { align-content:stretch; }

.nd-map-brand { display:flex; align-items:center; gap:var(--space-3); min-height:40px; }
.nd-map-brand-mark { margin-right:auto; color:var(--ink); font:600 22px/1 var(--serif); letter-spacing:-.01em; text-decoration:none; }
.nd-map-brand-mark:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }

.nd-map-search-row { display:flex; gap:var(--space-2); align-items:stretch; }
.nd-map-search { position:relative; flex:1; display:flex; gap:0; align-items:center; min-width:0; }
.nd-map-search input[type=search] { width:100%; height:46px; padding:0 44px 0 var(--space-4); border:1px solid var(--rule-strong);
  border-radius:var(--radius-md); background:var(--paper); color:var(--ink); font:400 16px/1 var(--sans); }
.nd-map-search input[type=search]:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-map-search-submit { position:absolute; right:5px; top:5px; }
.nd-map-count { margin:0; padding-bottom:var(--space-3); border-bottom:1px solid var(--rule); color:var(--muted); font-size:13px; }
#map-panel.phx-change-loading .nd-map-count::after,
.nd-map-screen.phx-change-loading .nd-map-count::after { content:' · Atualizando…'; }

.nd-map-rows { display:grid; gap:0; margin:0; padding:0; list-style:none; }
.nd-map-rows > li + li { border-top:1px solid var(--rule); }
.nd-map-row { display:flex; align-items:center; gap:var(--space-3); padding:var(--space-3); border:1px solid transparent;
  border-radius:var(--radius-md); background:var(--sheet); color:var(--ink); text-decoration:none; }
.nd-map-row:hover { background:var(--band); }
.nd-map-row:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-map-row.is-selected { border-color:var(--ink); background:var(--band); }
.nd-map-row .nd-logo { width:40px; height:40px; font-size:15px; }
/* Title and meta on the left; the distance and seal end the row, centred on it (.nd-row-end). */
.nd-map-row-body { display:grid; grid-template-columns:minmax(0,1fr) auto; grid-template-areas:"title end" "meta end"; align-items:center; row-gap:var(--space-1); flex:1; min-width:0; }
.nd-map-row-title { grid-area:title; align-self:end; min-width:0; font:600 16px/1.2 var(--serif); overflow-wrap:anywhere; }
.nd-map-row-meta { grid-area:meta; align-self:start; color:var(--muted); font-size:13px; line-height:1.3; }
.nd-map-row .nd-row-end { grid-area:end; margin-left:var(--space-3); }
.nd-map-row .nd-distance { font-size:13px; }
/* A row narrower than 30 rem (the map panel, phones) puts the distance and the seal under the name. */
.nd-map-rows > li { container-type:inline-size; }
@container (max-width:30rem) {
  .nd-map-row-body { grid-template-columns:minmax(0,1fr); grid-template-areas:"title" "end" "meta"; }
  .nd-map-row .nd-row-end { justify-self:start; justify-content:flex-start; margin-left:0; }
  /* The seal leads, so it lines up with the name's left edge. */
  .nd-map-row .nd-row-end .nd-seal { order:-1; }
}
.nd-map-remaining { max-height:100%; }

.nd-map-empty { padding:var(--space-4); border:1px dashed var(--rule-strong); border-radius:var(--radius-md); text-align:center; }
.nd-map-empty h2 { margin:0 0 var(--space-2); font-size:var(--text-h3); }
.nd-map-empty p { margin:0 0 var(--space-3); color:var(--muted); font-size:14px; line-height:1.5; }
.nd-map-empty-actions { display:flex; flex-wrap:wrap; justify-content:center; gap:var(--space-2); }

.nd-map-filter-view { display:flex; flex-direction:column; gap:var(--space-4); min-height:100%; }
.nd-map-filter-head { display:flex; align-items:center; justify-content:space-between; gap:var(--space-3); }
.nd-map-filter-head h2 { margin:0; font-size:var(--text-h2); }
.nd-map-filter-form { display:flex; flex:1; flex-direction:column; gap:var(--space-3); }
.nd-map-local-row { display:flex; flex-wrap:wrap; align-items:end; gap:var(--space-3); }
.nd-map-local-row .nd-field { flex:1 1 12rem; }
.nd-map-place-actions { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
.nd-map-place-actions .nd-chip { height:46px; }
.nd-map-filter-actions { position:sticky; z-index:2; bottom:calc(-1 * var(--space-4)); display:flex; justify-content:flex-end; gap:var(--space-2); padding:var(--space-3) 0;
  margin-top:auto; border-top:1px solid var(--rule); background:var(--sheet); }
.nd-map-filter-view > .nd-chip { justify-self:start; }

/* Sheet controls (docs/design.md §11.8). The state is data-sheet on the screen (js/sheet_ui.js); without it the panel is
   open. Desktop: "Minimizar lista" sits in the panel foot beside the legal links and hides the panel; a pill on the
   left, outside the panel, brings it back. Phones: the handle row on top of the sheet is one button labelled with the
   result count. */
.nd-sheet-bar { position:relative; flex:none; display:none; }
.nd-sheet-bar .nd-sheet-handle { display:none; }
.nd-map-screen > .nd-sheet-show { display:none; }
.nd-map-panel-foot .nd-sheet-hide { display:none; }
@media(min-width:760px) {
  .nd-map-panel-foot .nd-sheet-hide { display:inline-flex; }
  .nd-map-screen[data-sheet="collapsed"] .nd-map-panel { display:none; }
  .nd-map-screen[data-sheet="collapsed"] > .nd-sheet-show { position:absolute; z-index:10; top:var(--space-4); left:var(--space-4); display:inline-flex;
    background-color:var(--sheet); box-shadow:inset 0 0 0 1px var(--ink),var(--shadow-3); }
  .nd-map-screen[data-sheet="collapsed"] > .nd-sheet-show:not(:disabled):hover { background-color:color-mix(in srgb,var(--secondary) 14%,var(--sheet)); }
}
.nd-sheet-grip { width:40px; height:4px; border-radius:2px; background:color-mix(in srgb,var(--ink) 35%,transparent); }
/* The label shows per state: "N empresas · ver lista ▴" collapsed, "N empresas ▴▾" half, "Ver mapa ▾" full. */
.nd-sheet-label { display:inline-flex; align-items:center; gap:var(--space-1); }
.nd-sheet-label > * { display:none; }
.nd-sheet-count,.nd-sheet-up,.nd-sheet-down { display:inline-block; }
.nd-sheet-label .nd-icon { width:16px; height:16px; }
.nd-sheet-more { text-transform:lowercase; }
.nd-sheet-more::before { content:'· '; }
.nd-map-screen[data-sheet="collapsed"] .nd-sheet-more { display:inline; }
.nd-map-screen[data-sheet="collapsed"] .nd-sheet-down,.nd-map-screen[data-sheet="full"] .nd-sheet-count,.nd-map-screen[data-sheet="full"] .nd-sheet-up { display:none; }
.nd-map-screen[data-sheet="full"] .nd-sheet-back { display:inline; }
/* Collapsed: only the search and the count (and what is marked data-sheet-peek) stay. */
.nd-map-screen[data-sheet="collapsed"] .nd-map-results > :not(.nd-map-brand,.nd-map-search-row,.nd-map-count,.nd-near-controls,[data-sheet-peek]) { display:none; }
.nd-map-screen[data-sheet="collapsed"] .nd-map-count { padding-bottom:0; border-bottom:0; }

.nd-map-attribution { position:absolute; z-index:5; right:var(--space-2); bottom:var(--space-1); display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2);
  padding:2px 6px; border-radius:var(--radius-sm); background:rgb(from var(--paper) r g b / .82); color:var(--muted); font-size:11px; line-height:1.4; }
.nd-map-attribution a { color:inherit; }

/* Company pins. The marker element is a button so it is keyboard reachable; the
   invisible ::before gives it the 44 px touch target the 26 px drawing needs. */
.nd-map-pin { position:relative; width:26px; height:26px; padding:0; border:2px solid var(--ink); border-radius:50% 50% 50% 0;
  background:var(--primary-surface); box-shadow:0 2px 5px rgb(from var(--ink) r g b / .35); cursor:pointer; transform:rotate(-45deg); }
.nd-map-pin::before { content:''; position:absolute; inset:-9px; border-radius:50%; }
.nd-map-pin::after { content:''; position:absolute; top:8px; left:8px; width:6px; height:6px; border-radius:50%; background:var(--on-primary); }
.nd-map-pin:hover,.nd-map-pin.is-selected { background:var(--panel); transform:rotate(-45deg) scale(1.15); }
.nd-map-pin:hover::after,.nd-map-pin.is-selected::after { background:var(--ink); }
.nd-map-pin:focus-visible { outline:3px solid var(--secondary); outline-offset:3px; }

/* Cluster of overlapping pins: a counted disc on the pin colours; the click zooms into its pins. */
.nd-map-cluster { position:relative; display:grid; place-items:center; min-width:40px; height:40px; padding:0 var(--space-2); border:2px solid var(--ink); border-radius:999px;
  background:var(--primary-surface); color:var(--on-primary); box-shadow:0 2px 5px rgb(from var(--ink) r g b / .35); font:700 15px/1 var(--sans); cursor:pointer; }
.nd-map-cluster::before { content:''; position:absolute; inset:-4px; border-radius:50%; }
@supports (text-box:trim-both cap alphabetic) { .nd-map-cluster > span { text-box:trim-both cap alphabetic; } }
.nd-map-cluster:hover { background:var(--panel); color:var(--ink); }
.nd-map-cluster:focus-visible { outline:3px solid var(--secondary); outline-offset:3px; }
@media(pointer:coarse) {
  .nd-map-pin::before { inset:-11px; }
  .nd-map-cluster { min-width:48px; height:48px; }
}

/* A bottom sheet above the rail's bar; --sheet-h is set by sheet_ui.js, half the room until it runs. */
@media(max-width:759px) {
  .nd-map-screen { --sheet-bottom:var(--space-2); }
  .nd-map-panel,.nd-map-screen[data-sheet="collapsed"] .nd-map-panel { top:auto; right:var(--space-2); bottom:var(--sheet-bottom); left:var(--space-2); width:auto;
    height:var(--sheet-h,50%); max-height:calc(100% - var(--sheet-bottom) - var(--space-2)); transition:height .28s cubic-bezier(.2,.8,.2,1); }
  .nd-map-screen[data-sheet-dragging] .nd-map-panel { transition:none; }
  .nd-sheet-bar { display:block; height:48px; padding:0; }
  .nd-sheet-bar .nd-sheet-handle { display:flex; flex-direction:column; align-items:center; gap:var(--space-2); width:100%; height:100%; padding:var(--space-2) var(--space-4) 0;
    border:0; border-radius:var(--radius-lg) var(--radius-lg) 0 0; background:none; color:var(--ink); font:400 14px/20px var(--sans); cursor:pointer; touch-action:none; }
  .nd-sheet-bar .nd-sheet-handle:active { background:var(--hatch-soft); }
  .nd-sheet-bar .nd-sheet-handle:focus-visible { outline:2px solid var(--ink); outline-offset:-4px; }
  .nd-map-screen[data-sheet-dragging] .nd-sheet-handle { cursor:grabbing; }
  /* The count is the handle's label: it stays for screen readers (a live region), not for the eye. */
  .nd-map-count { position:absolute; width:1px; height:1px; overflow:hidden; clip-path:inset(50%); white-space:nowrap; }
  .nd-map-panel-body { padding-top:var(--space-3); }
  .nd-map-screen[data-sheet="collapsed"] .nd-map-brand { display:none; }
  .nd-map-attribution { right:var(--space-2); bottom:calc(var(--sheet-bottom) + var(--sheet-h,50%) + var(--space-1)); transition:bottom .28s cubic-bezier(.2,.8,.2,1); }
  .nd-map-screen[data-sheet="full"] .nd-map-attribution,.nd-map-screen[data-sheet-dragging] .nd-map-attribution { bottom:var(--sheet-bottom); transition:none; }
}

/* On the side panel the foot (the minimize button above the legal links) stays pinned to the bottom of the scroll, so no
   scroll position hides it; the links are one wrapped row. */
@media(min-width:760px) {
  .nd-map-panel-foot { position:sticky; bottom:calc(-1 * var(--space-4)); z-index:1; display:grid; justify-items:start; gap:var(--space-2);
    margin:0 calc(-1 * var(--space-4)) calc(-1 * var(--space-4)); padding:var(--space-3) var(--space-4); border-top:1px solid var(--rule); background:var(--sheet); }
  .nd-map-panel .nd-legal-links { flex-direction:row; gap:var(--space-1) var(--space-4); margin:0; }
  .nd-map-panel .nd-legal-links a { display:inline-flex; align-items:center; min-height:28px; }
}

@media(pointer:coarse) {
  .nd-map-search-submit { top:1px; right:1px; }
  .nd-map-attribution a { display:inline-flex; align-items:center; min-height:44px; }
  .nd-map-attribution { align-items:center; }
}

@media(prefers-reduced-motion:reduce) {
  .nd-map-pin,.nd-map-cluster,.nd-map-panel,.nd-map-attribution { transition:none !important; }
}

@media(forced-colors:active) {
  .nd-map-panel,.nd-map-row,.nd-map-pin,.nd-map-cluster { border:1px solid CanvasText; }
  .nd-map-pin,.nd-map-cluster { background:LinkText; color:Canvas; }
  .nd-sheet-grip { background:CanvasText; }
}

/* Map popup (P0.6) */
.maplibregl-popup-content { min-width:280px; padding:var(--space-4) !important; border:1px solid var(--rule-strong); border-radius:var(--radius-lg) !important;
  background:var(--sheet) !important; box-shadow:var(--shadow-3) !important; }
.maplibregl-popup-tip { border-top-color:var(--sheet) !important; }
.nd-map-popup { display:grid; gap:var(--space-3); color:var(--ink); font:14px/1.4 var(--sans); }
.nd-map-popup-head { display:flex; gap:var(--space-3); align-items:flex-start; padding-right:var(--space-5); }
.nd-map-popup .nd-logo { width:48px; height:48px; font-size:17px; }
.nd-map-popup-body { display:grid; gap:var(--space-1); justify-items:start; min-width:0; }
.nd-map-popup-name { display:-webkit-box; -webkit-box-orient:vertical; -webkit-line-clamp:2; overflow:hidden; overflow-wrap:anywhere;
  font:600 18px/1.2 var(--serif); }
.nd-map-popup-pills { display:flex; flex-wrap:wrap; gap:var(--space-2); }
.nd-map-popup-pills .nd-seal { margin:0; }
.nd-map-popup-meta { color:var(--muted); font-size:13px; }
.maplibregl-popup-close-button { top:var(--space-2); right:var(--space-2); display:grid; place-items:center; width:32px; height:32px; padding:0;
  border:0; border-radius:999px; background:none; color:var(--ink); cursor:pointer; }
.maplibregl-popup-close-button:hover { background:var(--band); }
.maplibregl-popup-close-button:focus { outline:none; }
.maplibregl-popup-close-button:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.maplibregl-popup-close-button .nd-icon { width:18px; height:18px; fill:none; stroke:currentColor; stroke-width:2; stroke-linecap:round; }
.maplibregl-popup-content:focus,.maplibregl-popup-content a:focus:not(:focus-visible) { outline:none; }
/* --- css/search.css --- */
/* Search view: the full-screen list with filters. It renders no map; the map stage below it exists only after the map is wanted. */
.nd-map-layer { position:absolute; inset:0; z-index:0; }
.nd-map-layer[hidden] { display:none; }

.nd-search { position:absolute; inset:0; z-index:10; overflow:auto; background:var(--paper);
  scrollbar-gutter:stable both-edges;
  padding:var(--space-5) var(--search-side) var(--space-7); --search-side:calc(var(--space-4) + var(--rail-size) + var(--space-4)); }
.nd-search:focus-visible { outline:3px solid var(--secondary); outline-offset:-3px; }
.nd-search-inner { display:grid; align-content:start; gap:var(--space-4); width:min(100%,46rem); margin:0 auto; }
.nd-search .nd-map-brand-mark { justify-self:start; }

.nd-search-form { display:grid; grid-template-columns:repeat(auto-fit,minmax(14rem,1fr)); gap:var(--space-3); padding:var(--space-4);
  border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); box-shadow:var(--shadow-2); }
.nd-search-q,.nd-search-checks,.nd-search-actions,.nd-search-form > .nd-hint { grid-column:1 / -1; }
/* Each check is already a 46 px target; a row gap would double the rhythm. */
.nd-search-checks { display:flex; flex-wrap:wrap; gap:0 var(--space-5); }
.nd-search-actions { display:flex; flex-wrap:wrap; align-items:center; gap:var(--space-2); }
.nd-search-actions .nd-chip { height:46px; }

.nd-search-rows { border:1px solid var(--rule-strong); border-radius:var(--radius-lg); background:var(--sheet); overflow:hidden; }
.nd-search-rows:empty { display:none; }
.nd-search-credit { margin:0; color:var(--muted); font-size:12px; line-height:1.4; }
.nd-search-credit a { color:inherit; }
.nd-search-results { display:grid; gap:var(--space-4); align-content:start; min-width:0; }
/* Previous, the page count and Next: the count's text is centred between the two buttons. */
.nd-search-pager { display:grid; grid-template-columns:auto minmax(0,1fr) auto; align-items:center; gap:var(--space-3); }
.nd-search-pager .nd-button { --pad:var(--space-4); gap:var(--space-2); }
.nd-search-pager-count { margin:0; white-space:nowrap; color:var(--muted); font-size:13px; text-align:center; }
.nd-search-pager-count::first-letter { text-transform:uppercase; }
@supports (text-box:trim-both cap alphabetic) { .nd-search-pager-count { text-box:trim-both cap alphabetic; } }

/* Desktop: filters in a sticky left column, results on the right, in a centred container. */
@media(min-width:1100px) {
  .nd-search-inner { grid-template-columns:20rem minmax(0,1fr); grid-template-areas:"brand brand" "filters results"; column-gap:var(--space-6); width:min(100%,80rem); }
  .nd-search .nd-map-brand-mark { grid-area:brand; }
  .nd-search-form { grid-area:filters; grid-template-columns:minmax(0,1fr); align-self:start; position:sticky; top:var(--space-5);
    max-height:calc(100dvh - 2 * var(--space-5)); overflow-y:auto; }
  .nd-search-results { grid-area:results; }
}

/* The column is centred on the page: the side padding on both sides is the rail's width plus a gap, so the rail floats
   in the left padding and the column only narrows when the page is too narrow for both. */
/* The end of the list clears the bottom rail: its height, its offset, the inset and one step. */
@media(max-width:759px) {
  .nd-search { --search-side:var(--space-3); padding:var(--space-4) var(--search-side) calc(var(--rail-size) + var(--space-2) + var(--space-4) + env(safe-area-inset-bottom)); }
  .nd-search-inner { padding-top:var(--space-2); }
  /* Padding and gap are tight so that the labels and the count fit. */
  .nd-search-pager { gap:var(--space-2); }
  .nd-search-pager .nd-button { --pad:var(--space-3); }
  .nd-search-pager-count { font-size:12px; }
}
/* Spanish labels plus the count do not fit 360 px with their icons: the label names the button. */
@media(max-width:379px) { .nd-search-pager :is(.nd-icon,.nd-button-lead) { display:none; } }
/* --- css/rail.css --- */
/* Site rail (docs/design.md §6.7): a floating paper panel with one icon link per item. Vertical at the top left on
   wide screens, a bottom bar on phones. The active item is engraved ink with the paper hatch, like the primary
   button; hover frosts, like the tertiary one. The account and language items open a popover (.nd-pop). */
:root { --rail-target:44px; --rail-size:calc(var(--rail-target) + 2 * var(--space-2)); }
.nd-view-tabs { --rail-pad:var(--space-2);
  position:fixed; z-index:20; top:var(--space-4); left:var(--space-4); border:1px solid var(--rule-strong); border-radius:999px;
  background:var(--sheet); box-shadow:var(--shadow-3); }
.nd-view-tabs ul { display:flex; flex-direction:column; gap:var(--space-1); margin:0; padding:var(--rail-pad); list-style:none; }
.nd-view-tabs li { position:relative; display:flex; }

.nd-view-tab { box-sizing:border-box; display:flex; align-items:center; justify-content:center; width:var(--rail-target); height:var(--rail-target);
  border-radius:999px; color:var(--ink); text-decoration:none;
  transition:transform .3s ease,background-color .25s ease,box-shadow .25s ease,color .25s ease; }
.nd-view-tab .nd-icon { width:19px; height:19px; transition:transform .3s cubic-bezier(.3,1.4,.5,1); }
.nd-view-tab:hover { background-color:var(--frosted-surface); box-shadow:inset 0 0 0 1px rgb(from var(--ink) r g b / .2),inset 0 1px 0 #fff; }
.nd-view-tab:hover .nd-icon { transform:scale(1.1); }
.nd-view-tab:active { transform:translateY(1px) scale(.98); }
.nd-view-tab:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-view-tab[aria-current] { color:var(--on-primary); background:var(--primary-surface); box-shadow:inset 0 0 0 1.5px var(--ink); }
.nd-view-tab[aria-current]:hover { box-shadow:inset 0 0 0 1.5px var(--ink),0 3px 0 -1px rgb(from var(--ink) r g b / .22); }

/* The active item that also has its popover open keeps its fill and gains a paper-and-ink ring. */
.nd-view-tab[aria-current][aria-expanded="true"] { box-shadow:inset 0 0 0 1.5px var(--ink),0 0 0 2px var(--sheet),0 0 0 3.5px var(--ink); }

/* A popover's toggle looks hovered while its panel is open, and the label gives way to the panel. */
.nd-view-tab[aria-expanded="true"]:not([aria-current]) { background-color:var(--frosted-surface); box-shadow:inset 0 0 0 1px rgb(from var(--ink) r g b / .2),inset 0 1px 0 #fff; }
.nd-view-tabs li:has(.nd-view-tab[aria-expanded="true"]) .nd-view-tip { opacity:0; visibility:hidden; }

/* The popover: beside the rail, its bottom edge on the rail's (desktop); above the bar, its right edge on the bar's (phones).
   Hidden until its toggle opens it; without JavaScript :target shows it. */
.nd-pop { position:absolute; z-index:30; bottom:0; left:calc(100% + var(--space-3)); display:grid; box-sizing:border-box; min-width:13rem; max-width:calc(100vw - 2 * var(--space-4));
  max-height:calc(100dvh - 2 * var(--space-4)); overflow-y:auto; padding:var(--space-2); border:1px solid var(--rule-strong); border-radius:var(--radius-md);
  background:var(--sheet); box-shadow:var(--shadow-3); }
.nd-pop[hidden]:not(:target) { display:none; }
.nd-pop-title { margin:0; padding:var(--space-2) var(--space-3); color:var(--muted); font:700 12px/1.3 var(--sans); overflow-wrap:anywhere; }
.nd-pop-item { box-sizing:border-box; display:flex; align-items:center; justify-content:space-between; gap:var(--space-3); min-height:44px; padding:0 var(--space-3);
  border-radius:999px; color:var(--ink); font:600 14px/1.2 var(--sans); text-decoration:none; }
.nd-pop-item .nd-icon { width:17px; height:17px; flex:none; }
/* Chromium puts the caps 0.136em above the middle of the em box (see buttons.css): trim the label to its cap box so the flex row centres it. */
.nd-pop-item > span { padding-top:.27em; }
@supports (text-box:trim-both cap alphabetic) {
  .nd-pop-item > span { padding-top:0; text-box:trim-both cap alphabetic; }
}
.nd-pop-item:hover { background:var(--frosted-surface); box-shadow:inset 0 0 0 1px rgb(from var(--ink) r g b / .2); }
.nd-pop-item[aria-current] { background:var(--band); box-shadow:inset 0 0 0 1px var(--ink); }
.nd-pop-item:focus-visible { outline:3px solid var(--secondary); outline-offset:-3px; }

/* The label: shown on hover and on keyboard focus, never read twice (the link carries the name). */
.nd-view-tip { position:absolute; top:50%; left:calc(100% + var(--space-3)); box-sizing:border-box; display:inline-flex; align-items:center; justify-content:center;
  height:28px; padding:.27em var(--space-3) 0; border-radius:999px; background:var(--primary); color:var(--on-primary);
  font:700 12px/1 var(--sans); white-space:nowrap; pointer-events:none; opacity:0; visibility:hidden;
  transform:translate(-4px,-50%); transition:opacity .2s ease,transform .2s ease,visibility .2s; }
@supports (text-box:trim-both cap alphabetic) {
  .nd-view-tip { display:block; height:auto; padding:calc((28px - 1cap) / 2) var(--space-3); text-box:trim-both cap alphabetic; }
}
.nd-view-tabs li:has(.nd-view-tab:focus-visible) .nd-view-tip { opacity:1; visibility:visible; transform:translate(0,-50%); }
@media(hover:hover) {
  .nd-view-tabs li:hover .nd-view-tip { opacity:1; visibility:visible; transform:translate(0,-50%); }
}

/* Views offset their content by the rail: the map panel (and the pill that restores it) moves right of it, or sits above the bar on phones (--sheet-bottom). */
@media(min-width:760px) { .nd-map-screen:has(.nd-view-tabs)[data-sheet="collapsed"] > .nd-sheet-show { left:calc(var(--space-4) + var(--rail-size) + var(--space-2)); } }
.nd-map-screen:has(.nd-view-tabs) .nd-map-panel { left:calc(var(--space-4) + var(--rail-size) + var(--space-2));
  width:min(360px,calc(100% - var(--space-4) * 2 - var(--rail-size) - var(--space-2))); }

@media(max-width:759px) {
  .nd-view-tabs { top:auto; left:50%; bottom:calc(var(--space-2) + env(safe-area-inset-bottom)); transform:translateX(-50%); }
  .nd-pop { bottom:calc(100% + var(--space-3)); left:auto; right:0; }
  .nd-view-tabs ul { flex-direction:row; }
  .nd-view-tip { top:auto; bottom:calc(100% + var(--space-3)); left:50%; transform:translate(-50%,4px); }
  .nd-view-tabs li:has(.nd-view-tab:focus-visible) .nd-view-tip { transform:translate(-50%,0); }
  .nd-map-screen:has(.nd-view-tabs) { --sheet-bottom:calc(var(--space-2) * 2 + var(--rail-size) + env(safe-area-inset-bottom)); }
  .nd-map-screen:has(.nd-view-tabs) .nd-map-panel { left:var(--space-2); width:auto; }
}
@media(max-width:759px) and (hover:hover) {
  .nd-view-tabs li:hover .nd-view-tip { transform:translate(-50%,0); }
}

@media(prefers-reduced-motion:reduce) {
  .nd-view-tab,.nd-view-tab .nd-icon,.nd-view-tip { transition:none; }
  .nd-view-tab:hover .nd-icon { transform:none; }
}

@media(forced-colors:active) {
  .nd-view-tabs,.nd-view-tip,.nd-pop { border:1px solid CanvasText; }
  .nd-pop-item[aria-current] { outline:2px solid Highlight; }
  .nd-view-tab[aria-current] { background:Highlight; color:HighlightText; }
}

.nd-view-tab { position: relative; }
.nd-view-tab .nd-rail-badge {
  position: absolute;
  top: 4px;
  right: 4px;
  box-shadow: 0 0 0 2px var(--sheet);
}
@media (max-width: 760px) {
  .nd-view-tab .nd-rail-badge { top: -4px; right: -8px; box-shadow: 0 0 0 2px var(--rail-bg, var(--sheet)); }
}
@media (max-width: 760px) {
  .nd-view-tabs [data-item="account"] .nd-rail-badge {
    top: -4px;
    right: -8px;
    box-shadow: 0 0 0 2px var(--sheet);
  }
}
/* --- css/about.css --- */
/* "O que é a Non Ducor" (/about): a centred reading column. The in-page nav hangs in the left margin
   from 1400px, clear of the site rail, and is a "Nesta página" disclosure below that. */
.nd-about { position:relative; display:grid; gap:var(--space-5); max-width:46rem; margin:0 auto; }
.nd-about-body { display:grid; gap:var(--space-7); min-width:0; }
.nd-about-nav { display:none; }
.nd-about-toc { border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--band); }
.nd-about-toc summary { display:flex; align-items:center; justify-content:space-between; min-height:44px; padding:0 var(--space-4); font:700 14px/1 var(--sans); cursor:pointer; list-style:none; }
.nd-about-toc summary::-webkit-details-marker { display:none; }
.nd-about-toc summary::after { content:'+'; font-size:20px; }
.nd-about-toc[open] summary::after { content:'\2212'; }
.nd-about-toc summary:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-about-toc ul { margin:0; padding:0 0 var(--space-2); list-style:none; }
.nd-about-toc li a { display:flex; align-items:center; min-height:44px; padding:0 var(--space-4); border-top:1px solid var(--rule); color:var(--ink); text-decoration:none; }

.nd-about-section { scroll-margin-top:var(--space-5); }
.nd-about-section > * + * { margin-top:var(--space-3); }
.nd-about h1 { margin:0; font-size:var(--text-display); line-height:1.15; letter-spacing:-.02em; }
.nd-about h2 { margin:0; font-size:var(--text-h2); line-height:1.15; letter-spacing:-.02em; }
.nd-about h3 { margin:var(--space-5) 0 0; font-size:var(--text-h3); line-height:1.15; letter-spacing:-.01em; }
.nd-about h3 + p { margin-top:var(--space-2); }
.nd-about p,.nd-about li { line-height:1.65; }
.nd-about-hero { display:grid; gap:var(--space-4); }
.nd-about-hero > * { margin:0; }
.nd-about-lead { font-size:var(--text-lead); }
.nd-about-actions { display:flex; flex-wrap:wrap; gap:var(--space-3); }

.nd-confirm { padding:0 var(--space-1); border-radius:var(--radius-sm); background:var(--soft); color:var(--ink); font-weight:700; }
.nd-about-founder { margin-top:var(--space-5); padding:var(--space-4); border:1px dashed var(--rule-strong); border-radius:var(--radius-md); background:var(--band); }
.nd-about-founder h3 { margin-top:0; }

.nd-about-pair { display:grid; gap:var(--space-4); }
.nd-about-card { padding:var(--space-4); border:1px solid var(--rule-strong); border-radius:var(--radius-md); background:var(--sheet); box-shadow:var(--shadow-1); }
.nd-about-card h3 { margin-top:0; }
.nd-about-steps { display:grid; gap:var(--space-4); margin:var(--space-3) 0 0; padding:0; list-style:none; }
.nd-about-steps .nd-step-number { --d:32px; margin-bottom:var(--space-3); background:var(--ink); color:var(--paper); font:700 14px/1 var(--sans); }
.nd-about-steps h3,.nd-about-steps p { margin-top:0; }
.nd-about-steps h3 + p { margin-top:var(--space-2); }

.nd-about-seal { display:flex; flex-direction:column; gap:var(--space-3); align-items:flex-start; }
.nd-about-seal .nd-seal { flex:none; margin-top:0; }
.nd-about-seal p { margin:0; }
.nd-about-marks { display:grid; gap:var(--space-3); margin:var(--space-3) 0 0; padding:0; list-style:none; }
.nd-about-marks li { display:flex; gap:var(--space-3); align-items:flex-start; }
.nd-about-marks svg { flex:none; width:20px; height:20px; margin-top:calc((1lh - 20px) / 2 - .136em); }
@supports (text-box:trim-both cap alphabetic) {
  .nd-about-marks li > span { text-box:trim-both cap alphabetic; }
  .nd-about-marks svg { margin-top:calc((1cap - 20px) / 2); }
}
.nd-about-marks .is-yes svg { color:var(--status-success); }
.nd-about-marks .is-no svg { color:var(--status-danger); }
.nd-about-list { margin:0; padding-left:1.3rem; list-style:disc; }

.nd-about-faq details { border-bottom:1px solid var(--rule); }
.nd-about-faq details:first-child { border-top:1px solid var(--rule); }
.nd-about-faq summary { padding:var(--space-4) 0; font:600 18px/1.3 var(--serif); cursor:pointer; }
.nd-about-faq summary:focus-visible { outline:3px solid var(--secondary); outline-offset:2px; }
.nd-about-faq details p { margin:0 0 var(--space-4); }

@media(min-width:760px) {
  .nd-about-pair { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .nd-about-steps { grid-template-columns:repeat(2,minmax(0,1fr)); }
  .nd-about-steps:has(> li:nth-child(3):last-child) { grid-template-columns:repeat(3,minmax(0,1fr)); }
  .nd-about-card { padding:var(--space-5); }
  .nd-about-seal { flex-direction:row; gap:var(--space-4); align-items:center; }
}
@media(min-width:1400px) {
  .nd-about-toc { display:none; }
  .nd-about-nav { display:block; position:absolute; top:0; bottom:0; right:calc(100% + var(--space-6)); width:200px; }
  .nd-about-nav ul { position:sticky; top:var(--space-5); display:grid; gap:var(--space-1); margin:0; padding:0; list-style:none; }
}
@media(forced-colors:active) { .nd-about-card { border:1px solid CanvasText; box-shadow:none; } }
/* --- css/letter.css --- */
/* The invite letter (docs/design.md §2.9): an opened envelope and a folded sheet, drawn with the site tokens, over the page art.
   The invite pages have no footer: the main area is one screen and centres the letter (.nd-page-focus). */
.nd-page-focus > .nd-main { display:flex; flex-direction:column; justify-content:center; box-sizing:border-box; padding-block:var(--space-3); }
@media(max-width:759px) { .nd-page-focus > .nd-main { padding-bottom:calc(var(--rail-size) + var(--space-3) + env(safe-area-inset-bottom)); } }
@media(min-width:760px) { .nd-page-focus > .nd-main { padding-block:var(--space-5); } }

.letter { --letter-shadow:4px 4px 0 var(--primary); --gutter:var(--space-3); --flap:var(--space-5); position:relative; width:100%; max-width:560px; margin:0 auto; padding-top:var(--flap); }
/* The envelope: only its open back flap shows, above the sheet. */
.letter-envelope { position:absolute; inset:0 var(--gutter) auto; height:var(--flap); }
.letter-flap { position:absolute; top:0; left:0; display:block; width:100%; height:var(--flap); overflow:visible; }
.letter-flap path { fill:var(--soft); stroke:var(--primary); stroke-width:1.5px; stroke-linejoin:round; }
.letter-seal { position:absolute; z-index:3; top:calc(var(--flap) - var(--space-3)); left:50%; width:48px; height:48px; margin-left:-24px; filter:drop-shadow(2px 2px 0 rgb(from var(--ink) r g b / .25)); }
.seal-disc { fill:var(--primary); }
.seal-ring { fill:none; stroke:var(--on-primary); stroke-width:1.4; stroke-dasharray:2 3; }
.seal-mark { fill:none; stroke:var(--on-primary); stroke-width:3; stroke-linecap:square; }

.letter-sheet { --pad:var(--space-4); position:relative; z-index:1; display:grid; grid-template-columns:minmax(0,1fr); justify-items:center; gap:var(--space-3); margin-inline:var(--gutter); padding:calc(var(--space-6) + var(--space-3)) var(--pad) var(--space-5); border:1.5px solid var(--primary); background:var(--panel); box-shadow:var(--letter-shadow); text-align:center; }
.letter-head { display:grid; gap:var(--space-2); justify-items:center; }
.letter-eyebrow { margin:0; color:var(--muted); font:700 12px/1.4 var(--sans); letter-spacing:.14em; text-transform:uppercase; }
.letter-head h1 { margin:0; font:600 clamp(26px,7.4vw,38px)/1.12 var(--serif); text-wrap:balance; }
.letter-lead { max-width:30ch; margin:0; font:600 18px/1.4 var(--serif); text-wrap:balance; }
.letter-ref { max-width:34ch; margin:0 auto; color:var(--muted); font-size:16px; line-height:1.5; }
.letter-text,.letter-call,.letter-doubt,.letter-later { max-width:34ch; margin:0; font-size:16px; line-height:1.45; text-wrap:pretty; }
.letter-doubt { font-size:15px; }
.letter-text strong { white-space:nowrap; }

.letter-actions { display:grid; grid-template-columns:minmax(0,1fr); justify-items:center; gap:var(--space-2); width:100%; margin-top:var(--space-2); }
.letter-actions .nd-button { width:100%; max-width:360px; height:48px; font-size:16px; }
.letter-actions .nd-button.wide + .nd-button.wide { margin-top:0; }
.letter-later { font-weight:700; }
.letter-more,.letter-back { color:var(--ink); font-size:15px; text-underline-offset:4px; }
.letter-more { font-weight:700; }
.letter-back { padding:var(--space-2); text-decoration:underline; }
.letter-sheet > .letter-more { display:inline-block; }

/* The narrowest phones (360 px): less margin and padding, so the buttons stay inside the sheet. */
@media (max-width:380px) { .letter { --gutter:var(--space-2); } .letter-sheet { --pad:var(--space-3); } }
@media (min-width:640px) {
  .letter { --gutter:var(--space-5); --flap:var(--space-6); }
  .letter-seal { width:56px; height:56px; margin-left:-28px; }
  .letter-sheet { --pad:var(--space-7); gap:var(--space-4); padding-block:calc(var(--space-7) + var(--space-3)) var(--space-6); }
  .letter-lead { max-width:36ch; font-size:22px; }
  .letter-text,.letter-call,.letter-later { max-width:42ch; font-size:18px; }
  .letter-doubt { font-size:16px; }
  .letter-actions .nd-button { height:52px; }
}
/* Short screens (a phone at 360x640): the same letter, tighter. */
@media (max-height:700px) {
  .letter { --flap:var(--space-4); }
  .letter-sheet { gap:var(--space-2); padding-top:calc(var(--space-5) + var(--space-3)); padding-bottom:var(--space-4); }
  .letter-actions .nd-button { height:44px; }
}
/* --- css/support.css --- */
/* Support page (/support): lead, QR code, address and two actions, centred (design §18). */
.nd-support { display:grid; justify-items:center; gap:var(--space-4); text-align:center; }
.nd-support h1 { margin:0; }
.nd-support-lead { margin:0; font-size:var(--text-lead); }
.nd-support-qr { display:block; width:100%; max-width:18rem; height:auto; border:1px solid var(--rule-strong); border-radius:var(--radius-md); }
.nd-support-qr-paper { fill:var(--paper); }
.nd-support-qr-ink { fill:var(--ink); }
.nd-support-address { max-width:100%; margin:0; font:600 15px/1.5 ui-monospace,SFMono-Regular,Menlo,Consolas,monospace; overflow-wrap:anywhere; user-select:all; }
.nd-support-actions { display:flex; flex-wrap:wrap; justify-content:center; gap:var(--space-2); }
@media(forced-colors:active) { .nd-support-qr-paper { fill:Canvas; } .nd-support-qr-ink { fill:CanvasText; } }
