:root{--bg:#0b0f0e;--text-primary:#c9cfd6;--accent-emerald:#00e5a0;--accent-violet:#9945ff;--accent-ember:#ff6b4a;--bg-raised:color-mix(in srgb,var(--text-primary) 7%,var(--bg));--bg-deep:color-mix(in srgb,var(--bg) 88%,black);--text-secondary:color-mix(in srgb,var(--text-primary) 68%,var(--bg));--accent-deep:color-mix(in srgb,var(--accent-emerald) 34%,var(--bg));--rule-dark:color-mix(in srgb,var(--text-primary) 17%,transparent);--glow-emerald:color-mix(in srgb,var(--accent-emerald) 14%,transparent);--glow-ember:color-mix(in srgb,var(--accent-ember) 8%,transparent);--mono:ui-monospace,"SFMono-Regular","Cascadia Code","Roboto Mono",Menlo,Monaco,Consolas,"Liberation Mono",monospace}*{box-sizing:border-box}html{color-scheme:dark;scroll-padding-top:2rem}body{margin:0;background:var(--bg);color:var(--text-primary);font-family:var(--mono);font-size:1rem;line-height:1.6}::selection{background:var(--accent-deep);color:var(--text-primary)}a{color:var(--accent-emerald);text-underline-offset:.25em;text-decoration-thickness:1px}a:hover{text-decoration:none}a:focus-visible,button:focus-visible,summary:focus-visible{outline:2px solid var(--accent-emerald);outline-offset:4px}button,input,textarea{font:inherit}.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}.skip-link{position:fixed;z-index:100;top:1rem;left:1rem;padding:.75rem 1rem;transform:translateY(-200%);background:var(--bg-raised)}.skip-link:focus{transform:none}.portfolio-site{width:min(100% - 4rem,72rem);margin-inline:auto;padding-bottom:4rem}.site-header{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:.25rem 2rem;padding-block:2rem 3rem}.wordmark{color:var(--text-primary);font-weight:600;text-decoration:none}.social-links,.work-links{display:flex;flex-wrap:wrap;align-items:center;gap:0 1.25rem}.social-links a,.wordmark,.work-links a{display:inline-flex;min-height:44px;align-items:center;gap:.4em}.lab-action,.social-links,.work-links,h1{font-size:.875rem}h1{margin:0 0 1rem;color:var(--text-secondary);font-weight:400}.work-list{padding:0;margin:0;list-style:none}.work-list>li{border-top:1px solid var(--rule-dark);scroll-margin-top:1rem}.work-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1.7fr);grid-gap:.5rem 2rem;gap:.5rem 2rem;padding-block:1.5rem}.work-row h2{margin:0;font-size:1rem;font-weight:600;line-height:inherit}.project-feature{grid-template-columns:minmax(0,.8fr) minmax(0,1.7fr);align-items:start;padding-block:2.25rem}.project-feature>.work-detail,.project-feature>h2{grid-column:1}.project-feature>.project-preview{grid-column:2;grid-row:1/span 2}.project-preview{min-width:0;margin:0;transition:opacity .55s ease,transform .65s cubic-bezier(.2,.65,.3,1)}.project-preview[data-waiting]{opacity:.3;transform:translateY(20px)}.project-preview:focus-within{opacity:1;transform:none}.preview-window{position:relative;display:block;aspect-ratio:16/10;overflow:hidden;border:1px solid var(--rule-dark);border-radius:6px;background:var(--bg-raised)}.preview-window img{display:block;width:100%;height:100%;object-fit:cover}.preview-window:focus-visible,.preview-window:hover{border-color:var(--accent-emerald)}.preview-open{position:absolute;right:12px;bottom:12px;padding:6px 10px;border:1px solid var(--rule-dark);border-radius:3px;background:var(--bg);color:var(--accent-emerald);font-size:.8125rem}.project-preview figcaption{margin-top:.6rem;color:var(--text-secondary);font-size:.8125rem}.demo-project .lab-live-panel{margin-bottom:1.5rem;border:1px solid var(--rule-dark);border-radius:6px}.work-detail{display:grid;min-width:0;grid-gap:.25rem;gap:.25rem}.work-detail p{margin:0}.lab-drawer>summary{list-style:none;cursor:pointer}.lab-drawer>summary::-webkit-details-marker{display:none}.lab-action{display:flex;min-height:44px;align-items:center;gap:.65rem;color:var(--accent-emerald)}.lab-action-close,.lab-action-open{text-decoration:underline;text-underline-offset:.25em}.lab-drawer>summary:hover .lab-action-close,.lab-drawer>summary:hover .lab-action-open{text-decoration:none}.lab-action-close,.lab-drawer[open] .lab-action-open{display:none}.lab-drawer[open] .lab-action-close{display:inline}.lab-drawer[open] .lab-toggle{transform:rotate(45deg)}.lab-live-panel{padding:24px;border-top:1px solid var(--rule-dark);background:var(--bg-deep)}.lab-live-panel>div{overflow:hidden;border:1px solid var(--rule-dark)}.lab-live-panel h3{font-family:var(--mono);font-size:1.25rem;font-weight:400;letter-spacing:-.035em}.shape-demo{position:relative;width:100%}.shape-demo-intro{display:flex;padding:clamp(20px,4vw,40px);flex-direction:column;align-items:center;justify-content:center;gap:24px;background:radial-gradient(circle at 50% 30%,var(--glow-emerald),transparent 34%),var(--bg);text-align:center}.shape-demo-copy{width:min(100%,640px)}.shape-demo-copy h3,.shape-demo-copy p{margin:0}.shape-demo-description{margin-top:12px!important;color:var(--text-secondary);font-size:1rem;line-height:1.6}.shape-demo-gestures{margin-top:16px;color:var(--text-secondary);font-size:.875rem;line-height:1.55}.shape-demo-gestures p+p{margin-top:4px}.demo-instructions strong,.shape-demo-gestures strong{color:var(--text-primary)}.shape-demo-error{margin-top:14px!important;color:var(--accent-ember);font-size:.8125rem}.shape-demo-button{min-height:44px;padding:10px 18px;border:1px solid var(--accent-emerald);border-radius:0;background:transparent;color:var(--text-primary);cursor:pointer;font-size:.8125rem;font-weight:700;letter-spacing:.1em;text-transform:uppercase;transition:background .18s ease,color .18s ease,box-shadow .18s ease}.shape-demo-button:hover{box-shadow:0 0 22px var(--glow-emerald)}.shape-demo-button:hover,.shape-demo-start{background:var(--accent-emerald);color:var(--bg)}.shape-demo-start{min-width:210px}.shape-demo-stage{position:relative;display:grid;grid-template-columns:minmax(0,1fr) auto;grid-template-rows:min-content 1fr;align-content:start;grid-gap:8px;gap:8px;padding:16px;width:100%;aspect-ratio:16/9;overflow:hidden;background:var(--bg-deep)}.shape-demo-canvas,.shape-demo-three,.shape-demo-video{position:absolute;inset:0;width:100%;height:100%}.shape-demo-video{object-fit:cover;transform:scaleX(-1)}.shape-demo-canvas{transform:scaleX(-1)}.shape-demo-canvas,.shape-demo-three{pointer-events:none}.shape-demo-recycle{position:absolute;right:20px;bottom:20px;display:grid;width:80px;height:80px;place-items:center;font-size:1.5rem;transition:all .2s ease}.shape-demo-status{position:relative;z-index:10;align-self:start}.shape-demo-status-left{grid-column:1;grid-row:1}.shape-demo-status-center{grid-column:1;grid-row:2}.shape-demo-status-right{grid-column:2;grid-row:1}.shape-demo-badge{display:inline-flex;overflow-wrap:anywhere;min-height:44px;padding:6px 10px;align-items:center;border:1px solid var(--rule-dark);background:color-mix(in srgb,var(--bg) 82%,transparent);color:var(--text-primary);font-size:.8125rem;font-weight:700;letter-spacing:.04em;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.shape-demo-badge-filled{border-color:transparent;background:var(--bg-raised)}.shape-demo-stop{min-height:44px;padding:7px 12px}.shape-demo-loading{position:absolute;z-index:5;inset:0;display:grid;place-items:center;font-size:.8125rem}.shape-demo-help{position:absolute;z-index:10;right:112px;bottom:16px;left:16px}.demo-instructions{padding:8px;font-size:.8125rem;line-height:1.45}.demo-instructions p{margin:0}.demo-instructions p+p{margin-top:4px}.recycle-bin{border:1px solid var(--rule-dark);border-radius:0;background:linear-gradient(145deg,var(--bg-raised),var(--bg));color:var(--text-secondary);box-shadow:inset 0 0 20px color-mix(in srgb,black 34%,transparent)}.recycle-bin.active{border-color:var(--accent-ember);color:var(--accent-ember);box-shadow:0 0 20px var(--glow-ember);transform:scale(1.14)}.demo-instructions,.demo-loading-overlay{background:color-mix(in srgb,var(--bg) 76%,transparent);color:var(--text-primary)}.demo-instructions{border:1px solid var(--rule-dark);border-radius:0;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px)}.brush-demo{position:relative;width:100%}.brush-demo-intro{background:radial-gradient(circle at 50% 30%,var(--glow-ember),transparent 34%),var(--bg)}.brush-demo-video{opacity:.5}.brush-demo-paint{position:absolute;inset:0;pointer-events:none}.brush-demo-paint canvas{display:block;width:100%;height:100%}.brush-toolbar{display:flex;padding:12px 14px;flex-wrap:wrap;align-items:center;gap:10px 22px;border-top:1px solid var(--rule-dark);background:var(--bg-raised)}.brush-chip-group{display:flex;flex-wrap:wrap;gap:6px}.brush-chip-group-edit{margin-left:auto}.brush-chip{display:inline-flex;min-height:44px;padding:6px 10px;align-items:center;gap:7px;border:1px solid var(--rule-dark);border-radius:0;background:transparent;color:var(--text-secondary);cursor:pointer;font-family:var(--mono);font-size:.8125rem;font-weight:700;letter-spacing:.1em;transition:border-color .16s ease,color .16s ease,background .16s ease}.brush-chip:focus-visible,.brush-chip:hover{border-color:var(--text-primary);color:var(--text-primary)}.brush-chip:focus-visible{outline:1px solid var(--accent-emerald);outline-offset:2px}.brush-chip[aria-pressed=true]{border-color:var(--accent-emerald);background:var(--accent-deep);color:var(--text-primary)}.brush-chip:disabled{cursor:default;border-color:transparent}.brush-chip-ink i{width:9px;height:9px;border-radius:50%;background:currentColor}.brush-chip-ink-emerald i{background:var(--accent-emerald)}.brush-chip-ink-sterling i{background:var(--text-primary)}.brush-chip-ink-ember i{background:var(--accent-ember)}.brush-chip-ink-violet i{background:var(--accent-violet)}.brush-code{border-top:1px solid var(--rule-dark);background:var(--bg-deep)}.brush-code-head{display:flex;padding:12px 14px;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:10px;border-bottom:1px solid var(--rule-dark)}.brush-code-title{color:var(--accent-emerald);font-size:.8125rem;font-weight:700;letter-spacing:.14em}.brush-code-actions{display:flex;flex-wrap:wrap;gap:6px}.brush-code pre{max-height:340px;margin:0;padding:16px 18px;overflow:auto;color:var(--text-primary);font-family:var(--mono);font-size:.8125rem;line-height:1.55;-moz-tab-size:2;tab-size:2}.brush-code pre:focus-visible{outline:1px solid var(--accent-emerald);outline-offset:-2px}.brush-code code{font-family:inherit}.brush-code-note{margin:0;padding:12px 14px;border-top:1px solid var(--rule-dark);color:var(--text-secondary);font-size:.8125rem;line-height:1.55}.brush-code-note a{color:var(--text-primary);text-decoration:underline;text-underline-offset:3px}.brush-code-note a:focus-visible,.brush-code-note a:hover{color:var(--accent-emerald)}@media (max-width:40rem){.portfolio-site{width:calc(100% - 2rem);padding-bottom:2rem}.site-header{align-items:flex-start;flex-direction:column;padding-block:1rem 2rem}.work-row{grid-template-columns:minmax(0,1fr);gap:.5rem;padding-block:1.25rem}.lab-live-panel{padding:0 0 1.25rem;border:0}.shape-demo-stage{min-height:440px;aspect-ratio:3/4;padding:8px}.shape-demo-stop{padding-inline:8px}.shape-demo-recycle{right:10px;bottom:10px;width:56px;height:56px}.shape-demo-help{right:76px;bottom:10px;left:10px}.brush-chip-group-edit{margin-left:0}.brush-code pre{max-height:260px;padding:12px}}@media (max-width:47.5rem){.project-feature{grid-template-columns:minmax(0,1fr);gap:.6rem}.project-feature>.project-preview{grid-column:1;grid-row:auto;margin-top:.75rem}}@media (prefers-reduced-motion:reduce){*,:after,:before{animation:none!important;transition:none!important;scroll-behavior:auto!important}}