.lab-hero-note{display:flex;align-items:center;gap:8px;width:max-content;margin:25px auto 0;font-size:10px;color:var(--muted)}.lab-tabs{display:flex;border-bottom:1px solid var(--line);gap:12px;margin:0 0 25px}.lab-tabs>button{position:relative;flex:1;text-align:left;padding:17px 18px;color:var(--muted);transition:color .3s,background .3s}.lab-tabs>button:hover{background:var(--soft)}.lab-tabs>button>span{display:block;font:23px Georgia}.lab-tabs>button>small{display:block;font-size:10px;margin-top:5px}.lab-tabs>button:after{position:absolute;bottom:-1px;left:0;right:0;content:'';height:2px;background:var(--ink);transform:scaleX(0);transition:transform .4s var(--ease)}.lab-tabs>button[aria-selected=true]{color:var(--ink)}.lab-tabs>button[aria-selected=true]:after{transform:scaleX(1)}.lab-panel{display:grid;grid-template-columns:1.8fr 1fr;border:1px solid var(--line);border-radius:12px;overflow:hidden;min-height:400px}.lab-panel[hidden]{display:none}.gradient-canvas{background:linear-gradient(135deg,#f4e8ac,#e9b2bd,#8c87d8);min-height:420px;padding:38px;position:relative;color:#fff}.gradient-canvas>small{font:9px var(--mono);letter-spacing:2px}.gradient-canvas>strong{font:92px/1.1 Georgia;letter-spacing:-4px;display:block;margin:44px 0}.gradient-canvas>strong>i{font-weight:normal}.gradient-value{font:9px var(--mono);letter-spacing:1px;position:absolute;bottom:30px;left:38px}.lab-controls{padding:30px;background:var(--surface);display:flex;flex-direction:column;justify-content:center;gap:30px}.color-controls{display:flex;justify-content:space-between;gap:10px}.color-controls label{font-size:10px;color:var(--secondary);flex:1}.color-controls input{display:block;border:0;border-radius:50%;width:40px;height:40px;padding:0;background:none;cursor:pointer;margin-top:12px}.color-controls input::-webkit-color-swatch-wrapper{padding:0}.color-controls input::-webkit-color-swatch{border-radius:50%;border:3px solid var(--surface);outline:1px solid var(--line)}.range-label{display:block;font-size:11px;color:var(--secondary)}.range-label>output{float:right;font:10px var(--mono);color:var(--muted)}input[type=range]{display:block;width:100%;margin:15px 0 0;accent-color:#969f80;height:3px}.lab-buttons{display:flex;flex-direction:column;gap:10px;margin-top:7px}.lab-buttons button{width:100%;font-size:11px}.lab-caption{display:flex;justify-content:space-between;font-size:8px;margin:18px 0;color:var(--muted)}.lab-caption>button{font:10px var(--sans);color:var(--secondary)}.motion-canvas{background:#282c28;position:relative;min-height:420px;display:flex;align-items:center;justify-content:center;padding:30px;color:#d8e2ce}.motion-graph{width:100%}.motion-graph svg{width:100%;height:auto}.motion-track{position:absolute;bottom:62px;left:11%;right:11%;height:1px;background:#74846866}.motion-ball{position:absolute;left:0;top:-13px;width:26px;height:26px;background:#c5d8aa;border-radius:50%;box-shadow:0 0 25px #c5d8aa2a}.motion-canvas>small{position:absolute;bottom:25px;left:35px;font:9px var(--mono);letter-spacing:2px;color:#a1b194}.select-label{font-size:11px;color:var(--secondary)}.select-label select{width:100%;font-size:11px;background:var(--soft);border:1px solid var(--line);border-radius:6px;padding:12px 8px;margin-top:14px}.todo-panel{grid-template-columns:1.7fr 1fr;background:var(--green)}.todo-app{background:var(--surface);padding:35px 36px;margin:25px;border-radius:10px;box-shadow:0 10px 25px #6c82510c;min-height:430px}.todo-date{font:8px var(--mono);letter-spacing:2px;color:var(--muted)}.todo-app h2{font:34px Georgia;letter-spacing:-1px;margin:14px 0 8px}.todo-app>p{font-size:11px;color:var(--muted)}#todoForm{display:flex;align-items:center;background:var(--soft);padding:9px 12px;border-radius:6px;margin:23px 0 18px}#todoInput{border:0;outline:0;background:none;font-size:12px;width:100%}#todoForm>button{font-size:22px;color:#93a17d;padding:0 5px}.todo-filters{display:flex;gap:15px;font-size:10px;color:var(--muted);margin:15px 0}.todo-filters>button.selected{color:var(--ink);text-decoration:underline;text-underline-offset:4px}#todoList{list-style:none;padding:0;margin:0}#todoList>li{display:flex;align-items:center;gap:12px;border-bottom:1px solid var(--line);padding:14px 0;font-size:12px}#todoList input{width:15px;height:15px;accent-color:#95a37f;cursor:pointer}#todoList>li>span{flex:1;overflow-wrap:anywhere}#todoList>li.done>span{text-decoration:line-through;color:var(--muted)}#todoList>li>button{font-size:18px;color:var(--muted);padding:0 4px;opacity:0;transition:.2s}#todoList>li:hover>button,#todoList>li>button:focus-visible{opacity:1}.todo-empty{font-size:11px;color:var(--muted);padding:35px 0;text-align:center}.todo-footer{display:flex;justify-content:space-between;font-size:9px;color:var(--muted);margin-top:22px}.todo-description{padding:50px 35px 30px 5px;color:var(--secondary);align-self:center}.todo-description>span{font:9px var(--mono);letter-spacing:2px}.todo-description h3{font:500 27px/1.7 var(--serif);margin:20px 0}.todo-description p{font-size:11px;line-height:2;margin-top:15px}.type-canvas{padding:35px;background:var(--lilac);position:relative;min-height:420px;color:#4b4258}.type-canvas>small{font:9px var(--mono);letter-spacing:2px;color:#7e6f94}.type-canvas>div{font:600 64px/1.5 var(--serif);white-space:pre-wrap;overflow-wrap:anywhere;margin:45px 0 70px}.type-canvas>span{position:absolute;bottom:25px;font:8px var(--mono);letter-spacing:1px;color:#7e6f94}.type-input-label{font-size:11px;color:var(--secondary)}.type-input-label textarea{display:block;width:100%;background:var(--soft);border:1px solid var(--line);border-radius:6px;padding:10px;font-size:12px;resize:vertical;min-height:80px;margin-top:10px}
.back-top{position:fixed;bottom:30px;right:30px;width:44px;height:44px;display:grid;place-items:center;background:var(--paper);border:1px solid var(--line);border-radius:50%;font-size:17px;z-index:35;opacity:0;visibility:hidden;transform:translateY(10px);transition:.3s}.back-top.visible{opacity:1;visibility:visible;transform:none}.back-top>svg{position:absolute;inset:0;width:100%;height:100%;transform:rotate(-90deg);fill:none;stroke:#aaa979;stroke-width:1;stroke-dasharray:132;stroke-dashoffset:calc(132 - 132 * var(--progress,0))}.reading-progress{position:fixed;left:0;top:0;z-index:100;width:100%;height:2px;background:#c6b76b;transform:scaleX(var(--progress,0));transform-origin:left;pointer-events:none}#trail-layer{position:fixed;inset:0;pointer-events:none;z-index:45;overflow:hidden}.trail-token{position:absolute;top:0;left:0;width:67px;height:67px;display:grid;place-items:center;border-radius:17px;background:linear-gradient(135deg,#e8e0f5,#b4a4d0);color:#fff;font:600 21px var(--mono);box-shadow:inset 3px 3px 8px #ffffff99,inset -4px -6px 10px #76618755,0 12px 22px #7661871a;will-change:transform,opacity}.trail-token:nth-child(3n){background:linear-gradient(135deg,#e8edc8,#a9b97f)}.trail-token:nth-child(3n+1){background:linear-gradient(135deg,#d7eafa,#8faec8)}.trail-token.shape{border-radius:50%;background:linear-gradient(140deg,#f5e7b8,#cfab6f);font-size:36px;font-family:Georgia}.search-dialog{border:1px solid var(--line);border-radius:14px;max-width:calc(100% - 30px);width:620px;background:var(--paper);color:var(--ink);padding:0;box-shadow:0 25px 100px #0002;top:12%;margin-top:0}.search-dialog::backdrop{background:#161b1980;backdrop-filter:blur(8px)}.search-dialog[open]{animation:search-in .35s var(--ease)}.search-form{display:flex;align-items:center;gap:15px;padding:22px;border-bottom:1px solid var(--line)}.search-form>svg{width:20px;height:20px;color:var(--muted)}.search-form input{background:none;outline:none;border:0;width:100%;font-size:14px}.search-form>button{font:9px var(--mono);border:1px solid var(--line);border-radius:4px;padding:4px 7px;color:var(--muted)}.search-results{max-height:55vh;overflow:auto;padding:9px}.search-results>a{display:block;padding:15px;border-radius:8px;transition:background .2s}.search-results>a:hover,.search-results>a:focus{background:var(--soft)}.search-results small{font-size:9px;color:var(--muted);display:block;margin-bottom:5px}.search-results strong{font-size:13px;font-weight:500;display:block}.search-results p{font-size:10px;color:var(--muted);margin-top:5px}.search-empty{text-align:center;font-size:12px;color:var(--muted);padding:30px 10px}.search-hint{border-top:1px solid var(--line);padding:13px 22px;display:flex;justify-content:space-between;font-size:9px;color:var(--muted)}.toast{position:fixed;left:50%;bottom:28px;transform:translate(-50%,12px);opacity:0;pointer-events:none;background:var(--ink);color:var(--paper);padding:11px 22px;border-radius:30px;font-size:11px;box-shadow:0 6px 30px #0002;z-index:120;transition:.3s var(--ease);max-width:90%;text-align:center}.toast.visible{opacity:1;transform:translate(-50%,0)}.route-line{position:fixed;top:0;left:0;height:2px;width:100%;background:var(--yellow);transform:scaleX(0);transform-origin:left;z-index:150}.is-leaving .route-line{animation:route-load .45s var(--ease) both}.reveal{opacity:1}.js-motion .reveal{opacity:0;transform:translateY(22px);transition:opacity .85s var(--ease) var(--delay,0ms),transform .85s var(--ease) var(--delay,0ms)}.js-motion .reveal.in-view{opacity:1;transform:none}.js-motion .page-hero h1.in-view{transform:translate3d(var(--hx,0),var(--hy,0),0)}@view-transition{navigation:auto}::view-transition-old(root){animation:page-out .18s ease both}::view-transition-new(root){animation:page-in .5s var(--ease) both}body:has(.project-dock) .site-footer{padding-bottom:110px}@keyframes slow-spin{to{transform:rotate(360deg)}}@keyframes float{50%{transform:rotate(-5deg) translateY(-10px)}}@keyframes rise{from{opacity:0;translate:0 20px}to{opacity:1;translate:0 0}}@keyframes search-in{from{opacity:0;translate:0 15px;scale:.98}to{opacity:1;translate:0 0;scale:1}}@keyframes page-out{to{opacity:0;translate:0 -8px}}@keyframes page-in{from{opacity:0;translate:0 16px}to{opacity:1;translate:0 0}}@keyframes route-load{from{transform:scaleX(0)}to{transform:scaleX(.85)}}
::view-transition-group(*){animation-duration:.6s;animation-timing-function:var(--ease)}.previous-article{display:block;font-size:11px;color:var(--muted);margin:25px 0 0;line-height:1.8}.previous-article:hover{color:var(--ink)}.content-card[hidden],.post-row[hidden]{display:none!important}
