:root{--bg:#f6f7f5;--surface:#fff;--surface-2:#eef0ea;--ink:#14161a;--ink-dim:#5b5f66;--ink-faint:#9a9d95;--border:#e3e6df;--accent:#ff4d3d;--accent-soft:#ffe9e5;--accent-dim:#ffd9d2;--blob-2:#cfe6ff;--blob-3:#ffe3ae;--good:#1f9d55;--good-soft:#e4f7ea;--warn:#b7791f;--warn-soft:#fbf1dd;--shadow:0 1px 2px #14161a0a, 0 16px 32px #14161a0f;--pad:clamp(20px, 6vw, 96px)}*{box-sizing:border-box}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--ink);-webkit-font-smoothing:antialiased;margin:0;font-family:-apple-system,BlinkMacSystemFont,PingFang TC,Segoe UI,system-ui,sans-serif}.mono{font-family:ui-monospace,SF Mono,Cascadia Code,Menlo,Consolas,monospace}h1,h2,h3{text-wrap:balance;margin:0}a{color:inherit}::selection{background:var(--accent);color:#fff}:focus-visible{outline:2px solid var(--accent);outline-offset:3px}@media (prefers-reduced-motion:reduce){*{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}#site{width:100%;margin:0;padding:0 0 140px;position:relative;overflow-x:clip}.topline{padding:26px var(--pad);color:var(--ink-dim);letter-spacing:.04em;justify-content:space-between;align-items:center;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12px;display:flex}.topline .dot-accent{color:var(--accent)}.hero{padding:0;position:relative;overflow:hidden}.hero-canvas{z-index:0;width:100%;height:100%;display:block;position:absolute;inset:0}.hero-inner{z-index:1;padding:30px var(--pad) 56px;position:relative}.hero .kicker{color:var(--ink-dim);letter-spacing:.08em;text-transform:uppercase;border:1px solid var(--border);background:var(--surface);border-radius:100px;align-items:center;gap:8px;margin-bottom:28px;padding:5px 10px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12px;display:inline-flex}.hero .kicker:before{content:"";background:var(--accent);border-radius:50%;width:6px;height:6px}.hero h1{letter-spacing:-.03em;font-size:clamp(52px,10.5vw,120px);font-weight:800;line-height:.95}.hero h1 .ltr{opacity:0;animation:.7s cubic-bezier(.2,.8,.2,1) forwards letter-in;animation-delay:calc(var(--i,0) * 45ms);transition:transform .25s cubic-bezier(.2,.8,.2,1),color .25s;display:inline-block;transform:translateY(.5em)}.hero h1 .ltr:hover{color:var(--accent);transform:translateY(-.12em)scale(1.05)}@keyframes letter-in{0%{opacity:0;transform:translateY(.5em)}to{opacity:1;transform:translateY(0)}}.hero .role-line{flex-wrap:wrap;align-items:center;gap:14px;margin-top:22px;display:flex}.hero .role-line span.role{color:var(--ink);font-size:19px;font-weight:600}.hero .role-line span.sep{color:var(--ink-faint)}.hero .role-line span.sub{color:var(--ink-dim);font-size:15px}.hero .pitch{max-width:42rem;color:var(--ink-dim);margin-top:26px;font-size:16.5px;line-height:1.85}.hero .pitch strong{color:var(--ink);font-weight:600}.hero-actions{flex-wrap:wrap;gap:12px;margin-top:34px;display:flex}.btn-solid,.btn-line{will-change:transform;border-radius:3px;align-items:center;gap:8px;padding:12px 22px;font-size:14px;font-weight:600;text-decoration:none;transition:transform .25s cubic-bezier(.2,.8,.2,1),box-shadow .18s,border-color .18s,color .18s;display:inline-flex}.btn-solid{background:var(--accent);color:#fff}.btn-solid:hover{transform:translateY(-2px);box-shadow:0 10px 20px #ff4d3d40}.btn-line{border:1px solid var(--border);color:var(--ink);background:var(--surface)}.btn-line:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px)}.marquee-wrap{z-index:1;border-top:1px solid var(--border);border-bottom:1px solid var(--border);margin-top:44px;padding:14px 0;position:relative;overflow:hidden}.marquee-track{gap:40px;width:max-content;animation:26s linear infinite scroll-x;display:flex}.marquee-wrap:hover .marquee-track{animation-play-state:paused}@keyframes scroll-x{0%{transform:translate(0)}to{transform:translate(-50%)}}.marquee-track span{color:var(--ink-faint);white-space:nowrap;align-items:center;gap:40px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:13px;display:flex}.marquee-track span:after{content:"◆";color:var(--accent);margin-left:40px;font-size:8px}.reveal{opacity:0;transition:opacity .7s,transform .7s;transition-delay:calc(var(--d,0) * 70ms);transform:translateY(22px)}.reveal.in{opacity:1;transform:none}.spotlight{z-index:3;pointer-events:none;background:radial-gradient(520px circle at var(--mx,50%) var(--my,50%), #ff4d3d14, transparent 65%);opacity:0;transition:opacity .4s;position:fixed;inset:0}.spotlight.on{opacity:1}section{padding:76px var(--pad);border-top:1px solid var(--border);z-index:1;position:relative}section:first-of-type{border-top:none}.sec-head{align-items:baseline;gap:16px;margin-bottom:36px;display:flex}.sec-num{color:var(--accent);font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12px}.sec-title{letter-spacing:-.01em;font-size:30px;font-weight:800}.exp-row{grid-template-columns:200px minmax(0,1fr);gap:28px;display:grid}.exp-when{color:var(--ink-dim);padding-top:4px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12.5px}.exp-when .badge{background:var(--good-soft);color:var(--good);border-radius:100px;margin-top:8px;padding:3px 8px;font-size:11px;display:inline-block}.exp-title{font-size:20px;font-weight:700}.exp-list{flex-direction:column;gap:12px;margin:18px 0 0;padding:0;list-style:none;display:flex}.exp-list li{color:var(--ink-dim);padding-left:20px;font-size:15px;line-height:1.7;position:relative}.exp-list li:before{content:"→";color:var(--accent);position:absolute;left:0}.bento{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px;display:grid}.proj-card{background:var(--surface);border:1px solid var(--border);transform-style:preserve-3d;will-change:transform;border-radius:8px;padding:28px;transition:transform .2s cubic-bezier(.2,.8,.2,1),box-shadow .25s,border-color .25s;position:relative;overflow:hidden}.proj-card:hover{box-shadow:var(--shadow);border-color:var(--accent-dim)}.proj-card:after{content:"";border-radius:inherit;pointer-events:none;background:radial-gradient(240px circle at var(--gx,50%) var(--gy,50%), #ffffffa6, transparent 60%);opacity:0;mix-blend-mode:soft-light;transition:opacity .3s;position:absolute;inset:0}.proj-card:hover:after{opacity:1}.proj-status{letter-spacing:.05em;text-transform:uppercase;background:var(--warn-soft);color:var(--warn);border-radius:100px;padding:3px 8px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:10.5px;display:inline-block}.proj-status.shipped{background:var(--good-soft);color:var(--good)}.proj-card h3{margin-top:16px;font-size:21px;font-weight:700}.proj-card h3 a{text-decoration:none}.proj-card h3 a:hover{color:var(--accent)}.proj-role{color:var(--ink-faint);margin-top:4px;font-family:ui-monospace,monospace;font-size:12.5px}.proj-desc{color:var(--ink-dim);margin-top:14px;font-size:14.5px;line-height:1.75}.proj-tags{flex-wrap:wrap;gap:7px;margin-top:18px;display:flex}.proj-tags .tag{border:1px solid var(--border);color:var(--ink-dim);background:var(--surface-2);border-radius:3px;padding:4px 9px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:11.5px}.proj-card.sync{border:1px dashed var(--border);background:0 0;flex-direction:column;justify-content:center;align-items:flex-start;display:flex}.proj-card.sync:hover{box-shadow:none;border-color:var(--accent);transform:none}.proj-card.sync .sync-title{color:var(--ink);font-size:16px;font-weight:700}.proj-card.sync p{color:var(--ink-faint);margin-top:8px;font-size:13.5px;line-height:1.7}.proj-card.sync a{color:var(--accent);align-items:center;gap:5px;margin-top:16px;font-size:13px;font-weight:600;text-decoration:none;display:inline-flex}.proj-card.sync a .arrow{transition:transform .2s;display:inline-block}.proj-card.sync a:hover .arrow{transform:translate(4px)}.proj-empty{color:var(--ink-faint);padding:20px 0;font-size:14px}.skill-slab{border:1px solid var(--border);background:var(--surface);border-radius:8px;overflow:hidden}.skill-row{border-top:1px solid var(--border);grid-template-columns:160px minmax(0,1fr);display:grid}.skill-row:first-child{border-top:none}.skill-cat{color:var(--ink-faint);background:var(--surface-2);text-transform:uppercase;letter-spacing:.04em;padding:18px 20px;font-family:ui-monospace,SF Mono,Menlo,Consolas,monospace;font-size:12px}.skill-vals{flex-wrap:wrap;align-items:center;gap:10px;padding:16px 20px;display:flex}.skill-vals .tag{color:var(--ink);font-size:13.5px;transition:color .15s}.skill-vals .tag:hover{color:var(--accent)}.skill-vals .tag:after{content:"·";color:var(--ink-faint);margin-left:10px}.skill-vals .tag:last-child:after{content:""}.two-col{grid-template-columns:1fr 1fr;gap:60px;display:grid}.side-block h4{color:var(--accent);text-transform:uppercase;letter-spacing:.06em;margin-bottom:16px;font-family:ui-monospace,monospace;font-size:11.5px}.side-list{flex-direction:column;gap:12px;margin:0;padding:0;list-style:none;display:flex}.side-list li{color:var(--ink-dim);border-left:2px solid var(--border);padding-left:16px;font-size:14.5px;line-height:1.7}.edu-block .school{font-size:19px;font-weight:700}.edu-block .dept{color:var(--ink-dim);margin-top:4px;font-size:14px}.edu-block .year{color:var(--ink-faint);margin-top:6px;font-family:ui-monospace,monospace;font-size:12px}.edu-block .note{color:var(--accent);margin-top:14px;font-size:13.5px}.award-grid{grid-template-columns:1fr 1fr;gap:10px;margin-top:24px;display:grid}.award-item{border:1px solid var(--border);color:var(--ink-dim);background:var(--surface);border-radius:6px;padding:14px 16px;font-size:13.5px;transition:border-color .2s}.award-item:hover{border-color:var(--accent-dim)}.award-item b{color:var(--ink);margin-bottom:3px;font-size:14px;display:block}.lang-line{color:var(--ink-dim);margin-top:24px;font-size:14px}.lang-line .score{color:var(--accent);font-family:ui-monospace,monospace;font-weight:700}.contact-cta h2{letter-spacing:-.02em;max-width:22ch;font-size:clamp(32px,5.5vw,54px);font-weight:800}.contact-cta h2 .hl{color:var(--accent)}.contact-cta .sub{color:var(--ink-dim);max-width:34rem;margin-top:16px;font-size:15.5px}.contact-links{flex-wrap:wrap;gap:14px;margin-top:36px;display:flex}.contact-links a{color:var(--ink);border:1px solid var(--border);background:var(--surface);will-change:transform;border-radius:4px;align-items:center;gap:10px;padding:13px 20px;font-size:14px;text-decoration:none;transition:transform .25s cubic-bezier(.2,.8,.2,1),border-color .18s,color .18s;display:flex}.contact-links a:hover{border-color:var(--accent);color:var(--accent);transform:translateY(-2px)}footer.foot{border-top:1px solid var(--border);color:var(--ink-faint);flex-wrap:wrap;justify-content:space-between;gap:8px;margin-top:70px;padding-top:24px;font-family:ui-monospace,monospace;font-size:11.5px;display:flex}@media (width<=760px){.bento,.two-col,.award-grid,.exp-row,.skill-row{grid-template-columns:1fr}}#admin{max-width:1000px;margin:0 auto;padding:48px 28px 120px}.admin-top{justify-content:space-between;align-items:center;margin-bottom:30px;display:flex}.admin-top h1{font-size:22px;font-weight:800}.admin-top .who{color:var(--ink-faint);font-family:ui-monospace,monospace;font-size:12.5px}.btn{border:1px solid var(--accent);background:var(--accent);color:#fff;cursor:pointer;border-radius:4px;padding:10px 18px;font-size:13px;font-weight:700;transition:transform .15s}.btn:hover{transform:translateY(-2px)}.btn.ghost{color:var(--accent);background:0 0}.btn:disabled{opacity:.5;cursor:not-allowed;transform:none}.login-box{background:var(--surface);border:1px solid var(--border);max-width:360px;box-shadow:var(--shadow);border-radius:8px;margin:120px auto;padding:32px}.login-box h1{margin-bottom:24px;font-size:20px;font-weight:800}.field{flex-direction:column;gap:6px;margin-bottom:16px;display:flex}.field label{text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);font-family:ui-monospace,monospace;font-size:11px}.field input{border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:4px;padding:11px 13px;font-size:14px}.field input:focus{border-color:var(--accent)}.form-error{color:var(--accent);min-height:1em;margin-bottom:12px;font-size:13px}.import-box{background:var(--surface);border:1px solid var(--border);box-shadow:var(--shadow);border-radius:8px;margin-bottom:30px;padding:22px}.import-box label{text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);font-family:ui-monospace,monospace;font-size:11px}.import-row{gap:10px;margin-top:10px;display:flex}.import-row input{border:1px solid var(--border);background:var(--bg);color:var(--ink);border-radius:4px;flex:1;padding:11px 13px;font-family:ui-monospace,monospace;font-size:14px}.fetched-preview{background:var(--accent-soft);border:1px solid var(--border);color:var(--ink-dim);border-radius:5px;margin-top:16px;padding:14px 16px;font-size:13px}.fetched-preview b{color:var(--ink)}table{border-collapse:collapse;background:var(--surface);border:1px solid var(--border);width:100%;box-shadow:var(--shadow);border-radius:8px;overflow:hidden}thead th{text-align:left;text-transform:uppercase;letter-spacing:.05em;color:var(--ink-faint);border-bottom:1px solid var(--border);background:var(--surface-2);padding:13px 16px;font-family:ui-monospace,monospace;font-size:10.5px}tbody td{border-bottom:1px solid var(--border);vertical-align:middle;padding:15px 16px;font-size:13.5px}tbody tr:last-child td{border-bottom:none}.proj-name{font-weight:700}.proj-repo{color:var(--ink-faint);margin-top:2px;font-family:ui-monospace,monospace;font-size:11.5px}.pill{border-radius:100px;padding:3px 9px;font-family:ui-monospace,monospace;font-size:10.5px;display:inline-block}.pill.published{background:var(--good-soft);color:var(--good)}.pill.draft{background:var(--warn-soft);color:var(--warn)}.row-actions{gap:8px;display:flex}.row-actions button{border:1px solid var(--border);color:var(--ink-dim);cursor:pointer;background:0 0;border-radius:4px;padding:5px 10px;font-size:11.5px}.row-actions button:hover{border-color:var(--accent);color:var(--accent)}
