:root{--bg: #f3f1ea;--bg-alt: #e3dfd3;--surface: #fbfaf6;--surface-muted: #ebe7dd;--ink: #171410;--ink-soft: #5a554d;--ink-muted: #918b82;--rule: rgba(23, 20, 16, .14);--rule-strong: rgba(23, 20, 16, .32);--accent: #3a4d6b;--danger: #943b28;--shadow: 0 18px 48px rgba(18, 15, 12, .16);--font-meta: "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;--font-body: "IBM Plex Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--font-display: "IBM Plex Sans", system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;--header-h: 58px;--filter-h: 48px;--gutter: 4px}:root[data-theme=dark]{--bg: #0e0d0b;--bg-alt: #191713;--surface: #14120f;--surface-muted: #201d18;--ink: #f0ece3;--ink-soft: #b0a99d;--ink-muted: #777067;--rule: rgba(240, 236, 227, .14);--rule-strong: rgba(240, 236, 227, .32);--accent: #8aa1c6;--danger: #d27761;--shadow: 0 18px 48px rgba(0, 0, 0, .36)}*,*:before,*:after{box-sizing:border-box}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--header-h) + var(--filter-h));overflow-x:hidden}body{margin:0;min-width:320px;overflow-x:hidden;background:var(--bg);color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.5;letter-spacing:0;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}body.drawer-open,body.page-open,body.lightbox-open{overflow:hidden}a{color:inherit}button,input,select,textarea{font:inherit;letter-spacing:0}button{color:inherit}img,canvas{display:block;max-width:100%}img,.gallery-img,#lightboxCanvas{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.gallery-img{pointer-events:none}.skip-link{position:fixed;left:12px;top:12px;z-index:5000;transform:translateY(-140%);background:var(--ink);color:var(--bg);padding:8px 10px;font-family:var(--font-meta);font-size:12px;text-decoration:none}.skip-link:focus{transform:translateY(0)}.topbar{position:sticky;top:0;z-index:300;background:color-mix(in srgb,var(--bg) 94%,transparent);border-bottom:1px solid var(--rule);backdrop-filter:blur(12px);-webkit-backdrop-filter:blur(12px);transform:translateZ(0);will-change:transform}.topbar-inner{min-height:var(--header-h);display:grid;grid-template-columns:minmax(0,1fr) auto minmax(92px,1fr);align-items:center;gap:18px;padding:0 20px}.brand{display:inline-flex;align-items:baseline;gap:10px;min-width:0;color:var(--ink);font-family:var(--font-meta);font-size:12px;text-transform:uppercase;text-decoration:none;white-space:nowrap}.brand-name{font-weight:600}.brand-separator,.brand-tag,.status-separator{color:var(--ink-muted)}.archive-status{display:inline-flex;align-items:center;gap:8px;color:var(--ink-soft);font-family:var(--font-meta);font-size:12px;text-transform:uppercase;white-space:nowrap}.status-pulse{width:7px;height:7px;border-radius:50%;background:var(--accent);animation:status-pulse 2.2s ease-out infinite}@keyframes status-pulse{0%{box-shadow:0 0 color-mix(in srgb,var(--accent) 70%,transparent)}70%{box-shadow:0 0 0 8px transparent}to{box-shadow:0 0 0 0 transparent}}.topnav{display:inline-flex;align-items:center;gap:22px;font-family:var(--font-meta);font-size:12px;letter-spacing:.05em;text-transform:uppercase;white-space:nowrap}.topnav a{color:var(--ink-soft);text-decoration:none;padding:4px 0;border-bottom:1px solid transparent;transition:color .15s ease,border-color .15s ease}.topnav a:hover,.topnav a:focus-visible{color:var(--ink);border-bottom-color:var(--accent);outline:none}.topbar-actions{display:inline-flex;justify-content:flex-end;align-items:center;gap:8px}#menuButton{display:none}.icon-button{width:34px;height:34px;display:inline-flex;align-items:center;justify-content:center;padding:0;border:1px solid var(--rule);border-radius:50%;background:transparent;color:var(--ink);cursor:pointer;transition:background .14s ease,border-color .14s ease,transform .14s ease}.icon-button:hover,.icon-button:focus-visible{background:var(--bg-alt);border-color:var(--rule-strong);outline:none}.icon-button:active{transform:scale(.96)}.dot-grid{display:grid;grid-template-columns:repeat(3,3px);gap:2px}.dot-grid i{display:block;width:3px;height:3px;border-radius:50%;background:currentColor}.filter-strip{min-height:var(--filter-h);display:flex;align-items:center;gap:0;padding:8px 20px;border-top:1px solid var(--rule);overflow-x:auto;background:var(--bg);scrollbar-width:none}.filter-strip::-webkit-scrollbar{display:none}.filter-label{margin-right:12px;color:var(--ink-muted);font-family:var(--font-meta);font-size:11px;text-transform:uppercase;white-space:nowrap}.filter-list{display:inline-flex;align-items:center;gap:2px}.filter-chip,.sort-toggle,.drawer-filter{border:0;background:transparent;color:var(--ink-soft);font-family:var(--font-meta);font-size:12px;text-transform:uppercase;cursor:pointer}.filter-chip{position:relative;padding:7px 10px;white-space:nowrap}.filter-chip-count{margin-left:4px;color:var(--ink-muted);font-size:10px}.filter-chip:hover,.filter-chip:focus-visible,.filter-chip.is-active{color:var(--ink);outline:none}.filter-chip.is-active:after{content:"";position:absolute;left:10px;right:10px;bottom:1px;height:1px;background:var(--accent)}.filter-spacer{min-width:28px;flex:1;height:1px;margin:0 12px;border-bottom:1px dotted var(--rule-strong)}.sort-toggle{flex:0 0 auto;padding:7px 11px;border:1px solid var(--rule);border-radius:999px;white-space:nowrap}.sort-toggle:hover,.sort-toggle:focus-visible{color:var(--ink);border-color:var(--rule-strong);outline:none}.gallery{width:100%;max-width:100%;min-height:calc(100vh - var(--header-h) - var(--filter-h));min-height:calc(100svh - var(--header-h) - var(--filter-h));display:flex;flex-direction:column;gap:var(--gutter);padding:var(--gutter);overflow-x:clip}.gallery-row{display:flex;width:100%;max-width:100%;gap:var(--gutter);overflow:hidden}.photo{position:relative;flex:0 0 auto;overflow:hidden;min-width:0;border:0;background:var(--surface-muted);cursor:zoom-in}.photo-button{display:block;width:100%;height:100%;padding:0;border:0;background:transparent;cursor:zoom-in}.gallery-picture,.gallery-img{width:100%;height:100%}.gallery-picture{display:block}.gallery-img{object-fit:contain;background:var(--surface-muted);transition:transform .62s cubic-bezier(.2,.8,.2,1),filter .16s ease}.photo:hover .gallery-img,.photo:focus-within .gallery-img{filter:brightness(1.04) contrast(1.02)}.photo-meta,.photo-corner,.photo-index{position:absolute;z-index:2;pointer-events:none;color:#ffffffe6;font-family:var(--font-meta);text-transform:uppercase;opacity:0;transition:opacity .18s ease}.photo-meta{left:10px;bottom:10px;max-width:calc(100% - 20px);padding:4px 7px;overflow:hidden;background:#00000094;backdrop-filter:blur(7px);font-size:10px;text-overflow:ellipsis;white-space:nowrap}.photo-corner{top:10px;right:10px;padding:3px 6px;background:#0000006b;font-size:9px}.photo-index{top:10px;left:10px;font-size:9px;color:#ffffffb8}.photo:hover .photo-meta,.photo:hover .photo-corner,.photo:hover .photo-index,.photo:focus-within .photo-meta,.photo:focus-within .photo-corner,.photo:focus-within .photo-index{opacity:1}.gallery-loading,.gallery-empty{min-height:50vh;display:grid;place-items:center;color:var(--ink-muted);font-family:var(--font-meta);font-size:12px;text-transform:uppercase;border:1px dashed var(--rule)}.footer{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:26px;margin-top:44px;padding:34px 20px 30px;border-top:1px solid var(--rule);color:var(--ink-soft);font-family:var(--font-meta);font-size:12px}.footer h2{margin:0 0 10px;color:var(--ink-muted);font:500 11px/1.2 var(--font-meta);text-transform:uppercase}.footer p{margin:0}.footer a{display:block;padding:2px 0;color:var(--ink);text-decoration:none}.footer a:hover,.footer a:focus-visible{color:var(--accent);outline:none}.scrim{position:fixed;inset:0;z-index:700;background:#00000061;opacity:0;pointer-events:none;transition:opacity .22s ease}.scrim.is-open{opacity:1;pointer-events:auto}.drawer{position:fixed;top:0;right:0;bottom:0;z-index:800;width:min(420px,92vw);overflow-y:auto;padding:28px 30px 36px;border-left:1px solid var(--rule);background:var(--bg);color:var(--ink);transform:translate(100%);transition:transform .28s cubic-bezier(.2,.8,.2,1)}.drawer.is-open{transform:translate(0)}.drawer-head,.page-head{display:flex;align-items:baseline;justify-content:space-between;gap:16px;padding-bottom:14px;border-bottom:1px solid var(--rule);color:var(--ink-muted);font-family:var(--font-meta);font-size:11px;text-transform:uppercase}.text-button,.page-close{border:1px solid var(--rule);border-radius:999px;background:transparent;color:var(--ink);padding:6px 12px;font-family:var(--font-meta);font-size:11px;text-transform:uppercase;cursor:pointer}.text-button:hover,.text-button:focus-visible,.page-close:hover,.page-close:focus-visible{background:var(--bg-alt);border-color:var(--rule-strong);outline:none}.drawer-section{margin-top:26px}.drawer-section h2{display:flex;align-items:center;gap:10px;margin:0 0 10px;color:var(--ink-muted);font:500 11px/1.2 var(--font-meta);text-transform:uppercase}.drawer-section h2:after{content:"";flex:1;height:1px;background:var(--rule)}.drawer-link,.drawer-filter{width:100%;display:flex;align-items:baseline;justify-content:space-between;gap:18px;padding:10px 0;border:0;border-bottom:1px solid var(--rule);background:transparent;color:var(--ink);text-align:left;text-decoration:none;cursor:pointer;transition:color .16s ease,padding .16s ease}.drawer-link{font:600 22px/1.15 var(--font-display)}.drawer-link span,.drawer-filter span:last-child{color:var(--ink-muted);font:400 11px/1.2 var(--font-meta);text-transform:uppercase}.drawer-filter{font-size:12px}.drawer-link:hover,.drawer-link:focus-visible,.drawer-filter:hover,.drawer-filter:focus-visible,.drawer-filter.is-active{color:var(--accent);outline:none;padding-left:7px}.drawer-foot{margin:28px 0 0;color:var(--ink-muted);font-family:var(--font-meta);font-size:11px}.page-overlay{position:fixed;inset:0;z-index:650;overflow-y:auto;background:var(--bg);transform:translateY(100%);transition:transform .32s cubic-bezier(.2,.8,.2,1)}.page-overlay.is-open{transform:translateY(0)}.page-shell{width:min(960px,calc(100% - 40px));margin:0 auto;padding:72px 0 78px}.page-title{margin:42px 0 18px;max-width:12ch;color:var(--ink);font:600 clamp(42px,8vw,76px)/1.04 var(--font-display)}.page-lead{max-width:62ch;margin:0 0 34px;color:var(--ink-soft);font-size:18px;line-height:1.55}.page-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,.75fr);gap:44px;align-items:start}.body-copy p{margin:0 0 1.1em;color:var(--ink);font-size:16px;line-height:1.65}.about-meta,.stat-grid,.construction-list{border-top:1px solid var(--rule)}.stat-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:18px;margin-top:28px;padding-top:20px}.stat-grid dt{margin:0 0 4px;color:var(--ink);font:600 24px/1.1 var(--font-display)}.stat-grid dd{margin:0;color:var(--ink-muted);font:400 11px/1.3 var(--font-meta);text-transform:uppercase}.about-meta{display:grid;grid-template-columns:120px 1fr;row-gap:8px;margin-top:28px;padding-top:20px;font-family:var(--font-meta);font-size:12px}.about-meta dt{color:var(--ink-muted);text-transform:uppercase}.about-meta dd{margin:0;color:var(--ink-soft)}.about-meta a,.body-copy a{color:var(--ink);text-decoration:underline;text-underline-offset:3px}.portrait-panel{position:relative;aspect-ratio:4 / 5;overflow:hidden;border:1px solid var(--rule);background:var(--surface-muted)}.portrait-panel img,.portrait-panel canvas{width:100%;height:100%;object-fit:cover}.portrait-label{position:absolute;left:12px;bottom:12px;color:var(--ink-muted);font:400 11px/1.2 var(--font-meta);text-transform:uppercase}.contact-grid{display:grid;grid-template-columns:minmax(0,1fr) minmax(280px,.7fr);gap:44px}.contact-form{display:grid;gap:18px}.field{display:grid;gap:6px}.field label{color:var(--ink-muted);font:400 11px/1.2 var(--font-meta);text-transform:uppercase}.field input,.field select,.field textarea{width:100%;min-height:40px;padding:8px 0;border:0;border-bottom:1px solid var(--rule-strong);border-radius:0;background:transparent;color:var(--ink);outline:none}.field textarea{min-height:120px;resize:vertical}.field input:focus,.field select:focus,.field textarea:focus{border-color:var(--accent)}.submit,.inline-action{display:inline-flex;align-items:center;justify-content:center;min-height:42px;padding:11px 18px;border:1px solid var(--ink);background:var(--ink);color:var(--bg);font-family:var(--font-meta);font-size:12px;text-transform:uppercase;text-decoration:none;cursor:pointer}.submit:hover,.submit:focus-visible,.inline-action:hover,.inline-action:focus-visible{border-color:var(--accent);background:var(--accent);color:#fff;outline:none}.status-note{min-height:1.4em;margin:0;color:var(--ink-muted);font-family:var(--font-meta);font-size:12px}.status-note.is-success{color:var(--accent)}.contact-side{padding-left:34px;border-left:1px solid var(--rule)}.contact-side h2,.tool-head,.construction-badge{margin:0 0 12px;color:var(--ink-muted);font:500 11px/1.2 var(--font-meta);text-transform:uppercase}.contact-side a{display:flex;justify-content:space-between;gap:18px;padding:13px 0;border-bottom:1px solid var(--rule);color:var(--ink);font:600 18px/1.2 var(--font-display);text-decoration:none}.contact-side a:hover,.contact-side a:focus-visible{color:var(--accent);outline:none}.contact-side p{margin:28px 0 0;color:var(--ink-soft)}.tools-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));border-top:1px solid var(--rule)}.tool-card{display:grid;gap:10px;min-height:210px;padding:28px 26px 28px 0;border-bottom:1px solid var(--rule);color:var(--ink);text-decoration:none;transition:color .16s ease,padding .16s ease}.tool-card:nth-child(odd){border-right:1px solid var(--rule)}.tool-card:nth-child(2n){padding-left:26px;padding-right:0}.tool-card:not(.is-disabled):hover,.tool-card:not(.is-disabled):focus-visible{color:var(--accent);outline:none;padding-left:8px}.tool-card:nth-child(2n):not(.is-disabled):hover,.tool-card:nth-child(2n):not(.is-disabled):focus-visible{padding-left:34px}.tool-card.is-disabled{opacity:.48;cursor:not-allowed}.tool-head{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0}.tool-title{margin:0;color:inherit;font:600 27px/1.08 var(--font-display)}.tool-desc{margin:0;color:var(--ink-soft)}.tool-tags{display:flex;flex-wrap:wrap;gap:6px}.tool-tag{border:1px solid var(--rule);padding:3px 7px;color:var(--ink-soft);font:400 10px/1.2 var(--font-meta);text-transform:uppercase}.construction{padding:42px 0 0;text-align:center}.construction-badge{display:inline-flex;margin-bottom:26px;padding:8px 14px;border:1px solid var(--rule-strong)}.construction h2{max-width:12ch;margin:0 auto 14px;color:var(--ink);font:600 clamp(42px,8vw,78px)/1.04 var(--font-display)}.construction p{max-width:54ch;margin:0 auto 28px;color:var(--ink-soft);font-size:16px}.construction-list{max-width:520px;margin:42px auto 0;padding:0;list-style:none;text-align:left}.construction-list li{display:flex;justify-content:space-between;gap:20px;padding:12px 0;border-bottom:1px solid var(--rule);color:var(--ink-soft);font-family:var(--font-meta);font-size:12px}.construction-list strong{color:var(--ink);font-weight:500}.construction-tape{height:28px;margin:44px -20px 0;background:repeating-linear-gradient(135deg,var(--accent) 0 24px,var(--bg) 24px 48px);opacity:.82}.lightbox{position:fixed;inset:0;z-index:1200;display:grid;grid-template-rows:auto 1fr auto;min-height:100dvh;background:#070605f5;color:#fff;opacity:0;visibility:hidden;pointer-events:none;transition:opacity .18s ease,visibility .18s ease}.lightbox.is-open{opacity:1;visibility:visible;pointer-events:auto}.lightbox-topbar,.lightbox-bottombar{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:16px 22px;font-family:var(--font-meta);font-size:12px;text-transform:uppercase}.lightbox-counter{color:#ffffff94}.lightbox-nav{opacity:0;transition:opacity .2s ease}.lightbox:hover .lightbox-nav{opacity:1}.lightbox-close{position:absolute;top:.75rem;right:.75rem;z-index:10;width:auto;height:auto;padding:.3rem;border:none;background:none;border-radius:0;font-size:1.5rem;opacity:.8}.lightbox-close:hover{opacity:1}.lightbox-stage{position:relative;display:grid;min-height:0;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:0 18px}.lightbox-frame{position:relative;height:100%;min-height:0;display:grid;place-items:center;overflow:hidden}#lightboxCanvas{max-width:100%;max-height:100%;object-fit:contain}#lightboxCanvas{-webkit-touch-callout:none;-webkit-user-select:none;user-select:none}.lightbox-loading{position:absolute;left:14px;bottom:14px;padding:7px 10px;background:#00000094;color:#fffc;font-family:var(--font-meta);font-size:11px;opacity:0;transition:opacity .16s ease}.lightbox-loading.is-visible{opacity:1}.lightbox-icon,.lightbox-nav,.lightbox-action{min-height:36px;border:1px solid rgba(255,255,255,.18);background:transparent;color:#fff;font-family:var(--font-meta);font-size:11px;text-transform:uppercase;cursor:pointer}.lightbox-icon,.lightbox-nav{min-width:46px;padding:0 12px;border-radius:999px}.lightbox-action{padding:8px 12px}.lightbox-icon:hover,.lightbox-icon:focus-visible,.lightbox-nav:hover,.lightbox-nav:focus-visible,.lightbox-action:hover,.lightbox-action:focus-visible{background:#ffffff14;outline:none}.lightbox-copy{display:grid;gap:2px;max-width:min(720px,68vw)}.lightbox-title,.lightbox-meta,.lightbox-description{margin:0}.lightbox-title{font:500 15px/1.3 var(--font-display);text-transform:none}.lightbox-meta,.lightbox-description{color:#ffffff9e;font-size:11px;text-transform:none}.lightbox-actions{display:inline-flex;align-items:center;gap:8px}.context-menu{position:fixed;z-index:1500;display:none;min-width:220px;padding:6px;border:1px solid var(--rule-strong);background:var(--bg);color:var(--ink);box-shadow:var(--shadow)}.context-menu.is-open{display:block}.context-menu-btn{display:block;width:100%;padding:8px 10px;border:0;background:transparent;color:var(--ink);font-family:var(--font-meta);font-size:11px;text-align:left;text-transform:uppercase;cursor:pointer}.context-menu-btn:hover,.context-menu-btn:focus-visible{background:var(--bg-alt);outline:none}.context-menu-note{margin:4px 0 0;padding:9px 10px 5px;border-top:1px solid var(--rule);color:var(--ink-muted);font-family:var(--font-meta);font-size:10px;text-transform:uppercase}.toast{position:fixed;left:50%;bottom:22px;z-index:1600;transform:translate(-50%,12px);padding:10px 14px;background:var(--ink);color:var(--bg);font-family:var(--font-meta);font-size:12px;text-transform:uppercase;opacity:0;pointer-events:none;transition:opacity .18s ease,transform .18s ease}.toast.is-visible{opacity:1;transform:translate(-50%)}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(max-width:900px){.topbar-inner{grid-template-columns:minmax(0,1fr) auto}.archive-status,.topnav{display:none}#menuButton{display:inline-flex}.brand-tag,.brand-separator{display:none}.footer{grid-template-columns:repeat(2,minmax(0,1fr))}.page-grid,.contact-grid{grid-template-columns:1fr}.contact-side{padding-left:0;padding-top:30px;border-left:0;border-top:1px solid var(--rule)}.tools-grid{grid-template-columns:1fr}.tool-card,.tool-card:nth-child(odd),.tool-card:nth-child(2n){padding:24px 0;border-right:0}.tool-card:not(.is-disabled):hover,.tool-card:not(.is-disabled):focus-visible,.tool-card:nth-child(2n):not(.is-disabled):hover,.tool-card:nth-child(2n):not(.is-disabled):focus-visible{padding-left:0}}@media(max-width:680px){:root{--header-h: 52px;--filter-h: 44px;--gutter: 3px}body{font-size:14px}.topbar-inner,.filter-strip{padding-left:12px;padding-right:12px}.brand{font-size:11px}.filter-label{display:none}.filter-chip{padding:6px 8px;font-size:11px}.sort-toggle{padding:6px 9px;font-size:11px}.photo-meta,.photo-corner,.photo-index{display:none}.footer{grid-template-columns:1fr;gap:18px;padding:30px 14px}.drawer{padding:24px 22px 32px}.drawer-link{font-size:20px}.page-shell{width:min(100% - 28px,960px);padding:48px 0 60px}.page-title{margin-top:32px;font-size:clamp(36px,12vw,58px)}.page-lead{font-size:16px}.stat-grid{grid-template-columns:1fr;gap:12px}.about-meta{grid-template-columns:1fr;row-gap:4px}.lightbox{grid-template-rows:auto minmax(0,1fr) auto}.lightbox-topbar,.lightbox-bottombar{align-items:flex-start;padding:12px}.lightbox-stage{grid-template-columns:minmax(0,1fr);padding:0 10px}.lightbox-nav{display:none}.lightbox-bottombar{flex-direction:column}.lightbox-copy{max-width:100%}.lightbox-actions{width:100%;display:grid;grid-template-columns:1fr 1fr}}@media(hover:none)and (pointer:coarse){.photo:hover .gallery-img{transform:none}}
