@leftium/nimble.css 0.10.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- @layer nimble.reset{:where(:not(progress)),:where(),:where(){box-sizing:border-box;background-repeat:no-repeat}:where(html){-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5}:where(body){margin:0}:where(h1){margin-block:.67em;font-size:2em}:where(hr){height:0;color:inherit}:where(nav) :where(ol,ul){padding:0;list-style-type:none}:where(pre){font-family:monospace;font-size:1em}:where(abbr[title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace;font-size:1em}:where(small){font-size:80%}:where(sub,sup){vertical-align:baseline;font-size:75%;line-height:0;position:relative}:where(sub){bottom:-.25em}:where(sup){top:-.5em}:where(iframe){border-style:none}:where(table){border-collapse:collapse;text-indent:0;border-color:currentColor}:where(button,input,select,textarea){font:inherit;letter-spacing:inherit}:where(button,[type=button],[type=reset],[type=submit]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){resize:vertical;overflow:auto}:where([type=search]){-webkit-appearance:textfield;outline-offset:-2px}:where(){-webkit-appearance:none}:where(),:where(){height:auto}:where(){-webkit-appearance:button;font:inherit}:where(summary){display:list-item}:where(a,area,button,input,label,select,summary,textarea,[tabindex]){touch-action:manipulation;-webkit-tap-highlight-color:transparent}:where([aria-busy=true]){cursor:progress}:where([aria-disabled=true],[disabled]){cursor:not-allowed}@media (prefers-reduced-motion:reduce){:where(*),:where(),:where(){scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer nimble.base{:root{color-scheme:light dark;--nc-surface-hue:250;--nc-surface-1:light-dark(oklch(.985 .002 var(--nc-surface-hue)),oklch(.17 .005 calc(var(--nc-surface-hue) + 10)));--nc-surface-2:light-dark(oklch(.955 .002 var(--nc-surface-hue)),oklch(.2 .005 calc(var(--nc-surface-hue) + 10)));--nc-surface-3:light-dark(oklch(.925 .002 var(--nc-surface-hue)),oklch(.23 .005 calc(var(--nc-surface-hue) + 10)));--nc-surface-4:light-dark(oklch(.885 .002 var(--nc-surface-hue)),oklch(.27 .005 calc(var(--nc-surface-hue) + 10)));--nc-text:light-dark(oklch(.28 .005 var(--nc-surface-hue)),oklch(.86 .005 var(--nc-surface-hue)));--nc-border:light-dark(oklch(.83 .005 var(--nc-surface-hue)),oklch(.28 .005 calc(var(--nc-surface-hue) + 10)));--nc-primary:light-dark(oklch(50% .2 250),oklch(60% .2 250));--nc-primary-hover:light-dark(oklch(from var(--nc-primary) calc(l - .1) c h),oklch(from var(--nc-primary) calc(l + .1) c h));--nc-primary-focus:oklch(from var(--nc-primary) l c h / .4);--nc-primary-contrast:light-dark(#fff,oklch(15% .005 250));--nc-secondary:light-dark(oklch(45% .05 250),oklch(60% .05 250));--nc-secondary-hover:light-dark(oklch(from var(--nc-secondary) calc(l - .1) c h),oklch(from var(--nc-secondary) calc(l + .1) c h));--nc-secondary-focus:oklch(from var(--nc-secondary) l c h / .3);--nc-secondary-contrast:light-dark(#fff,oklch(15% .005 250));--nc-valid:light-dark(oklch(52% .17 145),oklch(65% .2 145));--nc-invalid:light-dark(oklch(55% .22 25),oklch(65% .22 25));--nc-font-sans:system-ui, sans-serif;--nc-font-mono:ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;--nc-spacing:1rem;--nc-radius:.25rem;--nc-content-width:60ch;--nc-content-shadow-gap:1rem;--nc-content-shadow:0 0 .15rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .02),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .015)), 0 0 .3rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .03),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .02)), 0 0 .75rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .04),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .025)), 0 0 1.35rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .04),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .03)), 0 0 2.5rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .05),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .035)), 0 0 6rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .06),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .04)), 0 0 0rem .0625rem light-dark(oklch(.55 .01 var(--nc-surface-hue) / .015),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .01))}[data-theme=dark]{color-scheme:dark}[data-theme=light]{color-scheme:light}html{font-family:var(--nc-font-sans);color:var(--nc-text);background-color:var(--nc-surface-1);scrollbar-gutter:stable;font-size:100%;line-height:1.5}body{grid-template-columns:1fr min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing))) 1fr;min-height:100dvh;display:grid;position:relative}::selection{background-color:var(--nc-primary-focus);color:var(--nc-text)}body>*,body>[style*="display: contents"]>*{grid-column:2;min-width:0}@media (width>=720px){body:before{content:"";width:min(calc(var(--nc-content-width) + 2 * var(--nc-content-shadow-gap)), calc(100% - 2 * var(--nc-spacing) + 2 * var(--nc-content-shadow-gap)));box-shadow:var(--nc-content-shadow);pointer-events:none;z-index:-1;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}}}@layer nimble.utilities{.container{max-width:var(--nc-content-width);padding-inline:var(--nc-spacing);margin-inline:auto}.fluid{max-width:none;padding-inline:var(--nc-spacing);display:block}.full-bleed{box-shadow:none;grid-column:1/-1;position:relative}.wide{box-shadow:none;width:100%;max-width:1200px;padding-inline:var(--nc-spacing);grid-column:1/-1;margin-inline:auto}}@media print{body{color:#000;background:#fff}a[href]:after{content:" (" attr(href) ")";color:#555;font-size:.85em}a[href^=\#]:after,a[href^=javascript\:]:after{content:none}pre,blockquote{page-break-inside:avoid}h2,h3,h4{page-break-after:avoid}img{max-width:100%!important}@page{margin:2cm}}@scope(:root) to (.no-nimble){@layer nimble.base{h1{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:2rem;font-weight:700;line-height:1.1}h2{margin-top:2rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.75rem;font-weight:700;line-height:1.15}h3{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.5rem;font-weight:700;line-height:1.2}h4{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.25rem;font-weight:700;line-height:1.3}h5{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.125rem;font-weight:700;line-height:1.4}h6{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1rem;font-weight:700;line-height:1.5}@media (width<=720px){h1{font-size:1.75rem}h2{font-size:1.5rem}h3{font-size:1.3rem}}p,ul,ol,dl,blockquote,pre,table,figure,form,fieldset{margin-top:0;margin-bottom:var(--nc-spacing)}ul,ol{padding-inline-start:1.5em}:where(li){margin-bottom:.25em}:where(li)>:where(ul,ol){margin-bottom:0}dt{font-weight:600}dd{margin-inline-start:1.5em;margin-bottom:.5em}blockquote{margin-block:var(--nc-spacing);padding:.25em var(--nc-spacing);border-inline-start:.25rem solid var(--nc-border);margin-inline:0;font-style:italic}:where(blockquote) footer,:where(blockquote) cite{color:color-mix(in oklch, var(--nc-text), transparent 40%);font-size:.9em;font-style:normal}hr{background-color:color-mix(in oklch, var(--nc-border), transparent 40%);height:1px;margin:var(--nc-spacing) 0;border:none}mark{color:light-dark(inherit,oklch(95% .01 85));background-color:light-dark(#fde68a,oklch(55% .12 85));border-radius:2px;padding:.1em .25em}address{font-style:normal}:where(a:not([role=button])){color:var(--nc-primary);text-underline-offset:.15em;text-decoration:underline;-webkit-text-decoration-color:color-mix(in oklch, var(--nc-primary), transparent 50%);text-decoration-color:color-mix(in oklch, var(--nc-primary), transparent 50%);transition:color .2s,text-decoration-color .2s}:where(a:not([role=button])):visited{color:color-mix(in oklch, var(--nc-primary) 40%, oklch(38% .15 310));-webkit-text-decoration-color:color-mix(in oklch, var(--nc-primary) 40%, oklch(38% .15 310) 30%);text-decoration-color:color-mix(in oklch, var(--nc-primary) 40%, oklch(38% .15 310) 30%)}:where(a:not([role=button])):hover{color:var(--nc-primary-hover);-webkit-text-decoration-color:var(--nc-primary-hover);text-decoration-color:var(--nc-primary-hover)}:where(button,[type=submit],[type=reset],[type=button],[role=button]){--_btn-padding-v:.5em;--_btn-padding-h:1em;padding:var(--_btn-padding-v) var(--_btn-padding-h);background-color:var(--nc-primary);color:var(--nc-primary-contrast);border:1px solid var(--nc-primary);border-radius:var(--nc-radius);font:inherit;cursor:pointer;text-align:center;margin:0;font-size:1rem;line-height:1.5;text-decoration:none;transition:background-color .2s,border-color .2s;display:inline-block}:where(button,[type=submit],[type=reset],[type=button],[role=button]):hover{background-color:var(--nc-primary-hover);border-color:var(--nc-primary-hover)}:where(button,[type=submit],[type=reset],[type=button],[role=button]):focus-visible{box-shadow:0 0 0 2px var(--nc-primary-focus);outline:none}:where([type=reset]){background-color:var(--nc-secondary);border-color:var(--nc-secondary);color:var(--nc-secondary-contrast)}:where([type=reset]):hover{background-color:var(--nc-secondary-hover);border-color:var(--nc-secondary-hover)}:where([type=reset]):focus-visible{box-shadow:0 0 0 2px var(--nc-secondary-focus)}:where(button,[type=submit],[type=reset],[type=button],[role=button]).inline{--_btn-padding-v:.05em;--_btn-padding-h:.4em;vertical-align:baseline;margin:.1em .15em;font-size:.875em}:where(button,[type=submit],[type=reset],[type=button],[role=button]):disabled{opacity:.5;cursor:not-allowed;pointer-events:none}:where([role=group]){margin-bottom:var(--nc-spacing);display:inline-flex}[role=group]>*{border-radius:0;margin:0;position:relative}[role=group]>*+*{--_divider:""}[role=group]>*+:before{content:var(--_divider);inset-inline-start:0;pointer-events:none;background:#ffffff4d;width:1px;position:absolute;top:20%;bottom:20%}[role=group]>:not(.secondary):not(.outline)+.secondary,[role=group]>.secondary+:not(.secondary):not(.outline),[role=group]>:not(.secondary):not(.outline)+.outline,[role=group]>.outline+:not(.secondary):not(.outline),[role=group]>.secondary+.outline,[role=group]>.outline+.secondary,[role=group]>input+*,[role=group]>select+*{--_divider:none}[role=group]>:first-child{border-start-start-radius:var(--nc-radius);border-end-start-radius:var(--nc-radius)}[role=group]>:last-child{border-start-end-radius:var(--nc-radius);border-end-end-radius:var(--nc-radius)}[role=group]:has(.outline):not(:has(>:not(.outline))){border:1px solid var(--nc-primary);border-radius:var(--nc-radius)}[role=group]:has(.outline):not(:has(>:not(.outline)))>.outline{border:none}[role=group]>.outline+.outline:before{background:var(--nc-primary)}[role=search] [role=group]>:first-child{border-start-start-radius:5rem;border-end-start-radius:5rem;padding-inline-start:1.25em}[role=search] [role=group]>:last-child{border-start-end-radius:5rem;border-end-end-radius:5rem;padding-inline-end:1.25em}:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=submit],[type=button],[type=reset]),select,textarea){--_input-bg:color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);background-color:var(--_input-bg);border:1px solid var(--nc-border);border-radius:var(--nc-radius);min-height:calc(2.5em + 2px);color:var(--nc-text);font:inherit;padding:.5em .75em;font-size:1rem;transition:border-color .2s,box-shadow .2s}:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=submit],[type=button],[type=reset],[type=date],[type=month],[type=week],[type=time],[type=datetime-local]),select,textarea){width:100%;margin-bottom:var(--nc-spacing)}:where(input,select,textarea):focus-visible{border-color:var(--nc-primary);box-shadow:0 0 0 2px var(--nc-primary-focus);outline:none}:where(input:not([type=submit],[type=button],[type=reset]),select,textarea)+:where(small){margin-top:calc(var(--nc-spacing) * -.75);margin-bottom:var(--nc-spacing);color:color-mix(in oklch, var(--nc-text), transparent 40%);font-size:.875em;display:block}:where(input,select,textarea)[aria-invalid=false]{border-color:var(--nc-valid)}:where(input,select,textarea)[aria-invalid=true]{border-color:var(--nc-invalid)}:where(input:not([type=submit],[type=button],[type=reset]),select,textarea)[aria-invalid=false]+:where(small){color:var(--nc-valid)}:where(input:not([type=submit],[type=button],[type=reset]),select,textarea)[aria-invalid=true]+:where(small){color:var(--nc-invalid)}:where(label){margin-bottom:.25em;display:block}:where(label:has(+input,+select,+textarea)){font-weight:600}:where(label:has(+[type=file],+[type=range])){margin-bottom:.5em}:where(fieldset){border:1px solid var(--nc-border);border-radius:var(--nc-radius);padding:var(--nc-spacing);min-width:0;max-width:100%}:where(legend){padding-inline:.25em;font-weight:600}:where([type=checkbox],[type=radio]){accent-color:var(--nc-primary);width:1.125em;height:1.125em;margin:0}:where(label:has([type=checkbox],[type=radio])){align-items:center;gap:.35em;margin-bottom:.5em;display:flex}:where(label:has([type=checkbox],[type=radio]):last-child){margin-bottom:0}:where([type=search]){border-radius:5rem;padding-inline:1.25em}:where([type=range]){accent-color:var(--nc-primary);width:100%;margin-bottom:var(--nc-spacing)}:where(input[list]){width:auto}:where([type=file]){color:var(--nc-text);font:inherit;cursor:pointer;max-width:100%;margin-bottom:var(--nc-spacing)}:where([type=file])::file-selector-button{margin-right:.75em;background-color:var(--nc-primary);color:var(--nc-primary-contrast);border:1px solid var(--nc-primary);border-radius:var(--nc-radius);font:inherit;cursor:pointer;margin-inline-end:.75em;padding:.5em 1em;transition:background-color .2s,border-color .2s}:where([type=file])::file-selector-button:hover{background-color:var(--nc-primary-hover);border-color:var(--nc-primary-hover)}:where([type=date],[type=month],[type=week],[type=time],[type=datetime-local]){min-width:10em;margin-bottom:var(--nc-spacing)}:where([type=color]){--_color-size:calc(1em * 1.5 + 1em + 2px);margin-bottom:var(--nc-spacing);--_color-pad:.25em;height:var(--_color-size);width:calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad));padding:var(--_color-pad);background-color:color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);border:1px solid var(--nc-border);border-radius:var(--nc-radius);cursor:pointer}:where([type=color])::-webkit-color-swatch-wrapper{padding:0}:where([type=color])::-webkit-color-swatch{border-radius:calc(var(--nc-radius) * .5);border:none}:where(label:has([type=checkbox][role=switch])){align-items:center;gap:.5em;display:flex}:where([type=checkbox][role=switch]){appearance:none;background-color:var(--nc-border);cursor:pointer;border-radius:1em;flex-shrink:0;width:2.5em;height:1.25em;margin:0;transition:background-color .2s;position:relative}:where([type=checkbox][role=switch]):before{content:"";background-color:#fff;border-radius:50%;width:calc(1.25em - 4px);height:calc(1.25em - 4px);transition:transform .2s;position:absolute;top:2px;left:2px}:where([type=checkbox][role=switch]):checked{background-color:var(--nc-primary)}:where([type=checkbox][role=switch]):checked:before{transform:translate(1.25em)}:where(table){border-collapse:collapse;width:100%}:where(th,td){border-bottom:1px solid color-mix(in oklch, var(--nc-border), transparent 40%);text-align:start;padding:.5em .75em}:where(thead th,thead td){background-color:var(--nc-surface-2);text-wrap:balance;border-bottom-width:2px;font-weight:600}:where(figure:has(table)){overflow-x:auto}:where(code,kbd,samp){font-family:var(--nc-font-mono);background-color:var(--nc-surface-2);border-radius:var(--nc-radius);padding:.15em .35em;font-size:.875em}:where(pre){background-color:var(--nc-surface-2);border-radius:var(--nc-radius);padding:var(--nc-spacing);overflow-x:auto}:where(pre code){font-size:inherit;background:0 0;padding:0}:where(kbd){border:1px solid var(--nc-border);border-bottom-width:2px}:where(img,video,canvas,svg){max-width:100%;height:auto}:where(figure){margin:0}:where(figcaption){color:color-mix(in oklch, var(--nc-text), transparent 40%);margin-top:.5em;font-size:.9em}:where(article){background-color:var(--nc-surface-1);border:1px solid var(--nc-border);border-radius:var(--nc-radius);padding:var(--nc-spacing);margin-bottom:var(--nc-spacing)}:where(article>header),:where(article>footer){background-color:color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);padding:var(--nc-spacing)}:where(article>header){margin:calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1) var(--nc-spacing);border-bottom:1px solid var(--nc-border);border-radius:var(--nc-radius) var(--nc-radius) 0 0}:where(article>footer){margin:var(--nc-spacing) calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1);border-top:1px solid var(--nc-border);border-radius:0 0 var(--nc-radius) var(--nc-radius)}:where(article)>:last-child:not(footer),:where(article>header,article>footer)>:last-child{margin-bottom:0}:where(article>header,article>footer)>h1,:where(article>header,article>footer)>h2,:where(article>header,article>footer)>h3,:where(article>header,article>footer)>h4,:where(article>header,article>footer)>h5,:where(article>header,article>footer)>h6{margin-top:0;margin-bottom:0}:where(details){border:1px solid var(--nc-border);border-radius:var(--nc-radius);margin-bottom:.5em;padding:0 1em}:where(summary){cursor:pointer;margin:0 -1em;padding:.5em 1em;font-weight:600;list-style-type:"▶ "}:where(details[open]>summary){list-style-type:"▼ "}:where(summary[role=button]){width:auto;margin:0 -1em;list-style:none;display:block}:where(summary[role=button]):before{content:"▶ ";vertical-align:middle;font-size:.75em;transition:transform .2s;display:inline-block}:where(details[open]>summary[role=button]):before{transform:rotate(90deg)}:where(details[open]){padding-bottom:.5em}:where(dialog){background-color:var(--nc-surface-4);border:1px solid var(--nc-border);border-radius:var(--nc-radius);max-width:min(90vw,40rem);padding:var(--nc-spacing)}dialog::backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000080;animation:.2s nc-backdrop-in}@keyframes nc-backdrop-in{0%{opacity:0}}:where(progress){appearance:none;border-radius:var(--nc-radius);background-color:var(--nc-surface-3);width:100%;height:.5rem;color:var(--nc-primary);border:0;position:relative;overflow:hidden}:where(progress)::-webkit-progress-bar{border-radius:var(--nc-radius);background-color:var(--nc-surface-3)}:where(progress)::-webkit-progress-value{background-color:var(--nc-primary);border-radius:var(--nc-radius);transition:inline-size .3s}:where(progress)::-moz-progress-bar{background-color:var(--nc-primary);border-radius:var(--nc-radius)}:where(progress):not([value]){--nc-progress-track:linear-gradient(to right, var(--nc-surface-3) 0%, var(--nc-primary) 25%, var(--nc-primary) 25%, var(--nc-surface-3) 50%, var(--nc-surface-3) 50%, var(--nc-primary) 75%, var(--nc-primary) 75%, var(--nc-surface-3) 100%);--nc-progress-track-size:200% 100%}@media (prefers-reduced-motion:no-preference){@supports selector(progress::after){:where(progress):not([value]):after{content:"";background:var(--nc-progress-track);background-size:var(--nc-progress-track-size);animation:12s linear infinite nc-progress-indeterminate;position:absolute;inset:0}}:where(progress):not([value])::-webkit-progress-bar{background:var(--nc-progress-track);background-size:var(--nc-progress-track-size);animation:12s linear infinite nc-progress-indeterminate}:where(progress):not([value])::-moz-progress-bar{background:var(--nc-progress-track);background-size:var(--nc-progress-track-size);animation:12s linear infinite nc-progress-indeterminate}}@keyframes nc-progress-indeterminate{0%{background-position:0 0}to{background-position:-200% 0}}:where(meter){appearance:none;border-radius:var(--nc-radius);background-color:var(--nc-surface-3);border:0;width:100%;height:.5rem;overflow:hidden}:where(meter)::-webkit-meter-bar{border-radius:var(--nc-radius);background-color:var(--nc-surface-3);border:0;height:.5rem}:where(meter)::-webkit-meter-optimum-value{background-color:var(--nc-valid);border-radius:var(--nc-radius)}:where(meter)::-webkit-meter-suboptimum-value{background-color:var(--nc-primary);border-radius:var(--nc-radius)}:where(meter)::-webkit-meter-even-less-good-value{background-color:var(--nc-invalid);border-radius:var(--nc-radius)}:where(meter)::-moz-meter-bar{background-color:var(--nc-primary);border-radius:var(--nc-radius)}:where(meter):-moz-meter-optimum::-moz-meter-bar{background-color:var(--nc-valid)}:where(meter):-moz-meter-sub-optimum::-moz-meter-bar{background-color:var(--nc-primary)}:where(meter):-moz-meter-sub-sub-optimum::-moz-meter-bar{background-color:var(--nc-invalid)}@supports (appearance:base-select){:where(select){appearance:base-select}:where(select)::picker(select){appearance:base-select}:where(select)::picker-icon{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 2l6 6 6-6'/%3E%3C/svg%3E");transition:rotate .4s}:where(select):open::picker-icon{rotate:180deg}:where(select)::picker(select){position-area:block-end;position-try-order:normal;position-try-fallbacks:flip-block;border:1px solid var(--nc-border);border-radius:var(--nc-radius);background-color:var(--nc-surface-1);opacity:0;transition:opacity .2s, overlay .2s allow-discrete, display .2s allow-discrete;padding:.25em}:where(select):open::picker(select){opacity:1}@starting-style{:where(select):open::picker(select){opacity:0}}:where(select) option{border-radius:var(--nc-radius);padding:.5em .75em;transition:background-color .15s}:where(select) option:hover{background-color:var(--nc-surface-2)}:where(select) option:checked{font-weight:600}}}@layer nimble.utilities{.secondary:not(a:not([role=button])){background-color:var(--nc-secondary);border-color:var(--nc-secondary);color:var(--nc-secondary-contrast)}.secondary:not(a:not([role=button])):hover{background-color:var(--nc-secondary-hover);border-color:var(--nc-secondary-hover)}.secondary:not(a:not([role=button])):focus-visible{box-shadow:0 0 0 2px var(--nc-secondary-focus)}a:not([role=button]).secondary{color:var(--nc-secondary);-webkit-text-decoration-color:color-mix(in oklch, var(--nc-secondary), transparent 50%);text-decoration-color:color-mix(in oklch, var(--nc-secondary), transparent 50%)}a:not([role=button]).secondary:hover{color:var(--nc-secondary-hover);-webkit-text-decoration-color:var(--nc-secondary-hover);text-decoration-color:var(--nc-secondary-hover)}.outline:not(a:not([role=button])){color:var(--nc-primary);background-color:#0000}.outline:not(a:not([role=button])):hover{background-color:var(--nc-primary-focus);color:var(--nc-primary-hover);border-color:var(--nc-primary-hover)}.striped :where(tbody tr:nth-child(2n)){background-color:var(--nc-surface-2)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.overflow-auto{overflow:auto}}[type=date],[type=month],[type=week],[type=time],[type=datetime-local]{appearance:none}details :last-child:last-child{margin-bottom:0}@supports selector(details::details-content){details::details-content{transition:opacity .3s ease, content-visibility .3s ease allow-discrete;opacity:0}details[open]::details-content{opacity:1}@supports (interpolate-size:allow-keywords){details{interpolate-size:allow-keywords}details::details-content{transition:height .3s ease, opacity .3s ease, content-visibility .3s ease allow-discrete;height:0;overflow:clip}details[open]::details-content{height:auto}}}}
1
+ @layer nimble.reset{:where(:not(progress)),:where(),:where(){box-sizing:border-box;background-repeat:no-repeat}:where(html){-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5}:where(body){margin:0}:where(h1){margin-block:.67em;font-size:2em}:where(hr){height:0;color:inherit}:where(nav) :where(ol,ul){padding:0;list-style-type:none}:where(pre){font-family:monospace;font-size:1em}:where(abbr[title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}:where(b,strong){font-weight:bolder}:where(code,kbd,samp){font-family:monospace;font-size:1em}:where(small){font-size:80%}:where(sub,sup){vertical-align:baseline;font-size:75%;line-height:0;position:relative}:where(sub){bottom:-.25em}:where(sup){top:-.5em}:where(iframe){border-style:none}:where(table){border-collapse:collapse;text-indent:0;border-color:currentColor}:where(button,input,select,textarea){font:inherit;letter-spacing:inherit}:where(button,[type=button],[type=reset],[type=submit]){-webkit-appearance:button}:where(fieldset){border:1px solid #a0a0a0}:where(progress){vertical-align:baseline}:where(textarea){resize:vertical;overflow:auto}:where([type=search]){-webkit-appearance:textfield;outline-offset:-2px}:where(){-webkit-appearance:none}:where(),:where(){height:auto}:where(){-webkit-appearance:button;font:inherit}:where(summary){display:list-item}:where(a,area,button,input,label,select,summary,textarea,[tabindex]){touch-action:manipulation;-webkit-tap-highlight-color:transparent}:where([aria-busy=true]){cursor:progress}:where([aria-disabled=true],[disabled]){cursor:not-allowed}@media (prefers-reduced-motion:reduce){:where(*),:where(),:where(){scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}}@layer nimble.base{:root{color-scheme:light dark;--nc-surface-hue:250;--nc-surface-1:light-dark(oklch(.985 .002 var(--nc-surface-hue)),oklch(.17 .005 calc(var(--nc-surface-hue) + 10)));--nc-surface-2:light-dark(oklch(.955 .002 var(--nc-surface-hue)),oklch(.2 .005 calc(var(--nc-surface-hue) + 10)));--nc-surface-3:light-dark(oklch(.925 .002 var(--nc-surface-hue)),oklch(.23 .005 calc(var(--nc-surface-hue) + 10)));--nc-surface-4:light-dark(oklch(.885 .002 var(--nc-surface-hue)),oklch(.27 .005 calc(var(--nc-surface-hue) + 10)));--nc-text:light-dark(oklch(.28 .005 var(--nc-surface-hue)),oklch(.86 .005 var(--nc-surface-hue)));--nc-border:light-dark(oklch(.83 .005 var(--nc-surface-hue)),oklch(.28 .005 calc(var(--nc-surface-hue) + 10)));--nc-primary:light-dark(oklch(50% .2 250),oklch(60% .2 250));--nc-primary-hover:light-dark(oklch(from var(--nc-primary) calc(l - .1) c h),oklch(from var(--nc-primary) calc(l + .1) c h));--nc-primary-focus:oklch(from var(--nc-primary) l c h / .4);--nc-primary-contrast:light-dark(#fff,oklch(15% .005 250));--nc-secondary:light-dark(oklch(45% .05 250),oklch(60% .05 250));--nc-secondary-hover:light-dark(oklch(from var(--nc-secondary) calc(l - .1) c h),oklch(from var(--nc-secondary) calc(l + .1) c h));--nc-secondary-focus:oklch(from var(--nc-secondary) l c h / .3);--nc-secondary-contrast:light-dark(#fff,oklch(15% .005 250));--nc-valid:light-dark(oklch(52% .17 145),oklch(65% .2 145));--nc-invalid:light-dark(oklch(55% .22 25),oklch(65% .22 25));--nc-font-sans:system-ui, sans-serif;--nc-font-mono:ui-monospace, Cascadia Code, Source Code Pro, Menlo, Consolas, DejaVu Sans Mono, monospace;--nc-spacing:1rem;--nc-radius:.25rem;--nc-content-width:60ch;--nc-content-shadow-gap:1rem;--nc-content-shadow:0 0 .15rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .02),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .015)), 0 0 .3rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .03),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .02)), 0 0 .75rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .04),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .025)), 0 0 1.35rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .04),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .03)), 0 0 2.5rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .05),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .035)), 0 0 6rem 0 light-dark(oklch(.55 .01 var(--nc-surface-hue) / .06),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .04)), 0 0 0rem .0625rem light-dark(oklch(.55 .01 var(--nc-surface-hue) / .015),oklch(.85 .01 calc(var(--nc-surface-hue) + 10) / .01))}[data-theme=dark]{color-scheme:dark}[data-theme=light]{color-scheme:light}html{font-family:var(--nc-font-sans);color:var(--nc-text);background-color:var(--nc-surface-1);scrollbar-gutter:stable;font-size:100%;line-height:1.5}body{grid-template-columns:1fr var(--nc-content-shadow-gap) min(var(--nc-content-width), calc(100% - 2 * var(--nc-spacing) - 2 * var(--nc-content-shadow-gap))) var(--nc-content-shadow-gap) 1fr;min-height:100dvh;padding-block:var(--nc-spacing);display:grid;position:relative}::selection{background-color:var(--nc-primary-focus);color:var(--nc-text)}body>*,body>[style*="display: contents"]>*{grid-column:3;min-width:0}@media (width>=720px){body:before{content:"";width:min(calc(var(--nc-content-width) + 2 * var(--nc-content-shadow-gap)), calc(100% - 2 * var(--nc-spacing)));box-shadow:var(--nc-content-shadow);pointer-events:none;z-index:-1;position:absolute;top:0;bottom:0;left:50%;transform:translate(-50%)}}}@layer nimble.utilities{.container{max-width:var(--nc-content-width);padding-inline:var(--nc-spacing);margin-inline:auto}.fluid{max-width:none;padding-inline:var(--nc-spacing);display:block}.full-bleed{box-shadow:none;grid-column:1/-1;position:relative}.grid{gap:var(--nc-spacing);margin-bottom:var(--nc-spacing);grid-template-columns:1fr;display:grid}@media (width>=720px){.grid{grid-template-columns:repeat(auto-fit,minmax(0%,1fr))}}.wide{box-shadow:none;width:100%;max-width:1200px;padding-inline:var(--nc-spacing);grid-column:1/-1;margin-inline:auto}}@media print{body{color:#000;background:#fff}a[href]:after{content:" (" attr(href) ")";color:#555;font-size:.85em}a[href^=\#]:after,a[href^=javascript\:]:after{content:none}pre,blockquote{page-break-inside:avoid}h2,h3,h4{page-break-after:avoid}img{max-width:100%!important}@page{margin:2cm}}@scope(:root) to (.no-nimble){@layer nimble.base{h1{margin-top:0;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:2rem;font-weight:700;line-height:1.1}h2{margin-top:2rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.75rem;font-weight:700;line-height:1.15}h3{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.5rem;font-weight:700;line-height:1.2}h4{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.25rem;font-weight:700;line-height:1.3}h5{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1.125rem;font-weight:700;line-height:1.4}h6{margin-top:1.5rem;margin-bottom:var(--nc-spacing);text-wrap:balance;font-size:1rem;font-weight:700;line-height:1.5}@media (width<=720px){h1{font-size:1.75rem}h2{font-size:1.5rem}h3{font-size:1.3rem}}p,ul,ol,dl,blockquote,pre,table,figure,form,fieldset{margin-top:0;margin-bottom:var(--nc-spacing)}body>:first-child,body>:first-child>:first-child{margin-top:0}body>:nth-last-child(1 of :not(script,style,dialog)),body>:nth-last-child(1 of :not(script,style,dialog))>:last-child{margin-bottom:0}ul,ol{padding-inline-start:1.5em}:where(li){margin-bottom:.25em}:where(li)>:where(ul,ol){margin-bottom:0}dt{font-weight:600}dd{margin-inline-start:1.5em;margin-bottom:.5em}blockquote{margin-block:var(--nc-spacing);padding:.25em var(--nc-spacing);border-inline-start:.25rem solid var(--nc-border);margin-inline:0;font-style:italic}:where(blockquote) footer,:where(blockquote) cite{color:color-mix(in oklch, var(--nc-text), transparent 40%);font-size:.9em;font-style:normal}hr{background-color:color-mix(in oklch, var(--nc-border), transparent 40%);height:1px;margin:var(--nc-spacing) 0;border:none}mark{color:light-dark(inherit,oklch(95% .01 85));background-color:light-dark(#fde68a,oklch(55% .12 85));border-radius:2px;padding:.1em .25em}address{font-style:normal}:where(a:not([role=button])){color:var(--nc-primary);text-underline-offset:.15em;text-decoration:underline;-webkit-text-decoration-color:color-mix(in oklch, var(--nc-primary), transparent 50%);text-decoration-color:color-mix(in oklch, var(--nc-primary), transparent 50%);transition:color .2s,text-decoration-color .2s}:where(a:not([role=button])):visited{color:color-mix(in oklch, var(--nc-primary) 40%, oklch(38% .15 310));-webkit-text-decoration-color:color-mix(in oklch, var(--nc-primary) 40%, oklch(38% .15 310) 30%);text-decoration-color:color-mix(in oklch, var(--nc-primary) 40%, oklch(38% .15 310) 30%)}:where(a:not([role=button])):hover{color:var(--nc-primary-hover);-webkit-text-decoration-color:var(--nc-primary-hover);text-decoration-color:var(--nc-primary-hover)}:where(button,[type=submit],[type=reset],[type=button],[role=button]){--_btn-padding-v:.5em;--_btn-padding-h:1em;padding:var(--_btn-padding-v) var(--_btn-padding-h);background-color:var(--nc-primary);color:var(--nc-primary-contrast);border:1px solid var(--nc-primary);border-radius:var(--nc-radius);font:inherit;cursor:pointer;text-align:center;margin:0;margin-block-end:.25em;font-size:1rem;line-height:1.5;text-decoration:none;transition:background-color .2s,border-color .2s;display:inline-block}:where(button,[type=submit],[type=reset],[type=button],[role=button]):hover{background-color:var(--nc-primary-hover);border-color:var(--nc-primary-hover)}:where(button,[type=submit],[type=reset],[type=button],[role=button]):focus-visible{box-shadow:0 0 0 2px var(--nc-primary-focus);outline:none}:where([type=reset]){background-color:var(--nc-secondary);border-color:var(--nc-secondary);color:var(--nc-secondary-contrast)}:where([type=reset]):hover{background-color:var(--nc-secondary-hover);border-color:var(--nc-secondary-hover)}:where([type=reset]):focus-visible{box-shadow:0 0 0 2px var(--nc-secondary-focus)}:where(button,[type=submit],[type=reset],[type=button],[role=button]).inline{--_btn-padding-v:.05em;--_btn-padding-h:.4em;vertical-align:baseline;margin:.1em .15em;font-size:.875em}:where(button,[type=submit],[type=reset],[type=button],[role=button]):disabled{opacity:.5;cursor:not-allowed;pointer-events:none}:where([role=group]){margin-bottom:.25em;display:inline-flex}[role=group]>*{border-radius:0;margin:0;position:relative}[role=group]>*+*{--_divider:""}[role=group]>*+:before{content:var(--_divider);inset-inline-start:0;pointer-events:none;background:#ffffff4d;width:1px;position:absolute;top:20%;bottom:20%}[role=group]>:not(.secondary):not(.outline)+.secondary,[role=group]>.secondary+:not(.secondary):not(.outline),[role=group]>:not(.secondary):not(.outline)+.outline,[role=group]>.outline+:not(.secondary):not(.outline),[role=group]>.secondary+.outline,[role=group]>.outline+.secondary,[role=group]>input+*,[role=group]>select+*{--_divider:none}[role=group]>:first-child{border-start-start-radius:var(--nc-radius);border-end-start-radius:var(--nc-radius)}[role=group]>:last-child{border-start-end-radius:var(--nc-radius);border-end-end-radius:var(--nc-radius)}[role=group]:has(.outline):not(:has(>:not(.outline))){border:1px solid var(--nc-primary);border-radius:var(--nc-radius)}[role=group]:has(.outline):not(:has(>:not(.outline)))>.outline{border:none}[role=group]>.outline+.outline:before{background:var(--nc-primary)}[role=search] [role=group]>:first-child{border-start-start-radius:5rem;border-end-start-radius:5rem;padding-inline-start:1.25em}[role=search] [role=group]>:last-child{border-start-end-radius:5rem;border-end-end-radius:5rem;padding-inline-end:1.25em}:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=submit],[type=button],[type=reset]),select,textarea){--_input-bg:color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);background-color:var(--_input-bg);border:1px solid var(--nc-border);border-radius:var(--nc-radius);min-height:calc(2.5em + 2px);color:var(--nc-text);font:inherit;padding:.5em .75em;font-size:1rem;transition:border-color .2s,box-shadow .2s}:where(input:not([type=checkbox],[type=radio],[type=range],[type=file],[type=color],[type=submit],[type=button],[type=reset],[type=date],[type=month],[type=week],[type=time],[type=datetime-local]),select,textarea){width:100%;margin-bottom:var(--nc-spacing)}:where(p,div)>:where(input,select,textarea):nth-last-child(1 of :not(datalist,script,style)){margin-bottom:0}:where(input,select,textarea):focus-visible{border-color:var(--nc-primary);box-shadow:0 0 0 2px var(--nc-primary-focus);outline:none}:where(input:not([type=submit],[type=button],[type=reset]),select,textarea)+:where(small){margin-top:calc(var(--nc-spacing) * -.75);margin-bottom:var(--nc-spacing);color:color-mix(in oklch, var(--nc-text), transparent 40%);font-size:.875em;display:block}:where(input,select,textarea)[aria-invalid=false]{border-color:var(--nc-valid)}:where(input,select,textarea)[aria-invalid=true]{border-color:var(--nc-invalid)}:where(input:not([type=submit],[type=button],[type=reset]),select,textarea)[aria-invalid=false]+:where(small){color:var(--nc-valid)}:where(input:not([type=submit],[type=button],[type=reset]),select,textarea)[aria-invalid=true]+:where(small){color:var(--nc-invalid)}:where(label){margin-bottom:.25em;display:block}:where(label:has(+input,+select,+textarea)){font-weight:600}:where(label:has(+[type=file],+[type=range])){margin-bottom:.5em}:where(fieldset){border:1px solid var(--nc-border);border-radius:var(--nc-radius);padding:var(--nc-spacing);min-width:0;max-width:100%}:where(fieldset)>:nth-last-child(1 of :not(datalist,script,style)),:where(fieldset)>:nth-last-child(1 of :not(datalist,script,style))>:nth-last-child(1 of :not(datalist,script,style)){margin-bottom:0}:where(legend){padding-inline:.25em;font-weight:600}:where([type=checkbox],[type=radio]){accent-color:var(--nc-primary);width:1.125em;height:1.125em;margin:0}:where(label:has([type=checkbox],[type=radio])){align-items:center;gap:.35em;margin-bottom:.5em;display:flex}:where(label:has([type=checkbox],[type=radio]):last-child){margin-bottom:0}:where([type=search]){border-radius:5rem;padding-inline:1.25em}:where([type=range]){accent-color:var(--nc-primary);width:100%;margin-bottom:var(--nc-spacing)}:where(input[list]){width:auto}:where([type=file]){color:var(--nc-text);font:inherit;cursor:pointer;max-width:100%;margin-bottom:var(--nc-spacing)}:where([type=file])::file-selector-button{margin-right:.75em;background-color:var(--nc-primary);color:var(--nc-primary-contrast);border:1px solid var(--nc-primary);border-radius:var(--nc-radius);font:inherit;cursor:pointer;margin-inline-end:.75em;padding:.5em 1em;transition:background-color .2s,border-color .2s}:where([type=file])::file-selector-button:hover{background-color:var(--nc-primary-hover);border-color:var(--nc-primary-hover)}:where([type=date],[type=month],[type=week],[type=time],[type=datetime-local]){min-width:10em;margin-bottom:var(--nc-spacing)}:where([type=color]){--_color-size:calc(1em * 1.5 + 1em + 2px);margin-bottom:var(--nc-spacing);--_color-pad:.25em;height:var(--_color-size);width:calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad));padding:var(--_color-pad);background-color:color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);border:1px solid var(--nc-border);border-radius:var(--nc-radius);cursor:pointer}:where([type=color])::-webkit-color-swatch-wrapper{padding:0}:where([type=color])::-webkit-color-swatch{border-radius:calc(var(--nc-radius) * .5);border:none}:where(label:has([type=checkbox][role=switch])){align-items:center;gap:.5em;display:flex}:where([type=checkbox][role=switch]){appearance:none;background-color:var(--nc-border);cursor:pointer;border-radius:1em;flex-shrink:0;width:2.5em;height:1.25em;margin:0;transition:background-color .2s;position:relative}:where([type=checkbox][role=switch]):before{content:"";background-color:#fff;border-radius:50%;width:calc(1.25em - 4px);height:calc(1.25em - 4px);transition:transform .2s;position:absolute;top:2px;left:2px}:where([type=checkbox][role=switch]):checked{background-color:var(--nc-primary)}:where([type=checkbox][role=switch]):checked:before{transform:translate(1.25em)}:where(table){border-collapse:collapse;width:100%}:where(th,td){border-bottom:1px solid color-mix(in oklch, var(--nc-border), transparent 40%);text-align:start;padding:.5em .75em}:where(thead th,thead td){background-color:var(--nc-surface-2);text-wrap:balance;border-bottom-width:2px;font-weight:600}:where(figure:has(table)){overflow-x:auto}:where(code,kbd,samp){font-family:var(--nc-font-mono);background-color:var(--nc-surface-2);border-radius:var(--nc-radius);padding:.15em .35em;font-size:.875em}:where(pre){background-color:var(--nc-surface-2);border-radius:var(--nc-radius);padding:var(--nc-spacing);overflow-x:auto}:where(pre code){font-size:inherit;background:0 0;padding:0}:where(kbd){border:1px solid var(--nc-border);border-bottom-width:2px}:where(img,video,canvas,svg){max-width:100%;height:auto}:where(figure){margin:0}:where(figcaption){color:color-mix(in oklch, var(--nc-text), transparent 40%);margin-top:.5em;font-size:.9em}:where(article){background-color:var(--nc-surface-1);border:1px solid var(--nc-border);border-radius:var(--nc-radius);padding:var(--nc-spacing);margin-bottom:var(--nc-spacing)}:where(article>header),:where(article>footer){background-color:color-mix(in oklch, var(--nc-surface-1), var(--nc-surface-2) 20%);padding:var(--nc-spacing)}:where(article>header){margin:calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1) var(--nc-spacing);border-bottom:1px solid var(--nc-border);border-radius:var(--nc-radius) var(--nc-radius) 0 0}:where(article>footer){margin:var(--nc-spacing) calc(var(--nc-spacing) * -1) calc(var(--nc-spacing) * -1);border-top:1px solid var(--nc-border);border-radius:0 0 var(--nc-radius) var(--nc-radius)}:where(article)>:last-child:not(footer),:where(article>header,article>footer)>:last-child{margin-bottom:0}:where(article>header,article>footer)>h1,:where(article>header,article>footer)>h2,:where(article>header,article>footer)>h3,:where(article>header,article>footer)>h4,:where(article>header,article>footer)>h5,:where(article>header,article>footer)>h6{margin-top:0;margin-bottom:0}:where(details){border:1px solid var(--nc-border);border-radius:var(--nc-radius);margin-bottom:.5em;padding:0 1em}:where(summary){cursor:pointer;margin:0 -1em;padding:.5em 1em;font-weight:600;list-style-type:"▶ "}:where(details[open]>summary){list-style-type:"▼ "}:where(summary[role=button]){width:auto;margin:0 -1em;list-style:none;display:block}:where(summary[role=button]):before{content:"▶ ";vertical-align:middle;font-size:.75em;transition:transform .2s;display:inline-block}:where(details[open]>summary[role=button]):before{transform:rotate(90deg)}:where(details[open]){padding-bottom:.5em}:where(dialog){background-color:var(--nc-surface-4);border:1px solid var(--nc-border);border-radius:var(--nc-radius);max-width:min(90vw,40rem);max-height:85vh;padding:var(--nc-spacing)}:where(dialog[open]){margin:auto;position:fixed;inset:0}:where(dialog:has(>article)){background:0 0;border:none;padding:0}:where(dialog>article){margin-bottom:0}dialog::backdrop{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);background:#00000080;animation:.2s nc-backdrop-in}@keyframes nc-backdrop-in{0%{opacity:0}}:where(progress){width:100%}:where(meter){appearance:none;border-radius:var(--nc-radius);background-color:var(--nc-surface-3);border:0;width:100%;height:.5rem;overflow:hidden}:where(meter)::-webkit-meter-bar{border-radius:var(--nc-radius);background-color:var(--nc-surface-3);border:0;height:.5rem}:where(meter)::-webkit-meter-optimum-value{background-color:var(--nc-valid);border-radius:var(--nc-radius)}:where(meter)::-webkit-meter-suboptimum-value{background-color:var(--nc-primary);border-radius:var(--nc-radius)}:where(meter)::-webkit-meter-even-less-good-value{background-color:var(--nc-invalid);border-radius:var(--nc-radius)}:where(meter)::-moz-meter-bar{background-color:var(--nc-primary);border-radius:var(--nc-radius)}:where(meter):-moz-meter-optimum::-moz-meter-bar{background-color:var(--nc-valid)}:where(meter):-moz-meter-sub-optimum::-moz-meter-bar{background-color:var(--nc-primary)}:where(meter):-moz-meter-sub-sub-optimum::-moz-meter-bar{background-color:var(--nc-invalid)}@supports (appearance:base-select){:where(select){appearance:base-select}:where(select)::picker(select){appearance:base-select}:where(select)::picker-icon{content:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='16' height='10' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M2 2l6 6 6-6'/%3E%3C/svg%3E");transition:rotate .4s}:where(select):open::picker-icon{rotate:180deg}:where(select)::picker(select){position-area:block-end;position-try-order:normal;position-try-fallbacks:flip-block;border:1px solid var(--nc-border);border-radius:var(--nc-radius);background-color:var(--nc-surface-1);opacity:0;transition:opacity .2s, overlay .2s allow-discrete, display .2s allow-discrete;padding:.25em}:where(select):open::picker(select){opacity:1}@starting-style{:where(select):open::picker(select){opacity:0}}:where(select) option{border-radius:var(--nc-radius);padding:.5em .75em;transition:background-color .15s}:where(select) option:hover{background-color:var(--nc-surface-2)}:where(select) option:checked{font-weight:600}}}@layer nimble.utilities{.secondary:not(a:not([role=button])){background-color:var(--nc-secondary);border-color:var(--nc-secondary);color:var(--nc-secondary-contrast)}.secondary:not(a:not([role=button])):hover{background-color:var(--nc-secondary-hover);border-color:var(--nc-secondary-hover)}.secondary:not(a:not([role=button])):focus-visible{box-shadow:0 0 0 2px var(--nc-secondary-focus)}a:not([role=button]).secondary{color:var(--nc-secondary);-webkit-text-decoration-color:color-mix(in oklch, var(--nc-secondary), transparent 50%);text-decoration-color:color-mix(in oklch, var(--nc-secondary), transparent 50%)}a:not([role=button]).secondary:hover{color:var(--nc-secondary-hover);-webkit-text-decoration-color:var(--nc-secondary-hover);text-decoration-color:var(--nc-secondary-hover)}.outline:not(a:not([role=button])){color:var(--nc-primary);background-color:#0000}.outline:not(a:not([role=button])):hover{background-color:var(--nc-primary-focus);color:var(--nc-primary-hover);border-color:var(--nc-primary-hover)}.striped :where(tbody tr:nth-child(2n)){background-color:var(--nc-surface-2)}.visually-hidden{clip-path:inset(50%);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.overflow-auto{overflow:auto}}[type=date],[type=month],[type=week],[type=time],[type=datetime-local]{appearance:none}details :last-child:last-child{margin-bottom:0}@supports selector(details::details-content){details::details-content{transition:opacity .3s ease, content-visibility .3s ease allow-discrete;opacity:0}details[open]::details-content{opacity:1}@supports (interpolate-size:allow-keywords){details{interpolate-size:allow-keywords}details::details-content{transition:height .3s ease, opacity .3s ease, content-visibility .3s ease allow-discrete;height:0;overflow:clip}details[open]::details-content{height:auto}}}}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@leftium/nimble.css",
3
- "version": "0.10.0",
3
+ "version": "0.12.0",
4
4
  "description": "A minimal class/classless CSS library combining Open Props design tokens with PicoCSS aesthetics",
5
5
  "type": "module",
6
6
  "main": "dist/nimble.min.css",
package/src/_buttons.scss CHANGED
@@ -11,8 +11,8 @@
11
11
  // ----- Base button -----
12
12
 
13
13
  :where(button, [type="submit"], [type="reset"], [type="button"], [role="button"]) {
14
- --_btn-padding-v: 0.5em;
15
- --_btn-padding-h: 1em;
14
+ --_btn-padding-v: 0.5em; // OP ~size-2 (em-relative)
15
+ --_btn-padding-h: 1em; // OP ~size-3 (em-relative)
16
16
 
17
17
  padding: var(--_btn-padding-v) var(--_btn-padding-h);
18
18
  background-color: var(#{$prefix}primary);
@@ -20,7 +20,7 @@
20
20
  border: 1px solid var(#{$prefix}primary);
21
21
  border-radius: var(#{$prefix}radius);
22
22
  font: inherit;
23
- font-size: 1rem;
23
+ font-size: 1rem; // OP --size-3
24
24
  line-height: 1.5;
25
25
  cursor: pointer;
26
26
  text-decoration: none;
@@ -30,6 +30,12 @@
30
30
  transition: background-color 0.2s, border-color 0.2s;
31
31
  }
32
32
 
33
+ // Vertical rhythm for flow-level buttons and link-as-button elements
34
+ // so wrapped rows don't collide.
35
+ :where(button, [type="submit"], [type="reset"], [type="button"], [role="button"]) {
36
+ margin-block-end: 0.25em; // OP ~size-1 (em-relative)
37
+ }
38
+
33
39
  :where(button, [type="submit"], [type="reset"], [type="button"], [role="button"]):hover {
34
40
  background-color: var(#{$prefix}primary-hover);
35
41
  border-color: var(#{$prefix}primary-hover);
@@ -60,10 +66,10 @@
60
66
  // ----- Inline (buttons within flow text) -----
61
67
 
62
68
  :where(button, [type="submit"], [type="reset"], [type="button"], [role="button"]).inline {
63
- --_btn-padding-v: 0.05em;
64
- --_btn-padding-h: 0.4em;
65
- margin: 0.1em 0.15em;
66
- font-size: 0.875em;
69
+ --_btn-padding-v: 0.05em; // no OP match (micro)
70
+ --_btn-padding-h: 0.4em; // no OP match (near ~size-2)
71
+ margin: 0.1em 0.15em; // no OP match (micro)
72
+ font-size: 0.875em; // no OP match (7/8)
67
73
  vertical-align: baseline;
68
74
  }
69
75
 
@@ -81,7 +87,7 @@
81
87
 
82
88
  :where([role="group"]) {
83
89
  display: inline-flex;
84
- margin-bottom: var(#{$prefix}spacing);
90
+ margin-bottom: 0.25em; // OP ~size-1 (em-relative); match individual buttons
85
91
  }
86
92
 
87
93
  [role="group"] > * {
@@ -165,15 +171,15 @@
165
171
  // ----- Search groups (pill shape) -----
166
172
 
167
173
  [role="search"] [role="group"] > :first-child {
168
- border-start-start-radius: 5rem;
169
- border-end-start-radius: 5rem;
170
- padding-inline-start: 1.25em;
174
+ border-start-start-radius: 5rem; // OP --size-10 (pill)
175
+ border-end-start-radius: 5rem; // OP --size-10 (pill)
176
+ padding-inline-start: 1.25em; // OP ~size-4 (em-relative)
171
177
  }
172
178
 
173
179
  [role="search"] [role="group"] > :last-child {
174
- border-start-end-radius: 5rem;
175
- border-end-end-radius: 5rem;
176
- padding-inline-end: 1.25em;
180
+ border-start-end-radius: 5rem; // OP --size-10 (pill)
181
+ border-end-end-radius: 5rem; // OP --size-10 (pill)
182
+ padding-inline-end: 1.25em; // OP ~size-4 (em-relative)
177
183
  }
178
184
 
179
185
  }
package/src/_code.scss CHANGED
@@ -9,10 +9,10 @@
9
9
 
10
10
  :where(code, kbd, samp) {
11
11
  font-family: var(#{$prefix}font-mono);
12
- font-size: 0.875em;
12
+ font-size: 0.875em; // no OP match (7/8); OP normalize inherits font-size
13
13
  background-color: var(#{$prefix}surface-2);
14
14
  border-radius: var(#{$prefix}radius);
15
- padding: 0.15em 0.35em;
15
+ padding: 0.15em 0.35em; // no OP match; OP normalize: --size-1 --size-2
16
16
  }
17
17
 
18
18
  :where(pre) {
package/src/_colors.scss CHANGED
@@ -41,6 +41,7 @@
41
41
  // Build a 7-layer progressive content shadow.
42
42
  // Each layer uses light-dark() so opacity adapts to the color scheme.
43
43
  // Modeled after PicoCSS/veneer card shadow with stronger presence.
44
+ // The shadow gap is structural (grid columns), not spread-based.
44
45
  @function _content-shadow($light-color, $dark-color) {
45
46
  @return
46
47
  _shadow-layer-spread(0.15rem, 0, $light-color, 0.02, $dark-color, 0.015),
package/src/_config.scss CHANGED
@@ -46,13 +46,13 @@ $surface-dark-chroma-boost: 0.003 !default;
46
46
  $surface-dark-hue-shift: 10 !default;
47
47
 
48
48
  // --- Typography ---
49
- $font-sans: system-ui, sans-serif !default;
50
- $font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro',
49
+ $font-sans: system-ui, sans-serif !default; // OP --font-sans (--font-system-ui)
50
+ $font-mono: ui-monospace, 'Cascadia Code', 'Source Code Pro', // OP ~--font-mono (--font-monospace-code); subset
51
51
  Menlo, Consolas, 'DejaVu Sans Mono', monospace !default;
52
52
 
53
53
  // --- Spacing & Layout ---
54
- $spacing: 1rem !default;
55
- $radius: 0.25rem !default;
54
+ $spacing: 1rem !default; // OP --size-3
55
+ $radius: 0.25rem !default; // OP --size-1
56
56
  $content-width: 60ch !default;
57
57
  $wide-width: 1200px !default;
58
58
 
package/src/_details.scss CHANGED
@@ -14,23 +14,24 @@
14
14
  border-radius: var(#{$prefix}radius);
15
15
  // No vertical padding — summary provides its own via the
16
16
  // negative-margin/padding trick for vertical centering.
17
- padding: 0 1em;
17
+ padding: 0 1em; // OP ~size-3 (em-relative)
18
+ // OP normalize: padding-inline: --size-3, padding-block: --size-2
18
19
  }
19
20
 
20
21
  :where(details) {
21
- margin-bottom: 0.5em;
22
+ margin-bottom: 0.5em; // OP ~size-2 (em-relative)
22
23
  }
23
24
 
24
25
  :where(summary) {
25
26
  cursor: pointer;
26
- font-weight: 600;
27
+ font-weight: 600; // OP --font-weight-6 (OP normalize uses weight-7: 700 for dt/summary)
27
28
  // Stretch summary across the horizontal padding area, then
28
29
  // re-apply vertical + horizontal padding on itself. When
29
30
  // collapsed the text is vertically centered with equal padding.
30
31
  // Vertical padding matches button padding (0.5em) so collapsed
31
32
  // details height equals button height (2px border + 2.5em).
32
- margin: 0 -1em;
33
- padding: 0.5em 1em;
33
+ margin: 0 -1em; // OP ~size-3 (em-relative, negative)
34
+ padding: 0.5em 1em; // OP ~size-2 ~size-3 (em-relative)
34
35
  // Custom markers fix iOS Safari's tiny native disclosure triangle.
35
36
  // Full-size Unicode triangles inherit font metrics and sit on the
36
37
  // baseline like native markers.
@@ -51,7 +52,7 @@
51
52
  :where(summary[role="button"]) {
52
53
  display: block;
53
54
  width: auto;
54
- margin: 0 -1em; // restore stretch (button sets margin: 0)
55
+ margin: 0 -1em; // OP ~size-3 (em-relative, negative); restore stretch
55
56
  list-style: none; // remove ▶/▼ marker — replaced by ::before
56
57
  }
57
58
 
@@ -59,7 +60,7 @@
59
60
  content: '▶\00a0';
60
61
  display: inline-block;
61
62
  transition: transform 0.2s ease;
62
- font-size: 0.75em;
63
+ font-size: 0.75em; // no OP match (3/4)
63
64
  vertical-align: middle;
64
65
  }
65
66
 
@@ -69,7 +70,7 @@
69
70
 
70
71
  // When open, restore vertical padding for content spacing.
71
72
  :where(details[open]) {
72
- padding-bottom: 0.5em;
73
+ padding-bottom: 0.5em; // OP ~size-2 (em-relative)
73
74
  }
74
75
 
75
76
  }
package/src/_dialog.scss CHANGED
@@ -13,13 +13,34 @@
13
13
  background-color: var(#{$prefix}surface-4);
14
14
  border: 1px solid var(#{$prefix}border);
15
15
  border-radius: var(#{$prefix}radius);
16
- max-width: min(90vw, 40rem);
16
+ max-width: min(90vw, 40rem); // no OP match (above scale)
17
+ max-height: 85vh;
17
18
  padding: var(#{$prefix}spacing);
18
19
  }
19
20
 
21
+ // Reinforce UA centering for showModal() — some browsers lose
22
+ // the default position/inset/margin when author layers are present.
23
+ :where(dialog[open]) {
24
+ position: fixed;
25
+ inset: 0;
26
+ margin: auto;
27
+ }
28
+
29
+ // When dialog wraps an article, let the article provide all
30
+ // visual chrome (background, border, padding, radius).
31
+ :where(dialog:has(> article)) {
32
+ background: none;
33
+ border: none;
34
+ padding: 0;
35
+ }
36
+
37
+ :where(dialog > article) {
38
+ margin-bottom: 0;
39
+ }
40
+
20
41
  dialog::backdrop {
21
42
  background: rgb(0 0 0 / 0.5);
22
- backdrop-filter: blur(4px);
43
+ backdrop-filter: blur(4px); // OP --size-px-1
23
44
  animation: nc-backdrop-in 0.2s ease;
24
45
  }
25
46
 
@@ -10,23 +10,29 @@
10
10
 
11
11
  html {
12
12
  font-family: var(#{$prefix}font-sans);
13
- font-size: 100%; // = 16px in most browsers
14
- line-height: 1.5;
13
+ font-size: 100%; // = 16px (OP --size-3) in most browsers
14
+ line-height: 1.5; // OP --font-lineheight-3
15
15
  color: var(#{$prefix}text);
16
16
  background-color: var(#{$prefix}surface-1);
17
17
  scrollbar-gutter: stable;
18
18
  }
19
19
 
20
- // Grid centering: define the 3-column grid on body.
21
- // Column assignment (grid-column: 2) is in _grid-columns.scss
20
+ // Grid centering: 5-column grid on body.
21
+ // 1fr | shadow-gap | content | shadow-gap | 1fr
22
+ // 1 2 3 4 5
23
+ // Content children go to column 3; the shadow pseudo spans 2–4.
24
+ // Column assignment (grid-column: 3) is in _grid-columns.scss
22
25
  // so it can be scoped — allowing .no-nimble elements to escape.
23
26
  body {
24
27
  display: grid;
25
28
  grid-template-columns:
26
29
  1fr
27
- min(var(#{$prefix}content-width), #{string.unquote('calc(100% - 2 * var(#{$prefix}spacing))')})
30
+ var(#{$prefix}content-shadow-gap)
31
+ min(var(#{$prefix}content-width), #{string.unquote('calc(100% - 2 * var(#{$prefix}spacing) - 2 * var(#{$prefix}content-shadow-gap))')})
32
+ var(#{$prefix}content-shadow-gap)
28
33
  1fr;
29
34
  min-height: 100dvh;
35
+ padding-block: var(#{$prefix}spacing);
30
36
  position: relative;
31
37
  }
32
38
 
package/src/_forms.scss CHANGED
@@ -13,14 +13,15 @@
13
13
  select, textarea) {
14
14
  --_input-bg: color-mix(in oklch, var(#{$prefix}surface-1), var(#{$prefix}surface-2) 20%);
15
15
 
16
- padding: 0.5em 0.75em;
16
+ padding: 0.5em 0.75em; // 0.5em: OP ~size-2; 0.75em: no OP match
17
+ // OP normalize: padding-block: --size-1, padding-inline: --size-2
17
18
  min-height: calc(1em * 1.5 + 1em + 2px); // line-height + vertical padding + border
18
19
  background-color: var(--_input-bg);
19
20
  border: 1px solid var(#{$prefix}border);
20
21
  border-radius: var(#{$prefix}radius);
21
22
  color: var(#{$prefix}text);
22
23
  font: inherit;
23
- font-size: 1rem; // >=16px prevents iOS Safari auto-zoom on focus
24
+ font-size: 1rem; // OP --size-3; >=16px prevents iOS Safari auto-zoom on focus
24
25
  transition: border-color 0.2s, box-shadow 0.2s;
25
26
  }
26
27
 
@@ -31,6 +32,12 @@
31
32
  margin-bottom: var(#{$prefix}spacing);
32
33
  }
33
34
 
35
+ // When an input is the last visible child of a block that already has
36
+ // margin-bottom (e.g. <p>), kill the input's margin to avoid doubling.
37
+ :where(p, div) > :where(input, select, textarea):nth-last-child(1 of :not(datalist, script, style)) {
38
+ margin-bottom: 0;
39
+ }
40
+
34
41
  // ----- Focus -----
35
42
 
36
43
  :where(input, select, textarea):focus-visible {
@@ -45,7 +52,7 @@
45
52
  display: block;
46
53
  margin-top: calc(var(#{$prefix}spacing) * -0.75); // pull up under the input
47
54
  margin-bottom: var(#{$prefix}spacing);
48
- font-size: 0.875em;
55
+ font-size: 0.875em; // no OP match (7/8)
49
56
  color: color-mix(in oklch, var(#{$prefix}text), transparent 40%);
50
57
  }
51
58
 
@@ -72,17 +79,17 @@
72
79
 
73
80
  :where(label) {
74
81
  display: block;
75
- margin-bottom: 0.25em;
82
+ margin-bottom: 0.25em; // OP ~size-1 (em-relative)
76
83
  }
77
84
 
78
85
  :where(label:has(+ input, + select, + textarea)) {
79
- font-weight: 600;
86
+ font-weight: 600; // OP --font-weight-6
80
87
  }
81
88
 
82
89
  // file and range are short/inline controls — increase the label gap to match
83
90
  // the visual weight of the spacing above and beside them.
84
91
  :where(label:has(+ [type="file"], + [type="range"])) {
85
- margin-bottom: 0.5em;
92
+ margin-bottom: 0.5em; // OP ~size-2 (em-relative)
86
93
  }
87
94
 
88
95
  // ----- Fieldset -----
@@ -95,9 +102,16 @@
95
102
  max-width: 100%;
96
103
  }
97
104
 
105
+ // Kill last-child bottom margin so it doesn't stack with fieldset padding.
106
+ // Uses :nth-last-child(of ...) to skip invisible elements (datalist, script).
107
+ :where(fieldset) > :nth-last-child(1 of :not(datalist, script, style)),
108
+ :where(fieldset) > :nth-last-child(1 of :not(datalist, script, style)) > :nth-last-child(1 of :not(datalist, script, style)) {
109
+ margin-bottom: 0;
110
+ }
111
+
98
112
  :where(legend) {
99
- font-weight: 600;
100
- padding-inline: 0.25em;
113
+ font-weight: 600; // OP --font-weight-6
114
+ padding-inline: 0.25em; // OP ~size-1 (em-relative)
101
115
  }
102
116
 
103
117
  // ----- Checkbox & Radio -----
@@ -105,16 +119,16 @@
105
119
 
106
120
  :where([type="checkbox"], [type="radio"]) {
107
121
  accent-color: var(#{$prefix}primary);
108
- width: 1.125em;
109
- height: 1.125em;
122
+ width: 1.125em; // no OP match (OP normalize: --size-3 = 1rem)
123
+ height: 1.125em; // no OP match (OP normalize: --size-3 = 1rem)
110
124
  margin: 0; // Remove browser default margin so flex labels align flush left
111
125
  }
112
126
 
113
127
  :where(label:has([type="checkbox"], [type="radio"])) {
114
128
  display: flex;
115
129
  align-items: center;
116
- gap: 0.35em;
117
- margin-bottom: 0.5em;
130
+ gap: 0.35em; // no OP match (near ~size-1)
131
+ margin-bottom: 0.5em; // OP ~size-2 (em-relative)
118
132
  }
119
133
 
120
134
  // Last checkbox/radio label in a group drops its bottom margin
@@ -126,8 +140,8 @@
126
140
  // ----- Search (pill shape) -----
127
141
 
128
142
  :where([type="search"]) {
129
- border-radius: 5rem;
130
- padding-inline: 1.25em;
143
+ border-radius: 5rem; // OP --size-10 (pill)
144
+ padding-inline: 1.25em; // OP ~size-4 (em-relative)
131
145
  }
132
146
 
133
147
  // ----- Range -----
@@ -157,9 +171,9 @@
157
171
  }
158
172
 
159
173
  :where([type="file"])::file-selector-button {
160
- padding: 0.5em 1em;
161
- margin-right: 0.75em;
162
- margin-inline-end: 0.75em;
174
+ padding: 0.5em 1em; // OP ~size-2 ~size-3 (em-relative)
175
+ margin-right: 0.75em; // no OP match (between ~size-2/~size-3)
176
+ margin-inline-end: 0.75em; // no OP match (between ~size-2/~size-3)
163
177
  background-color: var(#{$prefix}primary);
164
178
  color: var(#{$prefix}primary-contrast);
165
179
  border: 1px solid var(#{$prefix}primary);
@@ -178,7 +192,7 @@
178
192
  // Natural width so picker icon stays near content (excluded from full-width rule above).
179
193
  // appearance: none is applied outside @layer (see below) to fix iOS Safari sizing.
180
194
  :where([type="date"], [type="month"], [type="week"], [type="time"], [type="datetime-local"]) {
181
- min-width: 10em; // Prevent collapse when empty (e.g. time with no value)
195
+ min-width: 10em; // no OP match; prevent collapse when empty (e.g. time with no value)
182
196
  margin-bottom: var(#{$prefix}spacing);
183
197
  }
184
198
 
@@ -188,7 +202,7 @@
188
202
  --_color-size: calc(1em * 1.5 + 1em + 2px); // Match text input height
189
203
  margin-bottom: var(#{$prefix}spacing);
190
204
 
191
- --_color-pad: 0.25em;
205
+ --_color-pad: 0.25em; // OP ~size-1 (em-relative)
192
206
 
193
207
  height: var(--_color-size);
194
208
  width: calc((var(--_color-size) - 2 * var(--_color-pad)) * 1.618 + 2 * var(--_color-pad)); // Golden ratio inner swatch
@@ -216,14 +230,14 @@
216
230
  :where(label:has([type="checkbox"][role="switch"])) {
217
231
  display: flex;
218
232
  align-items: center;
219
- gap: 0.5em;
233
+ gap: 0.5em; // OP ~size-2 (em-relative)
220
234
  }
221
235
 
222
236
  :where([type="checkbox"][role="switch"]) {
223
237
  appearance: none;
224
- width: 2.5em;
225
- height: 1.25em;
226
- border-radius: 1em;
238
+ width: 2.5em; // no OP match (custom switch width)
239
+ height: 1.25em; // OP ~size-4 (em-relative)
240
+ border-radius: 1em; // OP ~size-3 (pill, em-relative)
227
241
  background-color: var(#{$prefix}border);
228
242
  position: relative;
229
243
  cursor: pointer;
@@ -1,6 +1,7 @@
1
1
  // ==========================================================================
2
2
  // nimble.css — Grid Column Assignment
3
- // Assigns body's direct children to the centered column (column 2).
3
+ // Assigns body's direct children to the centered content column (column 3).
4
+ // 5-column grid: 1fr | shadow-gap | content | shadow-gap | 1fr
4
5
  // Global (not scoped) so the body grid layout always applies.
5
6
  // ==========================================================================
6
7
 
@@ -10,38 +11,37 @@
10
11
  @layer nimble.base {
11
12
 
12
13
  body > * {
13
- grid-column: 2;
14
+ grid-column: 3;
14
15
  min-width: 0; // Allow grid children to shrink below intrinsic content width
15
16
  }
16
17
 
18
+
17
19
  // Fix for frameworks (SvelteKit, etc.) that insert a
18
20
  // <div style="display: contents"> wrapper between <body> and content.
19
21
  // display: contents removes the element from the box tree for layout,
20
22
  // but NOT for CSS selector matching — so body > * misses the actual
21
23
  // content elements. This rule mirrors the body > * rule above.
22
24
  body > [style*='display: contents'] > * {
23
- grid-column: 2;
25
+ grid-column: 3;
24
26
  min-width: 0;
25
27
  }
26
28
 
27
- // Content shadow: a single absolutely-positioned pseudo-element that
28
- // spans the full body height in the center column. One continuous
29
- // shadow no horizontal lines between sibling elements.
29
+ // Content shadow: absolutely-positioned pseudo spanning full body height.
30
+ // Width matches grid columns 2–4 (gap + content + gap) via the same
31
+ // min() expression used in the grid definition, plus the two gap columns.
30
32
  // Hidden on small viewports where content is edge-to-edge.
31
33
  @media (min-width: #{$breakpoint-phone}) {
32
34
  body::before {
33
35
  content: '';
34
36
  position: absolute;
35
- // Wider than the content column by --nc-content-shadow-gap on each side,
36
- // so the shadow edge sits outside the content boundary.
37
+ top: 0;
38
+ bottom: 0;
39
+ left: 50%;
40
+ transform: translateX(-50%);
37
41
  width: min(
38
42
  #{string.unquote('calc(var(#{$prefix}content-width) + 2 * var(#{$prefix}content-shadow-gap))')},
39
- #{string.unquote('calc(100% - 2 * var(#{$prefix}spacing) + 2 * var(#{$prefix}content-shadow-gap))')}
43
+ #{string.unquote('calc(100% - 2 * var(#{$prefix}spacing))')}
40
44
  );
41
- left: 50%;
42
- transform: translateX(-50%);
43
- top: 0;
44
- bottom: 0;
45
45
  box-shadow: var(#{$prefix}content-shadow);
46
46
  pointer-events: none;
47
47
  z-index: -1;
@@ -33,6 +33,20 @@
33
33
  position: relative;
34
34
  }
35
35
 
36
+ // Responsive equal-column grid
37
+ // Mobile: single column. Above phone breakpoint: auto-fit columns.
38
+ // margin-bottom matches vertical rhythm of p, ul, etc.
39
+ .grid {
40
+ display: grid;
41
+ grid-template-columns: 1fr;
42
+ gap: var(#{$prefix}spacing);
43
+ margin-bottom: var(#{$prefix}spacing);
44
+
45
+ @media (min-width: #{$breakpoint-phone}) {
46
+ grid-template-columns: repeat(auto-fit, minmax(0%, 1fr));
47
+ }
48
+ }
49
+
36
50
  // Break out to wide max-width
37
51
  .wide {
38
52
  grid-column: 1 / -1;
package/src/_links.scss CHANGED
@@ -11,7 +11,7 @@
11
11
  :where(a:not([role="button"])) {
12
12
  color: var(#{$prefix}primary);
13
13
  text-decoration: underline;
14
- text-underline-offset: 0.15em;
14
+ text-underline-offset: 0.15em; // no OP match; OP normalize: 1px (2px Firefox)
15
15
  text-decoration-color: #{string.unquote('color-mix(in oklch, var(#{$prefix}primary), transparent 50%)')};
16
16
  transition: color 0.2s, text-decoration-color 0.2s;
17
17
  }
package/src/_media.scss CHANGED
@@ -18,9 +18,9 @@
18
18
  }
19
19
 
20
20
  :where(figcaption) {
21
- font-size: 0.9em;
21
+ font-size: 0.9em; // no OP match; OP normalize: --font-size-1 (1rem)
22
22
  color: color-mix(in oklch, var(#{$prefix}text), transparent 40%);
23
- margin-top: 0.5em;
23
+ margin-top: 0.5em; // OP ~size-2 (em-relative)
24
24
  }
25
25
 
26
26
  }
package/src/_meter.scss CHANGED
@@ -16,7 +16,7 @@
16
16
  -moz-appearance: none;
17
17
  appearance: none;
18
18
  width: 100%;
19
- height: 0.5rem;
19
+ height: 0.5rem; // OP --size-2
20
20
  overflow: hidden;
21
21
  border: 0;
22
22
  border-radius: var(#{$prefix}radius);
@@ -32,7 +32,7 @@
32
32
  border-radius: var(#{$prefix}radius);
33
33
  background-color: var(#{$prefix}surface-3);
34
34
  border: 0;
35
- height: 0.5rem;
35
+ height: 0.5rem; // OP --size-2
36
36
  }
37
37
 
38
38
  // WebKit: value bars for each semantic state