{"version":3,"mappings":";AACA,iBCIA,8wDCKA,oFAAA,+EAqBA,uNAeA,oCASA,0EAOA,4BAMA,sFAOA,mCAIA,oCAMA,8FAUA,mEAeA,0EAcA,2FAOA,uDAOA,0CAcA,iJAAA,0HAYA,iEAMA,+EAMA,iCAMA,oFAAA,yCAOA,yCAMA,4CAAA,4CAOA,oDASA,oEAOA,4CAMA,iDAIA,wCAAA,mDAAA,oDAAA,kDAAA,mDAAA,qDAAA,qDAAA,0DAAA,uDAcA,kDAOA,wBASA,kCAMA,2BAMA,yCASA,yCAMA,2DAOA,mEFnSA,oBIIA,4LAYA,6JAUA,gFAIA,oHAQA,kHASA,0EAIA,mDAOA,gOAWA,iEAOA,+MAWA,oDAIA,+CAKA,oFAOA,aACE,2DAIA,6CAOF,8CACE,oCAQA,sKAWA,oGAMA,gBACE,oFAOF,6HAQA,gBACE,2CD9JJ,0FAOA,yCAIA,yCAIA,yCAIA,yCAIA,yCAIA,yCAMA,oFASA,wDAKA,+DAMA,sPAOA,gFAKA,+GAOA,sCAIA,uIAQA,wEAKA,6CAKA,2DAMA,gCAIA,qCAIA,wCAIA,mCAIA,iDAIA,iDAIA,iDAIA,iDAIA,6EAKA,6EAKA,2CAKA,yCAOA,yDAKA,uDAMA,+CAIA,mEAKA,qHAOA,uNAUA,8KASA,6CAKA,4SAaA,oFAQA,kNAWA,mEAKA,oJAQA,wDAQA,+GGnQA,6OAYA,6HASA,gFAMA,yHAQA,kFAMA,8EAIA,uEAMA,4DAGA,uDNvCE,kHAdF,kBKDA,upBAmCA,iSAYA,2IAUA,+GAUA,8CACE,sIEjEF,yaAyBE,+CAIA,8CAAgD,8BAMlD,kGAOA,0HAMA,gGAMA,yDAMA,kGAKA,oGAUA,8FAKA,iFAOA,qMAaA,4EAIA,8EAIA,yEAIA,+EAKA,gFAIA,mFAIA,sFAKA,mEAQA,2cAUA,gMAUA,iRAUA,iGAIA,8CACE,iFAMF,sCAIA,yFAQA,uLAmBA,mIAMA,mHAMA","sources":["../src/marx.css","../src/_tokens.css","../src/_typography.css","../src/_preflight.css","../src/_base.css","../src/_buttons.css","../src/_tables.css","../src/_form.css"],"sourcesContent":["/*! Marx: the classless CSS reset (perfect for Communists) | MIT License | https://github.com/mblode/marx */\n@layer marx.base, marx.content, marx.forms;\n\n@import \"_tokens.css\" layer(marx.base);\n@import \"_preflight.css\" layer(marx.base);\n@import \"_base.css\" layer(marx.content);\n@import \"_typography.css\" layer(marx.content);\n@import \"_tables.css\" layer(marx.content);\n@import \"_buttons.css\" layer(marx.forms);\n@import \"_form.css\" layer(marx.forms);\n\n/* Flow fixup — lives after every content import so it wins same-specificity\n * ties: the first block inside a padded or non-collapsing container must not\n * add its own flow margin on top (typeset first-child pattern). */\n@layer marx.content {\n  :where(\n      dialog,\n      [popover],\n      td,\n      th,\n      li,\n      dd,\n      blockquote,\n      figure,\n      fieldset,\n      footer\n    )\n    > :where(:first-child) {\n    margin-block-start: 0;\n  }\n}\n","/* Design tokens — the entire theming API.\n * Override any of these in your own (unlayered) CSS to retheme Marx.\n * Colors declare a static light value first, then a `light-dark()` value;\n * browsers without `light-dark()` keep the light fallback. */\n\n:where(:root) {\n  /* Automatic dark mode. Force one scheme in your own CSS with\n   * `:root { color-scheme: light }` (or `dark`). */\n  color-scheme: light dark;\n\n  /* Rhythm */\n  --marx-leading: 1.5;\n  --marx-flow: 1.25rem;\n  --marx-measure: 42rem;\n\n  /* Shape */\n  --marx-radius: 0.5rem;\n\n  /* Spacing */\n  --marx-space-2xs: 0.25rem;\n  --marx-space-xs: 0.5rem;\n  --marx-space-sm: 0.75rem;\n  --marx-space-md: 1rem;\n  --marx-space-lg: 1.25rem;\n  --marx-space-xl: 2.5rem;\n\n  /* Type scale */\n  --marx-text-sm: 0.875rem;\n  --marx-text-base: 1rem;\n  --marx-text-h1: 2.5rem;\n  --marx-text-h2: 2rem;\n  --marx-text-h3: 1.6rem;\n  --marx-text-h4: 1.35rem;\n  --marx-text-h5: 1.15rem;\n  --marx-text-h6: 1rem;\n\n  /* Font stacks (platform fonts, per Tailwind Preflight 4.3.3 — explicit\n   * names so CJK text respects the page's `lang` on Windows) */\n  --marx-font-sans:\n    -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, \"Helvetica Neue\",\n    \"Noto Sans\", Arial, sans-serif, \"Apple Color Emoji\", \"Segoe UI Emoji\",\n    \"Segoe UI Symbol\", \"Noto Color Emoji\";\n  --marx-font-serif: Georgia, Times, \"Times New Roman\", serif;\n  --marx-font-mono:\n    ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, \"Liberation Mono\",\n    \"Courier New\", monospace;\n  --marx-font-body: var(--marx-font-sans);\n\n  /* Surfaces & text */\n  --marx-bg: oklch(100% 0 0);\n  --marx-bg: light-dark(oklch(100% 0 0), oklch(18% 0.01 260));\n  --marx-text: oklch(0% 0 0 / 80%);\n  --marx-text: light-dark(oklch(0% 0 0 / 80%), oklch(100% 0 0 / 87%));\n  --marx-muted: oklch(0% 0 0 / 54%);\n  --marx-muted: light-dark(oklch(0% 0 0 / 54%), oklch(100% 0 0 / 60%));\n  --marx-disabled: oklch(0% 0 0 / 38%);\n  --marx-disabled: light-dark(oklch(0% 0 0 / 38%), oklch(100% 0 0 / 42%));\n  --marx-border: oklch(0% 0 0 / 12%);\n  --marx-border: light-dark(oklch(0% 0 0 / 12%), oklch(100% 0 0 / 16%));\n  --marx-surface: oklch(97.5% 0.002 280);\n  --marx-surface: light-dark(oklch(97.5% 0.002 280), oklch(24% 0.01 260));\n\n  /* Brand (buttons keep a fixed blue with white text in both schemes) */\n  --marx-primary: oklch(54.6% 0.245 262.9);\n  --marx-primary-strong: oklch(48.8% 0.243 264.4);\n  --marx-on-primary: oklch(100% 0 0);\n\n  /* Links & focus */\n  --marx-link: oklch(54.6% 0.245 262.9);\n  --marx-link: light-dark(oklch(54.6% 0.245 262.9), oklch(70.7% 0.165 254.6));\n  --marx-link-hover: oklch(48.8% 0.243 264.4);\n  --marx-link-hover: light-dark(\n    oklch(48.8% 0.243 264.4),\n    oklch(80.9% 0.105 251.8)\n  );\n  --marx-ring: oklch(54.6% 0.245 262.9);\n  --marx-ring: light-dark(oklch(54.6% 0.245 262.9), oklch(70.7% 0.165 254.6));\n\n  /* Feedback */\n  --marx-danger: oklch(57.7% 0.245 27.3);\n  --marx-danger: light-dark(oklch(57.7% 0.245 27.3), oklch(70.4% 0.191 22.2));\n  --marx-success: oklch(60% 0.16 150);\n  --marx-success: light-dark(oklch(60% 0.16 150), oklch(72% 0.16 152));\n  --marx-warning: oklch(70% 0.16 75);\n  --marx-warning: light-dark(oklch(70% 0.16 75), oklch(80% 0.14 80));\n  --marx-mark: color-mix(in oklab, oklch(86% 0.17 95) 40%, transparent);\n}\n","/* Headings — Marx keeps its 500 weight (lighter than typeset's 600). */\n:where(h1, h2, h3, h4, h5, h6) {\n  color: inherit;\n  font-weight: 500;\n  line-height: 1.2;\n  text-wrap: balance;\n}\n\n:where(h1) {\n  font-size: var(--marx-text-h1);\n}\n\n:where(h2) {\n  font-size: var(--marx-text-h2);\n}\n\n:where(h3) {\n  font-size: var(--marx-text-h3);\n}\n\n:where(h4) {\n  font-size: var(--marx-text-h4);\n}\n\n:where(h5) {\n  font-size: var(--marx-text-h5);\n}\n\n:where(h6) {\n  font-size: var(--marx-text-h6);\n}\n\n/* Tighten tracking on display-size headings; large system sans looks loose\n   at its default spacing. */\n:where(h1, h2) {\n  letter-spacing: -0.01em;\n}\n\n/* h1/h2 open a section with more air than the sub-headings (old Marx cadence). */\n:where(h1, h2) {\n  margin-block-start: calc(var(--marx-flow) * 1.5);\n}\n\n:where(h3, h4, h5, h6) {\n  margin-block-start: var(--marx-flow);\n}\n\n/* Paragraphs. */\n:where(p) {\n  margin-block-start: var(--marx-flow);\n  text-wrap: pretty;\n}\n\n/* Links — Marx-blue with a subtle underline that firms up on hover (a11y default). */\n:where(a) {\n  color: var(--marx-link);\n  text-decoration-line: underline;\n  text-decoration-color: color-mix(in oklab, currentColor 30%, transparent);\n  text-underline-offset: 0.15em;\n}\n\n:where(a:hover) {\n  color: var(--marx-link-hover);\n  text-decoration-color: currentColor;\n}\n\n:where(a:focus-visible) {\n  outline: 2px solid var(--marx-ring);\n  outline-offset: 2px;\n  border-radius: var(--marx-radius);\n}\n\n/* Inline semantics. */\n:where(small) {\n  color: var(--marx-muted);\n}\n\n:where(mark) {\n  background-color: var(--marx-mark);\n  color: inherit;\n  padding-block: 0.05em;\n  padding-inline: 0.15em;\n  border-radius: var(--marx-radius);\n}\n\n:where(del, s) {\n  color: var(--marx-muted);\n  text-decoration-line: line-through;\n}\n\n:where(u, ins) {\n  text-decoration-line: underline;\n}\n\n/* Preflight already sets `underline dotted`; add the help affordance + offset. */\n:where(abbr[title]) {\n  text-underline-offset: 0.2em;\n  cursor: help;\n}\n\n/* Lists — preflight strips markers, so restore them (muted) and the rhythm. */\n:where(ul) {\n  list-style-type: disc;\n}\n\n:where(ul ul) {\n  list-style-type: circle;\n}\n\n:where(ul ul ul) {\n  list-style-type: square;\n}\n\n:where(ol) {\n  list-style-type: decimal;\n}\n\n:where(ol[type=\"a\" i]) {\n  list-style-type: lower-alpha;\n}\n\n:where(ol[type=\"i\" i]) {\n  list-style-type: lower-roman;\n}\n\n:where(ol[type=\"A\" s]) {\n  list-style-type: upper-alpha;\n}\n\n:where(ol[type=\"I\" s]) {\n  list-style-type: upper-roman;\n}\n\n:where(ul, ol) {\n  margin-block-start: var(--marx-flow);\n  padding-inline-start: 1.5em;\n}\n\n:where(li) {\n  margin-block-start: var(--marx-space-xs);\n  padding-inline-start: 0.4em;\n}\n\n:where(li)::marker {\n  color: var(--marx-muted);\n}\n\n/* Nested lists hug their parent item — the li above already owns the gap. */\n:where(li > ul, li > ol) {\n  margin-block-start: 0;\n}\n\n/* Navigation lists are for structure, not bullets. Lives after the marker\n   rules above so it wins the same-specificity tie; the zero-width prefix keeps\n   the list semantics VoiceOver would otherwise drop. */\n:where(nav) :where(ol, ul) {\n  list-style-type: none;\n  padding: 0;\n}\n\n:where(nav li)::before {\n  content: \"\\200B\";\n  float: inline-start;\n}\n\n/* Definition lists. */\n:where(dl) {\n  margin-block-start: var(--marx-flow);\n}\n\n:where(dt) {\n  font-weight: bold;\n  margin-block-start: var(--marx-space-md);\n}\n\n:where(dd) {\n  color: var(--marx-muted);\n  margin-block-start: var(--marx-space-2xs);\n  margin-inline-start: var(--marx-space-md);\n}\n\n/* Blockquote — Marx identity: serif italic behind a hairline rule. */\n:where(blockquote) {\n  border-inline-start: 2px solid var(--marx-border);\n  font-family: var(--marx-font-serif);\n  font-style: italic;\n  margin-block-start: var(--marx-flow);\n  margin-inline: 0;\n  padding-inline-start: var(--marx-space-md);\n}\n\n/* Inline code. */\n:where(:not(pre) > code) {\n  background-color: var(--marx-surface);\n  font-size: 0.875em;\n  border-radius: min(calc(var(--marx-radius) * 0.6), 0.35em);\n  padding-block: 0.125em;\n  padding-inline: 0.3em;\n}\n\n/* Shrink code set inside large headings so it sits on the text. */\n:where(:is(h1, h2, h3, h4) code) {\n  font-size: 0.9em;\n}\n\n/* Code blocks — scroll wide lines rather than wrap (old Marx wrapped). */\n:where(pre) {\n  background-color: var(--marx-surface);\n  font-size: var(--marx-text-sm);\n  line-height: 1.5;\n  tab-size: 2;\n  border-radius: var(--marx-radius);\n  margin-block-start: var(--marx-flow);\n  margin-block-end: var(--marx-space-md);\n  padding-block: var(--marx-space-sm);\n  padding-inline: var(--marx-space-md);\n  overflow-x: auto;\n}\n\n:where(pre code) {\n  background-color: transparent;\n  font-size: inherit;\n  border-radius: 0;\n  padding: 0;\n}\n\n/* Keyboard keys — keycap in the body font (typeset treatment). */\n:where(kbd) {\n  font-family: inherit;\n  font-size: 0.85em;\n  border: 1px solid var(--marx-border);\n  border-block-end-width: 2px;\n  border-radius: min(calc(var(--marx-radius) * 0.6), 0.35em);\n  padding-block: 0.0625em;\n  padding-inline: 0.35em;\n}\n\n/* Figures — serif caption keeps Marx's editorial voice. */\n:where(figure) {\n  margin-block-start: var(--marx-flow);\n  margin-inline: 0;\n}\n\n:where(figcaption) {\n  color: var(--marx-muted);\n  font-family: var(--marx-font-serif);\n  font-size: var(--marx-text-sm);\n  margin-block-start: var(--marx-space-xs);\n}\n\n/* Fragment targets clear the top of the viewport by one rhythm unit. */\n:where([id]) {\n  scroll-margin-block-start: var(--marx-flow);\n}\n\n/* Headings and title <header>s do not own space below. The next unit does.\n   `h + *` covers a heading beside its content; `article > header + *` covers\n   the HTML5 pattern where the title is wrapped and the content is a sibling\n   of that header. Scoped so a page hero is not tightened. */\n:where(:is(h1, h2, h3, h4, h5, h6) + *) {\n  margin-block-start: var(--marx-space-md);\n}\n\n:where(:is(article, section) > header + *) {\n  margin-block-start: var(--marx-space-md);\n}\n","/* Preflight — modern normalization base (Tailwind Preflight v4.3.3 techniques,\n * adapted for Marx: tokens, logical properties, zero specificity).\n * ========================================================================== */\n\n/*\n  1. Border-box sizing so padding and border never affect declared size.\n  2. Remove default margins and padding.\n  3. Reset all borders to 0-width solid so any `border-*-width` opts back in.\n*/\n\n*,\n::before,\n::after,\n::backdrop,\n::file-selector-button {\n  box-sizing: border-box; /* 1 */\n  margin: 0; /* 2 */\n  padding: 0; /* 2 */\n  border: 0 solid; /* 3 */\n}\n\n/*\n  1. Consistent line-height across browsers.\n  2. Default body font.\n  3. Prevent font-size inflation after iOS orientation changes.\n  4. More readable tab size.\n  5. Disable the grey tap highlight on iOS.\n  6. Break long words rather than overflow the container.\n  7. Reserve the scrollbar gutter so layout doesn't shift when it appears.\n*/\n\n:where(html, :host) {\n  line-height: var(--marx-leading); /* 1 */\n  font-family: var(--marx-font-body); /* 2 */\n  -webkit-text-size-adjust: 100%; /* 3 */\n  tab-size: 4; /* 4 */\n  -webkit-tap-highlight-color: transparent; /* 5 */\n  overflow-wrap: break-word; /* 6 */\n  scrollbar-gutter: stable; /* 7 */\n}\n\n/* Text-level semantics\n  * ========================================================================== */\n\n/* Restore bold weight dropped by the universal reset's cascade in some UAs. */\n\n:where(b, strong) {\n  font-weight: bolder;\n}\n\n/*\n  1. Monospace the code-ish elements.\n  2. Correct the odd `em` font sizing in all browsers.\n*/\n\n:where(code, kbd, samp, pre) {\n  font-family: var(--marx-font-mono); /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Correct the inconsistent `small` font size. */\n\n:where(small) {\n  font-size: 80%;\n}\n\n/* Prevent `sub`/`sup` from affecting line-height. */\n\n:where(sub, sup) {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\n:where(sub) {\n  inset-block-end: -0.25em;\n}\n\n:where(sup) {\n  inset-block-start: -0.5em;\n}\n\n/* Add the correct text decoration in Safari. */\n\n:where(abbr[title]) {\n  text-decoration: underline dotted;\n}\n\n/*\n  1. Correct the box-sizing height in Firefox.\n  2. Correct border-color inheritance in Firefox.\n  3. Opt back into a 1px rule (the universal reset zeroed border width).\n*/\n\n:where(hr) {\n  block-size: 0; /* 1 */\n  color: inherit; /* 2 */\n  border-block-start-width: 1px; /* 3 */\n}\n\n/* Tabular data\n  * ========================================================================== */\n\n/*\n  1. Remove text indentation from table contents in Chrome and Safari.\n  2. Correct table border-color inheritance in Chrome and Safari.\n  3. Collapse borders by default.\n*/\n\n:where(table) {\n  text-indent: 0; /* 1 */\n  border-color: inherit; /* 2 */\n  border-collapse: collapse; /* 3 */\n}\n\n/* Embedded content\n  * ========================================================================== */\n\n/*\n  1. Block-level replaced elements by default.\n  2. Sensible baseline alignment for the remaining inline cases.\n*/\n\n:where(img, svg, video, canvas, audio, iframe, embed, object) {\n  display: block; /* 1 */\n  vertical-align: middle; /* 2 */\n}\n\n/* Constrain media to its container while preserving aspect ratio. */\n\n:where(img, video) {\n  max-inline-size: 100%;\n  block-size: auto;\n}\n\n/* Match an untinted SVG's fill to the surrounding text color. */\n\n:where(svg:not([fill])) {\n  fill: currentColor;\n}\n\n/* Forms\n  * ========================================================================== */\n\n/*\n  1. Inherit typography from the page (marx.forms restyles later).\n  2. Remove the platform border radius.\n  3. Remove the platform background.\n  4. Consistent opacity for disabled states across browsers.\n*/\n\n:where(button, input, select, optgroup, textarea),\n::file-selector-button {\n  font: inherit; /* 1 */\n  letter-spacing: inherit; /* 1 */\n  color: inherit; /* 1 */\n  border-radius: 0; /* 2 */\n  background-color: transparent; /* 3 */\n  opacity: 1; /* 4 */\n}\n\n/* Restore the bold weight on list-box optgroups. */\n\n:where(select:is([multiple], [size]) optgroup) {\n  font-weight: bolder;\n}\n\n/* Restore the indentation on list-box options. */\n\n:where(select:is([multiple], [size]) optgroup option) {\n  padding-inline-start: 20px;\n}\n\n/* Only allow vertical resizing to avoid layout-breaking horizontal drags. */\n\n:where(textarea) {\n  resize: vertical;\n}\n\n/* Correct the inability to style the border radius on button-like controls. */\n\n:where(button, input:is([type=\"button\"], [type=\"reset\"], [type=\"submit\"])),\n::file-selector-button {\n  appearance: button;\n}\n\n/* Remove Firefox's extra `:invalid` inner shadow. */\n\n:where(:-moz-ui-invalid) {\n  box-shadow: none;\n}\n\n/* Correct the cursor of the number spinner buttons in Safari. */\n\n::-webkit-inner-spin-button,\n::-webkit-outer-spin-button {\n  block-size: auto;\n}\n\n/* Remove the inner padding of search inputs in Chrome and Safari on macOS. */\n\n::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/*\n  1. Keep empty date/time inputs the same height in iOS Safari.\n  2. Allow text-align to apply to date/time inputs in iOS Safari.\n*/\n\n::-webkit-date-and-time-value {\n  min-block-size: 1lh; /* 1 */\n  text-align: inherit; /* 2 */\n}\n\n/* Keep date/time inputs from growing when set to `display: block` in Safari. */\n\n::-webkit-datetime-edit {\n  display: inline-flex;\n}\n\n/* Remove excess padding so date/time inputs match other controls' height. */\n\n::-webkit-datetime-edit-fields-wrapper {\n  padding: 0;\n}\n\n::-webkit-datetime-edit,\n::-webkit-datetime-edit-year-field,\n::-webkit-datetime-edit-month-field,\n::-webkit-datetime-edit-day-field,\n::-webkit-datetime-edit-hour-field,\n::-webkit-datetime-edit-minute-field,\n::-webkit-datetime-edit-second-field,\n::-webkit-datetime-edit-millisecond-field,\n::-webkit-datetime-edit-meridiem-field {\n  padding-block: 0;\n}\n\n/* Center the datalist dropdown marker in Chrome. */\n\n::-webkit-calendar-picker-indicator {\n  line-height: 1;\n}\n\n/* Reset Firefox's inflated default placeholder opacity. The placeholder color\n   itself is set in the forms layer. */\n\n::placeholder {\n  opacity: 1;\n}\n\n/* Interactive\n  * ========================================================================== */\n\n/* Add the correct list-item display for the disclosure triangle in Safari. */\n\n:where(summary) {\n  display: list-item;\n}\n\n/* Restore centering the universal margin reset stripped from dialogs. */\n\n:where(dialog) {\n  margin: auto;\n}\n\n/* Add the correct vertical alignment in Chrome and Firefox. */\n\n:where(progress) {\n  vertical-align: baseline;\n}\n\n/* Accessibility\n  * ========================================================================== */\n\n/* Signal in-progress regions with a busy cursor. */\n\n:where([aria-busy=\"true\"]) {\n  cursor: progress;\n}\n\n/* Signal non-interactive controls with a blocked cursor. */\n\n:where([aria-disabled=\"true\"], [disabled]) {\n  cursor: not-allowed;\n}\n\n/* Keep `hidden` elements hidden against any author styles (except the\n   find-in-page reveal). The one sanctioned `!important` in Marx. */\n\n[hidden]:where(:not([hidden=\"until-found\"])) {\n  display: none !important;\n}\n","/* Document & page layout — content layer.\n * The preflight layer already zeroes margins/padding, resets borders, and makes\n * media `display: block; max-inline-size: 100%`. This file only adds Marx's look\n * (centered column, one-directional flow rhythm, styled rules/media/overlays). */\n\n:where(body) {\n  background-color: var(--marx-bg);\n  color: var(--marx-text);\n  font-family: var(--marx-font-body);\n  font-size: var(--marx-text-base);\n  line-height: var(--marx-leading);\n  /* Defensive: keep the background/footer sensible on short pages. `svh`\n   * ignores mobile browser-chrome collapse so it never overflows. */\n  min-block-size: 100svh;\n}\n\n/* Centered reading column. */\n:where(main) {\n  display: block;\n  margin-inline: auto;\n  max-inline-size: var(--marx-measure);\n  padding-inline: var(--marx-space-md);\n  padding-block-end: var(--marx-space-md);\n}\n\n/* Sectioning flow: one-directional rhythm (typeset pattern). The preflight\n * reset already zeroed margins, so only the top margin is set. */\n:where(header, footer, article, section, aside) {\n  margin-block-start: var(--marx-flow);\n}\n\n:where(footer) {\n  border-block-start: 1px solid var(--marx-border);\n  padding-block: var(--marx-space-md);\n  text-align: center;\n}\n\n/* Thematic break. Typeset gives rules extra breathing room. Preflight already\n * normalizes hr height/color/border, so no content-box/height hacks here. */\n:where(hr) {\n  border: 0;\n  border-block-start: 1px solid var(--marx-border);\n  margin-block-start: calc(var(--marx-flow) * 2);\n}\n\n/* Media in the content flow. Preflight makes these block-level and\n * width-constrained; here they earn flow spacing. Rounded corners on img/video\n * are a new Marx v5 look decision (borrowed from the typeset pattern). */\n:where(img, video, iframe, embed, object) {\n  margin-block-start: var(--marx-flow);\n}\n\n:where(img, video) {\n  border-radius: var(--marx-radius);\n}\n\n/* Modal dialog. Preflight restores the UA `margin: auto` centering; this is the\n * surface treatment. The `Canvas` fallback keeps overlays opaque in browsers\n * too old for `light-dark()` tokens. */\n:where(dialog) {\n  background-color: Canvas;\n  background-color: var(--marx-bg);\n  color: var(--marx-text);\n  border: 1px solid var(--marx-border);\n  border-radius: var(--marx-radius);\n  padding: var(--marx-space-lg);\n  max-inline-size: min(90vw, 32rem);\n}\n\n/* No backdrop token exists; a plain dark scrim works in both schemes. */\n:where(dialog)::backdrop {\n  background-color: color-mix(in oklab, oklch(0% 0 0) 40%, transparent);\n}\n\n/* Popovers get the same surface, positioned by the UA. Kept as its own rule so\n * an unsupported `[popover]` selector can't take down the dialog styles.\n * `margin: auto` restores the UA centering the universal reset stripped. */\n:where([popover]) {\n  margin: auto;\n  background-color: Canvas;\n  background-color: var(--marx-bg);\n  color: var(--marx-text);\n  border: 1px solid var(--marx-border);\n  border-radius: var(--marx-radius);\n  padding: var(--marx-space-lg);\n}\n\n/* Disclosure. */\n:where(details) {\n  margin-block-start: var(--marx-flow);\n}\n\n:where(summary) {\n  cursor: pointer;\n  font-weight: 500;\n}\n\n:where(summary):focus-visible {\n  outline: 2px solid var(--marx-ring);\n  outline-offset: 2px;\n}\n\n/* Print: keep self-contained blocks whole and headings attached to their\n * content (typeset pattern). */\n@media print {\n  :where(pre, blockquote, table, figure, img) {\n    break-inside: avoid;\n  }\n\n  :where(h1, h2, h3, h4, h5, h6) {\n    break-after: avoid;\n  }\n}\n\n/* Motion — opt-in only, skipped entirely when the visitor prefers reduced\n * motion (the whole block is inside the query, so the default is no motion). */\n@media (prefers-reduced-motion: no-preference) {\n  :where(html) {\n    scroll-behavior: smooth;\n  }\n\n  /* Dialog and popover fade + scale in from the top layer. `allow-discrete`\n   * animates the display/overlay switch so the exit isn't an instant cut;\n   * `@starting-style` gives the entrance a from-state. Degrades to instant\n   * show/hide where unsupported. */\n  :where(dialog),\n  :where([popover]) {\n    opacity: 1;\n    transform: scale(1);\n    transition:\n      opacity 0.2s ease,\n      transform 0.2s ease,\n      overlay 0.2s allow-discrete,\n      display 0.2s allow-discrete;\n  }\n\n  :where(dialog):not([open]),\n  :where([popover]):not(:popover-open) {\n    opacity: 0;\n    transform: scale(0.97);\n  }\n\n  @starting-style {\n    :where(dialog[open]),\n    :where([popover]:popover-open) {\n      opacity: 0;\n      transform: scale(0.97);\n    }\n  }\n\n  :where(dialog[open])::backdrop {\n    opacity: 1;\n    transition:\n      opacity 0.2s ease,\n      overlay 0.2s allow-discrete,\n      display 0.2s allow-discrete;\n  }\n\n  @starting-style {\n    :where(dialog[open])::backdrop {\n      opacity: 0;\n    }\n  }\n}\n",":where(\n  button,\n  input[type=\"submit\"],\n  input[type=\"reset\"],\n  input[type=\"button\"]\n) {\n  /* Replaced <input> elements ignore flex. Lock the box so submit inputs and\n     <button> paint the same height on one line. */\n  appearance: none;\n  display: inline-block;\n  background-color: var(--marx-primary);\n  border: 1px solid transparent;\n  border-radius: var(--marx-radius);\n  color: var(--marx-on-primary);\n  block-size: calc(\n    (var(--marx-text-base) * var(--marx-leading)) + (2 * var(--marx-space-xs)) +\n      2px\n  );\n  padding-block: 0;\n  padding-inline: var(--marx-space-md);\n  font-weight: 500;\n  font-size: var(--marx-text-base);\n  line-height: calc(\n    (var(--marx-text-base) * var(--marx-leading)) + (2 * var(--marx-space-xs))\n  );\n  text-align: center;\n  white-space: nowrap;\n  vertical-align: middle;\n  user-select: none;\n  cursor: pointer;\n  /* Skip the 300ms tap delay on touch devices. */\n  touch-action: manipulation;\n}\n\n/* `:not(:disabled)` inside `:where()` keeps the guard at zero specificity. */\n:where(\n  button:not(:disabled),\n  input:not(:disabled):is([type=\"submit\"], [type=\"reset\"], [type=\"button\"])\n):hover,\n:where(\n  button:not(:disabled),\n  input:not(:disabled):is([type=\"submit\"], [type=\"reset\"], [type=\"button\"])\n):active {\n  background-color: var(--marx-primary-strong);\n  border-color: var(--marx-primary-strong);\n}\n\n:where(\n  button,\n  input[type=\"submit\"],\n  input[type=\"reset\"],\n  input[type=\"button\"]\n):focus-visible {\n  outline: 2px solid var(--marx-ring);\n  outline-offset: 2px;\n}\n\n:where(\n  button,\n  input[type=\"submit\"],\n  input[type=\"reset\"],\n  input[type=\"button\"]\n):disabled {\n  opacity: 0.65;\n  cursor: not-allowed;\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :where(\n    button,\n    input[type=\"submit\"],\n    input[type=\"reset\"],\n    input[type=\"button\"]\n  ) {\n    transition:\n      background-color 0.15s ease,\n      border-color 0.15s ease,\n      color 0.15s ease;\n  }\n}\n",":where(table) {\n  margin-block-start: var(--marx-flow);\n  inline-size: 100%;\n  font-variant-numeric: tabular-nums;\n  /* separate + zero spacing so cell-borne row rules sit flush (append-safe) */\n  border-collapse: separate;\n  border-spacing: 0;\n  /* marx keeps a top rule; typeset closes the bottom */\n  border-block-start: 1px solid var(--marx-border);\n  border-block-end: 1px solid var(--marx-border);\n}\n\n:where(caption) {\n  caption-side: bottom;\n  padding-block: var(--marx-space-sm);\n  color: var(--marx-muted);\n  font-size: var(--marx-text-sm);\n}\n\n/* No `white-space: nowrap` on headers — classless tables have no scroll\n   wrapper, so wide tables must be allowed to wrap instead of overflow. */\n:where(thead th) {\n  text-align: start;\n  /* stronger header rule, marx-style */\n  border-block-end: 2px solid var(--marx-border);\n}\n\n:where(th, td) {\n  padding-block: var(--marx-space-sm);\n  padding-inline: var(--marx-space-md);\n  text-align: start;\n  vertical-align: top;\n}\n\n/* Row separators ride on cells, not tr/:last-child, so appended rows inherit them. */\n:where(tbody, tfoot) :where(td, th) {\n  border-block-start: 1px solid var(--marx-border);\n}\n\n/* First body row already sits under the table top rule (or thead's 2px rule),\n   so drop its own top border to avoid a doubled line. */\n:where(tbody:first-of-type tr:first-child) :where(td, th) {\n  border-block-start: 0;\n}\n\n:where(tfoot td) {\n  color: var(--marx-muted);\n  font-size: var(--marx-text-sm);\n}\n\n/* Honour HTML alignment attributes, mapped to logical values. */\n:where(th[align=\"center\"], td[align=\"center\"]) {\n  text-align: center;\n}\n:where(th[align=\"right\"], td[align=\"right\"]) {\n  text-align: end;\n}\n","/* Text-like controls: everything except buttons, toggles, range, file, color,\n * image. `input:not([type])` matches (no excluded type) so bare inputs are\n * covered. Preflight already inherits font + resets appearance — don't repeat. */\n:where(\n  input:not(\n    [type=\"button\"],\n    [type=\"submit\"],\n    [type=\"reset\"],\n    [type=\"checkbox\"],\n    [type=\"radio\"],\n    [type=\"range\"],\n    [type=\"file\"],\n    [type=\"color\"],\n    [type=\"image\"]\n  ),\n  select,\n  textarea\n) {\n  display: block;\n  inline-size: 100%;\n  padding: var(--marx-space-xs) var(--marx-space-md);\n  font-size: var(--marx-text-base);\n  line-height: var(--marx-leading);\n  color: var(--marx-text);\n  background-color: var(--marx-bg);\n  border: 1px solid var(--marx-border);\n  border-radius: var(--marx-radius);\n\n  &:user-invalid {\n    border-color: var(--marx-danger);\n  }\n\n  @media (prefers-reduced-motion: no-preference) {\n    transition: border-color 0.15s ease;\n  }\n}\n\n/* One focus ring for every control (buttons style their own). */\n:where(input, select, textarea):focus-visible {\n  outline: 2px solid var(--marx-ring);\n  outline-offset: 2px;\n}\n\n/* Disabled + read-only. `[readonly]` (not `:read-only`, which also matches\n * non-editable elements like buttons and plain divs). */\n:where(input, select, textarea):disabled {\n  color: var(--marx-disabled);\n  cursor: not-allowed;\n  background-color: var(--marx-surface);\n}\n\n:where(input, select, textarea)[readonly] {\n  color: var(--marx-muted);\n  border-color: var(--marx-border);\n}\n\n/* Grow to fit content; start tall enough to read as a textarea. */\n:where(textarea) {\n  field-sizing: content;\n  min-block-size: 5lh;\n}\n\n/* Native controls that paint with the accent color. */\n:where(input[type=\"checkbox\"], input[type=\"radio\"], input[type=\"range\"]) {\n  accent-color: var(--marx-primary);\n}\n\n/* Native widgets sit high on the text line; size them to 1em and shift down. */\n:where(input[type=\"checkbox\"], input[type=\"radio\"]) {\n  inline-size: 1em;\n  block-size: 1em;\n  vertical-align: -0.15em;\n}\n\n/* A list whose items hold a checkbox or radio is an option group, not a bullet\n * list: drop the markers and the indent so the controls sit flush. Classless\n * (no `.task-list` needed); lives in the forms layer so it wins over the list\n * rules in the content layer. Browsers without `:has()` keep the bullets. */\n:where(ul:has(input:is([type=\"checkbox\"], [type=\"radio\"]))) {\n  padding-inline-start: 0;\n  list-style: none;\n}\n\n:where(ul:has(input:is([type=\"checkbox\"], [type=\"radio\"])) > li) {\n  padding-inline-start: 0;\n}\n\n/* Progress + meter — replace the native chrome with a clean Marx bar.\n * Each vendor pseudo-element lives in its own rule: an engine that doesn't\n * recognise one must not drop the others. */\n:where(progress, meter) {\n  appearance: none;\n  display: block;\n  inline-size: 100%;\n  block-size: var(--marx-space-xs);\n  border: 0;\n  border-radius: var(--marx-radius);\n  /* Track: the element background is the Firefox track and the fallback. */\n  background-color: var(--marx-surface);\n  /* Clip the fill to the rounded track. */\n  overflow: hidden;\n}\n\n:where(progress)::-webkit-progress-bar {\n  background-color: var(--marx-surface);\n}\n\n:where(progress)::-webkit-progress-value {\n  background-color: var(--marx-primary);\n}\n\n:where(progress)::-moz-progress-bar {\n  background-color: var(--marx-primary);\n}\n\n:where(meter)::-webkit-meter-bar {\n  background-color: var(--marx-surface);\n  border: 0;\n}\n\n:where(meter)::-webkit-meter-optimum-value {\n  background-color: var(--marx-success);\n}\n\n:where(meter)::-webkit-meter-suboptimum-value {\n  background-color: var(--marx-warning);\n}\n\n:where(meter)::-webkit-meter-even-less-good-value {\n  background-color: var(--marx-danger);\n}\n\n/* Firefox can't split the meter bands by pseudo-element; colour the fill green. */\n:where(meter)::-moz-meter-bar {\n  background-color: var(--marx-success);\n}\n\n/* Single selects: swap the cramped native chevron for a roomy custom one.\n * The mid-grey stroke reads on both light and dark surfaces (a background SVG\n * can't follow a token color). Multi/size selects are list boxes, so they keep\n * their native rendering. */\n:where(select:not([multiple], [size])) {\n  appearance: none;\n  padding-inline-end: var(--marx-space-xl);\n  background-image: url(\"data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='16' viewBox='0 0 16 16' fill='none' stroke='%23888' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M4 6l4 4 4-4'/%3E%3C/svg%3E\");\n  background-repeat: no-repeat;\n  background-position: right var(--marx-space-md) center;\n  background-size: 1em;\n}\n\n/* Bordered swatch at a comfortable tappable size. */\n:where(input[type=\"color\"]) {\n  inline-size: 3rem;\n  block-size: 2.5rem;\n  padding: var(--marx-space-2xs);\n  background-color: var(--marx-bg);\n  border: 1px solid var(--marx-border);\n  border-radius: var(--marx-radius);\n}\n\n/* File picker button matches the marx primary button. */\n:where(input[type=\"file\"])::file-selector-button {\n  margin-inline-end: var(--marx-space-md);\n  padding: var(--marx-space-xs) var(--marx-space-md);\n  color: var(--marx-on-primary);\n  cursor: pointer;\n  background-color: var(--marx-primary);\n  border: 1px solid transparent;\n  border-radius: var(--marx-radius);\n}\n\n:where(input[type=\"file\"])::file-selector-button:hover {\n  background-color: var(--marx-primary-strong);\n}\n\n@media (prefers-reduced-motion: no-preference) {\n  :where(input[type=\"file\"])::file-selector-button {\n    transition: background-color 0.15s ease;\n  }\n}\n\n/* Placeholder: preflight sets a currentColor mix; marx prefers its muted token. */\n::placeholder {\n  color: var(--marx-muted);\n}\n\n:where(label) {\n  display: inline-block;\n  line-height: var(--marx-leading);\n  vertical-align: middle;\n}\n\n/* 8px above the field, not below the label: margin on an inline-block label\n   grows the line box and lifts a sibling radio or checkbox. */\n:where(\n  label\n    + :is(\n      input:not(\n        [type=\"checkbox\"],\n        [type=\"radio\"],\n        [type=\"hidden\"],\n        [type=\"button\"],\n        [type=\"submit\"],\n        [type=\"reset\"],\n        [type=\"image\"]\n      ),\n      select,\n      textarea\n    )\n) {\n  margin-block-start: var(--marx-space-xs);\n}\n\n:where(label:has(> input:is([type=\"checkbox\"], [type=\"radio\"]))) {\n  display: inline-flex;\n  align-items: center;\n  column-gap: var(--marx-space-2xs);\n}\n\n:where(fieldset) {\n  padding: var(--marx-space-md);\n  border: 1px solid var(--marx-border);\n  border-radius: var(--marx-radius);\n}\n\n:where(legend) {\n  padding-inline: var(--marx-space-xs);\n  font-weight: 500;\n}\n"],"names":[]}