/* Shulkerboxes site v2: tokens and components. One stylesheet for every v2 page.
   Identity kept: Bricolage Grotesque (display), Geist (body), Geist Mono (labels), the lilac.
   New: a light ground by default (cool off-white, violet-cast greys), the lilac darkened for AA on it,
   one type scale, one 4 px spacing scale, radii and shadows by role. Lab: three grounds to compare
   (cloud, mist, slate), switched by v2.mjs and stored in localStorage. Contrast ratios are in README.md. */

/* ================================================================ fonts (self-hosted, cut from the live site's files) */
/* Cut for v2 from the site's fonts (fontTools instancer + subsetter): latin + Portuguese accents, and only the weight
   range v2 renders (Bricolage 600-700, Geist 400-600; Geist Mono is static 500). 116 KB -> 86 KB on a first view. */
@font-face { font-family: "Bricolage Grotesque"; font-style: normal; font-weight: 600 700; font-stretch: 100%; font-display: swap;
  src: url(/assets/fonts/bricolage-grotesque-v9-latin-pt-wght600-700.woff2) format("woff2"); }
@font-face { font-family: "Geist"; font-style: normal; font-weight: 400 600; font-display: swap;
  src: url(/assets/fonts/geist-v5-latin-pt-wght400-600.woff2) format("woff2"); }
@font-face { font-family: "Geist Mono"; font-style: normal; font-weight: 500; font-display: swap;
  src: url(/assets/fonts/geist-mono-v6-latin-pt.woff2) format("woff2"); }

/* ================================================================ tokens: ground "cloud" (default, light) */
:root {
  color-scheme: light;
  /* ground and surfaces */
  --bg: #f5f5f9;            /* page */
  --bg-2: #eeedf4;          /* alternate band, footer */
  --surface: #ffffff;       /* cards, inputs, nav */
  --surface-2: #f6f5fa;     /* inset rows inside a card (address rows) */
  --surface-3: #e9e7f0;     /* tracks, skeletons */
  --wash: rgb(60 40 120 / .06);   /* hover wash on quiet controls */
  --wash-2: rgb(60 40 120 / .10); /* pressed wash */
  /* lines */
  --line: #e3e1ea;          /* hairlines, card borders */
  --line-2: #d2cfdc;        /* secondary button border, dividers that must read */
  --control: #938ea4;       /* input and select borders: 3:1 on white */
  /* text: four greys, nothing else */
  --fg-1: #16131f;          /* 16.8:1 on --bg */
  --fg-2: #3d3850;          /* 10.3:1 */
  --fg-3: #5d5770;          /* 6.3:1 on --bg, 5.8:1 on --bg-2 */
  --fg-4: #8f8aa0;          /* decoration, disabled, placeholder; never body text */
  /* accent: the lilac, darkened for AA on light */
  --accent: #6a46c2;        /* button fill (white text 6.4:1), links (5.9:1 on --bg) */
  --accent-hover: #5c39b3;
  --accent-press: #4f2f9e;
  --accent-edge: #4a2c93;
  --accent-text: #6a46c2;
  --on-accent: #ffffff;
  --accent-soft: #efe8fd;   /* chips, selected tiles */
  --accent-soft-ink: #5b39b0; /* 6.6:1 on --accent-soft */
  --accent-ring: rgb(106 70 194 / .22);
  --brand-1: #b98bcc; --brand-2: #8f62a6; --brand-3: #6f4885; --brand-4: #3b2449; /* the shulker mark */
  --focus: #6a46c2;
  /* status tones */
  --ok: #1d7a46;   --ok-soft: #e3f4ea;   --ok-dot: #22a35a;
  --wait: #9a5b00; --wait-soft: #fbf0dc; --wait-dot: #e19a1f;
  --bad: #b42f2f;  --bad-soft: #fbe7e6;  --bad-dot: #e0483f;
  --off: #5d5770;  --off-soft: #ecebf2;  --off-dot: #a5a0b5;
  /* shadows by role */
  --sh-1: 0 1px 2px rgb(30 20 70 / .05), 0 1px 1px rgb(30 20 70 / .03);                    /* resting card */
  --sh-2: 0 2px 4px rgb(30 20 70 / .05), 0 12px 28px -10px rgb(30 20 70 / .16);           /* hovered card, hero card */
  --sh-3: 0 4px 10px rgb(20 10 50 / .08), 0 28px 64px -16px rgb(20 10 50 / .30);          /* dialog, toast, popover */
  --sh-btn: inset 0 1px 0 rgb(255 255 255 / .18), 0 1px 2px rgb(40 20 90 / .28);
  --scrim: rgb(18 12 36 / .45);
  --nav-bg: rgb(245 245 249 / .82);
  --head-1: #6f9a4c; --head-2: #c58ad6; --head-3: #c99a5b; --head-4: #5f8fc9;               /* player heads */

  /* type (modern/notes.md section 2) */
  --font-display: "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;
  --font-body: "Geist", ui-sans-serif, system-ui, -apple-system, "Segoe UI", sans-serif;
  --font-mono: "Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;
  --fs-hero: clamp(42px, 3.4vw + 20px, 68px);   /* capped so the home H1 runs at most 4 lines (EN and pt) at 1280 and the button ends inside 1280×720 */
  --fs-h2: clamp(30px, 2.2vw + 18px, 48px);
  --fs-h3: 20px; --lh-h3: 26px;
  --fs-lede: 18px; --lh-lede: 28px;

  /* spacing: 4, 8, 12, 16, 20, 24, 32, 40, 48, 64, 80, 96, 128 */
  --s-1: 4px; --s-2: 8px; --s-3: 12px; --s-4: 16px; --s-5: 20px; --s-6: 24px; --s-8: 32px;
  --s-10: 40px; --s-12: 48px; --s-16: 64px; --s-20: 80px; --s-24: 96px; --s-32: 128px;
  --gutter: 16px;
  --wrap: 1320px;
  --column: 640px;    /* the single-column pages: claim flow, server sub-pages (704 px with gutters at 1280) */
  --prose: 560px;     /* reading measure: .prose text and the reading pages' column, about 65 characters at 17 px */
  --section: 64px;
  --head-gap: 32px;
  --nav-h: 64px;

  /* radii by role */
  --r-control: 12px;  /* buttons, inputs, selects, address rows */
  --r-card: 20px;     /* cards, panels */
  --r-inner: 14px;    /* rows and tiles inside a card, toast */
  --r-dialog: 24px;   /* dialog, sheet */
  --r-pill: 999px;    /* chips, status pills, segmented */

  /* motion */
  --ease: cubic-bezier(.22, 1, .36, 1);
  --t-fast: .15s;
  --t-med: .24s;
}
@media (min-width: 768px) { :root { --gutter: 24px; --fs-h3: 24px; --lh-h3: 30px; --fs-lede: 20px; --lh-lede: 30px; } }
@media (min-width: 1280px) { :root { --gutter: 32px; } }
@media (min-width: 900px) { :root { --section: 96px; --head-gap: 48px; } }


/* ================================================================ base */
*, *::before, *::after { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; text-size-adjust: 100%; scroll-padding-top: calc(var(--nav-h) + 16px); }
body { margin: 0; background: var(--bg); color: var(--fg-1); font: 400 16px/26px var(--font-body);
  -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; overflow-x: hidden; }
img, svg, picture { display: block; max-width: 100%; }
img { height: auto; }
h1, h2, h3, h4, p, ul, ol, dl, dd, figure { margin: 0; }
ul[class], ol[class] { list-style: none; padding: 0; }
button, input, select, textarea { font: inherit; color: inherit; }
button { cursor: pointer; }
a { color: inherit; }
code, kbd, .mono { font-family: var(--font-mono); font-weight: 500; }
::selection { background: var(--accent-soft); color: var(--fg-1); }
:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
[hidden] { display: none !important; }
.visually-hidden { position: absolute !important; width: 1px; height: 1px; margin: -1px; padding: 0; overflow: hidden;
  clip: rect(0 0 0 0); white-space: nowrap; border: 0; }
.skip { position: absolute; left: 12px; top: -80px; z-index: 100; padding: 12px 16px; border-radius: var(--r-control);
  background: var(--fg-1); color: var(--bg); font-weight: 550; text-decoration: none; }
.skip:focus { top: 12px; }

/* ================================================================ type */
.t-hero { font: 700 var(--fs-hero)/.98 var(--font-display); letter-spacing: -.035em; text-wrap: balance; }
.t-h2 { font: 650 var(--fs-h2)/1.05 var(--font-display); letter-spacing: -.025em; text-wrap: balance; }
.t-h3 { font: 600 var(--fs-h3)/var(--lh-h3) var(--font-display); letter-spacing: -.01em; }
.t-h4 { font: 600 18px/26px var(--font-body); letter-spacing: -.005em; }
/* No heading ends on one word; running text avoids a lone last word where the browser can. */
.t-h3, .t-h4, .card-title, .prose h2, .prose h3, .server-name { text-wrap: balance; }
p, li, .faq-a { text-wrap: pretty; }
/* A question in a FAQ balances its lines (no one-word orphan under a long first line). */
summary { text-wrap: balance; }
.t-lede { font: 400 var(--fs-lede)/var(--lh-lede) var(--font-body); color: var(--fg-2); }
.t-body { font: 400 16px/26px var(--font-body); }
.t-small { font: 400 14px/20px var(--font-body); color: var(--fg-3); }
.t-eyebrow { font: 500 12px/16px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; color: var(--fg-3); }
.t-mono { font: 500 14px/20px var(--font-mono); }
.t-muted { color: var(--fg-3); }
.t-accent { color: var(--accent-text); }
.t-hero .t-accent { display: block; }   /* the accent half of a hero headline always starts its own line (P-01, P-40) */
@media (max-width: 359px) { :root { --fs-hero: 36px; } .t-hero .nowrap { white-space: normal; } }   /* 320 px: "para todo mundo." fits */
.nowrap { white-space: nowrap; }
.prose { max-width: var(--prose); font: 400 17px/28px var(--font-body); }
.prose > * + * { margin-top: 16px; }
.prose h2 { margin-top: 48px; font: 650 28px/34px var(--font-display); letter-spacing: -.02em; }
.prose h3 { margin-top: 32px; font: 600 20px/26px var(--font-display); }
.prose ul, .prose ol { padding-left: 22px; }
.prose li + li { margin-top: 6px; }
.prose a, .link { color: var(--accent-text); text-decoration: underline; text-decoration-thickness: 1px;
  text-underline-offset: 3px; text-decoration-color: color-mix(in srgb, currentColor 40%, transparent);
  transition: text-decoration-color var(--t-fast) var(--ease), color var(--t-fast) var(--ease); border-radius: 2px; }
.prose a:hover, .link:hover { text-decoration-color: currentColor; }
.link-quiet { color: inherit; text-decoration: underline; text-decoration-color: var(--line-2); text-underline-offset: 3px; }
.link-quiet:hover { text-decoration-color: currentColor; }
button.link { border: 0; background: none; padding-inline: 0; font: inherit; }   /* a copy action set as a link (P-20 Next steps) */
/* A text link that stands on its own line or beside a short sentence ("Already have a server? Sign in", a breadcrumb,
   "Get Minecraft") gets a 44 px tall target without moving the line: padding out, the same margin back in. Links inside
   running prose (legal text, guides, FAQ answers) keep the plain inline box. */
:is(.link, .link-quiet, .footer-fine-row a):not(.prose *, .faq-a *) { display: inline-block; padding-block: 13px; margin-block: -13px; }
.arrow { font-family: var(--font-body); }

/* ================================================================ layout */
.wrap { width: 100%; max-width: calc(var(--wrap) + 2 * var(--gutter)); margin-inline: auto; padding-inline: var(--gutter); }
.wrap-prose { max-width: calc(var(--column) + 2 * var(--gutter)); }
/* Reading pages (guides, the explainer, legal: an <article> of wrap-prose blocks) narrow to the reading measure. */
article .wrap-prose { max-width: calc(var(--prose) + 2 * var(--gutter)); }
.section { padding-block: var(--section); }
.section-alt { background: var(--bg-2); }
.section-head { max-width: 720px; margin-bottom: var(--head-gap); display: grid; gap: 12px; }
.section-head .t-lede { margin-top: 4px; }
/* Page head: the H1 of a page's first section sits at one distance below the nav (section padding + 40 px) whether an
   eyebrow, a breadcrumb or a back chip precedes it. The element before the H1 sits at the foot of one 28 px slot (a
   taller back chip grows upward into the section padding and keeps its 44 px target); with nothing before it the H1
   keeps the slot empty. A rule on
   the existing structure (first section's .section-head or .stack holding the H1), so no page markup changes; a new page
   can also say it outright with class="page-head" on the element that holds the H1. */
:is(.page-head, :is(main > section:first-child, main > article:first-child) :is(.section-head, .stack):not(.server-head *):has(> h1)) {
  --slot: 28px; --slot-gap: 12px; row-gap: var(--slot-gap); }
:is(.page-head, :is(main > section:first-child, main > article:first-child) :is(.section-head, .stack):not(.server-head *):has(> h1)) > :first-child:has(+ h1) {
  height: var(--slot); margin: 0; align-content: unsafe end; }
:is(.page-head, :is(main > section:first-child, main > article:first-child) :is(.section-head, .stack):not(.server-head *):has(> h1)) > h1:first-child {
  margin-top: calc(var(--slot) + var(--slot-gap)); }
/* A form-first page (Claim): the H1 drops the empty page-head slot and the section starts 24 px under the nav, so the
   primary button stays in the first screen at 375 x 812. */
.section-form { padding-top: 24px; }
.section-form .section-head > #page-title { margin-top: 0; }
.stack { display: grid; gap: var(--stack, 16px); align-content: start; }
.cluster { display: flex; flex-wrap: wrap; align-items: center; gap: var(--cluster, 12px); }
.grid-2, .grid-3, .grid-4 { display: grid; gap: 16px; }
/* A card in a two-column grid is as tall as its own content, never stretched to its neighbour's height (P-20's join card
   was 575 px of blank white beside the steps column at 1280). */
.grid-2 { align-items: start; }
@media (min-width: 768px) { .grid-2 { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 24px; } }
/* grid-4 from 900 px: up to four cells a row, never narrower than 160 px ("Active servers (3 h+)" on one line), so a narrow
   column holds three or two a row instead of four 130 px cells. */
@media (min-width: 900px) { .grid-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
  .grid-4 { grid-template-columns: repeat(auto-fit, minmax(max(160px, calc((100% - 3 * 24px) / 4)), 1fr)); gap: 24px; } }
@media (min-width: 600px) and (max-width: 899px) { .grid-4 { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
/* A divider between two parts merged into one card: a 1 px hairline with 16 px either side. */
.divider { height: 0; margin-block: var(--s-4); border: 0; border-top: 1px solid var(--line); }
/* Captions inside reading text: 14 px lines held to about 62 characters (a 560 px prose column ran them to about 80). */
:is(.prose, .card-text) .t-small { max-width: 62ch; }
/* Field hints and callouts are held to the same 62-character line in a wide card or column. */
.field-hint, .callout { max-width: 62ch; }
/* Opt-in (class on a .grid-2 inside an <article>): from 1024 px the grid leaves the 560 px reading column for the full wrap
   width, centred on the page (P-32 B's "What we record" / "What we never record" cards). Below 1024 it stays in the column. */
@media (min-width: 1024px) {
  article .grid-2.grid-wide { --wide: min(var(--wrap), calc(100vw - 2 * var(--gutter)));
    width: var(--wide); margin-inline: calc((100% - var(--wide)) / 2); }
}

/* ================================================================ button
   Heights: 36 small (44 hit area), 44 default, 52 large, 56 hero. One radius for every control (12). */
.btn { position: relative; display: inline-flex; align-items: center; justify-content: center; gap: 8px;
  min-height: 44px; padding: 0 18px; border: 1px solid transparent; border-radius: var(--r-control);
  font: 550 15px/1.1 var(--font-body); letter-spacing: -.005em; text-align: center; text-decoration: none; white-space: nowrap;
  -webkit-tap-highlight-color: transparent; user-select: none;
  transition: background-color var(--t-fast) var(--ease), border-color var(--t-fast) var(--ease),
    color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease), transform .08s var(--ease); }
.btn:active:not(:disabled):not([aria-disabled="true"]) { transform: translateY(1px); }
.btn svg { width: 18px; height: 18px; flex: none; }
.btn-primary { background: var(--accent); color: var(--on-accent); border-color: var(--accent-edge); box-shadow: var(--sh-btn); }
.btn-primary:hover { background: var(--accent-hover); }
.btn-primary:active { background: var(--accent-press); }
.btn-secondary { background: var(--surface); color: var(--fg-1); border-color: var(--line-2); box-shadow: var(--sh-1); }
.btn-secondary:hover { border-color: var(--control); background: var(--surface); }
.btn-secondary:active { background: var(--surface-2); }
.btn-ghost { background: transparent; color: var(--fg-1); }
.btn-ghost:hover { background: var(--wash); }
.btn-ghost:active { background: var(--wash-2); }
.btn-danger { background: var(--bad); color: #fff; border-color: transparent; box-shadow: var(--sh-btn); }
.btn-danger:hover { filter: brightness(.94); }
.btn-sm { min-height: 36px; padding: 0 14px; font-size: 14px; border-radius: 10px; }
.btn-sm::after { content: ""; position: absolute; inset: -4px; } /* 44 px hit area around a 36 px button */
.btn-lg { min-height: 52px; padding: 0 22px; font-size: 16px; }
.btn-xl { min-height: 56px; padding: 0 28px; font-size: 17px; border-radius: 14px; }
.btn-block { display: flex; width: 100%; white-space: normal; } /* a full-width label wraps instead of widening the page */
.btn-icon { min-width: 44px; padding: 0; }
.btn-icon.btn-sm { min-width: 36px; }
.btn:disabled, .btn[aria-disabled="true"] { cursor: not-allowed; background: var(--surface-3); color: var(--fg-4);
  border-color: transparent; box-shadow: none; }
.btn[aria-busy="true"] { cursor: progress; }
.btn[aria-busy="true"]::before { content: ""; width: 16px; height: 16px; border-radius: 50%; border: 2px solid currentColor;
  border-right-color: transparent; animation: spin .7s linear infinite; }
.btn.is-done { background: var(--ok-soft); color: var(--ok); border-color: transparent; box-shadow: none; }
@keyframes spin { to { transform: rotate(360deg); } }
.btn:active, :is(a[href], summary, button, [role="tab"], label):active { transition-duration: 0s; }
:is(a[href]:not(.btn), summary, button:not(.btn), [role="tab"]):active:not(:disabled) { opacity: .7; }

/* ================================================================ form fields */
.field { display: grid; gap: 6px; }
.field-label { font: 550 14px/20px var(--font-body); color: var(--fg-1); }
.field-label .opt { font-weight: 400; color: var(--fg-3); margin-left: 6px; }
.field-hint { font: 400 14px/20px var(--font-body); color: var(--fg-3); }
.field-error { display: flex; gap: 6px; align-items: flex-start; font: 500 14px/20px var(--font-body); color: var(--bad); }
.field-error::before { content: "!"; flex: none; display: grid; place-items: center; width: 18px; height: 18px; margin-top: 1px;
  border-radius: 50%; background: var(--bad); color: var(--surface); font: 700 12px/1 var(--font-body); }
.field-ok { font: 500 14px/20px var(--font-body); color: var(--ok); }
.input { width: 100%; min-height: 48px; padding: 0 14px; border: 1px solid var(--control); border-radius: var(--r-control);
  background: var(--surface); color: var(--fg-1); font: 400 16px/24px var(--font-body); /* 16 px: no zoom on iPhone */
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); appearance: none; }
textarea.input { min-height: 112px; padding: 12px 14px; resize: vertical; }
.file-code { position: relative; min-width: 0; background: var(--surface); border-radius: var(--r-control); }
.file-code-active textarea.input, .file-code pre { font: 400 16px/24px var(--font-mono); tab-size: 2; white-space: pre-wrap; overflow-wrap: break-word; }
.file-code pre { position: absolute; margin: 0; border: 0; box-sizing: border-box; overflow: hidden; pointer-events: none; }
.file-code-active textarea.input { position: relative; background: transparent; color: transparent; caret-color: var(--fg-1); }
.file-code-active textarea::selection { background: var(--accent-ring); color: transparent; }
.file-code .file-comment { color: var(--fg-3); }
.file-code .file-key { color: var(--accent-text); }
.file-code .file-value { color: var(--ok); }
@media (forced-colors: active) {
  .file-code-active textarea.input { color: CanvasText; }
  .file-code-active textarea::selection { background: Highlight; color: HighlightText; }
  .file-code pre { display: none; }
}
.input::placeholder { color: var(--fg-4); }
.input:hover { border-color: var(--fg-3); }
.input:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 4px var(--accent-ring); }
.input[aria-invalid="true"] { border-color: var(--bad); }
.input[aria-invalid="true"]:focus { box-shadow: 0 0 0 4px color-mix(in srgb, var(--bad) 22%, transparent); }
.input:disabled { background: var(--surface-3); color: var(--fg-3); border-color: var(--line-2); cursor: not-allowed; }
.input[readonly] { background: var(--surface-2); }
/* A native file field in the 48 px box: the browser's own "Choose file" button sits centred as a 32 px pill, not top-left. */
.input[type="file"] { padding: 7px; font: 400 15px/32px var(--font-body); color: var(--fg-2); cursor: pointer; }
.input[type="file"]::file-selector-button { min-height: 32px; margin: 0 12px 0 0; padding: 0 12px; border: 1px solid var(--control);
  border-radius: 8px; background: var(--surface-2); color: var(--fg-1); font: 550 14px/1 var(--font-body); cursor: pointer; }
.input-mono { font-family: var(--font-mono); font-weight: 500; font-size: 15px; }
/* An input with a fixed part after it: label + ".play.shulkerboxes.com". */
.affix { display: flex; align-items: stretch; border: 1px solid var(--control); border-radius: var(--r-control); background: var(--surface);
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); overflow: hidden; }
.affix:hover { border-color: var(--fg-3); }
.affix:focus-within { border-color: var(--accent); box-shadow: 0 0 0 4px var(--accent-ring); }
.affix .input { border: 0; box-shadow: none; min-width: 0; }
.affix-text { display: flex; align-items: center; padding: 0 14px; background: var(--surface-2); color: var(--fg-3);
  border-left: 1px solid var(--line); font: 500 14px/20px var(--font-mono); white-space: nowrap; }
/* 320 to 479 px: the 22-character ".play.shulkerboxes.com" left the input 25 to 77 px in a 238 to 311 px card ("anas-w" at
   375, phone read 10). On a phone a suffix goes under the input as its own line, breaking at the dots if it must, and the
   input takes the full width. A prefix (the console's "/") stays beside its input. */
@media (max-width: 479px) {
  .affix:has(> .input + .affix-text) { flex-wrap: wrap; }
  .affix:has(> .input + .affix-text) > .input { flex: 1 1 100%; }
  .affix > .input + .affix-text { flex: 1 1 100%; min-height: 36px; border-left: 0; border-top: 1px solid var(--line); white-space: normal; overflow-wrap: anywhere; }
}
.select { position: relative; }
.select select { width: 100%; min-height: 48px; padding: 0 40px 0 14px; border: 1px solid var(--control); border-radius: var(--r-control);
  background: var(--surface); color: var(--fg-1); font: 400 16px/24px var(--font-body); appearance: none; cursor: pointer;
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); }
.select select:hover { border-color: var(--fg-3); }
.select select:focus { outline: none; border-color: var(--accent); box-shadow: 0 0 0 4px var(--accent-ring); }
.select select:disabled { background: var(--surface-3); color: var(--fg-3); cursor: not-allowed; }
.select::after { content: ""; position: absolute; right: 18px; top: 50%; width: 8px; height: 8px; margin-top: -6px; pointer-events: none;
  border-right: 2px solid var(--fg-3); border-bottom: 2px solid var(--fg-3); transform: rotate(45deg); }
/* Checkbox and radio rows: the whole row is the 44 px target. */
.check { display: flex; align-items: flex-start; gap: 12px; min-height: 44px; padding: 10px 0; cursor: pointer; font: 400 16px/24px var(--font-body); }
.check input { flex: none; width: 20px; height: 20px; margin: 2px 0 0; accent-color: var(--accent); cursor: pointer; }
.check-op { align-items: center; gap: 8px; padding: 0; font-size: 15px; }   /* Operator in a player row, beside the row's button */
.check-op input { margin: 0; }
/* Choice tiles: a radio as a card (region, world). */
.choices { display: grid; gap: 12px; border: 0; margin: 0; padding: 0; min-width: 0; }
@media (min-width: 600px) { .choices-2 { grid-template-columns: 1fr 1fr; } }
.choice { position: relative; display: grid; grid-template-columns: auto 1fr; gap: 4px 12px; align-items: start; padding: 16px;
  border: 1px solid var(--line-2); border-radius: var(--r-inner); background: var(--surface); cursor: pointer;
  transition: border-color var(--t-fast) var(--ease), background-color var(--t-fast) var(--ease), box-shadow var(--t-fast) var(--ease); }
.choice:hover { border-color: var(--control); }
.choice input { grid-row: span 2; width: 20px; height: 20px; margin: 2px 0 0; accent-color: var(--accent); }
.choice-title { font: 550 16px/24px var(--font-body); }
.choice-text { grid-column: 2; font: 400 14px/20px var(--font-body); color: var(--fg-3); }
.choice:has(input:checked) { border-color: var(--accent); background: var(--accent-soft); box-shadow: inset 0 0 0 1px var(--accent); }
.choice:has(input:focus-visible) { outline: 2px solid var(--focus); outline-offset: 2px; }
.choice:has(input:disabled) { opacity: .55; cursor: not-allowed; }
.form { display: grid; gap: 20px; }
.form-actions { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }

/* ================================================================ card */
.card { background: var(--surface); border: 1px solid var(--line); border-radius: var(--r-card); box-shadow: var(--sh-1); padding: 24px; }
.card-lg { padding: 32px; }
@media (max-width: 599px) { .card-lg { padding: 24px; } }
/* A long form keeps its submit on screen at every width (P-13's Create server sat two screens down on a laptop; P-22's
   unsaved-changes bar three): the button bar sticks to the bottom of the screen while the form is in view, edge to edge
   inside the card (the negative margin is the card's padding). A bar with a sentence and actions reads as one row from
   900 px: the sentence left, the buttons right. */
.form-submit { position: sticky; bottom: 0; z-index: 2; display: grid; gap: 8px; margin: 0 -32px; padding: 12px 32px calc(12px + env(safe-area-inset-bottom));
  border-top: 1px solid var(--line); background: var(--surface); }
@media (max-width: 599px) { .form-submit { margin: 0 -24px; padding-inline: 24px; } }
/* Below 900 px the bar floats 48 px above the screen's bottom edge: Safari on iPhone takes a tap in the bottom 44 px for
   its own toolbar, so a bar on the edge could not be tapped (#4025, Discard changes on a phone). */
@media (max-width: 899px) { .form-submit { bottom: var(--submit-lift); border: 1px solid var(--line); border-radius: var(--r-inner); box-shadow: var(--sh-2); } }
@media (min-width: 900px) { .form-submit:has(> .form-actions) { grid-template-columns: minmax(0, 1fr) auto; align-items: center; } }
/* The bar never covers the field it is about: while a bar shows, the page's scroll padding at the bottom is the bar's
   height plus 16 px, so Tab, focus, a hint link or an anchor stops a field above the bar, not under it. --submit-h is the
   tallest bar at that width (measured: 77 px for a one-button bar, 103 px for a phone's sentence over two buttons below
   900 px, 69 px as one row from 900). A sticky bar keeps its own room in the flow, so the form after it (P-13's "How did
   you find us?") needs no extra padding; a bar that is position: fixed (the settings block from 1024 px) does, below. */
:root { --submit-h: 104px; --submit-lift: var(--s-12); }
@media (min-width: 900px) { :root { --submit-h: 80px; --submit-lift: 0px; } }
html:has(.form-submit:not([hidden])) { scroll-padding-bottom: calc(var(--submit-h) + var(--submit-lift) + var(--s-4)); }
.card-raised { box-shadow: var(--sh-2); }
.card-flat { box-shadow: none; background: var(--surface-2); }
a.card { display: block; color: inherit; text-decoration: none;
  transition: box-shadow var(--t-med) var(--ease), border-color var(--t-med) var(--ease), transform var(--t-med) var(--ease); }
a.card:hover { box-shadow: var(--sh-2); border-color: var(--line-2); transform: translateY(-2px); }
.card-title { font: 600 var(--fs-h3)/var(--lh-h3) var(--font-display); letter-spacing: -.01em; }
.card-text { margin-top: 8px; color: var(--fg-2); }
.card-foot { margin-top: 20px; padding-top: 16px; border-top: 1px solid var(--line); }

/* ================================================================ chip and status light */
.chip { display: inline-flex; align-items: center; gap: 6px; min-height: 28px; padding: 0 10px; border-radius: var(--r-pill);
  border: 1px solid var(--line); background: var(--surface-2); color: var(--fg-2); font: 500 13px/1 var(--font-body); white-space: nowrap; }
.chip svg { width: 14px; height: 14px; }
.chip-accent { background: var(--accent-soft); border-color: transparent; color: var(--accent-soft-ink); }
.chip-ok { background: var(--ok-soft); border-color: transparent; color: var(--ok); }
.chip-bad { background: var(--bad-soft); border-color: transparent; color: var(--bad); }
.chip-mono { font-family: var(--font-mono); font-size: 12px; letter-spacing: .02em; }
button.chip { position: relative; min-height: 36px; padding: 0 14px; cursor: pointer; transition: background-color var(--t-fast) var(--ease); }
button.chip::after { content: ""; position: absolute; inset: -4px 0; }
button.chip:hover { background: var(--wash-2); }
button.chip[aria-pressed="true"] { background: var(--fg-1); color: var(--bg); border-color: transparent; }
.status { display: inline-flex; align-items: center; gap: 8px; font: 550 14px/20px var(--font-body); color: var(--fg-1); white-space: nowrap; }
.status::before { content: ""; flex: none; width: 8px; height: 8px; border-radius: 50%; background: var(--off-dot); }
.status[data-tone="ok"]::before { background: var(--ok-dot); box-shadow: 0 0 0 3px color-mix(in srgb, var(--ok-dot) 22%, transparent); }
.status[data-tone="wait"]::before { background: var(--wait-dot); animation: pulse 1.4s ease-in-out infinite; }
.status[data-tone="bad"]::before { background: var(--bad-dot); }
.status[data-tone="info"]::before { background: var(--accent); }
.status-pill { min-height: 28px; padding: 0 12px 0 10px; border-radius: var(--r-pill); background: var(--off-soft); color: var(--off); font-size: 13px; }
.status-pill[data-tone="ok"] { background: var(--ok-soft); color: var(--ok); }
.status-pill[data-tone="wait"] { background: var(--wait-soft); color: var(--wait); }
.status-pill[data-tone="bad"] { background: var(--bad-soft); color: var(--bad); }
.status-pill[data-tone="info"] { background: var(--accent-soft); color: var(--accent-soft-ink); }
.status-float { background: rgb(255 255 255 / .92); color: #16131f; box-shadow: 0 1px 3px rgb(0 0 0 / .18); backdrop-filter: blur(6px); }
@keyframes pulse { 50% { opacity: .35; } }

/* ================================================================ callout, empty state, stat, meter, skeleton */
/* Block flow with the dot positioned, so a sentence with a link or bold word inside stays one paragraph (a grid made each
   inline element its own column). */
.callout { position: relative; display: block; padding: 14px 16px 14px 36px; border-radius: var(--r-inner);
  background: var(--accent-soft); color: var(--fg-1); font: 400 15px/22px var(--font-body); }
.callout::before { content: ""; position: absolute; left: 16px; top: 21px; width: 8px; height: 8px; border-radius: 50%; background: var(--accent); }
.callout[data-tone="ok"] { background: var(--ok-soft); } .callout[data-tone="ok"]::before { background: var(--ok-dot); }
.callout[data-tone="wait"] { background: var(--wait-soft); } .callout[data-tone="wait"]::before { background: var(--wait-dot); }
.callout[data-tone="bad"] { background: var(--bad-soft); } .callout[data-tone="bad"]::before { background: var(--bad-dot); }
.callout strong { font-weight: 600; }
.empty { display: grid; justify-items: center; gap: 8px; padding: 48px 24px; text-align: center; border: 1px dashed var(--line-2);
  border-radius: var(--r-card); background: var(--surface-2); }
.empty-icon { width: 48px; height: 48px; margin-bottom: 8px; color: var(--fg-4); }
.empty .btn { margin-top: 12px; }
.empty nav { margin-top: 8px; }
.empty nav .link-quiet { padding-block: 9px; margin-block: 0; }
.stat { display: grid; gap: 4px; }
.stat-value { font: 650 36px/40px var(--font-display); letter-spacing: -.02em; font-variant-numeric: tabular-nums; }
.stat-note { font: 400 14px/20px var(--font-body); color: var(--fg-3); }
.meter { height: 8px; border-radius: var(--r-pill); background: var(--surface-3); overflow: hidden; }
.meter > span { display: block; height: 100%; width: var(--value, 40%); border-radius: inherit; background: var(--accent);
  transition: width .6s var(--ease); }
/* The waiting bar: a 35% bar slides from off the left edge to off the right. The span stays the size of the box and a
   clip-path cuts the bar out of it, so nothing leaves the box (no scroll width at 375; a translated bar added ~100 px). */
@property --meter-x { syntax: "<number>"; inherits: false; initial-value: 0; }   /* at rest (reduced motion): the bar at the left, as before */
.meter-indeterminate > span { width: 100%; animation: slide 1.4s var(--ease) infinite;
  clip-path: inset(0 calc(max(0, 0.65 - var(--meter-x)) * 100%) 0 calc(max(0, var(--meter-x)) * 100%) round var(--r-pill)); }
@keyframes slide { from { --meter-x: -0.35; } to { --meter-x: 1.015; } }
.meter-0 { --value: 0%; } .meter-2 { --value: 2%; } .meter-5 { --value: 5%; } .meter-6 { --value: 6%; } .meter-20 { --value: 20%; } .meter-24 { --value: 24%; }
.meter-40 { --value: 40%; } .meter-60 { --value: 60%; }
/* A meter over "12 of 50 points" fills from zero (24%; 64 of 1,000 is 6%): the label states a share of the whole, and the
   5% fill from the tier floor read as wrong under it (phone read 10). The points bar under a server's name still fills
   from the tier floor beside "12 points · 38 to Pro". */

/* ================================================================ points bar (P-20) */
/* One slim row under a server's name: tier and points, the meter (filled from the tier floor) and "Read more". The whole
   bar is one button that opens the points dialog. Below 600 px the meter takes its own line under the words. */
.points-bar { display: grid; grid-template-columns: auto minmax(64px, 1fr) auto; align-items: center; gap: 6px 12px;
  width: min(100%, 480px); min-height: 44px; padding: 6px 6px 6px 14px; border: 1px solid var(--line); border-radius: var(--r-pill);
  background: var(--surface); color: var(--fg-1); font: 500 14px/20px var(--font-body); text-align: left; cursor: pointer; }
.points-bar:hover { border-color: var(--line-2); background: var(--surface-2); }
.points-bar .meter { height: 6px; }
.points-bar-more { padding: 6px 8px; color: var(--accent-text); text-decoration: underline; text-decoration-thickness: 1px;
  text-underline-offset: 3px; white-space: nowrap; }
@media (max-width: 599px) {
  .points-bar { grid-template-columns: 1fr auto; border-radius: var(--r-inner); padding: 6px 6px 10px 14px; }
  .points-bar .meter { grid-column: 1 / -1; grid-row: 2; margin-right: 8px; }
}
/* ---------------------------------------------------------------- points bar, ready to claim (a tier the points reached)
   Shown only when GET /points answers claimable (owner-panel.mjs). The words and meter, then "Read more" and "Claim". */
.points-claim { grid-template-columns: auto minmax(64px, 1fr) auto; width: min(100%, 640px); padding-block: 4px; cursor: default;
  border-color: var(--accent-edge); box-shadow: 0 0 0 3px var(--accent-ring); }
.points-claim:hover { border-color: var(--accent-edge); background: var(--surface); }
.points-claim[data-rewarded] { border-color: var(--line); box-shadow: none; }
.points-claim-words { display: inline-flex; align-items: center; gap: 8px; min-width: 0; }
.points-tier { min-height: 24px; padding: 0 9px; font-weight: 650; }
.points-claim-meter { --value: 100%; }
.points-claim-meter > span { transition: width .45s var(--ease); }
.points-claim[data-rewarding] .points-claim-meter > span { background: linear-gradient(90deg, var(--accent) 0 40%, var(--accent-text) 50%, var(--accent) 60% 100%);
  background-size: 300% 100%; animation: reward-shine .8s linear 1; }
.points-claim-actions { display: inline-flex; align-items: center; gap: 4px; justify-self: end; }
.points-claim-actions .points-bar-more { min-height: 36px; cursor: pointer; }
@media (max-width: 599px) {
  .points-claim { grid-template-columns: 1fr; padding: 10px 10px 10px 14px; gap: 10px; }
  .points-claim .meter { grid-column: 1; grid-row: 2; margin-right: 4px; }
  .points-claim-actions { grid-row: 3; justify-self: stretch; justify-content: space-between; }
}

/* ---------------------------------------------------------------- reward moment (assets/reward.mjs)
   The tier chip flips; square pixels and four plus-shaped sparkles burst from it for 1.2 s in the accent violets.
   Under prefers-reduced-motion reward.mjs draws no burst (and the global rule stops every animation). */
.points-tier.is-flipping { animation: reward-flip-out .18s ease-in forwards; }
.points-tier.is-flipped { animation: reward-flip-in .5s var(--ease); }
.reward-burst { position: fixed; z-index: 130; width: 0; height: 0; pointer-events: none; }
.reward-burst > i { position: absolute; left: 0; top: 0; display: block; }
.reward-px { width: var(--s); height: var(--s); margin: calc(var(--s) / -2); background: var(--c); opacity: 0;
  animation: reward-px 1.1s cubic-bezier(.2, .7, .3, 1) var(--d) forwards; }
.reward-spark { width: 4px; height: 4px; margin: -2px; color: var(--accent-text); background: currentColor; opacity: 0;
  box-shadow: 4px 0 currentColor, -4px 0 currentColor, 0 4px currentColor, 0 -4px currentColor;
  animation: reward-spark .7s steps(4, end) var(--d) forwards; }
.reward-ring { width: 16px; height: 16px; margin: -8px; border: 3px solid var(--accent); opacity: 0;
  animation: reward-ring .6s var(--ease) forwards; }
@keyframes reward-px {
  0% { opacity: 1; transform: translate(0, 0) rotate(0); }
  55% { opacity: 1; transform: translate(var(--x), var(--y)) rotate(90deg); }
  100% { opacity: 0; transform: translate(calc(var(--x) * 1.15), calc(var(--y) + 46px)) rotate(180deg); }
}
@keyframes reward-spark { 0% { opacity: 0; transform: translate(var(--x), var(--y)) scale(.5); } 40% { opacity: 1; transform: translate(var(--x), var(--y)) scale(1.25); }
  100% { opacity: 0; transform: translate(var(--x), var(--y)) scale(.5); } }
@keyframes reward-ring { 0% { opacity: .9; transform: scale(.4) rotate(45deg); } 100% { opacity: 0; transform: scale(4.5) rotate(45deg); } }
@keyframes reward-flip-out { to { transform: rotateX(90deg); } }
@keyframes reward-flip-in { 0% { transform: rotateX(-90deg) scale(1); } 60% { transform: rotateX(0) scale(1.18); } 100% { transform: none; } }
@keyframes reward-shine { from { background-position: 100% 0; } to { background-position: 0 0; } }

.skeleton { display: block; height: 14px; border-radius: 6px;
  background: linear-gradient(90deg, var(--surface-3) 0%, var(--surface-2) 50%, var(--surface-3) 100%) 0 0 / 200% 100%;
  animation: shimmer 1.6s linear infinite; }
.skeleton-title { height: 22px; width: 60%; }
.skeleton-line { width: 100%; }
.skeleton-short { width: 40%; }
@keyframes shimmer { from { background-position: 200% 0; } to { background-position: -200% 0; } }
.spinner { display: inline-block; width: 18px; height: 18px; border-radius: 50%; border: 2px solid var(--line-2);
  border-top-color: var(--accent); animation: spin .8s linear infinite; vertical-align: middle; }

/* ================================================================ steps (how it works) and progress steps (building) */
.steps { display: grid; gap: 16px; counter-reset: step; }
@media (min-width: 900px) { .steps { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; } }
.step { position: relative; display: grid; gap: 16px; align-content: start; padding: 24px; border: 1px solid var(--line);
  border-radius: var(--r-card); background: var(--surface); box-shadow: var(--sh-1); counter-increment: step;
  font: 500 18px/28px var(--font-body); color: var(--fg-1); }
.step::before { content: "0" counter(step); display: grid; place-items: center; width: 40px; height: 40px; border-radius: 12px;
  background: var(--accent-soft); color: var(--accent-soft-ink); font: 500 14px/1 var(--font-mono); }
.progress-steps { display: grid; gap: 4px; }
.progress-steps li { display: grid; grid-template-columns: 28px 1fr; gap: 12px; align-items: center; min-height: 44px; color: var(--fg-3); }
.progress-steps li::before { content: ""; justify-self: center; width: 10px; height: 10px; border-radius: 50%; border: 2px solid var(--line-2); }
.progress-steps li[data-state="done"] { color: var(--fg-2); }
.progress-steps li[data-state="done"]::before { width: 22px; height: 22px; border: 0; background: var(--ok-soft); color: var(--ok);
  content: "✓"; display: grid; place-items: center; font: 700 13px/1 var(--font-body); }
.progress-steps li[data-state="current"] { color: var(--fg-1); font-weight: 550; }
.progress-steps li[data-state="current"]::before { width: 18px; height: 18px; border-color: var(--line-2); border-top-color: var(--accent);
  animation: spin .8s linear infinite; }
/* A rung with a line under its name (P-24's tier ladder: the tier, then its perks): the dot sits on the name's 44 px line. */
.progress-steps li:has(> .stack) { align-items: start; }
.progress-steps li > .stack { gap: 0; padding-bottom: 8px; }
.progress-steps li > .stack > .cluster:first-child { min-height: 44px; }
.progress-steps li:has(> .stack)::before { margin-top: 11px; }
.progress-steps li[data-state="current"]:has(> .stack)::before { margin-top: 13px; }
.progress-steps li[data-state="todo"]:has(> .stack)::before { margin-top: 17px; }

/* ================================================================ FAQ */
.faq { border-top: 1px solid var(--line); max-width: 860px; }
.faq details { border-bottom: 1px solid var(--line); }
.faq summary { display: flex; align-items: center; justify-content: space-between; gap: 24px; min-height: 64px; padding: 16px 0;
  list-style: none; cursor: pointer; font: 600 19px/26px var(--font-display); letter-spacing: -.01em; border-radius: 4px; }
.faq summary::-webkit-details-marker { display: none; }
.faq summary::after { content: ""; flex: none; width: 28px; height: 28px; border-radius: 50%; background:
  linear-gradient(var(--fg-2), var(--fg-2)) center / 12px 2px no-repeat,
  linear-gradient(var(--fg-2), var(--fg-2)) center / 2px 12px no-repeat, var(--surface-3);
  transition: transform var(--t-med) var(--ease), background-color var(--t-fast); }
.faq summary:hover::after { background-color: var(--line-2); }
.faq details[open] summary::after { transform: rotate(45deg); }
.faq .faq-a { padding: 0 52px 24px 0; color: var(--fg-2); max-width: calc(520px + 52px); }   /* 520 px of text: at most about 75 characters a line at 16 px */

/* ================================================================ address row, Add to Minecraft, QR */
.addr-label { margin-bottom: 8px; }
/* One address: edition over the host on the left, Copy on the right. Hosts carry <wbr> after each dot so a phone breaks them there. */
.addr { display: grid; grid-template-columns: minmax(0, 1fr) auto; align-items: center; gap: 12px; min-height: 60px;
  padding: 8px 8px 8px 14px; border: 1px solid var(--line); border-radius: var(--r-control); background: var(--surface-2); }
.addr + .addr { margin-top: 8px; }
.addr-main { display: grid; gap: 2px; min-width: 0; }
.addr-ed { font: 500 12px/16px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; color: var(--fg-3); }
.addr-host { font: 500 15px/22px var(--font-mono); color: var(--fg-1); min-width: 0; overflow-wrap: anywhere; }
/* The Bedrock port sits on its own line under the host with its label ("Port: 19132"), so at 375 it never wraps into
   the host and reads as part of the address (stranger run 7). */
.addr-port { font: 500 13px/18px var(--font-mono); color: var(--fg-3); white-space: nowrap; }
.addr-actions { display: flex; gap: 6px; }
/* Two actions beside a long link (Copy link + QR) leave the link a few characters a line on a phone: stack them under it. */
@media (max-width: 479px) {
  .addr:has(.addr-actions > :nth-child(2)) { grid-template-columns: minmax(0, 1fr); padding: 12px; }
}
.addr-add { margin-top: 12px; }
/* The host text copies too: in build-page recordings owners tapped the address text, not Copy (3 of 40 against 2 that used Copy). */
.addr:has([data-copy]) .addr-host { cursor: pointer; }
.how-join { margin-top: 20px; }
.how-steps { margin: 6px 0 0; padding-left: 22px; display: grid; gap: 4px; font: 400 15px/22px var(--font-body); color: var(--fg-2); }
.addr-note { margin-top: 8px; font: 400 13px/18px var(--font-body); color: var(--fg-3); }
.qr { display: grid; place-items: center; gap: 8px; width: 148px; padding: 14px; border: 1px dashed var(--line-2); border-radius: var(--r-inner);
  background: var(--surface); color: var(--fg-1); text-align: center; }
.qr svg { width: 100%; height: auto; }
.qr-caption { font: 500 12px/16px var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--fg-3); }

/* ================================================================ player heads */
.heads { display: inline-flex; align-items: center; }
.heads i { width: 26px; height: 26px; border-radius: 7px; border: 2px solid var(--surface); background: var(--head-1);
  box-shadow: inset 0 -6px 0 rgb(0 0 0 / .14); }
.heads i + i { margin-left: -7px; }
.heads i:nth-child(2) { background: var(--head-2); } .heads i:nth-child(3) { background: var(--head-3); } .heads i:nth-child(4) { background: var(--head-4); }
.heads-off i { filter: grayscale(1); opacity: .55; }
.heads-lg i { width: 34px; height: 34px; border-radius: 9px; }

/* ================================================================ server card */
.server { overflow: hidden; padding: 0; }
.server-media { position: relative; aspect-ratio: 2 / 1; background: var(--surface-3); }
.server-media img { width: 100%; height: 100%; object-fit: cover; }
.server-media .status-pill { position: absolute; left: 14px; top: 14px; }
.server-body { padding: 20px; display: grid; gap: 16px; }
@media (min-width: 600px) { .server-body { padding: 24px; } }
.server-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 12px; flex-wrap: wrap; }
.server-name { font: 650 22px/28px var(--font-display); letter-spacing: -.015em; }
.server-meta { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 6px; }
.server-players { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding-top: 16px; border-top: 1px solid var(--line); }
.server-caption { padding: 12px 20px; border-top: 1px solid var(--line); background: var(--surface-2); font: 500 12px/16px var(--font-mono);
  letter-spacing: .04em; color: var(--fg-3); }

/* ================================================================ tabs */
.tabs { display: flex; gap: 4px; border-bottom: 1px solid var(--line); overflow-x: auto; scrollbar-width: none; }
.tabs::-webkit-scrollbar { display: none; }
.tab { position: relative; min-height: 44px; padding: 0 14px; border: 0; background: none; color: var(--fg-3);
  font: 550 15px/1 var(--font-body); white-space: nowrap; border-radius: 8px 8px 0 0; transition: color var(--t-fast) var(--ease); }
.tab:hover { color: var(--fg-1); }
.tab[aria-selected="true"] { color: var(--fg-1); }
.tab[aria-selected="true"]::after { content: ""; position: absolute; left: 10px; right: 10px; bottom: -1px; height: 2px; border-radius: 2px; background: var(--accent); }
.tab-panel { padding-top: 24px; }
/* Below 400 px the tabs wrap into two rows, like a .cluster, instead of scrolling under a fade: P-41's four tabs
   (Overview · Links · Players · Money; pt-BR Visão geral · Links · Jogadores · Dinheiro) need 376 px and a 375 phone has 343
   ("Dinhe…" ended under the fade, read at round 6). Every tab is on screen, so no fade. */
@media (max-width: 399px) {
  .tabs { flex-wrap: wrap; overflow: visible; }
  .tab { padding: 0 9px; } /* round 18: four tabs fit 343 px on one row (pt-BR "Dinheiro" fell to a second row) */
  .tabs[data-more] { -webkit-mask-image: none; mask-image: none; }
}
.tab-panel:focus-visible { outline-offset: 4px; }
/* A field label with a Skip button beside it: the label text wraps, the button stays on the first row (pt-BR P-13 at 375). */
.field > .cluster:has(> .field-label + .btn) { flex-wrap: nowrap; justify-content: space-between; }
.field > .cluster:has(> .field-label + .btn) > .field-label { flex: 1 1 auto; min-width: 0; }
/* A row of section buttons that never wraps (server links, settings sections): it scrolls sideways on a phone.
   v2.mjs sets data-more="end|start|both" on .tabs and .scroll-row while part of the row is out of view, and the hidden
   side fades out, so the cut last button reads as "more this way". */
.scroll-row { display: flex; gap: 8px; overflow-x: auto; scrollbar-width: none; scroll-snap-type: x proximity; }
.scroll-row::-webkit-scrollbar { display: none; }
.scroll-row > * { flex: none; scroll-snap-align: start; }
/* From 1024 px the row wraps into lines instead of scrolling: every section button is on screen (P-22's eight buttons were
   clipped at "Dat…" in a 640 px strip). No fade, since nothing is out of view. */
@media (min-width: 1024px) {
  .scroll-row { flex-wrap: wrap; overflow: visible; scroll-snap-type: none; }
  .scroll-row[data-more] { -webkit-mask-image: none; mask-image: none; }
}
[data-more="end"] { -webkit-mask-image: linear-gradient(to right, #000 calc(100% - 48px), transparent); mask-image: linear-gradient(to right, #000 calc(100% - 48px), transparent); }
[data-more="start"] { -webkit-mask-image: linear-gradient(to left, #000 calc(100% - 48px), transparent); mask-image: linear-gradient(to left, #000 calc(100% - 48px), transparent); }
[data-more="both"] { -webkit-mask-image: linear-gradient(to right, transparent, #000 48px, #000 calc(100% - 48px), transparent); mask-image: linear-gradient(to right, transparent, #000 48px, #000 calc(100% - 48px), transparent); }
/* Segmented: two to four options in a pill (Java / Bedrock). */
.segmented { display: inline-flex; padding: 4px; gap: 2px; border-radius: var(--r-pill); background: var(--surface-3); }
.segmented button { min-height: 36px; padding: 0 16px; border: 0; border-radius: var(--r-pill); background: transparent; color: var(--fg-2);
  font: 550 14px/1 var(--font-body); position: relative; transition: background-color var(--t-fast), color var(--t-fast); }
.segmented button::after { content: ""; position: absolute; inset: -4px 0; }
.segmented button[aria-pressed="true"], .segmented button[aria-selected="true"] { background: var(--surface); color: var(--fg-1); box-shadow: var(--sh-1); }

/* ================================================================ table, cards on phones */
.table-wrap { border: 1px solid var(--line); border-radius: var(--r-card); background: var(--surface); box-shadow: var(--sh-1); overflow: hidden; }
.table { width: 100%; border-collapse: collapse; font: 400 15px/22px var(--font-body); }
.table th { padding: 12px 16px; text-align: left; font: 500 12px/16px var(--font-mono); letter-spacing: .06em; text-transform: uppercase;
  color: var(--fg-3); background: var(--surface-2); border-bottom: 1px solid var(--line); }
.table td { padding: 14px 16px; border-bottom: 1px solid var(--line); vertical-align: middle; }
.table tbody tr:last-child td { border-bottom: 0; }
.table tbody tr:hover td { background: var(--surface-2); }
.table .num { text-align: right; font-variant-numeric: tabular-nums; }
@media (max-width: 719px) {
  .table-wrap { border: 0; background: none; box-shadow: none; overflow: visible; border-radius: 0; }
  .table thead { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); }
  .table, .table tbody, .table tr, .table td { display: block; }
  .table tr { margin-bottom: 12px; padding: 8px 16px; border: 1px solid var(--line); border-radius: var(--r-inner);
    background: var(--surface); box-shadow: var(--sh-1); }
  /* minmax(0, 1fr) and a chip that may wrap: a long added name ("Waiting for Sample_Friend16 to join") widened the card
     past the page's gutter at 375 (phone read 10). */
  .table td { display: grid; grid-template-columns: minmax(96px, 38%) minmax(0, 1fr); gap: 12px; padding: 10px 0; border-bottom: 1px solid var(--line); }
  .table td .chip { white-space: normal; max-width: 100%; padding-block: 5px; line-height: 18px; }
  .table td > * { justify-self: start; }
  .table td::before { content: attr(data-label); font: 500 12px/22px var(--font-mono); letter-spacing: .04em; text-transform: uppercase; color: var(--fg-3); }
  .table tbody tr:hover td { background: none; }
  .table .num { text-align: left; }
  .table td:last-child { border-bottom: 0; }
  .table thead tr, .table thead th { display: block; padding: 0; } /* the hidden header takes no width */
}

/* ================================================================ toast */
.toasts { position: fixed; left: 50%; bottom: calc(24px + env(safe-area-inset-bottom)); z-index: 120; display: grid; gap: 8px;
  justify-items: center; width: max-content; max-width: calc(100vw - 32px); transform: translateX(-50%); pointer-events: none; }
.toast { display: flex; align-items: center; gap: 10px; min-height: 48px; padding: 12px 18px 12px 14px; border-radius: var(--r-inner);
  background: var(--fg-1); color: var(--bg); box-shadow: var(--sh-3); font: 500 15px/20px var(--font-body);
  animation: toast-in .2s var(--ease); pointer-events: auto; }
.toast::before { content: "✓"; display: grid; place-items: center; width: 22px; height: 22px; flex: none; border-radius: 50%;
  background: var(--ok-dot); color: #fff; font: 700 12px/1 var(--font-body); }
.toast[data-tone="bad"]::before { content: "!"; background: var(--bad-dot); }
.toast[data-tone="info"]::before { content: "i"; background: var(--accent); color: var(--on-accent); }
.toast.is-leaving { animation: toast-out .16s var(--ease) forwards; }
.toasts[popover] { inset: auto auto calc(24px + env(safe-area-inset-bottom)) 50%; margin: 0; padding: 0; border: 0; background: none; overflow: visible; color: inherit; }
.toasts[data-at="top"] { top: calc(16px + env(safe-area-inset-top)); bottom: auto; }
@keyframes toast-in { from { opacity: 0; transform: translateY(8px) scale(.96); } }
@keyframes toast-out { to { opacity: 0; transform: translateY(4px) scale(.98); } }

/* ================================================================ dialog and sheet (native <dialog>) */
.dialog { width: min(520px, calc(100vw - 32px)); max-height: calc(100dvh - 48px); padding: 0; border: 0; border-radius: var(--r-dialog);
  background: var(--surface); color: var(--fg-1); box-shadow: var(--sh-3); overflow: auto; }
.dialog::backdrop { background: var(--scrim); backdrop-filter: blur(2px); }
.dialog[open] { animation: dialog-in .22s var(--ease); }
.dialog[open]::backdrop { animation: fade-in .22s var(--ease); }
@keyframes dialog-in { from { opacity: 0; transform: translateY(8px); } }   /* no scale: the 44 px buttons stay 44 while it opens */
@keyframes fade-in { from { opacity: 0; } }
.dialog-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; padding: 24px 24px 0; }
.dialog-title { font: 650 24px/30px var(--font-display); letter-spacing: -.015em; }
.dialog-body { padding: 12px 24px 24px; color: var(--fg-2); display: grid; gap: 16px; }
.dialog-foot { display: flex; flex-wrap: wrap; justify-content: flex-end; gap: 12px; padding: 16px 24px 24px; border-top: 1px solid var(--line); }
.dialog-close { margin: -6px -10px 0 0; }
.dialog-close svg { width: 18px; height: 18px; }
/* On phones a dialog marked .sheet rises from the bottom, full width, thumb-reachable. */
@media (max-width: 599px) {
  .dialog.sheet { width: 100%; max-width: 100%; margin: auto 0 0; border-radius: var(--r-dialog) var(--r-dialog) 0 0;
    padding-bottom: env(safe-area-inset-bottom); max-height: 92dvh; }
  .dialog.sheet[open] { animation: sheet-in .28s var(--ease); }
  .dialog.sheet::before { content: ""; display: block; width: 40px; height: 4px; margin: 10px auto 0; border-radius: 4px; background: var(--line-2); }
  .dialog-foot { flex-direction: column-reverse; }
  .dialog-foot .btn { width: 100%; }
}
@keyframes sheet-in { from { transform: translateY(40px); opacity: .4; } }
/* A sheet holding a wide table (P-24 tiers): up to 880 px from 900 px, so no column breaks one word per line. */
@media (min-width: 900px) { .dialog.sheet-wide { width: min(880px, calc(100vw - 64px)); } }

/* ================================================================ nav */
.brand { display: inline-flex; align-items: center; gap: 10px; min-height: 44px; color: var(--fg-1); text-decoration: none;
  font: 700 19px/1 var(--font-display); letter-spacing: -.02em; border-radius: 8px; }
.brand-mark { width: 28px; height: 28px; flex: none; }
.nav { position: sticky; top: 0; z-index: 50; background: var(--nav-bg); backdrop-filter: saturate(1.4) blur(16px);
  -webkit-backdrop-filter: saturate(1.4) blur(16px); border-bottom: 1px solid var(--line); }
.nav-row { display: flex; align-items: center; gap: 8px; height: var(--nav-h); }
.nav-links { display: none; align-items: center; gap: 2px; margin-left: 24px; }
.nav-link { display: inline-flex; align-items: center; min-height: 44px; padding: 0 12px; border-radius: 10px; color: var(--fg-2);
  text-decoration: none; font: 500 15px/1 var(--font-body); transition: background-color var(--t-fast), color var(--t-fast); }
.nav-link:hover { background: var(--wash); color: var(--fg-1); }
.nav-link[aria-current="page"] { color: var(--fg-1); }
.nav-end { display: flex; align-items: center; gap: 4px; margin-left: auto; }
.nav-lang, .nav-signout { display: none; }
@media (max-width: 359px) { .nav-account { display: none; } }   /* 320 px: the signed-in row overflowed; the menu carries "Your servers" */
@media (min-width: 360px) and (max-width: 374px) { .nav-account { padding-inline: 8px; } }   /* 360 px: pt-BR "Seus servidores" + Menu ran 7 px past the edge */
.nav-menu-btn svg { width: 22px; height: 22px; }
@media (min-width: 900px) {
  .nav-links { display: flex; }
  .nav-lang, .nav-signout { display: inline-flex; }
  .nav-menu-btn { display: none; }
}
.menu-list { display: grid; gap: 2px; margin: 0 -8px; }
.menu-list a { display: flex; align-items: center; min-height: 52px; padding: 0 12px; border-radius: 12px; color: var(--fg-1);
  text-decoration: none; font: 550 18px/1 var(--font-body); }
.menu-list a:hover { background: var(--wash); }
.menu-list hr { border: 0; border-top: 1px solid var(--line); margin: 8px 12px; }

/* ================================================================ footer */
.footer { background: var(--bg-2); border-top: 1px solid var(--line); padding: 64px 0 calc(32px + env(safe-area-inset-bottom)); color: var(--fg-2); }
.footer-grid { display: grid; gap: 40px; }
@media (min-width: 768px) { .footer-grid { grid-template-columns: 1.4fr repeat(3, 1fr); gap: 32px; } }
.footer-tag { margin-top: 12px; max-width: 280px; font: 400 15px/22px var(--font-body); color: var(--fg-3); }
.footer-col h2 { margin-bottom: 8px; font: 500 12px/16px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; color: var(--fg-3); }
.footer-col ul { display: grid; list-style: none; margin: 0; padding: 0; }
.footer-col a { display: inline-flex; align-items: center; min-height: 44px; padding-inline: 4px; margin-inline: -4px; overflow-wrap: anywhere; color: var(--fg-1); text-decoration: none; font: 400 15px/20px var(--font-body); }
.footer-col a:hover { text-decoration: underline; text-underline-offset: 3px; }
@media (max-width: 767px) {
  .footer-cols { display: grid; grid-template-columns: minmax(0, 1fr) minmax(0, 1.3fr); gap: 32px 12px; /* the Help column holds the support address on one line at 390 */ }
  .footer-col a { min-height: 44px; }
  .footer-col a[href^="mailto"] { font-size: 13px; letter-spacing: -.01em; } /* support@shulkerboxes.com on one line in a 187 px column */
}
@media (min-width: 768px) { .footer-cols { display: contents; } }
.footer-fine { display: grid; gap: 8px; margin-top: 48px; padding-top: 24px; border-top: 1px solid var(--line);
  font: 400 13px/20px var(--font-body); color: var(--fg-3); }
.footer-fine a { color: inherit; }
.footer-fine-row a { position: relative; }   /* its 44 px tap area paints over the next fine line */
.footer-fine-row { display: flex; flex-wrap: wrap; justify-content: space-between; gap: 8px 24px; }

/* ================================================================ home page */
.hero { padding: 40px 0 64px; }
@media (min-width: 900px) { .hero { padding: 72px 0 96px; } }
.hero-grid { display: grid; gap: 48px; align-items: center; }
@media (min-width: 1000px) { .hero-grid { grid-template-columns: minmax(0, 1.08fr) minmax(0, .92fr); gap: 64px; } }
.hero-copy { display: grid; gap: 24px; justify-items: start; }
.hero-lede { display: grid; gap: 4px; }
.hero-facts { display: grid; gap: 10px; margin-top: 4px; }
.hero-facts li { display: flex; align-items: flex-start; gap: 10px; font: 500 16px/24px var(--font-body); color: var(--fg-2); }
.hero-facts-lede li { font: 400 var(--fs-lede)/var(--lh-lede) var(--font-body); }   /* answers that stand in for the lede (P-02) */
.fact-icon { flex: none; width: 20px; height: 20px; margin-top: 2px; }
.fact-bg { fill: var(--accent-soft); }
.fact-check { fill: none; stroke: var(--accent); stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; }
.hero-act { display: grid; gap: 14px; justify-items: start; margin-top: 8px; }
.hero-act .t-small a, .hero-act .t-small button { color: var(--fg-1); }
.hero-card { width: 100%; max-width: 560px; justify-self: center; }
.hero-lede .t-lede { max-width: 62ch; }
@media (min-width: 1000px) { .hero-card { justify-self: end; } }
/* the home hero is one composition from 1000 px: the copy is centred against the sample card, the card's picture is a
   wide strip so the card stands near the copy's height, and the copy's blocks keep one even step */
@media (min-width: 1000px) {
  .hero-card.server .server-media { aspect-ratio: 5 / 2; overflow: hidden; }
  .hero-card.server .server-media > picture { display: block; height: 100%; }
  .hero-grid:has(> .hero-card.server) .hero-copy { gap: 32px; }
  .hero-grid:has(> .hero-card.server) :is(.hero-facts, .hero-act) { margin-top: 0; }
}
/* short screens (1280×720, 1366×768): less air above the hero and a lower picture strip, so the card and "Claim yours now" end on the first screen */
@media (min-width: 900px) and (max-height: 800px) { .hero { padding-top: 40px; } }
@media (min-width: 1000px) and (max-height: 800px) { .hero-card.server .server-media { aspect-ratio: 3 / 1; } }
/* the home's hero fills the first screen from 900 px, copy and picture centred in it, so the tiers heading waits below the
   fold until the reader scrolls; Claim stays on the first screen (Keiden 2026-10-14) */
@media (min-width: 900px) { .hero:has(+ #points) { display: grid; align-content: center;
  min-height: calc(100svh - var(--nav-h)); padding-block: 32px; } }
.idea { display: grid; gap: 32px; align-items: center; }
.idea + .idea { margin-top: 64px; }
@media (min-width: 900px) {
  .idea { grid-template-columns: minmax(0, 1fr) minmax(0, 1fr); gap: 80px; }
  .idea + .idea { margin-top: 96px; }
  .idea:nth-child(even) .idea-visual { order: -1; }
}
.idea-copy { display: grid; gap: 12px; max-width: 520px; }
.idea-copy .t-lede { color: var(--fg-2); }
.idea-visual { display: grid; place-items: center; min-height: 300px; padding: 40px 24px; border-radius: 28px; background: var(--bg-2);
  border: 1px solid var(--line); }
.section-alt .idea-visual { background: var(--bg); }
.vignette { width: 100%; max-width: 400px; display: grid; gap: 12px; }
.vrow { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px 14px; border-radius: var(--r-inner);
  background: var(--surface); border: 1px solid var(--line); box-shadow: var(--sh-1); }
.vrow-who { display: flex; align-items: center; gap: 10px; font: 550 15px/20px var(--font-body); }
.vrow-dim { opacity: .62; }
.mc { width: 100%; max-width: 400px; padding: 18px; border-radius: 6px; background: #2b2b2f; color: #f2f2f2;
  box-shadow: inset 0 0 0 2px #0e0e10, inset 0 0 0 4px #4a4a50, var(--sh-2); font: 500 13px/18px var(--font-mono); }
.mc-title { text-align: center; margin-bottom: 14px; }
.mc-label { color: #a8a8ad; margin: 10px 0 6px; }
.mc-field { padding: 9px 10px; background: #000; border: 2px solid #a0a0a0; color: #fff; overflow-wrap: anywhere; }
.mc-btn { margin-top: 16px; padding: 9px; text-align: center; background: #6b6b70; box-shadow: inset 0 0 0 2px #1a1a1d, inset 2px 2px 0 2px #9a9a9f; }
.file-row { display: grid; grid-template-columns: auto 1fr auto; align-items: center; gap: 12px; }
.file-icon { width: 40px; height: 40px; border-radius: 10px; display: grid; place-items: center; background: var(--accent-soft); color: var(--accent-soft-ink); }
.file-icon svg { width: 20px; height: 20px; }
.file-name { font: 500 14px/20px var(--font-mono); overflow-wrap: anywhere; }
.grow { display: grid; gap: 10px; }
.grow-scale { display: flex; justify-content: space-between; font: 500 12px/16px var(--font-mono); color: var(--fg-3); }
.grow .meter { height: 14px; }
.grow .meter > span { background: linear-gradient(90deg, var(--accent-soft) 0%, var(--accent) 100%); }
.grow-bars { display: flex; align-items: flex-end; gap: 8px; height: 96px; }
.grow-bars i { flex: 1; border-radius: 6px 6px 3px 3px; background: var(--accent); opacity: .25; }
.grow-bars i:nth-child(1) { height: 22%; } .grow-bars i:nth-child(2) { height: 34%; opacity: .35; } .grow-bars i:nth-child(3) { height: 48%; opacity: .5; }
.grow-bars i:nth-child(4) { height: 66%; opacity: .7; } .grow-bars i:nth-child(5) { height: 100%; opacity: 1; }
.cta-band { display: grid; gap: 24px; justify-items: start; padding: 40px 24px; border-radius: 28px; background: var(--accent-soft); }
@media (min-width: 900px) { .cta-band { grid-template-columns: 1fr auto; align-items: center; padding: 56px 64px; } }
.cta-band .t-h2 { max-width: 16ch; }

/* ================================================================ desktop layouts (1024 px and up; phones unchanged)
   Settings variants P-22 A and B (since 2026-10-14 P-22 itself uses the settings block below; any page whose groups block
   is [data-fb="groups"] after a .wrap-prose head): the
   head and the groups open to the wrap width and the cards flow down two balanced CSS columns (multicol, not a row grid:
   in a row grid a short card beside a tall one leaves up to 700 px blank). A card never splits; whatever is not a card
   (the sample line) spans both columns, so the last card (Delete server) stands alone after it, as on a phone.
   The unsaved-changes bar is position: fixed here, not sticky: sticky on a column-span box inside multicol is fine in
   Chrome but not something to rely on in Safari and Firefox (variants P-22 A/B RATIONALE), and fixed is the same in all
   three. It sits on the screen's bottom edge over the wrap width; the footer's 88 px foot room keeps its last line clear. */
@media (min-width: 1024px) {
  .wrap-prose:has(+ [data-fb="groups"]), [data-fb="groups"] { max-width: calc(var(--wrap) + 2 * var(--gutter)); }
  [data-fb="groups"] { display: block; columns: 2; column-gap: var(--s-6); padding-inline: var(--gutter); }
  [data-fb="groups"] > * { break-inside: avoid; }
  [data-fb="groups"] > * + * { margin-top: var(--s-6); }
  [data-fb="groups"] > :not(section) { column-span: all; }
  [data-fb="groups"] > .form-submit { position: fixed; z-index: 40; bottom: 0; inset-inline: max(0px, calc(50% - var(--wrap) / 2 - var(--gutter)));
    margin: 0; padding-inline: var(--gutter); border: 1px solid var(--line); border-bottom: 0;
    border-radius: var(--r-inner) var(--r-inner) 0 0; box-shadow: var(--sh-2); }
  [data-fb="groups"]:has(> .form-submit:not([hidden])) { padding-bottom: calc(var(--submit-h) + var(--s-4)); }
}
/* Contents rail (opt-in): class="toc-rail" on a Contents <nav> that is a child of the <article> itself, or of the one block
   that holds the whole article (P-31's .stack), never inside a <details> or the header block: sticky only travels inside
   its parent. From 1180 px it floats into the left gutter beside
   the 560 px reading column and stays under the nav while the article scrolls, ending with the article; below 1180 it is
   hidden, so the page keeps its "Contents" disclosure for phones and marks that wrapper class="toc-disclosure" (hidden
   from 1180); only one of the two navs renders at any width, so readers and screen readers meet one Contents. A full-width
   table in the article slides over the rail on its opaque card while it scrolls by (P-31). */
@media (max-width: 1179px) { .toc-rail { display: none; } }
@media (min-width: 1180px) {
  .toc-disclosure { display: none; }
  .toc-rail { float: left; position: sticky; top: calc(var(--nav-h) + var(--s-6)); z-index: 1; display: grid; gap: 2px;
    width: min(240px, calc((100% - var(--prose)) / 2 - 2 * var(--gutter)));
    margin-left: max(var(--gutter), calc(50% - var(--prose) / 2 - var(--gutter) - min(240px, calc((100% - var(--prose)) / 2 - 2 * var(--gutter)))));
    max-height: calc(100vh - var(--nav-h) - var(--s-12)); overflow-y: auto; }
  .toc-rail a { display: block; padding: 6px 12px; border-radius: 8px; color: var(--fg-2); text-decoration: none; font: 500 14px/20px var(--font-body); }
  .toc-rail a:hover { background: var(--wash); color: var(--fg-1); }
  .toc-rail ~ * .table-wrap { position: relative; z-index: 2; }   /* the table's card passes over the rail, not under its words */
}

/* Phone-only and desktop-only parts (opt-in classes): .phone-only shows below 600 px and is gone from 600; .desktop-only is
   the reverse. For a part that only makes sense on one kind of screen, such as Add to Minecraft on P-14 and P-20 (the
   minecraft:// link adds the server in Bedrock on the phone in your hand; on a computer it does nothing and the address
   with Copy is the path), so it never sits there as a dead button. */
@media (min-width: 600px) { .phone-only { display: none !important; } }
@media (max-width: 599px) { .desktop-only { display: none !important; } }
/* The Java and Bedrock addresses: on a phone Bedrock (and its port) comes first, Java second; on a computer Java first. A phone
   plays Bedrock: on phones where the owner copied only the Java address, 16 of 29 servers stayed empty (55% against 26%; 10-20 to 10-22). */
@media (max-width: 599px) {
  .addr-pair { display: flex; flex-direction: column-reverse; gap: 8px; }
  .addr-pair.stack { gap: var(--stack, 16px); }
  .addr-pair > * { margin-top: 0; }
}


/* ================================================================ phone tap targets (last, so they win over each component's own height) */
/* Phones and tablets: every small control is a real 44 px box (a 36 px box with an invisible margin still reads as small and
   lets a thumb land between two rows). 36 stays for the desktop pointer. */
@media (max-width: 899px) {
  .btn-sm, button.chip, a.chip, .segmented button { min-height: 44px; }
  .btn-icon.btn-sm { min-width: 44px; }
}

/* ================================================================ reduced motion: no movement anywhere */
@media (prefers-reduced-motion: reduce) {
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; transition-duration: .001ms !important; scroll-behavior: auto !important; }
  .status[data-tone="wait"]::before { animation: none; opacity: 1; }
  .skeleton { animation: none; }
}

/* A log inside a .scroll-row keeps its own horizontal scroll at every width (P-27 Console, P-34 Files): long lines must not widen the page. */
.scroll-row > pre { overflow-x: auto; max-width: 100%; white-space: pre-wrap; overflow-wrap: anywhere; }
@media (min-width: 1024px) { .scroll-row:has(> pre) { overflow-x: auto; } }

/* Panel cards (2026-10-14, Scaling's polish notes): lists inside cards drop the browser indent; a card head keeps its right group
   on one row under 480 px; a foot or divider inside a .stack does not stack its margin on the gap. */
.card ul.kv, .card ul.list-tight { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; }
.card > .hint-row, .card > .cluster.card-head { flex-wrap: nowrap; align-items: center; justify-content: space-between; gap: 8px; }
.card > .cluster.card-head > .cluster { flex-wrap: nowrap; }
.stack > .card-foot, .stack > hr.divider { margin-top: 0; margin-bottom: 0; }

/* ================================================================ tier cards (the home Points band and P-24 Upgrade; the mock's P-06 A cards) */
.tier-cards { display: grid; gap: 16px; }
@media (min-width: 600px) and (max-width: 1023px) { .tier-cards { grid-template-columns: repeat(2, minmax(0, 1fr)); } }
@media (min-width: 1024px) { .tier-cards { grid-template-columns: repeat(4, minmax(0, 1fr)); gap: 20px; } }
.tier-card { display: flex; flex-direction: column; gap: 14px; border-top: 4px solid var(--accent); }
.tier-card[data-tier="free"] { border-top-color: var(--line-2); }
.tier-name { font: 600 22px/28px var(--font-display); letter-spacing: -.01em; }
.tier-mem { font: 650 44px/48px var(--font-display); letter-spacing: -.02em; color: var(--accent-text); font-variant-numeric: tabular-nums; margin-top: -8px; }
.tier-mem-text { font: 600 20px/28px var(--font-display); color: var(--fg-1); margin-top: -4px; min-height: 48px; display: flex; align-items: center; }
.tier-ways { display: grid; gap: 10px; padding: 14px; border-radius: var(--r-inner); background: var(--surface-2); border: 1px solid var(--line); }
.tier-way { display: grid; gap: 6px; }
.tier-way-label { font: 500 12px/16px var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--fg-3); }
.tier-pts { font: 600 18px/24px var(--font-display); font-variant-numeric: tabular-nums; }
.tier-free { font: 600 18px/24px var(--font-display); }
.tier-or { display: flex; align-items: center; gap: 10px; font: 500 12px/16px var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--fg-3); }
.tier-or::before, .tier-or::after { content: ""; flex: 1; height: 1px; background: var(--line-2); }
.tier-feats { display: grid; gap: 8px; font: 400 15px/22px var(--font-body); color: var(--fg-2); }
.tier-feats li { display: flex; gap: 10px; align-items: flex-start; }
.tier-card .card-foot { margin-top: auto; }
.tier-card[data-gift] { order: -1; box-shadow: 0 0 0 3px var(--accent); }
.tier-card .gift-badge { align-self: flex-start; }
.tier-card[data-gift] s .chip { opacity: .6; text-decoration: line-through; margin-right: 6px; }
.gift-tiers .tier-cards { grid-template-columns: minmax(0, 1fr); }
.gift-tiers .tier-card:not([data-gift]), .gift-tiers .card-foot { display: none; }
.tier-rule { font-weight: 600; }

/* Keiden (2026-10-13 21:3x PT): no meter on each card; the owner's points sit once, top right of the section head. */
#points > .wrap { position: relative; }
.tier-points { margin: 0; }
@media (min-width: 720px) { .tier-points { position: absolute; top: 0; right: 0; } }

/* ================================================================ settings (P-22 and its pt-BR twin, 2026-10-14)
   Apex-simple: a section list (General · Players · World · Advanced · Danger), one card per section, one Save bar.
   Markup: .wrap.settings > .settings-head (breadcrumb, H1, state pill with Restart and Stop, status line),
   nav.scroll-row.settings-nav (one .btn-sm link per card), .settings-cards (the cards, then the .form-submit bar).
   Below 900 px the list is the .scroll-row of pills under the head and the page is one 640 px column. From 900 px the
   list is a sticky side list (plain rows, no pill chrome) beside the cards. The Save bar is the last child of the cards
   column and sticks to the screen's bottom edge at every width while the column is in view (sticky in a plain grid
   column, no multicol, so Safari and Firefox behave as Chrome). The Danger card is quiet: flat, one link. */
.settings { display: grid; grid-template-columns: minmax(0, 1fr); gap: var(--s-6); max-width: calc(var(--column) + 2 * var(--gutter)); }
.settings-cards { --stack: var(--s-6); grid-template-columns: minmax(0, 1fr); }
/* The invite's join link and addresses have no space to break at: they break anywhere, so a long address never widens the
   card past a phone's edge (#4025: the link made the Overview page 424 px wide on a 390 px phone). */
[data-o="share-text"] { overflow-wrap: anywhere; }
.settings-cards > .form-submit { margin: 0; padding-inline: var(--s-6); border: 1px solid var(--line); border-radius: var(--r-inner); box-shadow: var(--sh-2); }
@media (min-width: 900px) { .settings-cards > .form-submit { border-bottom: 0; border-radius: var(--r-inner) var(--r-inner) 0 0; } }
.settings-danger { --stack: var(--s-2); }
/* Rows of switches (Software → Plugins → Installed): each row is a 44 px target, so the rows stand together instead of
   inheriting the 24 px card gap (stranger run 7 measured 70–100 px of air under them). */
.settings-cards .stack.switch-rows { --stack: var(--s-1); }
/* Below 900 px the bar's two buttons share one row (the sentence above them): "Discard changes" and "Save settings" (pt-BR
   "Descartar alterações", "Salvar configurações") ran to a second row at 375 and made the bar 159 px tall. Each label
   stays on one line (phone read 10: the pt labels broke inside their buttons): below 420 px the bar and the buttons
   give up side padding and the labels go to 14 px, so the pt pair (139 + 140 px of text) fits the 319 px row at 375. */
@media (max-width: 899px) {
  .settings-cards > .form-submit { padding-inline: var(--s-4); }
  .settings-cards > .form-submit .form-actions { flex-wrap: nowrap; gap: var(--s-2); }
  .settings-cards > .form-submit .btn { flex: 1 1 auto; padding-inline: var(--s-3); }
}
@media (max-width: 419px) {
  .settings-cards > .form-submit { padding-inline: var(--s-3); }
  .settings-cards > .form-submit .btn { padding-inline: 6px; font-size: 14px; }
}
@media (min-width: 900px) {
  .settings { max-width: calc(2 * var(--s-24) + var(--s-12) + var(--column) + 2 * var(--gutter));
    grid-template-columns: calc(2 * var(--s-24)) minmax(0, 1fr); column-gap: var(--s-12); align-items: start; }
  .settings-head { grid-column: 1 / -1; }
  .settings-side { position: sticky; top: calc(var(--nav-h) + var(--s-6)); }
  .settings-nav { display: grid; gap: var(--s-1); overflow: visible; }
  .settings-nav[data-more] { -webkit-mask-image: none; mask-image: none; }
  .settings-nav > .btn { justify-content: flex-start; border-color: transparent; background: transparent; box-shadow: none; color: var(--fg-2); }
  .settings-nav > .btn:hover { background: var(--wash); color: var(--fg-1); }
  .settings-nav > .btn[aria-current="page"] { background: var(--accent-soft); color: var(--accent-soft-ink); }
  .settings-sub { padding: var(--s-3) 0 0 var(--s-3); margin-left: var(--s-3); border-left: 1px solid var(--line); }
  .settings-sub > .btn { min-height: 36px; font-weight: 500; }   /* 36 + the 4 px hit margin: 44 px for the pointer */
}
@media (min-width: 900px) {
  .settings:has(> .settings-first) > .settings-side { grid-column: 1; grid-row: 2 / span 2; }
  .settings:has(> .settings-first) > .settings-first { grid-column: 2; grid-row: 2; }
  .settings:has(> .settings-first) > .settings-cards { grid-column: 2; grid-row: 3; }
}
/* The server panel (2026-10-14, Apex-like): P-20 (Overview), P-22 Settings and P-23 Players
   share the block above. Each carries .settings-side > nav.scroll-row.settings-nav "This server" (Overview · Players ·
   Settings · … · Upgrade, which links to /upgrade) with aria-current="page" on its own entry; Settings adds its section list under it as
   nav.settings-nav.settings-sub. Below 900 px the side is one or two pill rows under the head; the current pill is filled
   with the accent wash. */
.settings-side { display: grid; gap: var(--s-2); min-width: 0; }
.settings-nav > .btn[aria-current="page"] { border-color: transparent; background: var(--accent-soft); color: var(--accent-soft-ink); box-shadow: none; }
.panel-bar { align-items: center; }
.panel-bar > .cluster { align-items: center; }
/* Below 480 px the nine-entry side list is ONE sideways-scrolling row of 44 px pills (phone pass 9, 2026-10-14): wrapped,
   it took four rows and pushed the Address card below the first screen at 375. The data-more fade marks the side with more,
   and v2.mjs scrolls the current entry into view on load, so a page deep in the list (Schedule) shows its own pill.
   Settings' own section row (.settings-sub) still wraps, as before. */
@media (max-width: 479px) {
  .settings-side .settings-sub { flex-wrap: wrap; overflow: visible; scroll-snap-type: none; }
  .settings-side .settings-sub[data-more] { -webkit-mask-image: none; mask-image: none; }
  .settings-side .scroll-row > .btn { min-height: 44px; }
  .settings-side .settings-sub { padding-top: var(--s-2); border-top: 1px solid var(--line); } /* Settings' own sections read apart from the nine */
}
@media (min-width: 1024px) {
  .settings:has(.tier-band) { max-width: calc(var(--wrap) + 2 * var(--gutter)); }
  .settings:has(.tier-band) .settings-cards > :not(.tier-band) { max-width: var(--column); }
}
/* The panel uses the screen (Keiden 10-14: "too much dead space on the sides and top"). From 1000 px every owner page opens
   to the wrap width: the side list is a 232 px column and the content column takes the rest, so cards, tables and the
   console stretch. The top block starts 24 px under the nav. Overview sets Address beside Players and World. */
@media (min-width: 1000px) {
  main > .section:has(> .wrap.settings) { padding-top: var(--s-6); }
  .settings { max-width: calc(var(--wrap) + 2 * var(--gutter)); grid-template-columns: 232px minmax(0, 1fr); column-gap: var(--s-10); }
  .settings .settings-cards > :not(.tier-band) { max-width: none; }
  .settings-cards:has(> section:has(#address-title)) { grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); align-items: start; }
  .settings-cards:has(> section:has(#address-title)) > section:has(#address-title) { grid-row: span 2; }
  .settings-cards:has(> section:has(#address-title)) > :not(.card) { grid-column: 1 / -1; }
  .settings-cards .faq { max-width: none; }   /* "Add many players" spans its card like the field above it */
  .settings .set-row:not(.set-row-wide) { grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); }   /* the wider control gets the room */
}
/* Info button: a 24 px "i" that opens a small dialog (.dialog-pop) with a sentence or three, instead of a disclosure row.
   44 px tap area by padding; the negative margin keeps the line where it was. Beside a hint in .hint-row. */
.info-btn { display: inline-grid; place-items: center; flex: none; width: 44px; height: 44px; padding: 10px; margin: -10px;
  border: 0; border-radius: 50%; background: transparent; color: var(--fg-3); cursor: pointer; }
.info-btn svg { width: 24px; height: 24px; }
.info-btn:hover { color: var(--fg-1); background: var(--wash); }
.hint-row { display: flex; align-items: flex-start; gap: var(--s-3); }
.hint-row > :first-child { flex: 1 1 auto; min-width: 0; }
.field > .hint-row > .info-btn { margin-block: -6px -14px; } /* clear of the field above it */
.cluster:has(> .cluster > .info-btn) { row-gap: var(--s-4); } /* wrapped chip + "i" pairs: tap areas do not touch */
.dialog.dialog-pop { width: min(400px, calc(100vw - 32px)); }
/* Settings rows (P-22 and its pt-BR twin, Apex read 2026-10-14): each section is a label | control table. Bold label
   left (its chip and its "i" beside it), the control right, a line between rows, no help paragraph under a field; the
   help sits in the "i" dialog. The section's Save is the last row, in the control column. Below 600 px the label sits
   over its control and Save takes the full width. */
.set-head { display: flex; align-items: center; gap: var(--s-2); }
.set-rows { display: grid; border-top: 1px solid var(--line); }
.set-row { display: grid; gap: var(--s-2); align-items: center; padding-block: var(--s-4); border-bottom: 1px solid var(--line); }
.set-row:last-child { border-bottom: 0; padding-bottom: 0; }
.set-label { display: flex; flex-wrap: wrap; align-items: center; gap: var(--s-3) var(--s-2); font: 600 15px/22px var(--font-body); color: var(--fg-1); }
.set-label > .info-btn { margin-block: -10px -8px; margin-inline: -8px; }   /* the 44 px tap area ends where the chip beside it and the control under it begin */
.set-control { display: grid; gap: var(--s-2); justify-items: start; min-width: 0; }
.set-control > :is(.input, .select, .affix, .addr-list, .set-list) { justify-self: stretch; }
.set-list > li { min-height: 44px; }
/* Operator rows: every row reads the same. Name and chip on the first line, the button under them; once the control
   column is 400 px wide the button moves to the end of the same line. */
.set-list { container-type: inline-size; }
.set-list > li.server-head { display: grid; grid-template-columns: minmax(0, 1fr); justify-items: start; align-items: center; gap: var(--s-2); }
.set-list > li.server-head > .cluster { min-width: 0; overflow-wrap: anywhere; }
@container (min-width: 400px) { .set-list > li.server-head { grid-template-columns: minmax(0, 1fr) auto; } }
/* In the narrow control column the subdomain field always takes its own line, the suffix under it (as below 480 px). */
.set-control .affix:has(> .input + .affix-text) { flex-wrap: wrap; }
.set-control .affix:has(> .input + .affix-text) > .input { flex: 1 1 100%; }
.set-control .affix > .input + .affix-text { flex: 1 1 100%; min-height: 36px; border-left: 0; border-top: 1px solid var(--line); white-space: normal; overflow-wrap: anywhere; }
.set-switch { width: 24px; height: 24px; margin: 0; accent-color: var(--accent); cursor: pointer; }
/* The switch sits in an empty label that gives it a 44 px tap area; below 600 px it sits at the end of its label's line
   and its hint takes the full row under both (#4025: in the switch's auto column the hint took the row's width, the
   label went one word a line under it and the Overview page grew to 424 px on a 390 px phone). */
.set-switch-hit { display: inline-grid; place-items: center; width: 44px; height: 44px; margin-inline: -10px; cursor: pointer; }
@media (max-width: 599.98px) {
  .set-row:has(.set-switch) { grid-template-columns: minmax(0, 1fr) auto; column-gap: var(--s-3); }
  .set-row:has(.set-switch) > .set-control { display: contents; }
  .set-row:has(.set-switch) > .set-control > :not(.set-switch-hit) { grid-column: 1 / -1; }
}
.set-save > .btn { width: 100%; }
@media (min-width: 600px) {
  .set-row { grid-template-columns: minmax(0, 2fr) minmax(0, 3fr); column-gap: var(--s-6); }
  .set-row-wide { grid-template-columns: minmax(0, 1fr); }
  .set-save > .btn { grid-column: 2; }
}


/* ================================================================ terminal (P-27 Console): one dark window
   .term > .term-bar (.term-head: the title and its "i" buttons; .term-filters: All · Chat · Commands · Warnings) /
   .term-log (role=log; .term-line, one per log line, data-log=all|chat|cmd|warn; a typed command is a .term-row of its
   .term-cmd line and its output) / .term-input (the prompt, the field, Send). Dark on every ground; bold adds its frame. */
.term { --term-bg: #15121d; --term-bar: #1e1a29; --term-edge: #2e2840; --term-fg: #ece8f6; --term-dim: #a29cb5; --term-cmd: #cbb2ff;
  --term-warn: #f0b552; --term-bad: #ff8a80; color-scheme: dark;
  display: flex; flex-direction: column; height: min(72vh, 640px); min-height: 480px; overflow: hidden;
  border: 1px solid var(--term-edge); border-radius: var(--r-card); background: var(--term-bg); color: var(--term-fg); box-shadow: var(--sh-2); }
.term-bar { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 0 16px; padding: 4px 12px 4px 16px;
  background: var(--term-bar); border-bottom: 1px solid var(--term-edge); }
.term-head { display: flex; align-items: center; gap: 8px; }
.term-title { font: 500 13px/20px var(--font-mono); letter-spacing: .08em; text-transform: uppercase; color: var(--term-fg); margin-right: 4px; }
.term .info-btn { width: 44px; height: 44px; margin: -4px; padding: 10px; color: var(--term-dim); }   /* 44 px tap area by padding; the 24 px "i" and the bar keep their size */
.term .info-btn:hover { color: var(--term-fg); background: rgb(255 255 255 / .08); }
.term-filters { display: flex; gap: 4px; overflow-x: auto; scrollbar-width: none; }
.term-filters button { position: relative; z-index: 0; flex: none; min-height: 44px; min-width: 44px; padding: 0 10px; border: 0; background: none;
  color: #d7d1e4; font: 500 12px/1 var(--font-mono); }
/* The pill is drawn inside the 44 px button (padding, not size): the tap area is 44 px tall, the pill keeps its 30 px. */
.term-filters button::before { content: ""; position: absolute; z-index: -1; inset: 7px 0; border: 1px solid #3d3650; border-radius: var(--r-pill); }
.term-filters button:hover::before { background: rgb(255 255 255 / .06); }
.term-filters button[aria-pressed="true"] { color: #1a1030; }
.term-filters button[aria-pressed="true"]::before { background: #c7b2f7; border-color: transparent; }
.term :focus-visible { outline: 2px solid var(--term-cmd); outline-offset: 2px; }
.term-log { flex: 1; min-height: 0; overflow: auto; padding: 12px 16px 16px; font: 500 13px/20px var(--font-mono); overscroll-behavior: contain; }
.term-log:focus-visible { outline-offset: -2px; }
.term-line { margin: 0; white-space: pre-wrap; overflow-wrap: anywhere; }   /* long lines wrap in the box (monospace kept): no sideways scroll at 375 */
.term-ts { color: var(--term-dim); }
.term-warn, .term-warn .term-ts { color: var(--term-warn); }
.term-bad { color: var(--term-bad); }
.term-row { margin: 6px 0; }
.term-cmd { color: var(--term-cmd); }
.term-chip { display: inline-block; margin-left: 8px; padding: 0 6px; border-radius: 6px; background: #2e2840; color: var(--term-dim); font-size: 11px; line-height: 18px; vertical-align: 1px; }
.term-note { margin-top: 12px; color: var(--term-dim); white-space: normal; }
.term-log[data-filter="chat"] [data-log]:not([data-log="chat"]),
.term-log[data-filter="cmd"] [data-log]:not([data-log="cmd"]),
.term-log[data-filter="warn"] [data-log]:not([data-log="warn"]) { display: none; }
.term-input { display: flex; align-items: center; gap: 8px; padding: 6px 8px 6px 16px; background: var(--term-bar); border-top: 1px solid var(--term-edge); }
.term-input:focus-within { box-shadow: inset 0 2px 0 var(--term-cmd); }
.term-prompt { flex: none; color: var(--term-cmd); font: 500 15px/1 var(--font-mono); }
.term-field { flex: 1; min-width: 0; min-height: 44px; padding: 0; border: 0; background: transparent; color: var(--term-fg);
  font: 500 15px/20px var(--font-mono); caret-color: var(--term-cmd); outline: none; }
.term-field::placeholder { color: #756e8c; }
.term-field:focus-visible { outline: none; }
.term-off { flex: 1; min-width: 0; min-height: 44px; display: flex; align-items: center; color: var(--term-dim); font: 500 14px/20px var(--font-body); }
.term-input .btn { flex: none; }
.term-help { display: flex; flex-wrap: wrap; align-items: center; justify-content: space-between; gap: 8px 16px; }
@media (max-width: 599px) {
  .term { height: 60vh; min-height: 400px; border-radius: var(--r-inner); }
  .term-bar { row-gap: 4px; padding: 4px 8px 2px 12px; }   /* wrapped: the "i" buttons' 44 px tap areas end above the filters' */
  .term-filters { width: 100%; }
  .term-log { padding: 10px 12px 12px; font-size: 12px; line-height: 18px; }
  .term-input { padding-left: 12px; }
}



.points-claim-actions button.points-bar-more { padding-block: 0; margin-block: 0; }   /* as tall as Claim beside it */
/* The panel head (Keiden 2026-10-15: "the points bar is in a different spot than all the other tabs by a little bit"). One
   fixed structure on all ten owner pages, so the points bar (and the side list under it) sits at the same height on
   every page and in every state: row 1 the breadcrumb (its 28 px slot), row 2 the H1 beside the state's button in a slot
   that keeps the button's height and width when the state has none (asleep), row 3 the status pill and sentence at one fixed
   height (two lines below 600 px, where a sentence may wrap), row 4 the points bar. A state's extras (the Starting meter,
   the failed callout, the Players counts) come after the bar. .server-head opens up (display: contents) so its two
   clusters take rows 2 and 3. */
.settings-head { --head-btn: 44px; --head-btn-w: 8rem; --head-status: 32px;
  grid-template-columns: minmax(0, 1fr) minmax(var(--head-btn-w), auto); column-gap: var(--s-4); }
:lang(pt) .settings-head { --head-btn-w: 9.25rem; }   /* the slot is as wide as the widest button (Tentar de novo), so the H1 wraps the same with or without one */
:where([data-ground="bold"]) .settings-head { --head-btn: var(--h-md); }
.settings-head > * { grid-column: 1 / -1; }
.settings-head > :first-child { grid-row: 1; }
.settings-head > h1 { grid-column: 1; grid-row: 2; align-self: center; min-width: 0; }
.settings-head > .server-head { display: contents; }
.settings-head > .server-head > .cluster:last-child { grid-column: 2; grid-row: 2; align-self: center; min-height: var(--head-btn);
  flex-wrap: nowrap; justify-content: flex-end; }
.settings-head > .server-head > .cluster:first-child { grid-column: 1 / -1; grid-row: 3; height: var(--head-status); align-content: center; }
@media (max-width: 599px) {
  .settings-head { --head-status: 48px; }
  .settings-head > .server-head > .cluster:first-child { flex-wrap: nowrap; align-items: center; }
  .settings-head > .server-head > .cluster:first-child > * { flex: none; }
  .settings-head > .server-head > .cluster:first-child > .t-small { flex: 0 1 auto; min-width: 0; }
}
/* ---------------------------------------------------------------- points rules (Keiden 2026-10-15: "it has to be more visual"):
   the "How you get points" dialog on Home and the server pages. Three rows (pixel icon, big number with its unit, the
   sentence), a tier ladder strip and the reset footnote. Icons are inline SVG on a 14-pixel grid drawn at 28 px (2 px a cell). */
.points-rules { display: grid; gap: 10px; margin: 0; padding: 0; list-style: none; }
.points-rule { display: grid; grid-template-columns: 28px 92px 1fr; align-items: center; gap: 12px; padding: 12px 14px;
  border: 1px solid var(--line); border-radius: var(--r-inner, 12px); background: var(--surface-2); }
.points-rule-icon { display: block; width: 28px; height: 28px; color: var(--accent-text); image-rendering: pixelated; }
.points-rule-icon .pr-ink { fill: currentColor; }
.points-rule-icon .pr-fill { fill: var(--accent-soft); }
.points-rule-icon .pr-a { fill: var(--head-1, #6f9a4c); }
.points-rule-icon .pr-b { fill: var(--head-2, #c58ad6); }
.points-rule-icon .pr-hair { fill: #3b2449; }
.points-rule-icon .pr-eye { fill: #16131f; }
.points-rule-badge { display: flex; flex-direction: column; gap: 2px; min-width: 0; }
.points-rule-num { font: 400 26px/1 var(--font-pixel); font-synthesis: none; letter-spacing: .02em; color: var(--accent-text); }
.points-rule-unit { font: 500 11px/14px var(--font-mono); letter-spacing: .06em; text-transform: uppercase; color: var(--fg-3); }
.points-rule-text { margin: 0; font: 400 15px/22px var(--font-body); color: var(--fg-1); }
.points-ladder { position: relative; display: grid; grid-template-columns: repeat(4, 1fr); margin: 0; padding: 0; list-style: none;
  border-radius: var(--r-control, 10px); background: var(--surface-3); font: 500 13px/18px var(--font-mono); }
.points-ladder li { position: relative; display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 2px; padding: 8px 4px;
  white-space: nowrap; text-align: center; }
.points-ladder li + li::before { content: "→"; position: absolute; left: 0; top: 50%; transform: translate(-50%, -50%); color: var(--fg-3); }
.points-ladder-tier { color: var(--fg-1); font-weight: 600; }
.points-ladder-pts { color: var(--accent-text); }
.points-reset { margin: -8px 0 0; color: var(--fg-3); }
@media (max-width: 479px) {
  .points-rule { grid-template-columns: 28px 1fr; gap: 6px 12px; padding: 12px; }
  .points-rule-badge { flex-direction: row; align-items: baseline; gap: 8px; }
  .points-rule-text { grid-column: 1 / -1; }
}
/* ================================================================ the home's idea pictures (Keiden 2026-10-15: "upgrade the graphics
   ... loosely in Essential.gg's style"): one inline SVG per idea card, pixel-crisp blocks, violet glow, scaled by viewBox.
   Colours that should follow the palette read tokens through these classes; the night sky and Minecraft's window keep
   their own fixed colours. One small motion each (dot pulse, float, slide, fill); none under reduced motion. */
.idea-art { display: block; width: 100%; max-width: 440px; height: auto; overflow: visible; }
.idea-art rect { shape-rendering: crispEdges; }
.idea-art text { font-family: var(--font-mono); font-weight: 500; }
.idea-art .ia-acc { fill: var(--accent); }
.idea-art .ia-on { fill: var(--on-accent); }
.idea-art .ia-fg2 { fill: var(--fg-2); }
.idea-art .ia-track { fill: var(--surface-3); }
.idea-art .ia-glow { stop-color: var(--accent); }
.idea-art-friends { border-radius: 16px; box-shadow: 0 24px 60px -24px rgb(23 16 41 / .6), 0 0 0 2px #2c2048; }
.idea-art-setup .ia-win { filter: drop-shadow(0 18px 30px rgb(0 0 0 / .45)); }
.idea-art-grow .ia-t1 { opacity: .4; } .idea-art-grow .ia-t2 { opacity: .6; } .idea-art-grow .ia-t3 { opacity: .8; }
.idea-art-grow .ia-t4 { filter: drop-shadow(0 0 12px var(--accent-ring)); }
@keyframes ia-pulse { 0%, 100% { opacity: .1; transform: scale(.6); } 50% { opacity: .45; transform: scale(1.35); } }
@keyframes ia-float { from { transform: translateY(4px); } to { transform: translateY(-6px); } }
@keyframes ia-slide { 0% { transform: translate(-24px, 64px); opacity: 0; } 10% { opacity: 1; } 30%, 100% { transform: none; opacity: 1; } }
@keyframes ia-fill { 0% { transform: scaleX(.06); } 55%, 100% { transform: scaleX(1); } }
.idea-art .ia-pulse { transform-box: fill-box; transform-origin: center; animation: ia-pulse 2.4s ease-in-out infinite; }
.idea-art .ia-float { animation: ia-float 3.6s ease-in-out infinite alternate; }
.idea-art .ia-slide { animation: ia-slide 5s cubic-bezier(.2, .8, .2, 1) infinite; }
.idea-art .ia-fill { transform-box: fill-box; transform-origin: left; animation: ia-fill 6s ease-out infinite; }
@media (max-width: 599px) { .idea-visual:has(> .idea-art) { min-height: 0; padding: 20px 12px; } .idea-art { max-width: none; } }
@media (prefers-reduced-motion: reduce) { .idea-art :is(.ia-pulse, .ia-float, .ia-slide, .ia-fill) { animation: none; } }


/* ================================================================ ground "bold": the site's register (Keiden 2026-10-14:
   "bold is the style we will go with"). Every page's <html> carries data-ground="bold"; the rules are the v2 mock's bold
   rules (swap2-tools/bold-css.py), in its order, after everything they override. */
:root[data-ground="bold"] {
  color-scheme: dark;
  --bg: #0c0a11; --bg-2: #13101a; --surface: #17131f; --surface-2: #1f1a2a; --surface-3: #2a2438;
  --wash: rgb(255 255 255 / .06); --wash-2: rgb(255 255 255 / .10);
  --line: #2a2436; --line-2: #3e3650; --control: #776f90;
  --fg-1: #f6f3ff; --fg-2: #d4cee3; --fg-3: #aaa5bb; --fg-4: #6f6886;
  --accent: #a678ff; --accent-hover: #b48cff; --accent-press: #9564f5; --accent-edge: #7d4fe0;
  --accent-text: #cbb2ff; --on-accent: #120a24; --accent-soft: #241840; --accent-soft-ink: #e2d4ff;
  --accent-ring: rgb(166 120 255 / .32); --focus: #cbb2ff;
  --ok: #5fd08f; --ok-soft: #133022; --ok-dot: #3fcf7a; --wait: #f0b552; --wait-soft: #35270f; --bad: #ff8a80; --bad-soft: #3a1919;
  --off: #b3aec4; --off-soft: #241f2e;
  --sh-1: 0 0 0 1px rgb(255 255 255 / .02); --sh-2: 0 24px 60px -18px rgb(0 0 0 / .7);
  --sh-3: 0 28px 64px -12px rgb(0 0 0 / .75); --sh-btn: inset 0 1px 0 rgb(255 255 255 / .35);
  --scrim: rgb(0 0 0 / .65); --nav-bg: rgb(12 10 17 / .82);
  --glow: 0 40px 120px -30px rgb(166 120 255 / .45);
  --font-pixel: "Shulker Pixel", "Bricolage Grotesque", ui-sans-serif, system-ui, sans-serif;
  --fs-hero: clamp(34px, 2.6vw + 12px, 50px);   
  --fs-h2: clamp(26px, 2.6vw + 14px, 54px);
  --r-card: 24px; --r-dialog: 28px;
  
  --ink: var(--fg-1);
}
@media (max-width: 359px) {
  :root[data-ground="bold"] { --fs-hero: 30px; }
}
:root[data-ground="bold"] {
  --fs-h1: clamp(28px, 1.6vw + 20px, 40px); --fs-h2: clamp(24px, 1vw + 18px, 32px); --fs-h3: 20px; --lh-h3: 26px;
  --fs-small: 14px; --fs-body: 16px;
  --h-sm: 36px; --h-md: 40px; --h-lg: 44px; --pad-ctl: 18px;
  --r-control: 10px; --r-inner: 12px; --r-card: 20px; --r-dialog: 20px; --r-frame: 28px;
  --edge: 2px; --edge-ctl: var(--control);   
  --section: 72px; --head-gap: 32px; --section-top: 40px;
  --ring: 0 0 0 2px var(--bg), 0 0 0 4px var(--focus);
}
@media (min-width: 768px) {
  :root[data-ground="bold"] { --section: 96px; --head-gap: 40px; --section-top: 56px; }
}
@media (max-width: 899px) {
  :root[data-ground="bold"] { --h-sm: 44px; --h-md: 44px; }
}
:where([data-ground="bold"]) .points-claim-actions .points-bar-more { min-height: var(--h-sm); }
:where([data-ground="bold"]) .points-tier { border-radius: 4px; background: var(--accent); color: var(--on-accent);
  font-family: var(--font-pixel); font-weight: 400; letter-spacing: .04em; text-transform: uppercase; box-shadow: inset 0 -3px 0 rgb(0 0 0 / .25); }
:where([data-ground="bold"]) .points-claim { border-width: 2px; }
:where([data-ground="bold"]) .reward-px { box-shadow: 0 0 8px rgb(166 120 255 / .7); }
:where([data-ground="bold"]) .reward-ring { box-shadow: 0 0 18px rgb(166 120 255 / .6); }
@media (min-width: 375px) and (max-width: 419px) {
  :where([data-ground="bold"]) .nav-account { padding-inline: 6px; }
  :where([data-ground="bold"]) .nav-end { gap: 0; }
}
@media (min-width: 1000px) {
  :where([data-ground="bold"]) .hero-grid:has(> .hero-card.server) .hero-copy { gap: 40px; }
}
:where([data-ground="bold"]) .settings-head { --head-btn: var(--h-md); }
:where([data-ground="bold"]) :is(.set-rows, .set-row) { border-width: 2px; }
:where([data-ground="bold"]) .forced-hover.btn-secondary { background: var(--surface-3); border-color: var(--fg-3); }
:where([data-ground="bold"]) .forced-hover.btn-danger { background: #ff9f97; }
:where([data-ground="bold"]) .forced-press:is(.btn-primary, .btn-secondary, .btn-danger) { box-shadow: inset 0 -1px 0 rgb(0 0 0 / .22); }
html[data-ground="bold"] .sg-pixel { font-family: var(--font-pixel); font-weight: 400; text-transform: uppercase; letter-spacing: 0; line-height: 1.12; }
html[data-ground="bold"] .sg-h1 { font-size: var(--fs-h1); }
@font-face { font-family: "Shulker Pixel"; font-style: normal; font-weight: 400; font-display: swap;
  src: url(/assets/fonts/pixel.woff2) format("woff2"); }
html[data-ground="bold"] :is(h1, h2) { font-family: var(--font-pixel); font-weight: 400; font-synthesis: none; text-transform: uppercase;
  letter-spacing: 0; overflow-wrap: break-word; }
html[data-ground="bold"] :is(h1, h2).t-hero { line-height: 1.08; text-shadow: .1em .1em 0 #2b1a4d; }
html[data-ground="bold"] :is(h1, h2).t-h2 { line-height: 1.12; }
html[data-ground="bold"] h1.t-h2 { font-size: var(--fs-h1); }
html[data-ground="bold"] :is(h1, h2):is(.t-h3, .t-h4, .card-title, .dialog-title, .server-name) { line-height: 1.25; }
html[data-ground="bold"] .prose h2 { font-size: 20px; line-height: 26px; }
@media (min-width: 768px) {
  html[data-ground="bold"] .prose h2 { font-size: 26px; line-height: 32px; }
}
html[data-ground="bold"] :is(.footer-col h2, h2.t-eyebrow) { font-size: 14px; line-height: 18px; letter-spacing: .06em; }
:where([data-ground="bold"]) :is(.t-hero, .t-h2) .t-accent { color: var(--accent); }
:where([data-ground="bold"]) .t-eyebrow { color: var(--fg-3); }
:where([data-ground="bold"][lang="pt-BR"]) .t-hero .nowrap { white-space: normal; }
:where([data-ground="bold"]) .hero { position: relative; isolation: isolate; overflow: clip; }
:where([data-ground="bold"]) .hero::before { content: ""; position: absolute; z-index: -1; inset: -20% 0 auto auto; width: min(900px, 100%); aspect-ratio: 1;
  background: radial-gradient(closest-side, rgb(166 120 255 / .22), rgb(166 120 255 / 0)); pointer-events: none; }
@media (min-width: 900px) {
  :where([data-ground="bold"]) .hero { padding: 40px 0 72px; }
}
@media (min-width: 1000px) {
  :where([data-ground="bold"]) .hero-grid { grid-template-columns: minmax(0, 1.12fr) minmax(0, .88fr); gap: 56px; }
}
:where([data-ground="bold"]) .hero-copy { gap: 28px; }
:where([data-ground="bold"]) .hero-lede .t-lede { font-size: 20px; line-height: 30px; color: var(--fg-2); }
@media (min-width: 768px) {
  :where([data-ground="bold"]) .hero-lede .t-lede { font-size: 24px; line-height: 34px; }
}
:where([data-ground="bold"]) main > :is(section, article):first-child:not(.hero) { background:
  radial-gradient(min(900px, 120vw) 420px at 85% -120px, rgb(166 120 255 / .14), transparent 70%) no-repeat; }
:where([data-ground="bold"]) .section-form { padding-top: clamp(48px, 6vw, 80px); }
@media (min-width: 600px) and (max-height: 760px) {
  :where([data-ground="bold"]) .section-form { padding-top: 24px; }
  :where([data-ground="bold"]) .section-form .section-head { margin-bottom: 24px; }
}
:where([data-ground="bold"]) .empty :is(h1, h2).t-h2 { font-size: clamp(26px, 1.6vw + 18px, 40px); }
:where([data-ground="bold"]) .btn { min-height: var(--h-md); padding: 0 var(--pad-ctl); border-width: var(--edge); border-radius: var(--r-control);
  font: 600 15px/1.1 var(--font-body); letter-spacing: 0; }
:where([data-ground="bold"]) :is(.btn-lg, .btn-xl) { min-height: var(--h-lg); padding: 0 var(--pad-ctl); border-radius: var(--r-control); font-size: 16px; }
:where([data-ground="bold"]) .btn-sm { min-height: var(--h-sm); padding: 0 calc(var(--pad-ctl) - 4px); border-radius: var(--r-control); font-size: 14px; }
:where([data-ground="bold"]) .btn-icon { min-width: var(--h-md); padding: 0; }
:where([data-ground="bold"]) .btn-icon.btn-sm { min-width: var(--h-sm); }
:where([data-ground="bold"]) .btn:focus-visible { outline: 2px solid var(--focus); outline-offset: 2px; }
:where([data-ground="bold"]) .btn-primary { box-shadow: inset 0 -3px 0 rgb(0 0 0 / .22), 0 10px 30px -12px rgb(166 120 255 / .55); }
:where([data-ground="bold"]) .btn-primary:hover { background: var(--accent-hover); }
:where([data-ground="bold"]) .btn-primary:active { background: var(--accent-press); box-shadow: inset 0 -1px 0 rgb(0 0 0 / .22); }
:where([data-ground="bold"]) .btn-secondary { background: var(--surface-2); border-color: var(--edge-ctl); box-shadow: inset 0 -3px 0 rgb(0 0 0 / .25); }
:where([data-ground="bold"]) .btn-secondary:hover { background: var(--surface-3); border-color: var(--fg-3); }
:where([data-ground="bold"]) .btn-secondary:active { background: var(--surface-3); box-shadow: inset 0 -1px 0 rgb(0 0 0 / .25); }
:where([data-ground="bold"]) .btn-ghost { border-color: transparent; }
:where([data-ground="bold"]) .btn-ghost:hover { background: var(--wash-2); }
:where([data-ground="bold"]) .btn-ghost:active { background: var(--wash-2); box-shadow: inset 0 0 0 var(--edge) var(--line-2); }
:where([data-ground="bold"]) .btn-danger { color: #2a0c0c; border-color: transparent; box-shadow: inset 0 -3px 0 rgb(0 0 0 / .22); }
:where([data-ground="bold"]) .btn-danger:hover { filter: none; background: #ff9f97; }
:where([data-ground="bold"]) .btn-danger:active { box-shadow: inset 0 -1px 0 rgb(0 0 0 / .22); }
:where([data-ground="bold"]) .btn:disabled, :where([data-ground="bold"]) .btn[aria-disabled="true"] { background: var(--surface-3); color: var(--fg-3); border-color: transparent; box-shadow: none; transform: none; }
:where([data-ground="bold"]) .btn-secondary[aria-pressed="true"] { background: var(--accent-soft); border-color: var(--accent-edge); color: var(--accent-soft-ink); }
:where([data-ground="bold"]) .info-btn:hover { background: var(--wash-2); }
:where([data-ground="bold"]) :is(.card, .step, .table-wrap) { border-width: var(--edge); border-color: var(--line-2); box-shadow: none; }
:where([data-ground="bold"]) .card { border-radius: var(--r-card); }
:where([data-ground="bold"]) a.card:hover { border-color: var(--accent-edge); box-shadow: none; }
:where([data-ground="bold"]) .card-raised { box-shadow: var(--sh-2); }
:where([data-ground="bold"]) .card-foot { border-top-width: 2px; }
:where([data-ground="bold"]) .card-flat { background: var(--surface-2); }
:where([data-ground="bold"]) .grid-2:not(:has(> :not(a.card))) { align-items: stretch; }
:where([data-ground="bold"]) .prose a.card { border-radius: var(--r-card); }
:where([data-ground="bold"]) .step::before { background: var(--accent-soft); color: var(--accent-soft-ink); border-radius: var(--r-control); }
:where([data-ground="bold"]) .tier-card { border-top-width: 6px; }
:where([data-ground="bold"]) .tier-mem { color: var(--fg-1); }
:where([data-ground="bold"]) .table th { padding: var(--s-3) var(--s-4); color: var(--fg-2); border-bottom-width: var(--edge); border-color: var(--line-2); }
:where([data-ground="bold"]) .table td { padding: var(--s-3) var(--s-4); }
:where([data-ground="bold"]) .set-row { min-height: calc(var(--h-md) + 2 * var(--s-4)); padding-block: var(--s-4); }
:where([data-ground="bold"]) :is(.set-rows, .set-row) { border-color: var(--line-2); }
:where([data-ground="bold"]) .set-row:last-child { min-height: 0; }
@media (max-width: 719px) {
  :where([data-ground="bold"]) .table tr { border-width: 2px; border-radius: 18px; }
}
:where([data-ground="bold"]) .empty { border-width: 2px; }
:where([data-ground="bold"]) .addr { border-width: 2px; background: var(--surface-2); }
:where([data-ground="bold"]) .qr { background: #ffffff; color: #16131f; border-color: var(--line-2); }
:where([data-ground="bold"]) .qr-caption { color: #4a4558; }
:where([data-ground="bold"]) .stack > p + h2.t-h3 { margin-top: 24px; }
:where([data-ground="bold"]) .server { border: 2px solid var(--line-2); border-radius: 32px; box-shadow: var(--glow), var(--sh-2); }
:where([data-ground="bold"]) .hero-card { max-width: 600px; }
:where([data-ground="bold"]) .hero-card .server-media { aspect-ratio: 16 / 10; }
:where([data-ground="bold"]) .hero-card .server-media > picture { display: block; height: 100%; }
@media (min-width: 900px) and (max-height: 800px) {
  :where([data-ground="bold"]) .hero { padding-top: 32px; }
}
:where([data-ground="bold"]) .server-caption { border-top-width: 2px; }
:where([data-ground="bold"]) .idea-visual { min-height: 320px; border-radius: var(--r-frame); border: 2px solid var(--line-2);
  background: radial-gradient(120% 90% at 30% 0%, #2a1a4f 0%, var(--bg-2) 70%); }
:where([data-ground="bold"]) .section-alt .idea-visual { background: radial-gradient(120% 90% at 30% 0%, #2a1a4f 0%, var(--bg) 70%); }
@media (min-width: 900px) {
  :where([data-ground="bold"]) .idea-visual { min-height: 420px; padding: 56px 40px; }
}
:where([data-ground="bold"]) .vrow { background: var(--surface-2); border-color: var(--line-2); }
:where([data-ground="bold"]) .mc { box-shadow: inset 0 0 0 2px #0e0e10, inset 0 0 0 4px #4a4a50, 0 24px 60px -18px rgb(0 0 0 / .8); }
:where([data-ground="bold"]) .cta-band { border-radius: var(--r-frame); border: 2px solid #3e2a72;
  background: radial-gradient(120% 140% at 0% 0%, #3a2470 0%, #1a1130 60%, var(--bg-2) 100%); box-shadow: var(--glow); }
@media (min-width: 900px) {
  :where([data-ground="bold"]) .cta-band { padding: var(--s-16); }
  :where([data-ground="bold"]) .cta-band .t-h2 { max-width: 18ch; }
}
:where([data-ground="bold"]) .demo-frame { border-width: 2px; }
:where([data-ground="bold"]) :is(.input, .select select, .affix, .choice) { border-width: var(--edge); }
:where([data-ground="bold"]) :is(.input, .select select) { min-height: var(--h-md); border-radius: var(--r-control); border-color: var(--edge-ctl); }
:where([data-ground="bold"]) .affix { border-radius: var(--r-control); border-color: var(--edge-ctl); }
:where([data-ground="bold"]) textarea.input { min-height: 112px; }
:where([data-ground="bold"]) :is(.input, .select select):hover, :where([data-ground="bold"]) .affix:hover { border-color: var(--fg-3); }
:where([data-ground="bold"]) :is(.input, .select select):focus, :where([data-ground="bold"]) .affix:focus-within { border-color: var(--accent); box-shadow: var(--ring); }
:where([data-ground="bold"]) .input[aria-invalid="true"] { border-color: var(--bad); }
:where([data-ground="bold"]) .input[aria-invalid="true"]:focus { box-shadow: 0 0 0 2px var(--bg), 0 0 0 4px var(--bad); }
:where([data-ground="bold"]) .field { gap: var(--s-2); }
:where([data-ground="bold"]) .field-label { font-weight: 600; }
:where([data-ground="bold"]) .affix .input { border: 0; border-radius: 0; }
:where([data-ground="bold"]) .affix:has(> .input:disabled) { border-color: var(--line-2); background: var(--surface-3); }
:where([data-ground="bold"]) .input[type="file"]::file-selector-button { border-width: 2px; background: var(--surface-3); font-weight: 600; }
:where([data-ground="bold"]) .choice:has(input:checked) { box-shadow: inset 0 0 0 1px var(--accent), 0 0 0 4px var(--accent-ring); }
:where([data-ground="bold"]) .form-submit { border-top-width: 2px; border-color: var(--line-2); box-shadow: 0 -16px 40px -16px rgb(0 0 0 / .6); }
:where([data-ground="bold"]) .settings-cards > .form-submit { border-width: 2px; }
@media (max-width: 899px) { :where([data-ground="bold"]) .form-submit { border-width: 2px; } }
@media (min-width: 900px) { :where([data-ground="bold"]) .settings-cards > .form-submit { border-bottom: 0; } }
:where([data-ground="bold"]) .field-error::before { color: #2a0c0c; }
:where([data-ground="bold"]) .tabs { border-bottom-width: 2px; }
:where([data-ground="bold"]) .tab[aria-selected="true"]::after { height: 3px; bottom: -2px; box-shadow: 0 0 12px rgb(166 120 255 / .7); }
:where([data-ground="bold"]) .segmented { box-shadow: inset 0 0 0 2px var(--line); }
:where([data-ground="bold"]) .segmented button[aria-pressed="true"], :where([data-ground="bold"]) .segmented button[aria-selected="true"] {
  background: var(--accent); color: var(--on-accent); box-shadow: inset 0 -3px 0 rgb(0 0 0 / .22); }
:where([data-ground="bold"]) button.chip[aria-pressed="true"] { background: var(--accent); color: var(--on-accent); }
@media (min-width: 900px) {
  :where([data-ground="bold"]) .settings-nav > .btn[aria-current="page"] { box-shadow: inset 3px 0 0 var(--accent); }
  :where([data-ground="bold"]) .settings-sub { border-left-width: 2px; }
}
:where([data-ground="bold"]) .points-bar { border-width: 2px; border-color: var(--line-2); }
:where([data-ground="bold"]) .points-bar:hover { border-color: var(--accent-edge); }
:where([data-ground="bold"]) .meter > span { background: linear-gradient(90deg, var(--accent-edge), var(--accent)); box-shadow: 0 0 10px rgb(166 120 255 / .55); }
:where([data-ground="bold"]) .chip { min-height: 28px; padding: 0 var(--s-3); border-width: var(--edge); border-color: var(--line-2); background: transparent; color: var(--fg-2); font-weight: 600; }
:where([data-ground="bold"]) :is(.chip-accent, .chip-ok, .chip-bad) { border-color: transparent; }
:where([data-ground="bold"]) .chip-accent { background: var(--accent-soft); }
:where([data-ground="bold"]) .chip-ok { background: var(--ok-soft); }
:where([data-ground="bold"]) .chip-bad { background: var(--bad-soft); }
:where([data-ground="bold"]) :is(button.chip, a.chip) { min-height: var(--h-sm); padding: 0 var(--s-4); }
:where([data-ground="bold"]) :is(button.chip, a.chip):hover { background: var(--wash-2); border-color: var(--control); }
:where([data-ground="bold"]) .callout { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--accent) 35%, transparent); }
:where([data-ground="bold"]) .callout[data-tone="ok"] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--ok) 30%, transparent); }
:where([data-ground="bold"]) .callout[data-tone="wait"] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--wait) 30%, transparent); }
:where([data-ground="bold"]) .callout[data-tone="bad"] { box-shadow: inset 0 0 0 1px color-mix(in srgb, var(--bad) 30%, transparent); }
:where([data-ground="bold"]) .toast { min-height: var(--h-lg); padding: var(--s-3) var(--s-4) var(--s-3) var(--s-3); border-radius: var(--r-inner);
  background: var(--surface-3); color: var(--fg-1); border: var(--edge) solid var(--control); box-shadow: var(--sh-3); }
:where([data-ground="bold"]) .toast::before { color: #0c1a12; }
:where([data-ground="bold"]) .dialog { width: min(520px, calc(100vw - 32px)); border: var(--edge) solid var(--line-2); border-radius: var(--r-dialog); box-shadow: var(--sh-3); }
:where([data-ground="bold"]) .dialog-head { padding: var(--s-6) var(--s-6) 0; }
:where([data-ground="bold"]) .dialog-body { padding: var(--s-3) var(--s-6) var(--s-6); }
:where([data-ground="bold"]) .dialog-foot { padding: var(--s-4) var(--s-6) var(--s-6); border-top-width: var(--edge); border-color: var(--line-2); }
@media (max-width: 599px) {
  :where([data-ground="bold"]) .dialog.sheet { border-bottom: 0; border-radius: var(--r-dialog) var(--r-dialog) 0 0; }
}
:where([data-ground="bold"]) .nav { border-bottom-width: 2px; }
:where([data-ground="bold"]) .nav-link[aria-current="page"] { color: var(--accent-text); }
:where([data-ground="bold"]) .menu-list a:hover { background: var(--wash-2); }
:where([data-ground="bold"]) .footer { border-top-width: var(--edge); padding-top: var(--section); }
:where([data-ground="bold"]) .footer-col a { color: var(--fg-2); }
:where([data-ground="bold"]) .footer-col a:hover { color: var(--fg-1); text-decoration-thickness: 1.5px; }
:where([data-ground="bold"]) .footer-fine { margin-top: var(--s-12); padding-top: var(--s-6); border-top-width: var(--edge); }
:where([data-ground="bold"]) :is(.prose a, .link):not(.card, .btn) { text-decoration-thickness: 1.5px; text-underline-offset: 3px;
  text-decoration-color: color-mix(in srgb, currentColor 50%, transparent); }
:where([data-ground="bold"]) :is(.prose a, .link):not(.card, .btn):hover { color: var(--fg-1); text-decoration-color: currentColor; }
:where([data-ground="bold"]) main > :is(section, article):first-child:not(.hero, .section-form, :has(> .wrap.settings)).section { padding-top: var(--section-top); }
:where([data-ground="bold"]) .lab-chip { border-color: #6f6886; }
:where([data-ground="bold"]) .nav .brand { gap: 0; font-size: 0; }
:where([data-ground="bold"]) .nav .brand::after { content: ""; flex: none; width: 128px; min-height: 20px; margin-left: 8px;
  background: url(data:image/webp;base64,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) 0 0 / 128px 15px no-repeat; }
@media (min-width: 768px) {
  :where([data-ground="bold"]) .nav .brand::after { width: 232px; min-height: 28px;
    background-image: url(data:image/webp;base64,UklGRtA5AABXRUJQVlA4WAoAAAAwAAAAzwEANgAASUNDUMgBAAAAAAHIAAAAAAQwAABtbnRyUkdCIFhZWiAH4AABAAEAAAAAAABhY3NwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAA9tYAAQAAAADTLQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAlkZXNjAAAA8AAAACRyWFlaAAABFAAAABRnWFlaAAABKAAAABRiWFlaAAABPAAAABR3dHB0AAABUAAAABRyVFJDAAABZAAAAChnVFJDAAABZAAAAChiVFJDAAABZAAAAChjcHJ0AAABjAAAADxtbHVjAAAAAAAAAAEAAAAMZW5VUwAAAAgAAAAcAHMAUgBHAEJYWVogAAAAAAAAb6IAADj1AAADkFhZWiAAAAAAAABimQAAt4UAABjaWFlaIAAAAAAAACSgAAAPhAAAts9YWVogAAAAAAAA9tYAAQAAAADTLXBhcmEAAAAAAAQAAAACZmYAAPKnAAANWQAAE9AAAApbAAAAAAAAAABtbHVjAAAAAAAAAAEAAAAMZW5VUwAAACAAAAAcAEcAbwBvAGcAbABlACAASQBuAGMALgAgADIAMAAxADZBTFBIOxkAAAHA9Pz/40Zy6JzTBh42CLAGbmC4kQZm0MA0sIGO59xvwK+jNpQAlQHK2S10CxAgWWsdKJDolorzNws1gTIhczQiKRWXonpynrF98p3gr77f7//fhno2HiLCtwC2dSTZtsXuznFT5QAgiYLBP6j8JPqv+mX/4YdXz718+dKr16mqFxf56H/ffe/hG32J5erhh69fvvzwww8eg7r68PV3P7p86e2r0dX88gdtfXqxmC0Wi8XLi8V1qp9fLB6WZN6UZH5nsXhriQXWPQb1MikJmv7AqMYztdVGY7XxmXr9M41qvbFawrhx++sN7xVeLAZl5derVhaLB2X1lqUaEB3Y+WNRBZAGOT/2S29bVgp5uVxnCMS6q6WuAVt+UFZ8zQRfLNaWBes0wVZZo8ei2mW5sto/OOoJuxNlrZe1C/cEYPjrFxaLM4J2zUifwK3UZTsLx/mxqHFZw2UZ1R8U1RtdtrIkveOGWdEbzWLXn8zdcXIwT4YvvPuK58coc8cb7bNsenGteB/su63e2tAdXqianGWD/miWFQ8eg4qH+SjLirk7STc3fjDUC+JiHJfrvleuOxRYPD8AkP2K63WBfmOx+H5JppBkVhnLY3FTd0qC8Cs2lz9+IPyJ6rNlvQpr6U+ZCxII/vTrNdV+DRDVNTMNrxBzjzd7fJZkIDHJ+dj+c8128VvgeGgdwABnRE/ne0txNcj29Vmiz8xkWbZOE7QlYPgei0LSH+9LvK27CTeQ1oEpUrbM9lPWl+CHIb1mS8zc0Ven6v2GBZzgY1H74srsf2yXz1qNk+EsPcmm6UErPr1PcFwxn8yy6YNOK5u66UeMMurF6b9OZtkgvwbMpeeax1FvrRftFaJuzovE9d12Vlxc52KJD3tuO3GD0TiOkx8A9QmwW5ZP+Nqq2S2zQgKQuq47AOh6XaAvG3MwDZLM1xaL08dnyTH9MKof5z/UC0nd/V/LSkSdL4sA/XtZK5RLmV/T21v7WmO1Ua/WqvXGM7VbDQ+frzeqn7n99Vq9WrtV8wB6qtp4pvH1RuOZKpExguSCwrMqAviZ2zcata816vXq03XF40ajVpIus7Ra42sGDdRQhQrdaNxqNG7UAf+tWu1rjVuNehWY48e+eGmq9WoJslZ/+vZn6vV64waq5pOu3lhtPFWtfe32jVq1XlstmVfrkuVq46l69elGSUzqttpolHwh9VOZYJn/1Ro3bt+o1VaX+2HpoJ8qatWo1xufqddKdev1xlP1+tO3bzQCU6F0WZA3eQFpb8bbazDIsMAJsPxKfGQ8twTuSdfBwz0CIC8ZyKB0WY8qq7MstTmWm5Gl0EwugVu57gKitYD4AxQyaALudIlUw2DLaRtQFgACaO/SuoAC1a4IGmuvFTJUdAs8+QLwJUDqH6YA+xFOFYVQiSFJHLREZTJeewTi0joFcp8MC+w2YDbLFOTNdgmQQfMVIIUsiA+scdNLmBGZQPUimUUUX+Nyd+Bag8JwyiA3CxBRw4UutA0FP3RuDLqAuubsg5IxBE5UraGBXfWr9iRgMZkCtsLog730ygksgUd4PDYTwq4Hxtxqx9JtN7g72Y9dLwBT4vqTfbfVd+sM0uXp1iAdJq5ZqTz84KHLXTcfzVx32h6n3e/nb1+9yQO89DCbjGeTk5HLjpuqQ777kZserZ0kp+etmRVezKYbrHfGWXG0pCwM3266NRi1zJvJAOkkivPOOD69kIPDt9PDq8k4G/Q6c7fV62TxzmzSStKXLkdXH86kunn23pXLK5X6exdZkU3G0c5RlCOd09xtZ9M8Xc8G/zj9KN3qrZ0kwwdr627rjhu64r63xUwvkvTuKHPFUbTruucHWZIO3Hp82lNhXWueHj44yNLuK++9IuB+FO2lB/tJ2p9koFqpwdXl7L8nZ3G03nbx3rS9H59edFpRtPvue/nb7y/VFfheKXUZJsOLtXV3mLteunlvNM+m/cvnr/4LRqb6WHbDvzCdWKLioi1xct8Eq0brCP1/CIibJYz/pA6oBn2Aj0wWd0XDAqFYiY8Nn2ER3ozxWc7ix/Iry6BMOka4d7COhola3U2k+nvwLIGfJFzf08CNLwAHLIFZ1e8CKgvoNFWShFUDVLRHDBeg0aOqPNNLBNx6I6AHScSlZ3yKIKjGYtN0M3D0dmexqDyxIsrbAbn92gmgXtN45hVoTNBbRRO6JyoHQPQaKpacQWk1DQYs8eIjw0fGpnbrzwyf6Kj8RhgWIAikhczYFX078W/kJ0FnowX2klqooYcNBEAUuJoTJDKN1ap0fbeZFlE1GGIDqkvj5XGWesuMDLgOXRrzBqFifHoX4FIQyKOyzgEGiMPF/OxECrv16Cb8Ty2wAntEJ9xiKoIRkC21BJZI76cRFIBYJTYIuryGz5wRwAVvFsDD1FCBGryBdH6VunQhjQIgIBicS7H2AAgQKDm9rg9AEiA2i7DOd3RRybJYIWMEu6Adi6LAGwpwoU97VQNAtNM8xKR+HrAELNMjlcqlVE8yBHCkYR1YK1gnCqMmMJHaoRhBoTD3YOs9wrVwpzQexIjEwY2BH158ZIrIpaGNAqcV5OuMpYEUS3BOBxeS4FpKR5feFApwjObSADOJbWQApPKiqi2KlspbBg6K6LMapgHICSAFBfRrVCA7oOI9V6bN5/X4Ao+zafqtPIqSg5brnsfNZJg+wt8dF6d5dBLvZW49inrozXbTw9ydxMPz9iybnvOSbtFyrrh0u677QALfz4qL1n5yehRti2TMuW7P7brDqcyqXHZ8N21GO+c0H8yO+665HCGaiVEkHr7Z/1aeDfK1YXxa8IXsZukwTnsHc/N1ku+ZK67SPM9fPZi5zV6867q90Rgt314++SDau5q4JM3XtuOd+5yWpb1v9eJ4MMqU63NbAzd03dlknCiqg77Lk/TeJMuWpk0M/y5HJdXJ+IV3PqTJY5z23Uk2kH73W81sOnfDJL0zOhOOcTc9LOJm2kXVUPb9xPXidbe1Lqebsyjql9t9ETAlg/4DDw31R28pKwRvm/0K6t8QK5krAOC+wMrsjBrqKeD2sAb8MObarwEZ5ZYAmj1m1Fa1KG8BVV+3QxEFD76BtoRur1GAN1UtIUbqAQDLaeiFQuwigaWtA0BCYnRuZCV5+AeyE1VQUkV6as95p4kbSGxwwQ7qH7bTYgdlROh5RaUXEM2lT2hXVlZWK5VfuPmJZa4SBNLYU/8GLOYKADP0dNXooBPRWVDADQv4Fwq7PK5F47OWR2RK7/NnFo9p88q9B3yTz7UUQEtglgYSjD6oJvwQRnAQy4EV0t+kpiRQgFnlU1VQjd81QFoWAofDSUst7BL079OGlhHSLevVNI1kbT9zW+20QmM3iLDUlv6PVLOthRdT74xJFzySuYDzT+EUGyWdFKntMFQETUOKADNYobLQ3XgvGp0Ze3KEZVJk2LQpguY3CLN5H6Aq7qKHLynsEcdUAx5adcBCZLyyx+CqtKdRXsqWUwwEqplb0rJ7aIkmwvSt2QBISssI89tUJicI4VOIgzLgodCYQaPsUKn7KN37Q+hTcODBjYD9oBYVNlKzO0vFPQCw+FwB2iPhFNiNGCOwTLr4tpUlAzDhRswZWT8KC3p8gvO51IkSd08AboBESWsFtODbxFdmt5R5WqJHD6e9maLFMunNh0ZgG0XOzTBrdUFO5Uo9n6fiSMrtDjgHy3rEYV20cznJktOiM49Pr1zTDfIDl24O0hKBxHcW7RVxaZnaIvTBX7Ydp3mrlSyjH+GHLiezOB24ZnZs0y/lMgxL6R7Sg5bwSPNkmD/bdIf3PTlSMZ9kiXvp8mE22GiP3WbePvPKlR0PRrNkeJWW+RDf8vRu6eF63yrDM+la5mn30u0mw6kSnZFG+UEr3slH4+zYM34sw58sPs3TntvMUaE30q3eQRaforOUhuok2ktbY7d1Lz2RfSteX8vd4VE7i/d6E5e49c4cUJH/m7lmvDP9Vh7vSM/15sPS5rm0Ox/tC2nW42jg1rPp1WSeHh6tnYR+/6hraI86HEZ4HCmdMetC4YrCB6jgZVHHElwLG7RQP6QukGERgNib2XsQgM+4gRDwrIVRhccR7iK8+coAwSMaMHWzkEhc8JAfxlwnYypaM50JECRo3rRMmSLDRwZNQ+I9MtMAV92LSr+EagdBZyNIIIGvqUu0yKUFlac1Ughztyx0ULrHVZ9kfNYQRXlCLPNDPu/DXsUAUcHLB9+VZj/0EjNZ0GUDXIZJCgVCBJVFNIaPCNZ/o7JSqT55DnaLeChhTQNwQUGFNhSW+GoDni/aD1DIWrd+kUAm9qI67FIGzQBBmASvgK/u02QUtmLlF1YqlepvVH6jbhmUoMC0OEEQOq+srlQ/sUwRH/0v8AxoAyDe0SaejYh4/jwH0U49nXD2vODNApbo6EWaGOHhJEGwKdoYBsjUUQqpfIj4AnB1zpWIAWKjswT0Xj+kLi6V+aZH0CDUoIEQRjroef5blTJBqyR/yjuoKRgjJawyK/4KuyJ2cdWgSpxmOYDydSx2CmxYvC4DPjz0EsMslnCTtEsPJkv/B4Bm1wFYalflMb7ADfCBPYJ7DOvgq0KXYRFfFf7XH9AHcTPmJidJxy4SfgTVvvanSj/bPNAFNiDAbpniyqrRJusMSjpLwmfMgcejVMh0bjgfjcuoZOYur0Zn8XDaaaklrptGvUyMpASg/0m7V6NWVhRsHeJ7Ls8Gvfa+K84VwHaWbm5EJ64o1tTwb5gNBqPMbaHhwxSnlQ3upOuuOz2YZYONbw2zQX5wlpze91RxURqgzPU2zh58q5kVaWfuukXHpd1p1IuHOufKouhfXTM9PA+pojdy7njgdllObQeT4WU5jXSo0Hq0c94eZ8c809Seqz9x6VZ/cuYDPky7+cRFew/amTtMPaod52sny+iqtFbdKzeM4n9Nm9n0vNNKTqftVno4/VaZ3ImcqzTHmxsHZ8+9d97Jsmk+yp6bfrRM6QIq2JfA1E1YJj7m5gV8kQMDMuNAXorvLLy4YBxKkOwowNzZ0IzIQGLDz7N2I5wAqV8BnTLcKL0FboKQmufSiQ2nQkIDv5sLSNCU74QNgCEEoxeO0f/1LMyTBzhoYF/AQTbvkDaAzR2oC6ZN2y2PvfSlau+X0MLqN+qVihkBdjfQa+BjULz79RsNeIZssyCT0QWA1LyMTQyUX/XSZaglCgtMCnVfBv9iLElhs2rEQ9uPHhgWaJdUtu8QMOn/AC+uiQhJkS52GBAhwSulq9yKm6YQWUlQyJSEAxFUd8QeSeBfroO3Nbj64WGnSv4PPDAnTyAdYPHVA0JlQsCvEGLfXA34P/v7Es/zpI3eyn+G5eBHSUg7w+KegORew/2iqH8GGGX9gy4buBHLJRrGbFggKfXt+7P0O4yRWGcKacb/sizCHNLrvLqYiAA8qJ4FdYGbr54H6UhOQG+C0R6FWJ4gDV4UjEwhYO5BCrQeXTXvYTAedHlMA9AqBPbbZT3019N0Xd+VdYNgXFCp82FWj/otu1U4w/789hnDJwApzB/5v6e+RgT/b1mE6kLAlXOdst4LrQBd3g7/Re8SN6NaloeWwSXp4HTbgwJZYVAhcF9ZqwSdrWnSBnj5Gg9f/T/oZxtAZV4bIlBZNGaLdmajcbznT2xoWvVscT8extEG2qhxNp2NztwmwvDkSIP1uBntFdw9t+66ZjbNJ604kv6q9Cp30u3k9HytRINkztz0qDN2xxrfa1E0GJ2l3Qv2AZtJZ99NryZZurQzglsvOkncvZFwIwzocD6Ze3OzKL47OcsGnFVpizM9OIuje2kvHnpcWjmia2WDjVbpBDHdKmeaZYwmbSjNEeOd2eQsHqbtcvgnMrK83XJF0ZpHcX+UucOr0mm9z0pOp62zdKufntieeyzdzsz5jZ4nMiMN3Fav09JzP/AW5rQCLI7yQ+YU6MMPbJT5HPFwefyGPU2+xMbsh2EhzIql+RL9oQXd0x4P7ZHY8VAoptwS41PcyLUESAbZjUc/FRxRSYsDnyV6AuWxkgTXM1cLsKEGXHtWz7AOliifqFQDJWnPvUIEyOOxfqyBX0nOWsAFlckOFu/vEyu/UToPMl4A0h5/3xecOgt3fAobXOW5mOOtvzGvIoySzLQC/JqpAUmRKmiXdIjrXwLzcU99AtaqUoSVnLDUn64LbhhiUXn8EDECTetLm8cifclo2XEm6UANVtImmaX7UTLZIRHvkLJxr8K3MMVPpji8p6GTTK8QQKy6VBdIPVWvfmngPxbliWCP78Fjh1ZMzjxHg0dvEJ+QkHb0YaAVUJawED6+VEGJ0lSFK1RwOO1tU5hp3w1LwGTK2onIZHAWCBQog1JKGl8xk5N5GAgW9seAjIiVZJIFWOjishoiM/LIzs1Vy8RkFGaAphVSPLxCWCwnuL3na6SsJKvLxVGT3UCIRQKiJopA3qAJETQXy2ngegX8BxUIcagD7H0pTsuXq3CTDEt7DBpg0QXNlLYXEiXMoCjTUkoaX80NEiXDB+pSeaZ9ADJg/saZEX3N0FZgchdQ9sFD+NRWsOyEmZlrhUxEnZbxlolzgG0CgjxdcAQMMwWI5Y3WiU26la/tuiKbOB+gcdo9amdpNxvNhd+YRTvzdDuKxRI+Iq1o70FnnqS59mbx3mXajKMXeqNKpX75lhv0DvajuBmfJK4/aakl2XF/NEuXwzBtjtKtPBrGaU/6k+047rvtaKc4yChRerDWzIrzzn4UbcRDMTTLXbc42HfHnjmd2xxM5vGOZ8KG6Ae9tfVs0E97icvbc7yaL7/1re2smK710u7l5Cw9nLIee0ftWTLMR85tJsKvJZ2Z6x5F67EwaOVYcRztXU1as/YGblkr3ruIeq446mQqfXNbd0YuK/IR78LNd2blnO4sm6ZthxS27k1mUZx3xsnSnkklz7LjPDohi+hxRiIp8gAykwBZi77C9o75BlXqFn1PdCwGaRdDJqC/AgQNn2hbfKns0QPmJWbGYnzpRVM3geCCTcG3XOQ0YF0Yn5lF4qF0MW4BSQVNFDEA81k6+LgMs36opM+LGlx7REUUxpLYA0rfcdwmwhI5ICix/P5SAyUEOiCgAJNHvQumuFyi3g4wCWCjymlRpfILN1fht/212SN4pGikxksgQ6FS+26s6NPO842mgy1YC52S7AzvsbmggMNpcFUyT6Qh4yHmPAeznQAyENF8ol75hZt/9NcW6oi5q+zaAFKUjHzIQRlVkLhWrTyRAwwCZB5OlE37FIWVJ1YqleonDJ/9ByE7NmfATB/JrCScQb2NBgNCMQyYKtUv3fxyY3mslOVEvwaxHGGpP7nyierKysqXv2nTSH9Gpp5TOrRoScB9AQJxInkrwW/Yi1GWxxUow6KxvLMsM0DwhU+oLOAQTsbjRmCdOpfGFzDrs6Bnd4wF8CnLZEdXzQd1MbSgOhBCGF/gBup6PRf/UHtE22PMAaTAhxYxwAkaSPB6GotdAAUc1oFqsAtaNT4RAJwQmEKw0yFlVsMOKK0zuwAIYFgn2jS3blhi7P31R6aIMGjsfcDDGSAgQ8Gp7YRwMozPLhr0AF1hBO3yabdE7gZtlG+M5YS7YXzMzVfS51Dx7QX0wgDJIQl4JFoHpA2p6FYyRBRYuC9rfLzEegChtz0C1WAdOF8qeCMMs9g8PMkA1/NyeWObdLOcqx33XS85TeNmkvZLGM1vnUSxtFblOOmOO0kowJGeazvdTFpnifZNa8OsyCfzxPWiXVcU8XpW3C9txWDUSk5nIzX8m7vpZbob793X8y231Ww7y6Bk/3LZIImb2eDuZCzHiqcXa0M32GiXQ8Jo2xVXo1m8d+m2vcImbjDZT07TgAlbGViN3TQfuVID5wbNjov2sjSPot7abhxjkqXljHZ6k3Ec35vM0s3+ZJYV+Rt9s2UKWqeVuH46zArfYO5wPpplxxtrJ24ZJjGW42Yri/aOOq04vjOZl9O+LJumaz23nBnKXeiVg779KOpFQ1ccxXk8PGq5dDP/VtNt6qSNDQH4AzuluovZU0zPqcJnPcl3GLlhWH6leyuEWMwD0hmiZbZCYJEzPvHO8kBQeamwJEbRhj4DDs9YAkGRVXmE5fv0iBM248tzNTB3+vVXchogJSdsD72fCpoxB519mI9BHGLJCZqypsTX1AVoehcAGvC1/aV3SB0VWfx0WluFxx/eWYJstkeNtpRx0L5EATL2dMAUGTMYQAHamyh0PNqNGAwg7cOMJstH+p7A/KfLwSGVPRlmSeAPwaaKpuvRBZyMWU5dylqR5TS+YEgtCgAKZDm9e2RnAawkUTU1IEHTqhlmPdlghYARPV/KBML2mC6w08AIzodWHKjC1pprBmgAgyp8lmVvPGwCnFJIewKOi0Gj4+vFrNyDvnJoMMhQ8T2mXEohNG8W4JF0MCPxgSRiBMMWh20joAK7FSAYAWK9PTEQPOhaFxMxtIl4nBHop42hKmMZtgvac3mdoEIK7vURjoXtB+Aj9EEzIOVViAtaDZ3iqFZr3gxioKDC0MlXPTiX5MQVFkPvdS2QsAR5Lr9lgsmUMGhsZzwGEugHCOZNdjwxEHU6hqFsY0CFOCPdhbQQJz7Xhx88sKEiTPLIbjxgP4hHGFUiqHR5zuqnef+qAABWUDggnh4AALBlAJ0BKtABNwA+MRaJQyIhIRRpRdggAwSxCKAo4Xg5sAB8huHpPsZeZ/u340+69Xv8D/bvN91o9ReaTz1+hfa5/X/+X/N/cn+dv+7/ZvgC/XH9iusJ5gP2M/b73h/8j+0nuE/rXqAf4b/VetV/vv//7hf7z+wV/C/+56uv/h/ef4Ov7F/5fTT///sAf//1AP/l1i/Ub+sfir+kvyx8TP0/0zetvi4+N/uH3Te+Dmj7G8RfFXvF+XGoF7b8v35fsNth/13oBe832zvhdQj3U/F+wB4y/5rwDfpH+d/bT4AP6R/fvV1/zPGn+1f8L2CP7X1Hv3i9lo1D5eZy+uPyI6d5PemiEgk74xPQ7cBhj0UPfVC3spFI8sVz+f+TUECWdyP6PA8iibtSY/yTKZep7OTAe+sjNm1qMDqWEJifvAbonpfoh3aG3bhLKVkHkUHJr6TIeM+LXQNgQ40vfmvtMiKH+sXYklz4ne4Gyr7BeaBlEWqG5Djf36DeHh0aCprIe3uXEPpPiqLlQSUVgCLH0ZoN/XsYLjl2aZuJXOyD2885ptPr02/kIvosXf7kGnZbGoq9XDr0c3hrDof/fRXa3ElyTY0X3/i7cxBkN7SgCYv3q4XfuQEGPZaBe/sZCIq4/WrbowA6fPsfiowPlHmyrHon2ErEWei9Kf+0MwQNW+LF55p1OvvdhyhLK9nKKWGHmAupwl7xXfHoRLnAgW/BVYa/oayMT+CoETYchhTxzTbHMSQRR/CH0wTIoWdW6cI5AODaCYVXrKel/k1mP7Ge9E/3gEBvxUz8aYDGGaeEk4r+h71rUWv5w4cf48+9qwcMkqwE+mpX3ILvY1HJwRrfw5z+u1weRbzf+xebsuRNBFxbJvsEigNZYfAEl3RvuaMMl355je7xyYjQVXQXRmzh+0RMu05/CxMnYvNs9BgR94DTquGhuq/znaw/bXHQ/l+UK2zMqungLF1gIpYgEi74Z0ngnaK8S+ouUwmv/Z4x+1qYr3YVUVtgPdb/6E8HvCuE6EXD/7SVzjAUvnd8oj9NmFkm8eA7L7SFCx0YAPqcOKhwqFE+FT1rh+SYDo3NxvJ7qxFRJd8ZAAD++Tk7YSnOVKyrQs+ma1UG1O78eoaq5HUsgEjkbPiXC9MPDc2DcDMIhb7L5bYXRujZOaNN/qtvadIWtp+xYxBCJ/ASXX82EwEowaZqHBZE3bLotodpXp1YSyjBQg4JHK1grysfSiQXx6AOggrOJNC7Tria82pcNnsa8hnC+YmLWnXUqqLk6iVb+KmberxldaHbF7Q7Yv7kIXNkksuM45Zmd84HQpXggWPSO0XXUzfOMOC+S1hF8xEt+uViiPlmj+qs3hHvsV9CBwncHEWCf6BXJSibIlk8OYnhUn+41JGX5Ur/LHwtltxbZjMezz/87tFbqhj3/GSr7nMST0BMyKo44l5PxD5vpeC0idhVWECnqjXK7mpM1pRqB0loF4tyEAz1WgKv0PFpW/fVHGZADl5sLOxjV2KrtznA0cQ11AxhJ19IXUFx5lGhdjekGNSD/eozZZgwk3cxx4a9n5gOSiVoJkDdp0u7uoqnZA+VVCwXOLE3i6C9FtksPQT//80334L8Sk0yuWuavz5TWO8UOoyx1NKMcAkb9WBmm2/KutrqOTKtroTVfEs7QBBA8JbFs6Do+Vt7FSQ0EM3UnkjNHq2WrTi2NeHItBPks/+cJPPqPFTZls0valbivW06l0heknwDGaGhqLQh3fdSS416aIgom8hI+oATVc4T+Z0UCqeL9n2NvtoDR0bi+hBKDR1FG/5miXd+4eyZHGwaDMblq/ctCbU8eK5YdtmPVYNN/7WbHarz2TvuO69Q3j0DK+AOpOvngxdXPbOIXLt/zPJqKPo9RX41CIOGnUFUi/hKIfwD4Mf+YHLq6w7ylSQkVb9QBCElCZ9jgvF/aqG/Rh8QRWH0bTNQde8Kp4VusC0n6X2sxBYEiDO2AJkY6xdl0a8SxJARecHNho6NxgH9bYkgHDWKF2f0OvnCwCot0hqqgBpV5my4BQ6wvZyK3QiRulGz9ecQN4d+rXBcLT/OEOzw0suhgKiyKDWlwmTqBr3XHLqqQ+d3/OPwU0nBybJD4ikzSBoy3kVMRXP4FMQNPH6hlWAnT422kjzGnCMTfC9+1SfjoFQLhqcvYeemIjAu82gtlR36EXyF19geLMBopakCBJ0OVUj6vle58sk/vLJTVvxa+uqFpmfqorHQCo5RvES91abotmuwyVVp1x9cYvl+F8RWUnsPOZDblCfdcEBRIimLJKEbnXO+pgh4+x2Bxk8XPD0ObLl/RntTY6fiOr3vUdxm/V4yZYU4t202m59z4NwTZK+8S40yZwUPdlwjKAaCQ0S/l/Y5+04RyjQzYXawXEA8mDaJvlz+mMeaKh+ofPQGj2i/OngJhPN3Qt8wVejShv2EWajEpD+ROjC+0Ke4evRH/LZM3g09AfFeKWbCdF1WFPJhJsxaKgWE7XtyWX3Jlu+yp8Tsy1CNeOP7P03kBPz8vJMhMPLNlmXsAaG2Id4T4UDfJOzNyFS3+fmFP9RKZiwdpKTiy9rm5pbA0ToqnI/F5Ica49z/1Hp5TlyjJGDPfDFdUjGhOHC7gnvCjLpjCJFhOiIJhCKxZbyYtT6ETVTrvcCoxXQdz7N5g17sYxXnfdu818Yf+fkoI0SdCnlclMSW/ejSFXOHUh5+0gKFGY/ZBAfbQHDChulc/k7FPbf28EatgBYgCH6p4nT2SJw8f5gSLiwuCx4OE2zsL1AuJKfs5f46p77W0pyPqVtZy8tXgIyOIs/0biJ8qLVmTy9D1FcGpMmPFJtIyMmvNDdnQGmD2Ck3TVe9Ewvvy1hpNehc1NkrfwRgeoDq0rMUj0QJX5Qw0g344ZBci7wRRQE7qNQCPwh1nzgGPkzw/HRoLk1nnvpkg8UBovOd4mksXzOG1I01gNbvqPJn9kTQbG+ctlJPQf6qUsede35xvBqvvDDu08LIPRymcqYVxvPSbJq8aJNLEJN2x91ZMTLtDHsxLkJB9/jZJ26fYwwR2aMGsSiix24WZERz4OwGICooxpSnGIyKFWWX5SBtrTJvfqXkUnY8zUDJBo/civrjbC/ud2En77wYMOX55MhLHXZS+J7YHisXbAQsrkIHcz3kM4zYrh2WyuOXocIEPyhlOeaNUdlumZ7MYyxBDJH/gy+VWrp4WlrQJw2gx+H4npW1lZk3XO42WIl3szPOU0+m4djxMeNRe7Q3Z9mvAijkYJfbmvQ7BREip49fqmk5Ouifgl+RFJTED3cA/62zpKPShNn4Ty0mCv7NW7mLRHQGS8QppJjRJuZ/PzhKEoc7RNYK+cUgTt5jChZR1+7QIxTQ5zjbf9J/2J6W/LcSmlWmeYsXAkZSs70sx6sUJOQiAUOllFrvt1o2+nvnLVzZxXtc73cBl5iRr9FKMhmPjlqm3xYho7nGOi+YdQhhIGR4UJUrynlxFpU60olMpJWBeciRdJcuos2b+LTUSC95iyKvS/t8zHWBjqSPXmRW5VFbMxNSFDa/b8ZH02Z0qr3mea8/1kBgxY4EQ0XisAG6x0mlcENFPOLl1nHQ+L7SIYFspQEVtrXap/3NE2YMrt6X5H2JnvwQiTOLuQdca7vGYVkW9uy5T/yR0aovKulZgn7rdLmVyeEiBgmHYmDTVuS/zqKWoa7eJSVsZswGF8qk9WAvAISZjL3ySl8CZtxNvPuV+9jqD57qLF9yLtZUjBjooVgm5Xwk4Wlda5EL7vKcfhigbaEZIpmLTSrDppkHsOi4cXVh2PG5KVbNvYENrkTlHBkFC63G93wJcfpeDYAL1/Gk3G7547dRz2G9aMz4W6Fn0Rj3Bta8uuXxpVTtBEspBhT5S1hCP4LrgO9WVdJvh0SdcUWALVDsPw3nrtkosz1vL+doniDufbxMVqNybZpteLAqjOnas/zjqCWQqbKKjoouKnQOf+m9hmQDcI5O/zFVUjXoL0u5rT4wwEiX5TqX0Kts7VVBn0G24qimzaBz5zE9HVWNgXBrKfCQqzMCI6sKES3MArqEUyRlOj/LgGrqi0E6mAIc+fnmRhCzII4QG2YkA85fTz7PxpbxMnLGZmbVShiU/cn85lgshyUjk8ldt+4oXQy2M+PDwRTyKIQ11an2L0LDApFCHmcWPnsTZLV2mTaw1F2gdBFtAtvBy8hyNdY5M10rRdLWNNAOlH0rWqjsWEQ3SdIbc1dGK4YUGkGf1pNxnrMrlVszRA/C2iDARPUPuo5Na3qO1D7zJ6i1KvfGscR1nqgFs0Y8NALlB3QEJTnCmGU51Uj5kVXKv6Fzd2wp15JXQNXM4yxRbzFl7Fb2irk1aWJEFfV29QvX1QYGFh1ex++j2/2ummInFfStmNZTWJhtFkRSpTRBfe61jQl1mbh/Uk1yAuywF3FB6XThAIN4z3KW5PgTqjakqzmoAQ9JxjIfAAi//zOh6EbxPH67i/Dg0IXaCPORJp5xDu0OYnGCOcVCodl+kUErZZB3xa7Iyiw7/MPskaoZIoSDVuwhJ5m1BRhRGnTdfmXcFJfh/oT9qmlAd7zwxv/4/idfgdhTOWrm+N5cOrK0oCyrZs8kLqGx4D5mSqjim/Zx6BvfcDFMRHRO+WWYbglKA8UzCt34fpvZKsphEmsfO7il4ZZSLDQzSWyaAJqy8/XtW0dUpKazqtCNHQJNTQOPCZkaPBGOQOtHMnfGB9mT5Idogl/vPs69TCMCEjfiB9Yo8Mcy0gwFtOnDpARlyI7EjTvceFj/ReecTk+f4gRx3FhsoQaLFAP5dNHdxIafm7eofY6mQLgM+TYjPFkQr34P70/RU6s9jMkf0Xv/AHvW6rayGnvZaFwFEpsvGSQ7M2vmrm1D/3ejQetmofrlZ17Tunh6UsTP0HK183tJM9l6tH4GsiBdkqTku7GD165pL38vtyeT4uOo7gGA5JaIYWDZyT/hJ4/Kt8y2MxvBfRUxjR55PI2gyMysFBeG2VNVPb/+vgJ3SrrTBRSmdXJXpQHp2vhe8mdpIDZCaTgFqihGyWT6UyqavZU8gtOHpsIWxEoeZJyWXWOcPzyD3hna+UIlg/95Qmy5Dy3ZvJ2LP8Y0++I2+L+brDjPwc4dRENNhqk1JBKILk60HSheMvt1nBTn/fq4Lew/zM4ytzlez8tuHaHndfihb64U1mn6JCJmhtkNoI6txtIdleWQ4Cx4k5c7GnOttN+SoEqETRoNLEv0xJna0Yt+Wfx32q8Dga6GkOheiGNNNoMh+aB04ydcgZSNeirrlaGuNtm/VNytbrwljwjLWw6zbjyDdhia00ae8H2eAwdSaTQKp9P/E2j5tyx7pI9ep6fVqeZ/q2mHiLZ00r21RoiV7W6Y6GchNBv2xorw9LWqO7SaXmHRdfPpT8Gf4Gs/umkKh6lAAwBA2n6Tn5Qo3sbnCoq2sGvG+whTBlx0LGW5s9alcVDac8MDn5peEY4YmALy4a9JJ3gK3OHkiIR+Q+OdcBfHlR50Hu7k7tE7uiTLFb/AKvXqyQoDQeuOByyarYv7mCmJLCO2/VKYq2XYKc0M/YD5s21PF83rTgw32x27IJGpJyRmNw3FixdO7WKVyCUXSPZMqN/A1tuqh2tBIA0ndewJ1/CT/lwnhQ//VU7w7GS5jkKdsyo17qlg8pSm5DCyLwH1ngam2Dilf8IpmJ3wE5imzuSR+XGN9WYnYxUJAfsn66kkSBo7yZEJomm6EPDBunS5+Bq5z3iFnIyl4F0hZG6KUZ8l85dO3PPUKP26iTTMjINBYv2O+Gp0axZ1rZeXkR3ZfvtuB7sDP+D2dXsPyZQCP8bgLcXp7CDXvgZn6omxYVhoVVDwKZc06LBgGN1+B0E75n3l/IsylLNswtFwJBCfiilm033wdmE7tzGIoegU4kVtML1R2j1LKDJkFP9K7LgF15ULYpo67ABrM3h1SF8Xt95wJhLJYW/Wd0VnpYqLbepCV4hyT088/JQVXQsjZl7qIW0/b/PgLfU9h+6JeDOSpIC8GJehnrLVx0fxkw/Vep83Mx4dHZNT+9K+JzyfQ6d635CuU0bGmfyUCz9g3dA23YfU6QfrJYiCDNe+zX1sUM+eDarwrKupgCShsoGkVjAGP8Enkq1Uk4v7egTqyESRkcGuSbAI0PhTHhOpTsSqK0BxSceUkvXRtFKarU2knM6pg67Ygqo1g8+lsngQjIyZHn6anFq2o6yj6n55buhAt+L0hQ6Nx58Ggwe1d21cEoi2RA70ibPqjsHw9RN/80UJKomeyoOdcJX9ryuPL+FwXQwfJlD8bxbHUGpNgde6dHGYC85PVrCChsC9aPlHUvvuJkrY9nw49nRG98jQATlrtEvuSsvTDoxBQ6TYzYaiMluzkfVnnZhPRCA8bKd8h8TL0i8JlomXCo1LisIgBzbet2wGkoBnINEys4eKtekO+vizdEPZ3cYb46yJ347ETywmiWhcqfZufHh0MhzMFz7W04qW0PuG+9fjyTtdlZhGe7AGTWw6EnVln1MVDKTvBD3w49tDvar2PQEV2XtDjEPSHfmFK6ZE+SWWlW4V2PKuIMzZFNrhnbFSkuNakvkgi16V3G8WaPBhE2PC3GvHZ6R3kSUcJYVzow+znRLYA/unfpwAGs+S3TDePN9k2Q7k9mYg9a/3CtJACwGHAtFxlzZwKZ69y0+WOyQjtF3vasTqs2YzFbFeRMB70DyXjvNcrHFozkXRQGtIVqoB49M+SIN9HVIL5D7K6YKAiJlH/+QA9XNAv6vbZ+nSclVE/AM+WJDevm5uYCb8TTRbQexVGjLmNwZP24tZqVapKAMkznYt8N73QZy9vxUP3afVwq/yxaJ6YuIKay5WoBbmdc/kdjLfd+oCyTK10zvPrnuP25qMUUNJEAHMwuABbEcTcTLoXaPsB4wTnza+sJjjXTw4gCVfvW4XZUUE/X8bv3+gFNE62hAsLmKG+m0tkYgZzzjp6fb//zNoSj8JFmDW6CDp8+GGwxRTCovxB98r6xV/l0+3RbkRqcrnP+v0Vj43UQYLlbb9lnWmn4NirCoGbrrkXs7pezL6mHkhHBmm8gaCYYGNV7mCIpkJ3SPXLvz35uAYasa/TbmXu37dL/m64DLi8ea2KzdbCpWl5/g12XEFNVd1r1e4ahs9AiwhjkAGGbsb9Vhz7CGjRWqj6OJ7d2EMssTOqFcYZAnJa+qFqKTUckmDock3ztDU3VvPdibY1TDkaPYqXnm1IQYOb/njHK6NXOwD7ZdtroVq8SuAvi+B2Ce4kCApFuTdKW3RJdhpEm6nr6X1twexnJDoXxEXlVbuLBjI46YCafMQUYPu0RgzhUJ5XMBO7b14vX9qjx4pO54rjP4Ftbp7lwvC9D35IboaucBumpgkUFg/B5qN2igxiMrAdLbs/M50KT9N9eoNCdjGXMegqoQ2YSTOhZNPTsSTAgKsQ3bkBQ51B7redbfmL2g/MOiHkhoFHAOQC+7OyfqSEwdePfeSrTcL9EpEEyR0ZDX1XnptsYG0+YVW6bFRecIMVXGjR1o+EXwDQx6qtLpDRlGlrY5QfEy6VWR3kM/ibg374oA/9i+7u9XAV2zQKp4uuGxCdYdcdLgFN629Jy6kMGLovMsC4u6cNBBFXX/pRA7SNymi84/9PDm+v4rldEY1C3yIpIY3oZK80vLqqMtMmpwR7Av9+Whgj64aS8GqxUHmKsdjUpgswRrpscjIhEZWvRflYUogd6JXUbuHPECsuuVsCPeVP4RnVkNps4yA/k180+iGruFogCcQNNKMYDLTcSXZAzhswA77AZHQUCzOV5xPVsb7EFvCVKjZxHXz7QssEUSxp150jc/MUdT9zJLYOrAEupZlyVNQkYlba3RNu3+vPkicBUcV9e5oSanlsKf0dzXqOEnBTnGlcGKH4Q2USaaykelfdYn0an2wG/8Ze0v9rtvnorhsLW67M3vEUHu8P7RQLh2RXZniMP1ZCEdcF4GyEzR6ApFpn1aKuLdRjRvQSa4npRiwKl7L0bPvsPh7rhiDV54VXeC2m1a9BcpmZarQxboEe2e4QRsa9pCLGzD8DMZhNf4NQ4ilZFQT1tfgvOQrgZKuyHxT/LtdgDdWFUT0+M6vZYlsv4S1yAViN6XJ59IBxya6pRudsbfhkVb8+VZ0pSZh4sbf2hjkmyHZT3h/C6Knp/EHG6OXc6OXpiRUgTKHpkHffnQF8NEwvfNR837HcTyM482rR+fiEey5sunhYvsSks1GliaMik+VOyd0IllAdYvMeluX2Z9z1E0pUQmT9CnhQVa7gOcHAm2K94zu7Ane2lY4zXfH8z2iveIAgv/9yFIrVPveEPo8D5FtK2HEmrlQT1VuRHVfv0tUHeNrkkXIjRHrfOOLMnD6hn3Xx7Q3Yi2bn867iye0rY/hoLgr2eXmW0kZJcJvDKEb7NRcA2fryyevVI89xUpQWg6MDI3Dxr0ZLD0iEnxxruhKgId+rwX5OdIU20dc1Jl6sNC8LOlxwGuGLORXrCa1K4geKrkMcFBAx3epVVjnR5K1cQAbX9iggV9Rujt15I9re7r0VXng303UkuUBW3nzIZriZn6tAHxfYv7+PT93gEbhHLnGFYsZRkAh9Md810YpelPJRqOKYL4Su4EqnENtsh4IaM0Khl1WzW7y3bvX+NMJulWoLtfTDU04RDvL6J54w7xIaOiTpAyYxPCYFfH5EGQQCIG129qG6uFMYGERw74yMw90Sx359OEqo7fp4yn++Ie2mXUIekThnTIjUGGRzRcnxAo6zIg1ppWIxq+MlIaqCu+M350+S6CtlG+Mo+tzlR+X7sVhrXnZ5rwgX5a5QgpM8R9gcIaQI+/nNzBLmKBJ/iYUGrSbAj2QkRpVvEKR3E8ES9gHUQVtqIq2mE5/X9B+GPy+9Ih8eFQSYat4c3mWxa6bI2caxg96hY1TfSEMU5creENUm6ayNg4b1E5dmrm32YwQwu9CkB1K0qvccYNemJJL+XUHMnyptewOiBuB8d6Q8f1w5qXyPJ0YCI5wri7r+T4mio11nxqtg2GQCN6WxFnhPMnXu0vF0cvirG2yBC5LaY7ElDzE604tE9WuylCSWhfw3gX8rn7BRv5s1cG8/t9008ts/10+JkFO0LBoJtYcP3FrKdDEhhA+8ReKxhT40DRKZbwH0Rk4R6iIS8z0jB91a3JHTxnkgXIX2PtzrYWutwyFDF97zZcUI3ySGCuvJFq0RVY9UTCRnOSGzACVAOkWiMXj9zTb717WwoZsLUvdZjUUtG/vw5jNP89XCT4XVe5vaVVTnXW4YN+XTcTXQqx9t6Wv9MhKNXPlfxHuyUT8yaGcrLCDEXe8ZZqScB7OhzoB2ihL3XcbkyzqJIbaYi8ul8ONfmHtf3MFckWIMZb7QRUp3AhZgFZ2Jr1vTYNCBQd7JVN4kTiLkDtEuHtqXZTQ0ZAU+WrAOCdH4eBcL127nrJLoXr8R57GRXO9HpeQXhoIBQrq7HW5JbZCumiZ6Zmh2AlEFDZ0/kqW9VpUhko9jsuEg0EDJpdt7tM6EgTe096DJbRe1JhVgm0MiZtnc1THHQ5DrcW5JXj/OeQDPAbWEd2NzVtS601KQzl6ZaTWHE+o8ZOyc9pd8+7PsSHVGg+QkobzaHB1yj/dqrMPZLlm9YDhjed7zpiBQd7QP33zmng09pEVZyRF8dWVlGC+MMB6Nii1Qa6f3B4CtlUdiK7aZzRb/COUhJv8GHx1wIGLCU+acYUBw+ATeaJu50wGrmM+8lf7n1Nj1sj2TVZZ0oy6l2+8IURW3/jLsOXzE6z0iJWsjsWReSrVHeCDYWM/3cI0DwRFTq5o+DPHof32v0KfstTDGrlYsovlifaboPlHwJe8h4bKNgXnuufWiShgbm0SmvlkRqdbH4l6M2h3QKLAsD8uP+ASFl+/T9y1AA2tmBBlr4uR/vpT8j+OqPXtmGltvOPuNq64VB/nCpNfcQsv5mQ1XXV94Qvzhu9ewUMieQ2HgY5wvqu8JrTIdAGzNgbjBp3o/dyDRW/P4wAdZmP0LJO0iCB4Y3jSmwa6anmYDEkjbT+vnjP5hCcZnOxlgb7K8rejCi2R7ax4OiJ2R+QA2UHwj9uYczZ0BFirSjrD6naf/zg//8/LmPBcWIhQ9BDuXIXQawsbuM1zSUOz7iQ37Aru61MElaiwcZmup8tZ3jgqnloyF5srX9Jc/tsJuKqoT0cMbIZo6Bb57lFa/X1xMsDH1R553mTC04C4IfK4ewOSZPpH3+arIX1RPVF68mj3EucNxS29Gq1UbPI7o3fgekMaV6PQ+yDZmRsQo3J+WfBXQVtP+ueX9pvrQ7kcMUz+4Hn+tt6nbJsmhwOxcfryB6edRLHwPbCQuaEHNTmCj3J9rEqCQFv9eRVWixtgzAl6yJYk7OpGwGlL7KVPIOyw5x6oSD6ZIh1paJdzK63HRPynaQ33rfnUAAAA); background-size: 232px 27.5px; }
}
:where([data-ground="bold"]) .term { --term-bg: #07060b; --term-bar: #110e18; --term-edge: var(--line-2); border-width: 2px; box-shadow: var(--sh-2), var(--glow); }
:where([data-ground="bold"]) .term-input { border-top-width: 2px; }
:where([data-ground="bold"]) .term-bar { border-bottom-width: 2px; }
html[data-ground="bold"] .term-title { font-size: 16px; line-height: 20px; letter-spacing: .04em; }

/* a bulleted list in a dialog (the home's Points "i") */
.list-disc { --stack: 8px; padding-left: 20px; list-style: disc; }
/* locked choices keep full contrast: the text keeps its colour; the disabled radio, the not-allowed cursor and a dashed
   edge say it can't be picked (the 55% dim put Software's Pro-only choices at 3.1–3.5:1 under Dusk) */
.choice:has(input:disabled) { opacity: 1; border-style: dashed; }
/* a segmented tab row fits a phone: the options share the row and shrink their padding instead of scrolling sideways */
@media (max-width: 599px) {
  .segmented.scroll-row { display: flex; overflow: visible; gap: 0; }
  .segmented.scroll-row > button { flex: 1 1 auto; min-width: 0; padding: 0 8px; }
}

/* ================================================================ the creators page (P-40 gate, P-44 A private page)
   Without an invite, /creators is the gate card; with a creator's signed invite link, the private page: pixel icons, the
   premium link and its quota, stat tiles, the payout timeline, the fan-world table, the kit and Pix cards. */
.invite-gate { display: grid; align-items: center; min-height: calc(100svh - var(--nav-h) - 240px); }
.invite-gate-card { max-width: 440px; margin-inline: auto; justify-items: center; text-align: center; padding: 40px 32px; }
.invite-gate-card svg { image-rendering: pixelated; }
.invite-gate-card .px-a { fill: var(--fg-1); } .invite-gate-card .px-y { fill: #e8b931; } .invite-gate-card .px-Y { fill: #a8761a; }

/* pixel icons: 10 x 10 grids, one path per colour */
.cl-px { flex: none; image-rendering: pixelated; }
.cl-px-chip { width: 14px; height: 14px; }
.px-a { fill: var(--fg-1); } .px-A { fill: var(--surface); }
.px-c { fill: var(--accent); }
.px-G { fill: var(--ok); } .px-g { fill: color-mix(in srgb, var(--ok) 55%, var(--surface)); }
.px-b { fill: #8a5a33; } .px-d { fill: #6b4a2b; }
.px-y { fill: #e8b931; } .px-Y { fill: #a8761a; }
.px-P { fill: #6f4885; } .px-p { fill: #b98bcc; } .px-q { fill: #3b2449; }
.px-h { fill: #5a3a22; } .px-s { fill: #e0ac7e; } .px-w { fill: #ffffff; } .px-e { fill: #3d5fc4; } .px-m { fill: #9a5a44; }

/* head */
.cl-head .t-lede { max-width: 56ch; }
.cl-meta { --cluster: 8px 16px; }
.cl-meta .chip { background: var(--surface); }
.cl-title { --cluster: 12px; }

/* premium link with the 100-square quota */
.cl-link .addr { background: var(--surface-2); }
.cl-quota { display: grid; gap: 12px; }
.cl-cells { display: grid; grid-template-columns: repeat(20, minmax(0, 1fr)); gap: 3px; max-width: 420px; }
.cl-cells i { aspect-ratio: 1; border-radius: 2px; background: var(--accent-soft); }
.cl-cells i.used { background: var(--accent); }

/* stat tiles with a 14-day trend */
.cl-tiles { display: grid; gap: 12px; grid-template-columns: repeat(2, minmax(0, 1fr)); }
.cl-tile { display: grid; gap: 4px; padding: 16px; align-content: start; min-width: 0; }
.cl-tile .stat-value { font-size: 28px; line-height: 34px; }
.cl-tile .stat-note { font-size: 13px; line-height: 18px; }
.cl-tile-top { display: flex; align-items: center; gap: 10px; min-height: 28px; }
.cl-tile-top .t-small { min-width: 0; }
@media (min-width: 900px) {
  .cl-tiles-4 { grid-template-columns: repeat(4, minmax(0, 1fr)); }
  .cl-tiles-5 { grid-template-columns: repeat(5, minmax(0, 1fr)); }
  .cl-tiles-3 { grid-template-columns: repeat(3, minmax(0, 1fr)); }
  .cl-tile { padding: 20px; }
  .cl-tile .stat-value { font-size: 36px; line-height: 40px; }
}

/* money: earned, then a paid / pending bar */
.cl-money { display: grid; gap: 16px; }
.cl-money-main { display: grid; grid-template-columns: auto minmax(0, 1fr); align-items: center; gap: 16px; }
.cl-money-legs { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; }
.cl-dot { display: inline-block; width: 10px; height: 10px; margin-right: 8px; border-radius: 2px; vertical-align: -1px; }
.cl-dot-paid { background: var(--ok-dot, var(--ok)); } .cl-dot-pending { background: var(--wait-dot, var(--wait)); }

/* the payout timeline: three stages on a track (horizontal from 768 px, vertical on a phone) */
.cl-stages { --node: 64px; list-style: none; padding: 0; margin: 0; display: grid; gap: 0; position: relative; }
.cl-stage { position: relative; display: grid; grid-template-columns: var(--node) minmax(0, 1fr); column-gap: 16px; padding-bottom: 24px; }
.cl-stage:last-child { padding-bottom: 0; }
.cl-stage::before { content: ""; position: absolute; left: calc(var(--node) / 2 - 2px); top: var(--node); bottom: 0; width: 4px;
  background: repeating-linear-gradient(var(--accent) 0 6px, transparent 6px 10px); opacity: .55; }
.cl-stage:last-child::before { display: none; }
.cl-day { grid-column: 2; font-size: 12px; line-height: 16px; letter-spacing: .06em; text-transform: uppercase; color: var(--fg-3); }
.cl-node { grid-column: 1; grid-row: 1 / span 2; display: grid; place-items: center; width: var(--node); height: var(--node);
  border-radius: var(--r-inner); background: var(--surface-2); border: 2px solid var(--line-2); }
.cl-stage-body { grid-column: 2; display: grid; gap: 4px; }
.cl-amount { font: 700 32px/36px var(--font-display); letter-spacing: -.02em; color: var(--accent-text, var(--accent)); font-variant-numeric: tabular-nums; }
.cl-stage:last-child .cl-node { border-color: var(--accent); box-shadow: 0 0 0 4px var(--accent-soft); }

/* the sum and the example */
.cl-sum { display: grid; gap: 8px; padding: 16px 20px; border-radius: var(--r-inner); background: var(--accent-soft); color: var(--accent-soft-ink); }
.cl-sum .t-h4 { color: var(--accent-soft-ink); }
.cl-sum-math { display: flex; align-items: center; gap: 10px; font: 500 15px/22px var(--font-mono); }

/* side notes */
.cl-sides { display: grid; gap: 12px; }
.cl-side { display: grid; grid-template-columns: auto minmax(0, 1fr); gap: 16px; align-items: start; padding: 20px; }
.cl-big { display: flex; align-items: baseline; gap: 6px; }
.cl-side .cl-amount { font-size: 28px; line-height: 32px; }
@media (min-width: 768px) { .cl-sides { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; } }

/* facts */
.cl-facts { list-style: none; padding: 0; margin: 0; display: grid; gap: 10px; }
.cl-facts li { display: grid; grid-template-columns: 20px minmax(0, 1fr); gap: 12px; align-items: start; color: var(--fg-2); }

/* fan worlds */

/* a chip in a head or the quota keeps its own width */
.section-head > .chip, .cl-quota > .chip { justify-self: start; align-self: start; width: fit-content; }

/* secondary cards */
.cl-second .card { box-shadow: none; }
#rules { max-width: none; }

/* timeline across from 768 px: Day label, then the node, then the stage; the dashed track joins the nodes */
@media (min-width: 768px) {
  .cl-stages { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 24px; }
  .cl-stage { grid-template-columns: minmax(0, 1fr); row-gap: 12px; padding-bottom: 0; align-content: start; }
  .cl-day, .cl-node, .cl-stage-body { grid-column: 1; grid-row: auto; }
  .cl-stage::before { left: calc(var(--node) + 8px); right: -16px; top: calc(16px + 12px + var(--node) / 2 - 2px); bottom: auto; width: auto; height: 4px;
    background: repeating-linear-gradient(90deg, var(--accent) 0 6px, transparent 6px 10px); }
}

/* one page, stacked: the hello and the link share the first screen; every part is its own band */
@media (min-width: 1024px) {
  .cl-top .wrap { grid-template-columns: minmax(0, 1fr) minmax(0, 480px); align-items: end; column-gap: 48px; }
  .cl-top .cl-head { margin-bottom: 0; }
}

:is([data-owner="server"], [data-owner="players"], [data-owner="settings"], [data-owner="console"], [data-owner="backups"],
  [data-owner="software"], [data-owner="files"], [data-owner="schedule"], [data-owner="delete"])
  main[aria-busy="true"] :is(.settings-head [data-o], .settings-head .server-head, .settings-side, .settings-cards) { visibility: hidden; animation: owner-shown 0s 4s forwards; }
:is([data-owner="create"], [data-owner="building"], [data-owner="check-email"], [data-owner="creators"]) main[aria-busy="true"] > * { visibility: hidden; animation: owner-shown 0s 4s forwards; }
main[aria-busy="true"] .settings-head .points-bar[hidden] { display: grid !important; }
.settings-head h1:empty { min-height: 1lh; }
@keyframes owner-shown { to { visibility: visible; } }
html[data-restoring] main { visibility: hidden; animation: owner-shown 0s 3s forwards; }

/* ================================================================ server cards: the home page's featured servers, a server page's
   other servers in its region, and the picture at the top of a server page. The picture is server-art.mjs's pixel landscape. */
.srv-shelf { list-style: none; margin: 0; padding: 0; display: grid; gap: 16px; grid-template-columns: repeat(3, minmax(0, 1fr)); }
.srv-shelf > li:nth-child(n+4) { display: none; }
@media (min-width: 1280px) { .srv-shelf > li:nth-child(n+4) { display: block; } }
.srv-card { min-width: 0; }
.srv-shelf[data-count="1"] { grid-template-columns: minmax(0, 1fr); }
.srv-card-link { display: flex; flex-direction: column; height: 100%; color: inherit; text-decoration: none; background: var(--surface);
  border: 1px solid var(--line-2); border-radius: var(--r-card); overflow: hidden; box-shadow: var(--sh-1);
  transition: border-color var(--t-fast) var(--ease), box-shadow var(--t-med) var(--ease); }
.srv-card-link:hover { border-color: var(--accent); box-shadow: var(--sh-2); }
.srv-card-link:focus-visible { outline: 2px solid var(--focus); outline-offset: 3px; }
.srv-art { position: relative; aspect-ratio: 2 / 1; overflow: hidden; background: var(--surface-3); }
.srv-art-img { position: absolute; inset: 0; width: 100%; height: 100%; display: block; }
.srv-live { position: absolute; left: 12px; top: 12px; min-height: 28px; padding: 0 12px 0 10px; border-radius: var(--r-pill);
  background: rgb(10 8 16 / .72); color: #fff; font-size: 13px; backdrop-filter: blur(6px); -webkit-backdrop-filter: blur(6px); }
.srv-card-body { display: flex; flex-direction: column; gap: 10px; padding: 18px 20px 20px; flex: 1; }
.srv-name { font: 650 22px/1.2 var(--font-display); letter-spacing: -.01em; color: var(--fg-1); text-wrap: balance; overflow-wrap: anywhere; }
.srv-line { color: var(--fg-2); display: -webkit-box; -webkit-line-clamp: 2; -webkit-box-orient: vertical; overflow: hidden; }
.srv-facts { display: flex; flex-wrap: wrap; gap: 4px 14px; font: 500 14px/20px var(--font-body); color: var(--fg-3); }
.srv-chips { display: flex; flex-wrap: wrap; gap: 6px; margin-bottom: 6px; }
.srv-join { margin-top: auto; }
.srv-shelf[data-count="2"] { grid-template-columns: repeat(2, minmax(0, 1fr)); }
@media (min-width: 1280px) { .srv-shelf[data-count="4"] { grid-template-columns: repeat(4, minmax(0, 1fr)); } }
/* one pick is a spotlight: the picture beside the words */
@media (min-width: 720px) {
  .srv-shelf[data-count="1"] .srv-card-link { display: grid; grid-template-columns: minmax(0, 3fr) minmax(0, 2fr); }
  .srv-shelf[data-count="1"] .srv-art { aspect-ratio: auto; min-height: 300px; }
  .srv-shelf[data-count="1"] .srv-card-body { padding: 32px; justify-content: center; gap: 14px; }
  .srv-shelf[data-count="1"] .srv-join { margin-top: 8px; }
  .srv-shelf[data-count="1"] .srv-name { font-size: 32px; }
}
/* phones: the cards scroll sideways, the next one peeking in */
@media (max-width: 719px) {
  .srv-shelf:not([data-count="1"]) { display: flex; overflow-x: auto; scroll-snap-type: x mandatory; gap: 12px;
    margin-inline: calc(-1 * var(--gutter)); padding: 2px var(--gutter) 8px; scroll-padding-inline: var(--gutter); scrollbar-width: none; }
  .srv-shelf:not([data-count="1"]) > li { flex: 0 0 84%; scroll-snap-align: start; }
  .srv-shelf-small:not([data-count="1"]) > li { flex-basis: 72%; }
}
.srv-shelf-small .srv-chips { display: none; }
.srv-shelf-small .srv-name { font-size: 18px; }
/* a server page: the picture first, then what it is, then how to join */
.srv-hero { border-radius: var(--r-card); border: 1px solid var(--line-2); }
.srv-hero .srv-live { left: 16px; top: 16px; min-height: 32px; font-size: 14px; }
@media (min-width: 720px) { .srv-hero { aspect-ratio: 21 / 9; } }
.srv-head { display: grid; gap: 10px; margin-top: 8px; }
@media (max-width: 719px) { .srv-join-card .addr-host { font-size: 13px; line-height: 19px; } .srv-join-card.card-lg { padding: 20px; } }
.srv-title { overflow-wrap: anywhere; }
.srv-join-card { --stack: 12px; }
.srv-join-card .addr + .addr { margin-top: 0; }
.srv-join-card > .btn-secondary { justify-self: start; }
