/*! tailwindcss v4.3.2 | MIT License | https://tailwindcss.com */
@layer properties{@supports (((-webkit-hyphens:none)) and (not (margin-trim:inline))) or ((-moz-orient:inline) and (not (color:rgb(from red r g b)))){*,:before,:after,::backdrop{--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial}}}@layer theme{:root,:host{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-serif:ui-serif, Georgia, Cambria, "Times New Roman", Times, serif;--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before,::backdrop{box-sizing:border-box;border:0 solid;margin:0;padding:0}::file-selector-button{box-sizing:border-box;border:0 solid;margin:0;padding:0}html,:host{-webkit-text-size-adjust:100%;tab-size:4;line-height:1.5;font-family:var(--default-font-family,ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings,normal);font-variation-settings:var(--default-font-variation-settings,normal);-webkit-tap-highlight-color:transparent}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;-webkit-text-decoration:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,samp,pre{font-family:var(--default-mono-font-family,ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace);font-feature-settings:var(--default-mono-font-feature-settings,normal);font-variation-settings:var(--default-mono-font-variation-settings,normal);font-size:1em}small{font-size:80%}sub,sup{vertical-align:baseline;font-size:75%;line-height:0;position:relative}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}:-moz-focusring{outline:auto}progress{vertical-align:baseline}summary{display:list-item}ol,ul,menu{list-style:none}img,svg,video,canvas,audio,iframe,embed,object{vertical-align:middle;display:block}img,video{max-width:100%;height:auto}button,input,select,optgroup,textarea{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}::file-selector-button{font:inherit;font-feature-settings:inherit;font-variation-settings:inherit;letter-spacing:inherit;color:inherit;opacity:1;background-color:#0000;border-radius:0}:where(select:is([multiple],[size])) optgroup{font-weight:bolder}:where(select:is([multiple],[size])) optgroup option{padding-inline-start:20px}::file-selector-button{margin-inline-end:4px}::placeholder{opacity:1}@supports (not ((-webkit-appearance:-apple-pay-button))) or (contain-intrinsic-size:1px){::placeholder{color:currentColor}@supports (color:color-mix(in lab, red, red)){::placeholder{color:color-mix(in oklab, currentcolor 50%, transparent)}}}textarea{resize:vertical}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-date-and-time-value{min-height:1lh;text-align:inherit}::-webkit-datetime-edit{display:inline-flex}::-webkit-datetime-edit-fields-wrapper{padding:0}::-webkit-datetime-edit{padding-block:0}::-webkit-datetime-edit-year-field{padding-block:0}::-webkit-datetime-edit-month-field{padding-block:0}::-webkit-datetime-edit-day-field{padding-block:0}::-webkit-datetime-edit-hour-field{padding-block:0}::-webkit-datetime-edit-minute-field{padding-block:0}::-webkit-datetime-edit-second-field{padding-block:0}::-webkit-datetime-edit-millisecond-field{padding-block:0}::-webkit-datetime-edit-meridiem-field{padding-block:0}::-webkit-calendar-picker-indicator{line-height:1}:-moz-ui-invalid{box-shadow:none}button,input:where([type=button],[type=reset],[type=submit]){appearance:button}::file-selector-button{appearance:button}::-webkit-inner-spin-button{height:auto}::-webkit-outer-spin-button{height:auto}[hidden]:where(:not([hidden=until-found])){display:none!important}}@layer components;@layer utilities{.visible{visibility:visible}.sr-only{clip-path:inset(50%);white-space:nowrap;border-width:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.absolute{position:absolute}.fixed{position:fixed}.relative{position:relative}.static{position:static}.m-0{margin:0}.m-4{margin:calc(var(--spacing) * 4)}.block{display:block}.contents{display:contents}.hidden{display:none}.table{display:table}.h-4{height:calc(var(--spacing) * 4)}.resize{resize:both}.lowercase{text-transform:lowercase}.blur{--tw-blur:blur(8px);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,)}.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,)}.transition{transition-property:color,background-color,border-color,outline-color,text-decoration-color,fill,stroke,--tw-gradient-from,--tw-gradient-via,--tw-gradient-to,opacity,box-shadow,transform,translate,scale,rotate,filter,backdrop-filter,display,content-visibility,overlay,pointer-events;transition-timing-function:var(--tw-ease,var(--default-transition-timing-function));transition-duration:var(--tw-duration,var(--default-transition-duration))}}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/generated/IBMPlexMono-Regular.Du0PCiXT.woff2)format("woff2")}@font-face{font-family:IBM Plex Mono;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/generated/IBMPlexMono-SemiBold.CT2p8cOJ.woff2)format("woff2")}@font-face{font-family:IBM Plex Serif;font-style:normal;font-weight:400;font-display:swap;src:url(/assets/generated/IBMPlexSerif-Regular.Bc-yhlxS.woff2)format("woff2")}@font-face{font-family:IBM Plex Serif;font-style:italic;font-weight:400;font-display:swap;src:url(/assets/generated/IBMPlexSerif-Italic.Dh-vjgFE.woff2)format("woff2")}@font-face{font-family:IBM Plex Serif;font-style:normal;font-weight:600;font-display:swap;src:url(/assets/generated/IBMPlexSerif-SemiBold.BWo4LGdI.woff2)format("woff2")}:root{color-scheme:dark;--background:#0d0f10;--surface:#16191a;--surface-raised:#1d2122;--text:#e7e2d8;--heading:#f4efe5;--muted:#948e84;--secondary:#b7b0a5;--accent:#ff6b3d;--border:#e7e2d829;--border-strong:#e7e2d847;--accent-tint:#ff6b3d12;--viewer-surface:#111314;--viewer-text:#e7e2d8;--viewer-heading:#f4efe5;--viewer-muted:#a19a90;--viewer-border:#e7e2d847;--font-mono:"IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--font-serif:"IBM Plex Serif", Georgia, "Times New Roman", serif;--shell-width:74rem;--index-width:72rem;--article-width:50rem;--prose-width:43rem;--radius:2px;--motion-fast:.12s;--motion-dialog:.18s;--motion-sort:.24s}:root[data-resolved-theme=light]{color-scheme:light;--background:#f2eee5;--surface:#e8e1d5;--surface-raised:#fbf8f1;--text:#2d2b28;--heading:#17191a;--muted:#666159;--secondary:#4f4b45;--accent:#ad3f20;--border:#17191a29;--border-strong:#17191a47;--accent-tint:#ad3f200f}@media (prefers-color-scheme:light){:root:not([data-resolved-theme]){color-scheme:light;--background:#f2eee5;--surface:#e8e1d5;--surface-raised:#fbf8f1;--text:#2d2b28;--heading:#17191a;--muted:#666159;--secondary:#4f4b45;--accent:#ad3f20;--border:#17191a29;--border-strong:#17191a47;--accent-tint:#ad3f200f}}*{box-sizing:border-box}[hidden]{display:none!important}html{background:var(--background);scroll-behavior:smooth;scrollbar-gutter:stable}body{min-height:100vh;color:var(--text);background:var(--background);font-family:var(--font-serif);font-synthesis:none;overflow-wrap:anywhere;margin:0;font-size:1rem;line-height:1.65}.site-shell{width:min(calc(100% - 2.5rem), var(--shell-width));grid-template-rows:auto minmax(0,1fr) auto;min-height:100vh;margin-inline:auto;display:grid}a{color:var(--accent);text-underline-offset:.2em}a:hover{text-decoration-thickness:2px}h1,h2,h3,h4,strong{color:var(--heading);font-family:var(--font-serif)}h1{letter-spacing:-.025em;font-size:clamp(2.3rem,5vw,4rem);line-height:1.04}h2{font-size:clamp(1.45rem,2.5vw,2rem);line-height:1.2}h3{font-size:1.25rem;line-height:1.3}img{max-width:100%}button,summary{font:inherit}button,nav,time,code,pre,.section-heading,.article-meta,.article-tags,.tag-chip,.project-record,.project-status,.copy-status,.key-details,.site-footer{font-family:var(--font-mono)}.brand,.desktop-nav,.mobile-nav,.site-footer,.page-heading,.section-heading,button,summary,.gallery-status,.gallery-error-actions,.gallery-viewer-controls,.dialog-control,.home-page,.posts-page,.projects-page,.not-found,.gallery-item,.gallery-thumbnail{user-select:none}:focus-visible{outline:2px solid var(--accent);outline-offset:4px}.sr-only{clip:rect(0, 0, 0, 0);white-space:nowrap;border:0;width:1px;height:1px;margin:-1px;padding:0;position:absolute;overflow:hidden}.skip-link{z-index:100;color:var(--background);background:var(--heading);font-family:var(--font-mono);padding:.5rem .75rem;position:fixed;top:.75rem;left:.75rem;transform:translateY(-180%)}.skip-link:focus{transform:translateY(0)}.site-header{z-index:50;background:var(--background);border-bottom:1px solid var(--border-strong);justify-content:space-between;align-items:stretch;min-height:4.25rem;margin-bottom:clamp(3rem,7vw,6rem);display:flex;position:sticky;top:0}.header-actions{align-items:stretch;gap:.35rem;display:flex;position:relative}.brand,.desktop-nav a{color:var(--text);font-family:var(--font-mono);letter-spacing:.02em;transition:color var(--motion-fast) ease;align-items:center;font-size:.82rem;text-decoration:none;display:inline-flex;position:relative}.brand{gap:.45rem;font-size:.92rem;font-weight:600}.desktop-nav{align-items:stretch;display:flex}.desktop-nav a{justify-content:center;min-width:6rem;padding-inline:.75rem}.brand:after,.desktop-nav a:after{content:"";background:var(--accent);opacity:0;height:2px;transition:opacity var(--motion-fast) ease;position:absolute;bottom:-1px;left:0;right:0}.brand:hover,.brand:focus-visible,.brand[aria-current=page],.desktop-nav a:hover,.desktop-nav a:focus-visible,.desktop-nav a[aria-current=page],.mobile-nav a[aria-current=page]{color:var(--accent)}.brand:hover:after,.brand:focus-visible:after,.brand[aria-current=page]:after,.desktop-nav a:hover:after,.desktop-nav a:focus-visible:after,.desktop-nav a[aria-current=page]:after{opacity:1}.theme-toggle,.mobile-nav summary{cursor:pointer;width:2.75rem;height:100%;min-height:2.75rem;color:var(--text);border:0;border-left:1px solid var(--border);transition:color var(--motion-fast) ease;background:0 0;border-radius:0;place-items:center;display:grid}.theme-toggle{flex:0 0 2.75rem;padding:0;position:relative}.theme-toggle:hover,.theme-toggle:focus-visible,.mobile-nav summary:hover,.mobile-nav summary:focus-visible{color:var(--accent)}.theme-icon{opacity:0;pointer-events:none;transition:opacity var(--motion-fast) ease;place-items:center;display:grid;position:absolute;inset:0}.theme-icon svg{display:block}:root[data-resolved-theme=dark] .theme-icon-light,:root[data-resolved-theme=light] .theme-icon-dark{opacity:1}.mobile-nav{display:none;position:relative}.mobile-nav summary{list-style:none}.mobile-nav summary::-webkit-details-marker{display:none}.mobile-nav nav{background:var(--surface-raised);border:1px solid var(--border-strong);min-width:13rem;padding:.35rem;display:grid;position:absolute;top:calc(100% + 1px);right:0}.mobile-nav[open] nav{animation:mobile-menu-opacity var(--motion-dialog) ease both}.mobile-nav nav a{color:var(--text);border-bottom:1px solid var(--border);transition:color var(--motion-fast) ease, background-color var(--motion-fast) ease;padding:.75rem .85rem;text-decoration:none}.mobile-nav nav a:last-child{border-bottom:0}.mobile-nav nav a:hover,.mobile-nav nav a:focus-visible{color:var(--accent);background:var(--accent-tint)}main{min-width:0}.page-content,.editorial-page,.pgp-page{width:100%;max-width:var(--index-width);margin-inline:auto}.page-heading{border-bottom:1px solid var(--border-strong);margin:0 0 clamp(2.5rem,5vw,4.5rem);padding-bottom:1.2rem}.page-heading h1{margin:0}.page-heading p{max-width:43rem;color:var(--secondary);margin:1rem 0 0;font-size:1.1rem}.site-footer{color:var(--muted);border-top:1px solid var(--border-strong);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:.75rem 1.5rem;margin-top:7rem;padding:1.25rem 0 1.75rem;font-size:.72rem;display:flex}.site-footer nav{flex-wrap:wrap;gap:.5rem 1rem;display:flex}.site-footer a{align-items:center;min-height:2rem;display:inline-flex}.hero{border-bottom:1px solid var(--border-strong);grid-template-columns:repeat(12,minmax(0,1fr));align-items:center;gap:2rem;padding-bottom:clamp(3rem,6vw,5rem);display:grid}.avatar{aspect-ratio:1;border:1px solid var(--border-strong);object-fit:cover;border-radius:50%;grid-column:1/span 2;width:min(100%,10.5rem)}.hero-copy{grid-column:3/span 5;min-width:0}.hero h1{margin:0;font-size:clamp(3rem,7vw,5.5rem)}.tagline{max-width:32rem;color:var(--secondary);margin:1rem 0 0;font-size:clamp(1rem,1.5vw,1.18rem);line-height:1.5}.social-links{border-top:1px solid var(--border-strong);grid-column:8/span 5;align-self:stretch;display:grid}.social-links a{color:var(--text);border-bottom:1px solid var(--border);font-family:var(--font-mono);transition:color var(--motion-fast) ease, border-color var(--motion-fast) ease;background:0 0;grid-template-columns:1.6rem 5rem minmax(0,1fr);align-items:center;gap:.7rem;padding:.55rem 0;font-size:.75rem;text-decoration:none;display:grid}.social-links a:hover,.social-links a:focus-visible{color:var(--accent);border-color:var(--accent);text-decoration:underline}.social-links svg{width:1.2rem;height:1.2rem;color:var(--accent)}.social-platform{color:var(--heading);font-weight:600}.social-value{min-width:0;color:var(--muted);overflow-wrap:anywhere}.social-links a:hover .social-value,.social-links a:focus-visible .social-value{color:currentColor}.home-editorial{grid-template-columns:minmax(0,7fr) minmax(18rem,5fr);gap:clamp(3rem,7vw,6rem);margin-top:clamp(3rem,6vw,5rem);display:grid}.home-section{min-width:0}.section-heading{border-bottom:1px solid var(--border-strong);justify-content:space-between;align-items:center;gap:1rem;margin-bottom:.65rem;padding-bottom:.65rem;display:flex}.section-heading h2{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.11em;margin:0;font-size:.75rem;font-weight:600}.section-heading a{min-height:2rem;color:var(--muted);transition:color var(--motion-fast) ease;align-items:center;font-size:.7rem;text-decoration:none;display:inline-flex}.section-heading a:hover,.section-heading a:focus-visible{color:var(--accent)}.featured-project{color:var(--text);background:var(--accent-tint);border-left:3px solid var(--accent);transition:color var(--motion-fast) ease, background-color var(--motion-fast) ease;gap:.7rem;margin-top:1rem;padding:1.2rem 1.3rem;text-decoration:none;display:grid}.featured-project:hover,.featured-project:focus-visible{background:var(--surface)}.featured-project strong{font-size:1.35rem;line-height:1.2}.featured-project:hover strong,.featured-project:focus-visible strong,.featured-project-repo{color:var(--accent)}.featured-project-meta{font-family:var(--font-mono);flex-wrap:wrap;align-items:center;gap:.5rem 1rem;display:flex}.featured-project-repo,.featured-project-stars{font-size:.72rem}.featured-project-stars{color:var(--muted)}.featured-project-stars svg{vertical-align:-.2em}.post-list{border-top:1px solid var(--border);margin:0;padding:0;list-style:none}.post-list li{border-bottom:1px solid var(--border);grid-template-columns:9rem minmax(0,1fr);align-items:baseline;gap:1.5rem;padding:.85rem 0;display:grid}.post-list time{color:var(--muted);font-family:var(--font-mono);font-size:.74rem}.post-list a{color:var(--text);font-family:var(--font-serif);transition:color var(--motion-fast) ease;font-size:1.12rem;line-height:1.35;text-decoration:none}.post-list a:hover,.post-list a:focus-visible{color:var(--accent)}.blog-tools{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:1rem 2rem;display:flex}.tag-summary{flex-wrap:wrap;gap:.5rem;margin:0;display:flex}.tag-chip,.key-action,.back-to-top,.sort-button{min-height:2.35rem;color:var(--text);border:1px solid var(--border-strong);border-radius:var(--radius);font-family:var(--font-mono);transition:color var(--motion-fast) ease, background-color var(--motion-fast) ease, border-color var(--motion-fast) ease, opacity var(--motion-fast) ease;background:0 0;align-items:center;padding:.35rem .65rem;font-size:.75rem;text-decoration:none;display:inline-flex}.tag-chip:hover,.tag-chip:focus-visible,.key-action:hover,.key-action:focus-visible,.back-to-top:hover,.back-to-top:focus-visible,.sort-button:hover:not(:disabled),.sort-button:focus-visible:not(:disabled){color:var(--accent);background:var(--accent-tint);border-color:var(--accent)}.rss-link{min-height:2.35rem;font-family:var(--font-mono);align-items:center;gap:.35rem;font-size:.75rem;display:inline-flex}.year-group,.tag-section{margin-top:3.5rem}.year-group h2,.tag-section h2{border-bottom:1px solid var(--border-strong);font-family:var(--font-mono);letter-spacing:.08em;margin-bottom:.75rem;padding-bottom:.55rem;font-size:.8rem}.tag-section{scroll-margin-top:6rem}.pagination{font-family:var(--font-mono);justify-content:space-between;margin-top:3rem;font-size:.8rem;display:flex}.latest-footer{font-family:var(--font-mono);margin-top:2rem;font-size:.8rem}.article-header{max-width:var(--prose-width);border-bottom:1px solid var(--border-strong);margin:0 auto clamp(3rem,7vw,5rem);padding-bottom:1.5rem}.article-header h1{margin:0 0 1.25rem}.article-meta{color:var(--muted);flex-wrap:wrap;gap:.5rem 1rem;font-size:.75rem;display:flex}.article-tags{flex-wrap:wrap;gap:.4rem;margin-top:1rem;display:flex}.article-grid{width:100%;max-width:var(--article-width);grid-template-columns:minmax(0,1fr);gap:2rem;margin-inline:auto;display:grid}.article-grid:has(.toc){grid-template-columns:minmax(0, var(--article-width)) 13rem;max-width:calc(var(--article-width) + 15rem);justify-content:center}.article-content{min-width:0;font-family:var(--font-serif);overflow-wrap:break-word;font-size:1.125rem;line-height:1.68}.article-content p,.article-content li{max-width:var(--prose-width)}.article-content>p,.article-content>ul,.article-content>ol,.article-content>blockquote,.article-content>h2,.article-content>h3{margin-left:auto;margin-right:auto}.article-content h2,.article-content h3{font-family:var(--font-serif);margin-top:2.75rem;scroll-margin-top:6rem}.article-content a{text-decoration-line:underline;text-decoration-thickness:1px}.article-content a:hover,.article-content a:focus-visible{text-decoration-thickness:2px}.article-content .post-image{margin:2rem auto;display:block}.article-content .post-image img{border:1px solid var(--border);border-radius:var(--radius);max-width:100%;height:auto;margin:0 auto;display:block}.article-content blockquote{color:var(--secondary);border-left:3px solid var(--accent);padding:.2rem 0 .2rem 1.25rem}.article-content :not(pre)>code{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);font-family:var(--font-mono);padding:.1rem .28rem;font-size:.86em}.article-content pre{font-family:var(--font-mono);overflow-x:auto}.article-content table{border-collapse:collapse;white-space:nowrap;max-width:100%;display:block;overflow-x:auto}.article-content th,.article-content td{border-bottom:1px solid var(--border);text-align:left;padding:.45rem .65rem}.expressive-code .frame{border-radius:var(--radius)!important;box-shadow:none!important}.toc{color:var(--muted);border-top:2px solid var(--accent);font-family:var(--font-mono);order:2;align-self:start;padding-top:.7rem;font-size:.72rem;position:sticky;top:6rem}.toc h2{font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.08em;margin:0 0 .75rem;font-size:.75rem}.toc ol{margin:0;padding:0;list-style:none}.toc li{margin:.45rem 0}.toc li.nested{padding-left:.8rem}.toc a{color:var(--muted);text-decoration:none}.toc a:hover,.toc a:focus-visible{color:var(--accent)}.article-navigation{width:100%;max-width:var(--article-width);border-top:1px solid var(--border-strong);font-family:var(--font-mono);grid-template-columns:1fr 1fr;gap:1rem;margin:4rem auto 0;padding-top:1.5rem;font-size:.78rem;display:grid}.article-navigation .next{text-align:right}.back-to-top{width:max-content;margin:2.5rem auto 0}.projects-toolbar{justify-content:flex-end;margin:-1.5rem 0 1rem;display:flex}.sort-button{cursor:pointer;gap:.45rem}.sort-button svg{transition:transform var(--motion-sort) ease}.sort-button[data-direction=asc] svg{transform:rotate(180deg)}.sort-button:disabled{cursor:not-allowed;opacity:.5}.projects-list{counter-reset:dossier;border-top:1px solid var(--border-strong)}.project-card{counter-increment:dossier;border-bottom:1px solid var(--border-strong);transition:background-color var(--motion-fast) ease, border-color var(--motion-fast) ease, opacity var(--motion-sort) ease}.project-card:hover,.project-card:focus-within{background:var(--accent-tint);border-color:var(--accent)}.project-card a{color:inherit;grid-template-columns:4rem minmax(0,1fr) minmax(14rem,20rem);align-items:start;gap:clamp(1rem,3vw,2.5rem);padding:1.6rem 0;text-decoration:none;display:grid}.project-card a:before{content:counter(dossier, decimal-leading-zero);color:var(--muted);font-family:var(--font-mono);letter-spacing:.08em;transition:color var(--motion-fast) ease;font-size:.82rem}.project-card:hover a:before,.project-card:focus-within a:before,.project-card:hover h2,.project-card:focus-within h2{color:var(--accent)}.project-main{min-width:0}.project-card h2{overflow-wrap:normal;word-break:normal;transition:color var(--motion-fast) ease;margin:0 0 .55rem;font-size:clamp(1.3rem,2.3vw,1.75rem);line-height:1.15}.project-description{color:var(--secondary);font-family:var(--font-serif);font-size:1.05rem;line-height:1.5;display:block}.project-record{text-align:right;min-width:0}.project-repository{color:var(--accent);overflow-wrap:normal;word-break:normal;font-size:.72rem;display:block}.project-stats{color:var(--muted);justify-content:flex-end;gap:1rem;margin-top:.75rem;font-size:.75rem;display:flex}.project-stats[data-project-stats-state=loading]{visibility:hidden}.project-stats span{align-items:center;gap:.3rem;display:inline-flex}.project-status{color:var(--muted);margin:1rem 0 0;font-size:.75rem}.gallery-grid{flex-wrap:wrap;align-items:flex-start;gap:.65rem;display:flex}.gallery-grid:after{content:"";flex-grow:999;min-width:20%}.gallery-item{flex:var(--aspect-ratio) var(--aspect-ratio) calc(13rem * var(--aspect-ratio));background:var(--surface);outline-offset:-1px;min-width:10rem;transition:opacity var(--motion-fast) ease, outline-color var(--motion-fast) ease;outline:1px solid #0000;display:block;position:relative;overflow:clip}.gallery-item:nth-last-child(-n+2){flex-basis:calc(18rem * var(--aspect-ratio))}.gallery-item picture,.gallery-thumbnail{width:100%;display:block}.gallery-thumbnail{height:auto}.gallery-item:hover,.gallery-item:focus-visible{opacity:.82;outline-color:var(--accent)}.gallery-dialog{width:min(96vw,1920px);max-width:none;height:94dvh;max-height:none;color:var(--viewer-text);opacity:0;transition:opacity var(--motion-dialog) ease, overlay var(--motion-dialog) allow-discrete, display var(--motion-dialog) allow-discrete;background:0 0;border:0;margin:auto;padding:0;position:fixed;inset:0}.gallery-dialog[open]{opacity:1;grid-template-rows:minmax(0,1fr) auto;gap:.75rem;display:grid}.gallery-dialog::backdrop{transition:background-color var(--motion-dialog) ease, overlay var(--motion-dialog) allow-discrete, display var(--motion-dialog) allow-discrete;background:0 0}.gallery-dialog[open]::backdrop{background:#000000e0}@starting-style{.gallery-dialog[open]{opacity:0}.gallery-dialog[open]::backdrop{background:0 0}}.gallery-dialog-frame{inline-size:100%;min-inline-size:0;max-inline-size:100%;grid-template-rows:minmax(0,1fr) auto;grid-template-columns:minmax(0,1fr);place-items:center;gap:.75rem;min-height:0;display:grid;position:relative}.gallery-stage{z-index:1;border:1px solid var(--viewer-border);border-radius:var(--radius);overscroll-behavior:contain;scrollbar-gutter:stable;touch-action:none;background:#00000047;grid-area:1/1;width:100%;height:100%;min-height:0;position:relative;overflow:auto}.gallery-ambient{z-index:0;pointer-events:none;background:#050506;grid-area:1/1;place-self:stretch stretch;position:relative;overflow:hidden}.gallery-ambient:before{content:"";pointer-events:none;opacity:.2;background-image:var(--gallery-ambient-image);filter:blur(24px)saturate(75%);background-position:50%;background-size:cover;position:absolute;inset:-2rem}.gallery-stage.zoomed{cursor:grab;user-select:none}.gallery-stage.dragging{cursor:grabbing}.gallery-canvas{z-index:1;place-items:center;min-width:100%;min-height:100%;display:grid;position:relative}.gallery-preview,.gallery-full{object-fit:contain;user-select:none;-webkit-user-drag:none;grid-area:1/1;place-self:center}.gallery-preview{opacity:1;width:100%;height:100%;display:none}.gallery-preview.active{display:block}.gallery-full{opacity:0;max-width:none;max-height:none;transition:opacity var(--motion-dialog) ease;display:block}.gallery-full.loaded{opacity:1}.gallery-toolbar{z-index:3;grid-area:2/1;grid-template-columns:minmax(0,1fr);justify-items:center;gap:.35rem;inline-size:100%;min-inline-size:0;max-inline-size:100%;display:grid}.gallery-status,.gallery-error-actions button,.gallery-error-actions a,.gallery-control-group,.dialog-control{color:var(--viewer-text);background:var(--viewer-surface);border:1px solid var(--viewer-border);border-radius:var(--radius);font-family:var(--font-mono)}.gallery-status{text-align:center;width:max-content;max-width:100%;margin:0;padding:.3rem .6rem;font-size:.72rem}.gallery-progress{width:min(22rem,100vw - 3rem);height:.45rem;color:var(--accent);background:var(--viewer-surface);border:1px solid var(--viewer-border);border-radius:var(--radius);accent-color:var(--accent);overflow:hidden}.gallery-progress::-webkit-progress-bar{background:var(--viewer-surface)}.gallery-progress::-webkit-progress-value{background:var(--accent)}.gallery-progress::-moz-progress-bar{background:var(--accent)}.gallery-error-actions{flex-wrap:wrap;justify-content:center;gap:.4rem;display:flex}.gallery-error-actions button,.gallery-error-actions a{cursor:pointer;min-height:2.75rem;transition:color var(--motion-fast) ease, border-color var(--motion-fast) ease;align-items:center;padding:.45rem .7rem;text-decoration:none;display:inline-flex}.gallery-viewer-controls{min-inline-size:0;max-inline-size:100%;color:var(--viewer-text);background:var(--viewer-surface);border:1px solid var(--viewer-border);border-radius:var(--radius);font-family:var(--font-mono);font-variant-numeric:tabular-nums;flex-wrap:wrap;justify-content:center;align-items:center;gap:0;padding:.25rem;font-size:.76rem;display:flex}.gallery-control-group{min-inline-size:0;max-inline-size:100%;color:inherit;background:0 0;border:0;border-radius:0;flex-wrap:nowrap;justify-content:center;align-items:center;gap:.2rem;padding:0;display:flex}.gallery-quality-controls{border-left:1px solid var(--viewer-border);margin-left:.25rem;padding-left:.45rem}.gallery-control-label{min-height:2.75rem;color:var(--viewer-muted);font-family:var(--font-mono);letter-spacing:.08em;text-transform:uppercase;align-items:center;padding:0 .55rem 0 .35rem;font-size:.62rem;line-height:1;display:inline-flex}.gallery-control-group button{cursor:pointer;min-width:2.75rem;height:2.75rem;color:var(--viewer-text);border-radius:var(--radius);transition:background-color var(--motion-fast) ease, color var(--motion-fast) ease, border-color var(--motion-fast) ease, opacity var(--motion-fast) ease;background:0 0;border:1px solid #0000;justify-content:center;align-items:center;padding:0 .7rem;font-size:.82rem;line-height:1;display:inline-flex}.gallery-quality-controls [data-gallery-load-original]{color:var(--viewer-heading);border-color:var(--viewer-border);white-space:nowrap;gap:.55rem;padding-inline:.75rem}.gallery-control-group [hidden]{display:none}.gallery-error-actions button:hover,.gallery-error-actions button:focus-visible,.gallery-error-actions a:hover,.gallery-error-actions a:focus-visible,.gallery-control-group button:hover:not(:disabled),.gallery-control-group button:focus-visible:not(:disabled),.dialog-control:hover,.dialog-control:focus-visible{color:var(--accent);border-color:var(--accent)}.gallery-control-group button:hover:not(:disabled),.gallery-control-group button[aria-pressed=true]{background:#ffffff0f}.gallery-control-group button[aria-pressed=true]{color:var(--viewer-heading);border-color:var(--viewer-border)}.gallery-control-group button:disabled{cursor:not-allowed;opacity:.4}.gallery-zoom-controls output{min-width:3.5rem;color:var(--viewer-muted);text-align:center;font-family:var(--font-mono);font-size:.76rem;line-height:1}.gallery-quality-status{min-width:6.25rem;min-height:2.75rem;color:var(--viewer-heading);text-align:center;font-family:var(--font-mono);justify-content:center;align-items:center;padding-inline:.65rem;font-size:.76rem;line-height:1;display:inline-flex}.gallery-original-size{color:var(--viewer-muted);font-family:var(--font-mono);white-space:nowrap;font-size:.62rem;line-height:1}.dialog-control{z-index:2;cursor:pointer;width:2.9rem;height:2.9rem;color:var(--viewer-heading);transition:color var(--motion-fast) ease, border-color var(--motion-fast) ease, opacity var(--motion-fast) ease;border-radius:50%;place-items:center;display:grid;position:absolute}.dialog-close{top:.75rem;right:.75rem}.dialog-previous{top:50%;left:.75rem}.dialog-next{top:50%;right:.75rem}body.dialog-open{overflow:hidden}.key-card{background:var(--surface);border-top:3px solid var(--accent);border-bottom:1px solid var(--border-strong);margin:2rem 0;padding:clamp(1.25rem,3vw,2rem)}.key-card>h2,.public-key-block h2{color:var(--muted);font-family:var(--font-mono);text-transform:uppercase;letter-spacing:.1em;margin:0 0 .65rem;font-size:.75rem}.key-fingerprint{color:var(--heading);font-family:var(--font-mono);overflow-wrap:anywhere;font-size:clamp(.85rem,1.8vw,1.05rem);display:block}.key-details{border-top:1px solid var(--border);grid-template-columns:repeat(2,minmax(0,1fr));gap:1rem 2rem;margin:1.5rem 0 0;padding-top:1.25rem;display:grid}.key-details>div{min-width:0}.key-details dt{color:var(--muted);text-transform:uppercase;letter-spacing:.06em;font-size:.72rem}.key-details dd{overflow-wrap:anywhere;min-width:0;margin:.2rem 0 0}.key-details code,.public-key-block code{font-family:var(--font-mono)}.key-algorithms{grid-column:1/-1}.key-actions{flex-wrap:wrap;gap:.65rem;margin:1.5rem 0 0;display:flex}.key-action{cursor:pointer}.copy-status{min-height:1.7em;color:var(--muted);font-size:.75rem}.public-key-block{border:1px solid var(--border-strong);border-radius:var(--radius);margin-top:1.5rem;overflow:hidden}.public-key-block h2{background:var(--surface);margin:0;padding:.75rem .9rem}.public-key-block pre{background:var(--surface-raised);border-top:1px solid var(--border);scrollbar-gutter:stable;max-width:100%;margin:0;padding:1rem;font-size:.78rem;line-height:1.55;overflow-x:auto}.not-found{text-align:center;padding:4rem 0}.not-found>p{color:var(--muted)}.not-found-links{font-family:var(--font-mono);flex-wrap:wrap;justify-content:center;gap:.75rem 1.25rem;display:flex}html[data-project-sort-motion=true]::view-transition-group(*){animation-duration:var(--motion-sort);animation-timing-function:ease}@keyframes mobile-menu-opacity{0%{opacity:0}}@media (width<=959px){.hero{grid-template-columns:9rem minmax(0,1fr)}.avatar,.hero-copy,.social-links{grid-column:auto}.social-links{grid-column:1/-1}.home-editorial{grid-template-columns:1fr;gap:3.5rem}}@media (width<=760px){.header-actions{gap:0}.desktop-nav{display:none}.mobile-nav{display:block}.key-action,.expressive-code .copy,.expressive-code .copy button{min-width:2.75rem;min-height:2.75rem}.article-grid:has(.toc){grid-template-columns:1fr}.toc{order:0;position:static}.project-card a{grid-template-columns:3rem minmax(0,1fr);gap:1rem}.project-record{text-align:left;grid-column:2}.project-stats{justify-content:flex-start}}@media (width<=520px){.project-card h2,.project-repository{overflow-wrap:anywhere}.site-shell{width:calc(100% - 1.8rem)}.site-header{margin-bottom:3rem}.brand span{font-size:.84rem}.hero{grid-template-columns:1fr;gap:1.5rem}.avatar,.hero-copy,.social-links{grid-column:1}.avatar{width:7.5rem}.social-links a{grid-template-columns:1.5rem 4.6rem minmax(0,1fr);gap:.5rem}.post-list li{grid-template-columns:1fr;gap:.2rem}.gallery-grid:after{display:none}.gallery-item{min-width:0}.gallery-item--landscape{flex:0 0 100%}.gallery-item--portrait{flex:0 0 calc(50% - .325rem)}.gallery-dialog{width:calc(100vw - 1rem);height:calc(100dvh - 1rem)}.gallery-viewer-controls{align-items:stretch;inline-size:100%}.gallery-control-group{flex-wrap:wrap;justify-content:center;inline-size:100%}.gallery-quality-controls{border-top:1px solid var(--viewer-border);border-left:0;margin-top:.25rem;margin-left:0;padding-top:.45rem;padding-left:0}.gallery-control-label{justify-content:center;min-width:3.75rem;padding-inline:.25rem}.key-details{grid-template-columns:1fr}.key-algorithms{grid-column:auto}.article-navigation{grid-template-columns:1fr}.article-navigation .next{text-align:left}.project-card a{grid-template-columns:2.3rem minmax(0,1fr)}}@media (width<=360px){.gallery-viewer-controls{grid-template-columns:minmax(0,1fr);display:grid}.gallery-control-group{grid-template-columns:repeat(4,minmax(0,1fr));gap:.35rem .25rem;display:grid}.gallery-zoom-controls{grid-template-areas:"label value value value""zoom-out zoom-in fit actual"}.gallery-quality-controls{grid-template-areas:"label status status status""load load load load"}.gallery-control-label{min-inline-size:0;grid-area:label;justify-content:flex-start;min-height:1.5rem;padding-inline:.25rem}.gallery-zoom-controls output{grid-area:value;justify-self:end;min-inline-size:0;padding-inline:.25rem}.gallery-quality-status{min-inline-size:0;grid-area:status;justify-content:flex-end;min-height:1.5rem;padding-inline:.25rem}.gallery-control-group button{inline-size:100%;padding-inline:.35rem}.gallery-zoom-controls [data-gallery-zoom-out]{grid-area:zoom-out}.gallery-zoom-controls [data-gallery-zoom-in]{grid-area:zoom-in}.gallery-zoom-controls [data-gallery-fit]{grid-area:fit}.gallery-zoom-controls [data-gallery-actual]{grid-area:actual}.gallery-quality-controls [data-gallery-load-original]{grid-area:load;justify-self:center;inline-size:auto;padding-inline:.75rem}}@media (prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,:before,:after{scroll-behavior:auto!important;transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important;animation-delay:0s!important}::view-transition-group(*),::view-transition-old(*),::view-transition-new(*){animation-duration:.01ms!important;animation-delay:0s!important}}@media (forced-colors:active){:focus-visible{outline-color:highlight}.gallery-ambient{display:none}.dialog-control,.gallery-status,.gallery-error-actions button,.gallery-error-actions a{border-color:canvastext}}@property --tw-blur{syntax:"*";inherits:false}@property --tw-brightness{syntax:"*";inherits:false}@property --tw-contrast{syntax:"*";inherits:false}@property --tw-grayscale{syntax:"*";inherits:false}@property --tw-hue-rotate{syntax:"*";inherits:false}@property --tw-invert{syntax:"*";inherits:false}@property --tw-opacity{syntax:"*";inherits:false}@property --tw-saturate{syntax:"*";inherits:false}@property --tw-sepia{syntax:"*";inherits:false}@property --tw-drop-shadow{syntax:"*";inherits:false}@property --tw-drop-shadow-color{syntax:"*";inherits:false}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%}@property --tw-drop-shadow-size{syntax:"*";inherits:false}
