*,:after,:before{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgba(59,130,246,.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: ;--tw-contain-size: ;--tw-contain-layout: ;--tw-contain-paint: ;--tw-contain-style: }

/*! tailwindcss v3.4.17 | MIT License | https://tailwindcss.com*/*,:after,:before{border:0 solid #e5e7eb;box-sizing:border-box}:after,:before{--tw-content:""}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;font-family:system-ui,-apple-system,Segoe UI,Roboto,Helvetica Neue,Arial,sans-serif;font-feature-settings:normal;font-variation-settings:normal;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-tap-highlight-color:transparent}body{line-height:inherit}hr{border-top-width:1px;color:inherit;height:0}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace,SFMono-Regular,Consolas,Liberation Mono,monospace;font-feature-settings:normal;font-size:1em;font-variation-settings:normal}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{border-collapse:collapse;border-color:inherit;text-indent:0}button,input,optgroup,select,textarea{color:inherit;font-family:inherit;font-feature-settings:inherit;font-size:100%;font-variation-settings:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin:0;padding:0}button,select{text-transform:none}button,input:where([type=button]),input:where([type=reset]),input:where([type=submit]){-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0}fieldset,legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::-moz-placeholder,textarea::-moz-placeholder{color:#9ca3af;opacity:1}input::placeholder,textarea::placeholder{color:#9ca3af;opacity:1}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{height:auto;max-width:100%}[hidden]:where(:not([hidden=until-found])){display:none}:root{--c-bg:#faf8f4;--c-surface:#fff;--c-surface-2:#f3efe6;--c-ink:#141b33;--c-ink-soft:#4d5775;--c-primary:#26397a;--c-primary-dark:#1a2957;--c-accent:#f0a02c;--c-accent-line:#c47a0c;--c-accent-ink:#8a4a07;--c-on-primary:#fff;--c-on-accent:#241703;--c-on-ink:#f4f1ea;--c-danger:#a3231f;--c-success:#0f5346;--c-line:#e3dccf;--c-line-field:#97896e;--c-focus:#2563eb;--font-display:"Space Grotesk",system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;--font-body:system-ui,-apple-system,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif;--font-mono:ui-monospace,SFMono-Regular,Consolas,"Liberation Mono",monospace;--t-xs:0.78rem;--t-sm:0.875rem;--t-base:1rem;--t-lg:clamp(1.06rem,1rem + 0.3vw,1.19rem);--t-xl:clamp(1.25rem,1.15rem + 0.5vw,1.5rem);--t-2xl:clamp(1.5rem,1.3rem + 1vw,2rem);--t-3xl:clamp(1.85rem,1.5rem + 1.8vw,2.75rem);--t-4xl:clamp(2.2rem,1.6rem + 3vw,3.5rem);--s-1:0.25rem;--s-2:0.5rem;--s-3:0.75rem;--s-4:1rem;--s-5:1.5rem;--s-6:2rem;--s-7:3rem;--s-8:4.5rem;--r-sm:6px;--r-md:10px;--r-lg:16px;--r-xl:24px;--r-full:999px;--sh-1:0 1px 2px rgba(20,27,51,.05);--sh-2:0 2px 4px rgba(20,27,51,.06),0 1px 2px rgba(20,27,51,.04);--sh-3:0 6px 16px rgba(20,27,51,.08),0 2px 4px rgba(20,27,51,.04);--sh-4:0 14px 32px rgba(20,27,51,.12),0 4px 8px rgba(20,27,51,.06);--m-fast:120ms;--m-base:220ms;--m-slow:400ms;--m-ease:cubic-bezier(0.2,0,0.1,1);--m-spring:cubic-bezier(0.34,1.3,0.64,1);--wrap:72rem;--wrap-text:44rem;color-scheme:light}@media (prefers-reduced-motion:reduce){*,:after,:before{animation-duration:.01ms!important;animation-iteration-count:1!important;scroll-behavior:auto!important;transition-duration:.01ms!important}}html{-webkit-text-size-adjust:100%;scroll-behavior:smooth}body{background:var(--c-bg);background-image:radial-gradient(120% 60% at 50% -10%,rgba(240,160,44,.09),transparent 60%);background-repeat:no-repeat;font-family:var(--font-body);font-size:var(--t-base);line-height:1.6;margin:0}body,h1,h2,h3,h4{color:var(--c-ink)}h1,h2,h3,h4{font-family:var(--font-display);letter-spacing:-.021em;line-height:1.12;margin-block:0 var(--s-3);text-wrap:balance}h1{font-size:var(--t-3xl);font-weight:700}h2{font-size:var(--t-2xl);font-weight:650;margin-top:var(--s-6)}h3{font-size:var(--t-xl);margin-top:var(--s-5)}h3,h4{font-weight:600}h4{font-size:var(--t-lg)}p{margin-block:0 var(--s-4)}p:last-child{margin-bottom:0}a{color:var(--c-primary);text-decoration-thickness:1.5px;text-underline-offset:3px;transition:color var(--m-fast) var(--m-ease)}a:hover{color:var(--c-primary-dark)}:focus-visible{border-radius:var(--r-sm);outline:3px solid var(--c-focus);outline-offset:2px}img{height:auto;max-width:100%}.numeric,.price,output,time{font-variant-numeric:tabular-nums}::-moz-selection{background:var(--c-accent);color:var(--c-on-accent)}::selection{background:var(--c-accent);color:var(--c-on-accent)}@keyframes rise{0%{opacity:0;transform:translate3d(0,14px,0)}to{opacity:1;transform:none}}@keyframes fade{0%{opacity:0}to{opacity:1}}@keyframes underline-sweep{to{transform:scaleX(1)}}@keyframes header-lift{to{box-shadow:var(--sh-3)}}.container{width:100%}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}@media (min-width:1024px){.container{max-width:1024px}}@media (min-width:1280px){.container{max-width:1280px}}@media (min-width:1536px){.container{max-width:1536px}}.wrap{margin-inline:auto;max-width:var(--wrap);padding-inline:var(--s-4);width:100%}@media (min-width:48rem){.wrap{padding-inline:var(--s-5)}}.visually-hidden{height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;clip:rect(0,0,0,0);border:0;white-space:nowrap}.skip-link{background:var(--c-ink);border-radius:0 0 var(--r-md) 0;color:var(--c-on-ink);font-weight:600;left:-9999px;padding:var(--s-3) var(--s-4);position:absolute;top:0;z-index:20}.skip-link:focus{left:0}.site-header{-webkit-backdrop-filter:saturate(1.4) blur(10px);backdrop-filter:saturate(1.4) blur(10px);background:color-mix(in srgb,var(--c-bg) 86%,transparent);border-bottom:1px solid var(--c-line);position:sticky;top:0;transition:box-shadow var(--m-base) var(--m-ease);z-index:10}@supports (animation-timeline:scroll()){.site-header{animation:header-lift linear both;animation-timeline:scroll();animation-range:0 120px}}.header-bar{display:flex;flex-wrap:wrap;justify-content:space-between;padding-block:var(--s-3)}.header-bar,.wordmark{align-items:center;gap:var(--s-3)}.wordmark{color:var(--c-ink);display:inline-flex;flex:none;text-decoration:none}.wordmark-mark{border-radius:var(--r-md);flex:none;height:2.25rem;transition:transform var(--m-base) var(--m-spring);width:2.25rem}.wordmark:hover .wordmark-mark{transform:rotate(-4deg) scale(1.06)}.wordmark-text{font-family:var(--font-display);font-size:1.35rem;font-weight:700;letter-spacing:-.03em}.wordmark-text b{color:var(--c-accent-ink);font-weight:inherit}.header-nav{align-items:center;display:flex;flex-wrap:wrap;font-size:var(--t-sm);font-weight:550;gap:var(--s-2) var(--s-4)}.header-nav>a{color:var(--c-ink);padding-block:var(--s-1);position:relative;text-decoration:none}.header-nav>a:not(.btn):after{background:var(--c-accent-line);border-radius:var(--r-full);bottom:-2px;content:"";height:2px;left:0;position:absolute;right:0;transform:scaleX(0);transform-origin:left;transition:transform var(--m-base) var(--m-ease)}.header-nav>a:not(.btn):focus-visible:after,.header-nav>a:not(.btn):hover:after{transform:scaleX(1)}.btn{align-items:center;border:1px solid transparent;border-radius:var(--r-md);cursor:pointer;display:inline-flex;font-family:var(--font-display);font-size:var(--t-sm);font-weight:600;gap:var(--s-2);justify-content:center;letter-spacing:-.01em;min-height:2.75rem;padding:var(--s-2) var(--s-5);text-decoration:none;transition:transform var(--m-fast) var(--m-ease),box-shadow var(--m-base) var(--m-ease),background-color var(--m-fast) var(--m-ease),border-color var(--m-fast) var(--m-ease)}.btn:active{transform:translateY(1px) scale(.985)}.btn-primary{background:var(--c-primary);box-shadow:var(--sh-2);color:var(--c-on-primary)}.btn-primary:hover{background:var(--c-primary-dark);box-shadow:var(--sh-3);color:var(--c-on-primary);transform:translateY(-1px)}.btn-primary:active{transform:translateY(1px) scale(.985)}.btn-secondary{background:var(--c-surface);border-color:var(--c-line-field);color:var(--c-ink)}.btn-secondary:hover{border-color:var(--c-ink);box-shadow:var(--sh-2);color:var(--c-ink);transform:translateY(-1px)}.btn-danger{background:var(--c-danger);color:#fff}.btn-danger:hover{background:#811b18;color:#fff}.btn-sm{font-size:var(--t-xs);min-height:2.25rem;padding:var(--s-1) var(--s-3)}.btn:disabled,.is-disabled{box-shadow:none;cursor:not-allowed;opacity:.45;transform:none}.hero{overflow:hidden;padding-block:var(--s-7) var(--s-5);position:relative}.hero:before{animation:fade var(--m-slow) var(--m-ease) both;background-image:repeating-linear-gradient(90deg,var(--c-accent) 0 2px,transparent 2px 34px),repeating-linear-gradient(0deg,var(--c-accent) 0 2px,transparent 2px 34px);content:"";height:26rem;inset:-20% -10% auto auto;-webkit-mask-image:radial-gradient(circle at 70% 30%,#000 0,transparent 68%);mask-image:radial-gradient(circle at 70% 30%,#000 0,transparent 68%);opacity:.5;pointer-events:none;position:absolute;width:26rem}@media (max-width:48rem){.hero:before{height:16rem;opacity:.35;width:16rem}}.hero>*{position:relative}.hero h1{animation:rise var(--m-slow) var(--m-ease) both;font-size:var(--t-4xl);font-weight:700;letter-spacing:-.035em;max-width:22ch}.hero h1 em{font-style:normal;position:relative;white-space:nowrap}.hero h1 em:after{animation:underline-sweep var(--m-slow) var(--m-ease) .26s both;background:var(--c-accent);border-radius:var(--r-sm);bottom:.06em;content:"";height:.3em;left:-.05em;opacity:.45;position:absolute;right:-.05em;transform:scaleX(0);transform-origin:left;z-index:-1}.lede{animation:rise var(--m-slow) var(--m-ease) 90ms both;font-size:var(--t-lg);max-width:var(--wrap-text)}.hero-proof,.lede{color:var(--c-ink-soft)}.hero-proof{animation:rise var(--m-slow) var(--m-ease) .16s both;display:flex;flex-wrap:wrap;font-size:var(--t-sm);gap:var(--s-2) var(--s-5);list-style:none;margin-block:var(--s-5) 0;padding:0}.hero-proof li{align-items:center;display:inline-flex;gap:var(--s-2)}.hero-proof li:before{background:var(--c-accent);border-radius:var(--r-full);box-shadow:0 0 0 3px rgba(240,160,44,.22);content:"";flex:none;height:.5rem;width:.5rem}.project-grid{display:grid;gap:var(--s-4);grid-template-columns:1fr;list-style:none;margin:var(--s-5) 0 0;padding:0}@media (min-width:38rem){.project-grid{grid-template-columns:repeat(2,1fr)}}@media (min-width:62rem){.project-grid{grid-template-columns:repeat(3,1fr)}}.project-card{animation:rise var(--m-slow) var(--m-ease) both;animation-delay:calc(min(var(--i, 0), 8)*45ms);background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-1);display:flex;flex-direction:column;overflow:hidden;position:relative;transition:transform var(--m-base) var(--m-ease),box-shadow var(--m-base) var(--m-ease),border-color var(--m-base) var(--m-ease)}.project-card:before{background:linear-gradient(90deg,var(--c-accent),var(--c-accent-line));content:"";height:3px;inset:0 0 auto 0;position:absolute;transform:scaleX(0);transform-origin:left;transition:transform var(--m-base) var(--m-ease);z-index:2}.project-card:focus-within,.project-card:hover{border-color:color-mix(in srgb,var(--c-accent-line) 40%,var(--c-line));box-shadow:var(--sh-4);transform:translateY(-3px)}.project-card:focus-within:before,.project-card:hover:before{transform:scaleX(1)}.project-card-link{color:inherit;display:block;text-decoration:none}.project-card-thumb{aspect-ratio:16/10;background:var(--c-surface-2);display:block;-o-object-fit:cover;object-fit:cover;transition:transform var(--m-slow) var(--m-ease);width:100%}.project-card:hover .project-card-thumb{transform:scale(1.035)}.project-card-thumb-empty{background-color:var(--c-surface-2);background-image:repeating-linear-gradient(90deg,rgba(20,27,51,.07) 0 2px,transparent 2px 22px),repeating-linear-gradient(0deg,rgba(20,27,51,.07) 0 2px,transparent 2px 22px)}.project-card-body{display:block;padding:var(--s-4) var(--s-4) 0}.project-card-title{color:var(--c-ink);display:block;font-family:var(--font-display);font-size:var(--t-lg);font-weight:600;letter-spacing:-.015em;line-height:1.25}.project-card-link:hover .project-card-title{color:var(--c-primary)}.project-card-summary{color:var(--c-ink-soft);display:block;font-size:var(--t-sm);line-height:1.5;margin-top:var(--s-2)}.project-card-meta{align-items:center;display:flex;flex-wrap:wrap;gap:var(--s-2);margin:var(--s-4) var(--s-4) 0}.project-card-byline{border-top:1px solid var(--c-line);color:var(--c-ink-soft);font-size:var(--t-xs);margin:var(--s-3) var(--s-4) var(--s-4);padding-top:var(--s-3)}.tag{background:color-mix(in srgb,var(--c-primary) 10%,transparent);border-radius:var(--r-full);color:var(--c-primary);display:inline-block;font-size:var(--t-xs);font-weight:600;padding:.15rem .6rem;white-space:nowrap}.tag-quiet{background:var(--c-surface-2);color:var(--c-ink-soft)}.price{color:var(--c-ink);font-family:var(--font-display);font-size:var(--t-base);font-weight:700;margin-left:auto;white-space:nowrap}.price-unknown{color:var(--c-ink-soft);font-family:var(--font-body);font-size:var(--t-xs);font-weight:500}.count-badge{align-items:center;background:var(--c-accent);border-radius:var(--r-full);color:var(--c-on-accent);display:inline-flex;font-family:var(--font-display);font-size:var(--t-xs);font-weight:700;justify-content:center;min-width:1.75rem;padding:.1rem .5rem;vertical-align:.18em}.empty-state{animation:fade var(--m-base) var(--m-ease) both;background:var(--c-surface);border:1px dashed var(--c-line-field);border-radius:var(--r-lg);color:var(--c-ink-soft);padding:var(--s-6) var(--s-4);text-align:center}.flash{animation:rise var(--m-base) var(--m-ease) both;border-left:3px solid;border-radius:var(--r-md);display:flex;font-size:var(--t-sm);gap:var(--s-3);margin-block:var(--s-4);padding:var(--s-3) var(--s-4)}.flash-success{background:color-mix(in srgb,var(--c-success) 8%,var(--c-surface));border-color:var(--c-success);color:var(--c-success)}.flash-error{background:color-mix(in srgb,var(--c-danger) 7%,var(--c-surface));border-color:var(--c-danger);color:var(--c-danger)}.flash-info{background:color-mix(in srgb,var(--c-primary) 7%,var(--c-surface));border-color:var(--c-primary);color:var(--c-primary)}.note{color:var(--c-ink-soft);font-size:var(--t-sm)}.feed-filters{animation:rise var(--m-base) var(--m-ease) both;background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-1);margin-block:var(--s-5);padding:var(--s-4)}.field-search{margin-top:0}.search-row{display:flex;flex-wrap:wrap;gap:var(--s-2)}.search-row input[type=search]{flex:1 1 15rem;min-width:0}.search-row .btn{flex:none}.filter-row{display:grid;gap:0 var(--s-4);grid-template-columns:1fr}@media (min-width:30rem){.filter-row{grid-template-columns:repeat(2,1fr)}}@media (min-width:54rem){.filter-row{grid-template-columns:repeat(4,1fr)}}.filter-row .field{margin-block:var(--s-3)}.filter-actions{align-items:center;display:flex;flex-wrap:wrap;gap:var(--s-3);margin-block:var(--s-2) 0}.htmx-indicator{color:var(--c-accent-ink);font-size:var(--t-sm);font-weight:600;opacity:0;transition:opacity var(--m-fast) var(--m-ease)}.htmx-request .htmx-indicator,.htmx-request.htmx-indicator{opacity:1}.results-head{align-items:baseline;display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-4);justify-content:space-between;margin-block:var(--s-5) var(--s-1)}.results-count{color:var(--c-ink-soft);font-size:var(--t-sm);margin:0}.results-count strong{color:var(--c-ink)}.sort-controls{align-items:baseline;display:flex;flex-wrap:wrap;font-size:var(--t-sm);gap:var(--s-1) var(--s-3)}.sort-label{color:var(--c-ink-soft)}.sort-controls a{border-radius:var(--r-full);padding:.1rem .5rem;text-decoration:none;transition:background-color var(--m-fast) var(--m-ease)}.sort-controls a:hover{background:var(--c-surface-2)}.sort-current{background:var(--c-ink);border-radius:var(--r-full);color:var(--c-on-ink);font-weight:650;padding:.1rem .5rem}.pager{align-items:center;display:flex;flex-wrap:wrap;gap:var(--s-3);justify-content:space-between;margin-block:var(--s-6)}.pager-position{color:var(--c-ink-soft);font-size:var(--t-sm)}.form-page,.project-form-page{padding-block:var(--s-6)}.form-page{max-width:34rem}.field{display:flex;flex-direction:column;gap:var(--s-1);margin-block:var(--s-4)}.field label{font-family:var(--font-display);font-size:var(--t-sm);font-weight:600;letter-spacing:-.01em}.required{color:var(--c-danger)}.hint{color:var(--c-ink-soft);font-size:var(--t-sm);line-height:1.45}.field input,.field select,.field textarea{background:var(--c-surface);border:1.5px solid var(--c-line-field);border-radius:var(--r-md);color:var(--c-ink);font:inherit;font-size:1rem;min-height:2.75rem;padding:var(--s-2) var(--s-3);transition:border-color var(--m-fast) var(--m-ease),box-shadow var(--m-fast) var(--m-ease);width:100%}.field input:hover,.field select:hover,.field textarea:hover{border-color:var(--c-ink-soft)}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--c-primary) 16%,transparent)}.field textarea{line-height:1.55;min-height:7rem;resize:vertical}.field-error input,.field-error select,.field-error textarea{border-color:var(--c-danger)}.field-message{animation:rise var(--m-fast) var(--m-ease) both;color:var(--c-danger);font-size:var(--t-sm);font-weight:600}.form-actions{display:flex;flex-wrap:wrap;gap:var(--s-3);margin-block:var(--s-5) var(--s-2)}.form-actions .btn{width:100%}@media (min-width:32rem){.form-actions .btn{min-width:11rem;width:auto}}.form-aside{color:var(--c-ink-soft);font-size:var(--t-sm)}.form-legal{font-size:var(--t-xs)}.separator{border:0;border-top:1px solid var(--c-line);margin-block:var(--s-6)}fieldset{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-1);margin-block:var(--s-5);padding:var(--s-3) var(--s-4) var(--s-4)}legend{font-family:var(--font-display);font-size:var(--t-lg);font-weight:700;padding-inline:var(--s-2)}.project{padding-block:var(--s-5)}.project-header{animation:rise var(--m-base) var(--m-ease) both}.project-header h1{font-size:var(--t-3xl)}.project-meta{display:flex;flex-wrap:wrap;gap:var(--s-2);margin-block:var(--s-4)}.project-byline{color:var(--c-ink-soft);font-size:var(--t-sm)}.project-owner-actions{align-items:center;display:flex;flex-wrap:wrap;gap:var(--s-2)}.inline-form{display:inline}.project-section{margin-block:var(--s-7)}.project-section>h2{border-bottom:2px solid var(--c-line);margin-top:0;padding-bottom:var(--s-2)}.prose{max-width:var(--wrap-text)}.prose>:first-child{margin-top:0}.prose blockquote,.prose ol,.prose p,.prose ul{margin-block:var(--s-4)}.prose ol,.prose ul{padding-left:1.4rem}.prose li{margin-block:var(--s-1)}.prose code{background:var(--c-surface-2);border-radius:var(--r-sm);font-family:var(--font-mono);font-size:.92em;padding:.1em .38em}.prose pre{background:var(--c-ink);border-radius:var(--r-md);color:var(--c-on-ink);overflow-x:auto;padding:var(--s-4)}.prose pre code{background:none;color:inherit;padding:0}.prose blockquote{border-left:3px solid var(--c-accent);color:var(--c-ink-soft);font-style:italic;padding-left:var(--s-4)}.prose table{border-collapse:collapse;width:100%}.prose td,.prose th{border:1px solid var(--c-line);padding:var(--s-2) var(--s-3);text-align:left}.prose-compact{max-width:none}.prose-compact>:first-child{margin-top:0}.prose-compact>:last-child{margin-bottom:0}.prose-compact ol,.prose-compact p,.prose-compact ul{margin-block:var(--s-2)}.image-gallery,.image-manager{display:grid;gap:var(--s-4);grid-template-columns:1fr;list-style:none;margin:0;padding:0}@media (min-width:38rem){.image-gallery,.image-manager{grid-template-columns:repeat(2,1fr)}}.image-gallery figure{margin:0}.image-gallery a{background:var(--c-surface-2);border:1px solid var(--c-line);border-radius:var(--r-md);display:block;overflow:hidden}.image-gallery img,.image-manager img{display:block;height:auto;transition:transform var(--m-slow) var(--m-ease);width:100%}.image-gallery a:hover img{transform:scale(1.03)}.image-caption,.image-gallery figcaption{color:var(--c-ink-soft);font-size:var(--t-sm);margin-top:var(--s-2)}.image-manager li{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-md);padding:var(--s-3)}.image-manager img{border-radius:var(--r-sm)}.image-upload-form{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);margin-top:var(--s-4);padding:var(--s-4)}.table-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch;border-radius:var(--r-md)}.bom-editor,.bom-table,.catalogue-table{background:var(--c-surface);border-collapse:collapse;font-size:var(--t-sm);width:100%}.bom-editor td,.bom-editor th,.bom-table td,.bom-table th,.catalogue-table td,.catalogue-table th{border-bottom:1px solid var(--c-line);padding:var(--s-3) var(--s-2);text-align:left;vertical-align:top}.bom-editor thead th,.bom-table thead th,.catalogue-table thead th{background:var(--c-surface-2);color:var(--c-ink-soft);font-family:var(--font-display);font-size:var(--t-xs);letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}.bom-table tbody tr,.catalogue-table tbody tr{transition:background-color var(--m-fast) var(--m-ease)}.bom-table tbody tr:hover,.catalogue-table tbody tr:hover{background:var(--c-surface-2)}.numeric{text-align:right;white-space:nowrap}.bom-table tfoot td,.bom-table tfoot th{background:var(--c-surface);border-bottom:0;border-top:2px solid var(--c-ink);font-weight:700;padding-top:var(--s-3)}.bom-table .total{font-family:var(--font-display);font-size:var(--t-xl)}.total-note{color:var(--c-ink-soft);font-weight:500}.buy-link,.total-note{display:block;font-size:var(--t-xs)}.catalogue-table tbody th{font-weight:600;min-width:12rem}.catalogue-description{color:var(--c-ink-soft);display:block;font-size:var(--t-xs);font-weight:400;margin-top:var(--s-1)}.bom-editor input{border:1.5px solid var(--c-line-field);border-radius:var(--r-sm);font:inherit;font-size:1rem;min-height:2.5rem;min-width:5rem;padding:var(--s-1) var(--s-2);width:100%}.bom-editor input:focus{border-color:var(--c-primary);box-shadow:0 0 0 3px color-mix(in srgb,var(--c-primary) 16%,transparent)}.bom-editor input[type=number]{min-width:5.5rem}.bom-editor td:first-child input{min-width:11rem}.bom-editor input[readonly]{background:var(--c-surface-2)}.bom-editor tfoot output{font-family:var(--font-display);font-size:var(--t-lg);font-weight:700}.bom-row{animation:rise var(--m-fast) var(--m-ease) both}.bom-picker{background:var(--c-surface-2);border:1px solid var(--c-line);border-radius:var(--r-md);margin-block:var(--s-4);padding:var(--s-3) var(--s-4)}.bom-picker .field{margin-block:0}.bom-suggestions{display:grid;gap:var(--s-2);list-style:none;margin:var(--s-3) 0 0;padding:0}.bom-suggestions li{animation:rise var(--m-fast) var(--m-ease) both}.bom-suggestion{align-items:baseline;background:var(--c-surface);border:1px solid var(--c-line-field);border-radius:var(--r-sm);cursor:pointer;display:flex;flex-wrap:wrap;font:inherit;gap:var(--s-2);justify-content:space-between;min-height:2.75rem;padding:var(--s-2) var(--s-3);text-align:left;transition:border-color var(--m-fast) var(--m-ease),transform var(--m-fast) var(--m-ease),box-shadow var(--m-fast) var(--m-ease);width:100%}.bom-suggestion:hover{border-color:var(--c-accent-line);box-shadow:var(--sh-2);transform:translateX(2px)}.bom-suggestion:disabled{cursor:wait;opacity:.5}.bom-suggestion-name{font-weight:600}.bom-suggestion-price{color:var(--c-ink-soft);font-size:var(--t-sm)}.bom-from-catalogue{align-items:center;color:var(--c-accent-ink);display:inline-flex;font-size:var(--t-xs);font-weight:600;gap:var(--s-1);margin-top:var(--s-1)}.code-file{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-md);box-shadow:var(--sh-1);margin-block:var(--s-4);overflow:hidden}.code-file-head{align-items:center;background:var(--c-surface-2);border-bottom:1px solid var(--c-line);display:flex;flex-wrap:wrap;gap:var(--s-2);justify-content:space-between;padding:var(--s-3) var(--s-4)}.code-file-name{font-family:var(--font-mono);font-size:var(--t-sm);font-weight:600;margin:0}.code-file-actions{display:flex;gap:var(--s-2);margin:0}.code-block{overflow-x:auto}.code-block pre{font-size:.84rem;line-height:1.55;margin:0;padding:var(--s-4)}.code-slot{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-md);margin-block:var(--s-2);padding:var(--s-2) var(--s-4)}.code-slot summary{cursor:pointer;font-family:var(--font-display);font-weight:600;padding:var(--s-1) 0}.code-input{font-family:var(--font-mono);font-size:.84rem;overflow-wrap:normal;overflow-x:auto;white-space:pre}details>summary.btn{display:inline-flex;list-style:none}details>summary.btn::-webkit-details-marker{display:none}details>summary{cursor:pointer}.answer-form,.question-form,.reproduce-form{margin-block:var(--s-4)}.question-form[open]>summary.btn,.reproduce-form[open]>summary.btn{margin-bottom:var(--s-3)}.answer-form>summary{color:var(--c-primary);font-size:var(--t-sm);font-weight:600;padding:var(--s-1) 0}details[open]>:not(summary){animation:rise var(--m-base) var(--m-ease) both}.reproduction-list{display:grid;gap:var(--s-3);list-style:none;margin:var(--s-5) 0 0;padding:0}.reproduction{animation:rise var(--m-base) var(--m-ease) both;background:var(--c-surface);border:1px solid var(--c-line);border-left:3px solid var(--c-accent);border-radius:var(--r-md);box-shadow:var(--sh-1);padding:var(--s-3) var(--s-4)}.reproduction-head{align-items:baseline;display:flex;flex-wrap:wrap;font-size:var(--t-sm);font-weight:550;gap:var(--s-2);margin:0}.reproduction-head time,.reproduction-place{color:var(--c-ink-soft);font-weight:400}.reproduction-note{margin-block:var(--s-2) 0;white-space:pre-line}.reproduction-image{border:1px solid var(--c-line);border-radius:var(--r-sm);display:block;height:auto;margin-top:var(--s-3);max-width:22rem;width:100%}.reproduction-summary{display:grid;gap:var(--s-3);list-style:none;margin:0;padding:0}.reproduction-summary li{border-bottom:1px solid var(--c-line);font-size:var(--t-sm);padding-bottom:var(--s-3)}.reproduction-summary time{color:var(--c-ink-soft);font-size:var(--t-xs)}.question-list{display:grid;gap:var(--s-4);list-style:none;margin:0 0 var(--s-5);padding:0}.question{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-1);padding:var(--s-4)}.answer-head,.question-head{align-items:baseline;display:flex;flex-wrap:wrap;font-size:var(--t-sm);font-weight:550;gap:var(--s-2);margin:0 0 var(--s-2)}.answer-head time,.question-head time{color:var(--c-ink-soft);font-weight:400}.answer-list{display:grid;gap:var(--s-3);list-style:none;margin:var(--s-4) 0 0;padding:0}.answer{border-left:2px solid var(--c-line);padding:var(--s-1) 0 var(--s-1) var(--s-4)}.answer-accepted{background:color-mix(in srgb,var(--c-success) 6%,var(--c-surface));border-left-color:var(--c-success);border-radius:0 var(--r-md) var(--r-md) 0;padding-block:var(--s-3);padding-right:var(--s-3)}.accepted-badge{align-items:center;background:var(--c-success);border-radius:var(--r-full);color:#fff;display:inline-flex;font-size:var(--t-xs);font-weight:700;gap:var(--s-1);padding:.1rem .55rem}.profile{padding-block:var(--s-5)}.profile-header{animation:rise var(--m-base) var(--m-ease) both}.profile-links,.profile-place{color:var(--c-ink-soft);font-size:var(--t-sm)}.profile-bio{max-width:var(--wrap-text);white-space:pre-line}.profile-counts{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-1);color:var(--c-ink-soft);display:flex;flex-wrap:wrap;font-size:var(--t-sm);gap:var(--s-3) var(--s-6);list-style:none;margin-block:var(--s-5);padding:var(--s-4)}.profile-counts li{display:flex;flex-direction:column}.profile-counts strong{color:var(--c-ink);font-family:var(--font-display);font-size:var(--t-2xl);font-weight:700;line-height:1.1}.profile-owner-actions{display:flex;flex-wrap:wrap;gap:var(--s-2)}.component-page{padding-block:var(--s-5)}.breadcrumb{color:var(--c-ink-soft);font-size:var(--t-sm);margin-block:0 var(--s-2)}.component-facts{background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-lg);box-shadow:var(--sh-1);display:grid;gap:var(--s-4);grid-template-columns:1fr;margin-block:var(--s-5);padding:var(--s-4)}@media (min-width:34rem){.component-facts{grid-template-columns:repeat(2,1fr)}}@media (min-width:54rem){.component-facts{grid-template-columns:repeat(3,1fr)}}.component-facts dt{color:var(--c-ink-soft);font-family:var(--font-display);font-size:var(--t-xs);letter-spacing:.05em;text-transform:uppercase}.component-facts dd{font-weight:600;margin:var(--s-1) 0 0}.component-price{font-family:var(--font-display);font-size:var(--t-xl);font-weight:700}.text-page{max-width:var(--wrap-text);padding-block:var(--s-5) var(--s-7)}.text-page h2{border-bottom:2px solid var(--c-line);padding-bottom:var(--s-2)}.text-page h3{margin-block:var(--s-5) var(--s-2)}.text-page ol,.text-page p,.text-page ul{margin-block:var(--s-4)}.text-page ol,.text-page ul{padding-left:1.4rem}.text-page li{margin-block:var(--s-2)}.text-page code{background:var(--c-surface-2);border-radius:var(--r-sm);font-family:var(--font-mono);font-size:.92em;padding:.1em .38em}.share-actions{display:flex;flex-wrap:wrap;gap:var(--s-3)}.share-url label{display:block;font-family:var(--font-display);font-size:var(--t-sm);font-weight:600;margin-bottom:var(--s-1)}.share-url input{background:var(--c-surface-2);border:1.5px solid var(--c-line-field);border-radius:var(--r-sm);color:var(--c-ink-soft);font:inherit;font-size:var(--t-sm);padding:var(--s-2) var(--s-3);width:100%}.error-page{padding-block:var(--s-8);text-align:center}.error-code{color:var(--c-line);font-family:var(--font-display);font-size:clamp(4rem,14vw,7rem);font-weight:700;letter-spacing:-.04em;line-height:1;margin:0}.error-page .lede{margin-inline:auto}.site-footer{background-color:var(--c-ink);background-image:repeating-linear-gradient(90deg,rgba(240,160,44,.07) 0 2px,transparent 2px 40px),repeating-linear-gradient(0deg,rgba(240,160,44,.07) 0 2px,transparent 2px 40px);color:var(--c-on-ink);font-size:var(--t-sm);margin-top:var(--s-8);padding-block:var(--s-6) var(--s-7)}.footer-claim{color:#fff;font-family:var(--font-display);font-size:var(--t-lg);font-weight:600;margin-top:0;max-width:34rem}.footer-claim b{color:var(--c-accent);font-weight:inherit}.footer-nav{display:flex;flex-wrap:wrap;gap:var(--s-2) var(--s-5);margin-block:var(--s-4)}.site-footer a{color:var(--c-on-ink);text-decoration-color:hsla(42,31%,94%,.4)}.site-footer a:hover{color:var(--c-accent)}.footer-legal{color:hsla(42,31%,94%,.72);font-size:var(--t-xs);margin-bottom:0}.danger-zone{background:color-mix(in srgb,var(--c-danger) 4%,var(--c-surface));border:1px solid color-mix(in srgb,var(--c-danger) 35%,var(--c-line));border-radius:var(--r-md);margin-block:var(--s-4);padding:var(--s-3) var(--s-4)}.danger-zone[open]>summary.btn{margin-bottom:var(--s-3)}.admin{padding-block:var(--s-5)}.admin-list{display:grid;gap:var(--s-2);list-style:none;margin:0;padding:0}.admin-item{align-items:flex-start;background:var(--c-surface);border:1px solid var(--c-line);border-radius:var(--r-md);display:flex;flex-wrap:wrap;gap:var(--s-3);justify-content:space-between;padding:var(--s-3) var(--s-4)}.admin-item.is-hidden-content{background:var(--c-surface-2);border-left:3px solid var(--c-danger)}.admin-item-body{flex:1 1 18rem;min-width:0}.admin-item-title{align-items:baseline;display:flex;flex-wrap:wrap;font-weight:600;gap:var(--s-2);margin:0}.admin-item-meta{color:var(--c-ink-soft);font-size:var(--t-xs);margin:var(--s-1) 0 0}.admin-actions{align-items:flex-start;display:flex;flex:none;flex-wrap:wrap;gap:var(--s-2)}.admin-delete[open]{background:color-mix(in srgb,var(--c-danger) 4%,var(--c-surface));border:1px solid color-mix(in srgb,var(--c-danger) 35%,var(--c-line));border-radius:var(--r-sm);flex:1 1 100%;padding:var(--s-3)}.tag-hidden{background:color-mix(in srgb,var(--c-danger) 12%,transparent);color:var(--c-danger)}.visible{visibility:visible}.fixed{position:fixed}.block{display:block}.inline{display:inline}.\!table{display:table!important}.table{display:table}.grid{display:grid}.hidden{display:none}.shrink{flex-shrink:1}.filter{filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}@font-face{font-display:swap;font-family:Space Grotesk;font-style:normal;font-weight:300 700;src:url(/static/vendor/fonts/space-grotesk-latin-var.woff2) format("woff2-variations")}
/* Pygments, genere par scripts/build_css.sh. Ne pas editer a la main. */
pre { line-height: 125%; }
td.linenos .normal { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.codeblock .hll { background-color: #ffffcc }
.codeblock { background: #f0f0f0; }
.codeblock .c { color: #60A0B0; font-style: italic } /* Comment */
.codeblock .err { border: 1px solid #F00 } /* Error */
.codeblock .k { color: #007020; font-weight: bold } /* Keyword */
.codeblock .o { color: #666 } /* Operator */
.codeblock .ch { color: #60A0B0; font-style: italic } /* Comment.Hashbang */
.codeblock .cm { color: #60A0B0; font-style: italic } /* Comment.Multiline */
.codeblock .cp { color: #007020 } /* Comment.Preproc */
.codeblock .cpf { color: #60A0B0; font-style: italic } /* Comment.PreprocFile */
.codeblock .c1 { color: #60A0B0; font-style: italic } /* Comment.Single */
.codeblock .cs { color: #60A0B0; background-color: #FFF0F0 } /* Comment.Special */
.codeblock .gd { color: #A00000 } /* Generic.Deleted */
.codeblock .ge { font-style: italic } /* Generic.Emph */
.codeblock .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.codeblock .gr { color: #F00 } /* Generic.Error */
.codeblock .gh { color: #000080; font-weight: bold } /* Generic.Heading */
.codeblock .gi { color: #00A000 } /* Generic.Inserted */
.codeblock .go { color: #888 } /* Generic.Output */
.codeblock .gp { color: #C65D09; font-weight: bold } /* Generic.Prompt */
.codeblock .gs { font-weight: bold } /* Generic.Strong */
.codeblock .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
.codeblock .gt { color: #04D } /* Generic.Traceback */
.codeblock .kc { color: #007020; font-weight: bold } /* Keyword.Constant */
.codeblock .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */
.codeblock .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */
.codeblock .kp { color: #007020 } /* Keyword.Pseudo */
.codeblock .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */
.codeblock .kt { color: #902000 } /* Keyword.Type */
.codeblock .m { color: #40A070 } /* Literal.Number */
.codeblock .s { color: #4070A0 } /* Literal.String */
.codeblock .na { color: #4070A0 } /* Name.Attribute */
.codeblock .nb { color: #007020 } /* Name.Builtin */
.codeblock .nc { color: #0E84B5; font-weight: bold } /* Name.Class */
.codeblock .no { color: #60ADD5 } /* Name.Constant */
.codeblock .nd { color: #555; font-weight: bold } /* Name.Decorator */
.codeblock .ni { color: #D55537; font-weight: bold } /* Name.Entity */
.codeblock .ne { color: #007020 } /* Name.Exception */
.codeblock .nf { color: #06287E } /* Name.Function */
.codeblock .nl { color: #002070; font-weight: bold } /* Name.Label */
.codeblock .nn { color: #0E84B5; font-weight: bold } /* Name.Namespace */
.codeblock .nt { color: #062873; font-weight: bold } /* Name.Tag */
.codeblock .nv { color: #BB60D5 } /* Name.Variable */
.codeblock .ow { color: #007020; font-weight: bold } /* Operator.Word */
.codeblock .w { color: #BBB } /* Text.Whitespace */
.codeblock .mb { color: #40A070 } /* Literal.Number.Bin */
.codeblock .mf { color: #40A070 } /* Literal.Number.Float */
.codeblock .mh { color: #40A070 } /* Literal.Number.Hex */
.codeblock .mi { color: #40A070 } /* Literal.Number.Integer */
.codeblock .mo { color: #40A070 } /* Literal.Number.Oct */
.codeblock .sa { color: #4070A0 } /* Literal.String.Affix */
.codeblock .sb { color: #4070A0 } /* Literal.String.Backtick */
.codeblock .sc { color: #4070A0 } /* Literal.String.Char */
.codeblock .dl { color: #4070A0 } /* Literal.String.Delimiter */
.codeblock .sd { color: #4070A0; font-style: italic } /* Literal.String.Doc */
.codeblock .s2 { color: #4070A0 } /* Literal.String.Double */
.codeblock .se { color: #4070A0; font-weight: bold } /* Literal.String.Escape */
.codeblock .sh { color: #4070A0 } /* Literal.String.Heredoc */
.codeblock .si { color: #70A0D0; font-style: italic } /* Literal.String.Interpol */
.codeblock .sx { color: #C65D09 } /* Literal.String.Other */
.codeblock .sr { color: #235388 } /* Literal.String.Regex */
.codeblock .s1 { color: #4070A0 } /* Literal.String.Single */
.codeblock .ss { color: #517918 } /* Literal.String.Symbol */
.codeblock .bp { color: #007020 } /* Name.Builtin.Pseudo */
.codeblock .fm { color: #06287E } /* Name.Function.Magic */
.codeblock .vc { color: #BB60D5 } /* Name.Variable.Class */
.codeblock .vg { color: #BB60D5 } /* Name.Variable.Global */
.codeblock .vi { color: #BB60D5 } /* Name.Variable.Instance */
.codeblock .vm { color: #BB60D5 } /* Name.Variable.Magic */
.codeblock .il { color: #40A070 } /* Literal.Number.Integer.Long */
