@font-face{font-family:VT323;src:url('/assets/fonts/VT323-400.ttf') format('truetype');font-display:swap;font-weight:400}@font-face{font-family:Poppins;src:url('/assets/fonts/Poppins-400.ttf') format('truetype');font-display:swap;font-weight:400}@font-face{font-family:Poppins;src:url('/assets/fonts/Poppins-500.ttf') format('truetype');font-display:swap;font-weight:500}@font-face{font-family:Poppins;src:url('/assets/fonts/Poppins-600.ttf') format('truetype');font-display:swap;font-weight:600}@font-face{font-family:Poppins;src:url('/assets/fonts/Poppins-700.ttf') format('truetype');font-display:swap;font-weight:700}@font-face{font-family:Poppins;src:url('/assets/fonts/Poppins-800.ttf') format('truetype');font-display:swap;font-weight:800}
:root{--ink:#1a1a1a;--paper:#fff;--warm:#f5f2ea;--cream:#f3efe6;--shadow:#bcb8ae;--blue:#0099e5;--muted:#777;--line:#ededed;--font-scale:1;--text-muted:#666;--text-faint:#76736d;--hatch:repeating-linear-gradient(135deg,transparent 0,transparent 2px,rgba(90,80,60,.06) 2px,rgba(90,80,60,.06) 3px,transparent 3px,transparent 4px);color-scheme:light;font-size:calc(15px * var(--font-scale))}
*{box-sizing:border-box}body{margin:0;font-family:Poppins,"PingFang SC","Microsoft YaHei","Noto Sans CJK SC",sans-serif;color:var(--ink);background:var(--paper);line-height:1.65}body,html{height:100%;overflow:hidden}button,input{font:inherit}button,a,input,summary{-webkit-tap-highlight-color:transparent}button{cursor:pointer;color:inherit}a{color:inherit;text-decoration:none}button:disabled{cursor:not-allowed}a:hover{color:var(--blue)}button:focus-visible,a:focus-visible,summary:focus-visible,input:focus-visible{outline:3px solid var(--blue);outline-offset:4px}h1,h2,h3,h4,h5,p{margin-top:0}h1,h2,h3,h4,h5{line-height:1.35}ul{padding-left:1.25em}button .icon,a .icon{flex-shrink:0}.icon{width:22px;height:22px;display:inline-block;vertical-align:middle}.mono{font-family:VT323,"Courier New",monospace}.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}[hidden]{display:none!important}.skip-link{position:fixed;z-index:200;left:180px;top:-100px;padding:8px 16px;background:var(--paper);border:2px solid var(--blue)}.skip-link:focus{top:8px}.retro-button{display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:44px;padding:7px 20px;border:2px solid #1a1a1a;border-radius:8px;background:var(--hatch),linear-gradient(#f3efe6,#ded9cd);box-shadow:0 5px 0 #bcb8ae,0 6px 0 1px #1a1a1a;color:#1a1a1a;font-size:calc(16px * var(--font-scale));text-align:center;line-height:1.3;transition:background .15s,transform .15s,box-shadow .15s}.retro-button:hover{background:linear-gradient(#0099e5,#0077b3);color:white}.retro-button:active{transform:translateY(5px);box-shadow:none}.retro-button.accent{background:linear-gradient(#14b3ed,#0083c4);color:white}.retro-button.accent:hover{background:#0077b3}.small-button{font-size:calc(14px * var(--font-scale));min-height:39px;padding:7px 16px}.tiny-button{min-height:25px;font-size:calc(11px * var(--font-scale));border-radius:4px;padding:3px 10px;box-shadow:0 2px 0 #bcb8ae,0 3px 0 1px #1a1a1a}.tiny-button .icon{width:15px;height:15px}.icon-button{padding:0;width:50px;height:50px}.icon-button .icon{width:28px;height:28px}.retro-box{border:2px solid #1a1a1a;border-radius:12px;background:var(--hatch),var(--warm);box-shadow:3px 5px 0 #bcb8ae,3px 6px 0 2px #1a1a1a}.sidebar{width:160px;position:fixed;inset:0 auto 0 0;z-index:30;background:var(--paper);box-shadow:14px 0 0 #f5f5f5;display:flex;align-items:center;flex-direction:column;overflow:auto;scrollbar-width:thin}.identity{display:block;text-align:center;margin-top:17px;width:100%;color:var(--ink)}.portrait-placeholder{width:73px;height:69px;margin:0 auto 3px;border:2px solid var(--ink);border-radius:3px;background:var(--warm);position:relative;box-shadow:3px 3px 0 #bcb8ae;padding:6px}.portrait-placeholder:after{content:"";position:absolute;bottom:3px;left:8px;right:8px;height:3px;background:repeating-linear-gradient(90deg,#918e81 0 2px,transparent 2px 4px)}.portrait-placeholder>span{display:flex;align-items:center;justify-content:center;height:43px;font-family:VT323,monospace;font-size:calc(36px * var(--font-scale));background:#26352e;color:#c7dfb8;border:2px inset #9f9f8f;line-height:1}.portrait-placeholder .terminal-cursor{font-size:calc(24px * var(--font-scale))}.identity-name{display:block;font-weight:600;font-size:calc(20px * var(--font-scale));line-height:1.06;margin:6px 0}.identity-name small{display:block;font-size:calc(18px * var(--font-scale));font-weight:500;line-height:1.2}.preferences{display:flex;gap:4px;justify-content:center;margin-bottom:15px}.language{cursor:default}.language:hover{background:var(--hatch),linear-gradient(#f3efe6,#ded9cd);color:#1a1a1a}.sidebar nav{width:100%}.sidebar nav ul{margin:0;padding:0;list-style:none}.sidebar nav a{display:block;font-size:calc(13px * var(--font-scale));text-align:center;padding:9px 0;border-top:1px solid #f7f7f7;min-height:39px;position:relative;color:#404040}.sidebar nav li:last-child a{border-bottom:1px solid #f7f7f7}.sidebar nav a.active{background:linear-gradient(90deg,#fafafa,#f6fbfe);border-right:2px solid var(--blue);color:#171717}.sidebar nav a:hover{background:#f0f9fe;color:var(--blue)}.sidebar-social{display:flex;gap:8px;margin:10px 0 20px}.sidebar-social a{background:#f0f0f0;color:var(--text-muted);width:28px;height:28px;display:grid;place-items:center}.sidebar-social .icon{width:17px;height:17px}.sidebar-social a:hover{background:#0099e5;color:white}.sidebar-signature{border:2px solid #5b5b5b;text-align:center;width:77px;color:#555;line-height:1.2;font-family:VT323,monospace;padding:4px 3px;font-size:calc(12px * var(--font-scale))}.signature-top{font-size:calc(9px * var(--font-scale));display:block;margin-bottom:5px}.mini-computer{border:2px solid #555;padding:3px;width:44px;height:45px;position:relative;margin:5px auto 8px;text-align:left}.mini-computer i{position:absolute;bottom:4px;right:4px;width:16px;height:2px;background:#555}.mini-computer b{display:block;background:#eee;border:1px solid #666;font-size:calc(18px * var(--font-scale));line-height:22px;padding-left:2px}.sidebar-footer{margin-top:auto;text-align:center;display:flex;align-items:center;flex-direction:column;gap:3px;color:var(--text-faint);font-size:calc(9px * var(--font-scale));padding:17px 0 14px;line-height:1.45;min-height:90px}.tiny-label{border:1px solid #1a1a1a;border-radius:4px;background:#fbd359;color:#1a1a1a;padding:2px 8px;margin-bottom:7px;font-size:calc(10px * var(--font-scale));box-shadow:1px 2px 0 #a7a196}.panel-arrows{position:fixed;right:15px;top:10px;display:flex;gap:4px;z-index:20}.mobile-header{display:none}main{margin-left:160px;height:100%;position:relative}.panel{height:100%;overflow:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#bcb8ae transparent}.content-panel,.article-panel{padding:22px 35px 60px 45px;background:var(--paper)}.panel-heading{border-bottom:2px solid var(--line);position:relative;margin-bottom:72px;min-height:50px;padding-right:110px}.panel-heading h2{font-size:calc(30px * var(--font-scale));font-weight:700;letter-spacing:-1px;margin:0;padding:0 0 8px}.panel-heading p{position:absolute;top:58px;right:0;font-size:calc(14px * var(--font-scale));color:var(--text-faint);margin:0}.home-panel{background:#514c43 url('/assets/vintage-computer.webp') center center/cover no-repeat;position:relative}.home-panel:before{content:"";position:absolute;inset:0;background:linear-gradient(90deg,rgba(47,46,43,.45),rgba(60,55,48,.21))}.hero-content{position:relative;top:32.5%;padding-left:25px;max-width:800px;color:white}.hero-content h1{display:table;border-bottom:4px dotted rgba(255,255,255,.6);font-family:VT323,"Courier New","Noto Sans CJK SC",monospace;font-size:calc(40px * var(--font-scale));font-weight:400;margin:0 0 4px;line-height:1.25;padding-bottom:3px;text-shadow:0 1px 8px rgba(0,0,0,.3)}.hero-content h1 span{letter-spacing:1px}.hero-role{font-family:VT323,"Courier New","Noto Sans CJK SC",monospace;font-size:calc(24px * var(--font-scale));height:39px;display:flex;align-items:center}.typing-caret{height:24px;border-left:2px solid white;margin-left:5px;animation:blink 1s step-end infinite}@keyframes blink{50%{opacity:0}}.hero-actions{display:flex;flex-direction:column;width:300px;gap:16px;margin-top:2px}.hero-actions .retro-button{min-height:44px}.hero-caption{position:absolute;bottom:25px;right:30px;font-family:VT323,monospace;font-size:calc(15px * var(--font-scale));letter-spacing:2px;color:#e4ded3;display:flex;gap:10px;align-items:center}.status-dot{width:9px;height:9px;border-radius:50%;background:#17ba6b;display:inline-block;box-shadow:0 0 8px #17ba6b;flex-shrink:0}.eyebrow{color:#7e7b73;font-size:calc(15px * var(--font-scale));letter-spacing:2px;display:block;margin-bottom:10px}.about-intro{display:block}.about-visual{display:none}.about-copy h3{font-size:calc(20px * var(--font-scale));font-weight:600;line-height:1.6;border-left:3px solid var(--blue);padding-left:14px;margin-bottom:20px}.about-copy h3 br{display:none}.about-copy p{font-size:calc(15px * var(--font-scale));line-height:1.75;margin-bottom:14px}.about-copy .small-button{margin:6px 0 30px}.stats-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:16px;margin:15px 0 42px}.stat{border:2px solid #1a1a1a;border-radius:12px;background:var(--hatch),var(--warm);box-shadow:2px 4px 0 #bcb8ae,2px 5px 0 1px #1a1a1a;display:flex;flex-direction:column;align-items:center;padding:24px 10px 20px}.stat strong{font-family:Georgia,serif;font-weight:700;font-size:calc(35px * var(--font-scale));color:var(--blue);line-height:1.2}.stat span{font-size:calc(12px * var(--font-scale));color:var(--text-muted);margin-top:6px}.section-title{font-size:calc(21px * var(--font-scale));color:var(--text-muted);margin:25px 0 25px;line-height:1.4;font-weight:600}.section-title>span{border-bottom:2px solid var(--blue);padding-bottom:3px}.focus-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:24px}.focus-grid article{border-top:1px solid #dedede;padding:15px 0}.focus-number{font-family:VT323,monospace;color:var(--blue);font-size:calc(26px * var(--font-scale))}.focus-grid h4{font-size:calc(17px * var(--font-scale));margin:6px 0 10px}.focus-grid p{font-size:calc(13px * var(--font-scale));color:var(--text-muted)}.focus-grid .focus-capability{grid-column:1/-1;min-width:0}.focus-capability .capability-subtitle{font-size:calc(12px * var(--font-scale));letter-spacing:.04em;margin-top:-4px;margin-bottom:12px}.focus-capability .tags{margin-top:16px}.panel-lead{color:var(--text-muted);margin:-6px 0 30px;max-width:850px}.resume-intro{display:flex;align-items:flex-start;gap:24px;margin-bottom:35px}.resume-intro p{flex:1;margin:0;font-size:calc(14px * var(--font-scale));color:var(--text-muted)}.resume-intro button{flex-shrink:0}.resume-columns{display:grid;grid-template-columns:minmax(0,1fr) 180px;gap:40px}.resume-columns .section-title{margin-top:0}.timeline{padding:0}.timeline-item{position:relative;padding:0 0 30px 230px;min-height:150px}.timeline-item:before{content:"";position:absolute;left:210px;top:8px;bottom:-8px;width:1px;background:#e7e7e7}.timeline-item:last-child:before{bottom:30px}.timeline-dot{position:absolute;left:205px;top:4px;width:11px;height:11px;border-radius:50%;border:2px solid var(--blue);background:var(--paper)}.timeline-item .period{font-size:calc(14px * var(--font-scale));position:absolute;left:0;top:0;width:184px;text-align:right;color:var(--text-muted)}.timeline-item h4{position:absolute;top:25px;left:0;width:184px;text-align:right;font-size:calc(12px * var(--font-scale));font-weight:400;color:var(--text-faint);line-height:1.55}.timeline-item h5{font-size:calc(16px * var(--font-scale));color:var(--text-muted);margin:0 0 8px;font-weight:600}.timeline-item p,.timeline-item li{font-size:calc(13px * var(--font-scale));color:var(--text-muted);line-height:1.85}.timeline-item p{margin-bottom:8px}.timeline-item ul{padding-left:16px;margin:0}.skill-group{margin-bottom:26px}.skill-group h4{font-size:calc(16px * var(--font-scale));color:var(--text-muted);margin:0 0 10px}.tags{display:flex;flex-wrap:wrap;gap:6px}.tags span{font-size:calc(11px * var(--font-scale));border:1px solid #d3d0c8;background:#faf9f6;padding:3px 8px;border-radius:3px;color:#646159}.skill-group .tags{gap:5px}.skill-group .tags span{font-size:calc(11px * var(--font-scale))}.education-card{padding:15px 13px;border-radius:7px}.education-card h4{margin:0 0 8px;font-size:calc(16px * var(--font-scale))}.education-card p{font-size:calc(12px * var(--font-scale));margin-bottom:10px}.education-card span{font-size:calc(12px * var(--font-scale));color:var(--text-muted)}.resume-note{color:var(--text-faint);font-size:calc(10px * var(--font-scale));margin:22px 0}.newsletter{position:relative;display:flex;justify-content:space-between;align-items:center;padding:30px;gap:20px;margin:0 0 39px;min-height:175px;overflow:visible}.newsletter:before{content:"";position:absolute;top:-6px;left:0;right:0;height:6px;border-radius:8px 8px 0 0;background:repeating-linear-gradient(90deg,#0099e5 0 14px,#0081bd 14px 27px)}.newsletter-copy{display:flex;align-items:center;gap:17px}.newsletter-copy>.icon{width:36px;height:36px;color:#0099e5;stroke-width:1.2}.newsletter .eyebrow{margin-bottom:2px;font-size:calc(14px * var(--font-scale))}.newsletter h3{font-size:calc(21px * var(--font-scale));margin:0 0 5px;font-weight:600}.newsletter p{font-size:calc(12px * var(--font-scale));color:var(--text-muted);margin:6px 0 0}.newsletter-action{min-width:240px;text-align:right}.newsletter-action .retro-button{min-width:160px}.newsletter-action p{margin-top:14px;font-size:calc(11px * var(--font-scale))}.sticker{position:absolute;right:17px;top:-20px;padding:7px 11px;font-family:VT323,monospace;font-weight:600;background:linear-gradient(#ffe779,#f2c137);border:2px solid #1a1a1a;border-radius:5px;box-shadow:2px 3px 0 #aaa08c,3px 4px 0 1px #1a1a1a;transform:rotate(3deg);font-size:calc(16px * var(--font-scale));color:#1a1a1a}.blog-terminal{margin:0 17px 35px;overflow:hidden}.terminal-title{background:repeating-linear-gradient(90deg,#111 0,#111 2px,#202020 2px,#202020 3px);color:white;min-height:42px;padding:8px 12px;font-family:VT323,"Courier New",monospace;display:flex;justify-content:space-between;align-items:center;font-size:calc(15px * var(--font-scale));border-bottom:2px solid #111;gap:10px}.terminal-title>span{display:flex;align-items:center;gap:10px}.terminal-title>span:last-child{color:#afd2ba;font-size:calc(13px * var(--font-scale))}.terminal-title b{color:white}.terminal-body{padding:13px}.search-field{display:flex;align-items:center;gap:10px;background:#111;border:3px double #d4d0c7;border-radius:5px;padding:8px 11px;box-shadow:0 0 0 1px #111;color:#0099e5;min-height:51px}.search-field input{font-family:VT323,"Courier New",monospace;background:transparent;border:0;color:#ddd;outline:none;flex:1;min-width:0;font-size:calc(16px * var(--font-scale))}.search-field input::placeholder{color:#708879}.search-field input:focus{outline:none}.search-field:focus-within{outline:3px solid var(--blue);outline-offset:2px}.search-field>span{font-family:monospace;font-weight:bold}.search-field kbd{color:#66786d;font-size:calc(10px * var(--font-scale));background:#222;padding:0 5px;border:1px solid #333}.category-spectrum{height:12px;border:1px solid #111;margin:28px 0 15px;border-radius:3px;box-shadow:1px 2px 0 #bbb;background:linear-gradient(90deg,#e02572 0 25%,#e0911d 25% 45%,#0099e5 45% 70%,#218c73 70% 100%);position:relative}.category-filters{display:flex;gap:9px;flex-wrap:wrap;align-items:center}.filter{min-height:36px;border-radius:6px;font-size:calc(13px * var(--font-scale));padding:5px 10px;box-shadow:1px 3px 0 #bcb8ae,1px 4px 0 1px #1a1a1a;font-weight:600}.filter.active{background:#202020;color:#fff}.filter span{font-family:VT323,monospace;font-weight:400;color:#6c6b63;font-size:calc(15px * var(--font-scale))}.filter.active span{color:#a7e0bb}.empty-categories{font-size:calc(12px * var(--font-scale));color:var(--text-muted);margin-left:10px;letter-spacing:1px}.category-square{width:13px;height:13px;background:var(--category,#0099e5);border:1px solid #111;border-radius:3px;display:inline-block}.empty-state{text-align:center;max-width:500px;margin:50px auto 0;padding:0 20px 30px}.empty-icon{width:57px;height:45px;border:2px solid #93958b;border-radius:4px;margin:0 auto 14px;color:#93958b;display:grid;place-items:center;box-shadow:3px 3px 0 #e8e7e1}.empty-icon .icon{width:26px;height:26px}.empty-command{font-size:calc(15px * var(--font-scale));color:#93958b}.empty-state h3{font-size:calc(20px * var(--font-scale));margin:14px 0 10px}.empty-state p{font-size:calc(13px * var(--font-scale));color:var(--text-faint);white-space:pre-line;line-height:1.85;margin-bottom:23px}.blog-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:25px 20px}.project-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:30px 25px}.color-0{--category:#dc226d}.color-1{--category:#148fca}.color-2{--category:#d89426}.color-3{--category:#218b73}.project-card,.post-card{overflow:hidden;background:var(--paper)}.card-ribbon{background:var(--category);color:white;display:flex;justify-content:space-between;align-items:center;padding:5px 15px;border-bottom:2px solid #1a1a1a;font-family:VT323,"Courier New",monospace;font-size:calc(13px * var(--font-scale));font-weight:600;min-height:32px}.project-art{height:152px;background:var(--hatch),color-mix(in srgb,var(--category) 10%,#f5f2ea);display:flex;align-items:center;justify-content:center;flex-direction:column;gap:3px;border-bottom:1px solid #ddd;position:relative;color:var(--category);overflow:hidden}.flow-node{background:#faf8f4;border:2px solid #1a1a1a;padding:7px 20px;border-radius:5px;font-size:calc(12px * var(--font-scale));box-shadow:3px 3px 0 #bcb8ae;color:#1a1a1a}.dark-node{background:#222;color:#faf8f4}.project-body{padding:22px 22px 19px}.project-period{color:var(--text-muted);font-size:calc(13px * var(--font-scale));letter-spacing:.5px}.project-body h3{font-size:calc(20px * var(--font-scale));line-height:1.5;margin:7px 0 2px}.project-subtitle{color:var(--category)!important;font-size:calc(11px * var(--font-scale))!important;margin:0 0 12px!important}.project-body p{font-size:calc(13px * var(--font-scale));color:var(--text-muted);line-height:1.8;margin-bottom:17px}.project-body .tags{margin-bottom:17px}.project-body details{border-top:1px dashed #ccc;padding-top:12px}.project-body summary{font-size:calc(13px * var(--font-scale));cursor:pointer;list-style:none;display:flex;justify-content:space-between;align-items:center;font-weight:600}.project-body summary::-webkit-details-marker{display:none}.project-body summary .icon{width:17px;height:17px;transition:transform .2s}.project-body details[open] summary .icon{transform:rotate(90deg)}.project-body details ul{font-size:calc(12px * var(--font-scale));line-height:1.9;color:var(--text-muted);padding-left:17px;margin-bottom:0}.mini-bars{display:flex;align-items:flex-end;gap:9px;height:75px;border-bottom:2px solid #1a1a1a;padding:0 12px}.mini-bars i{width:20px;background:var(--category);border:2px solid #1a1a1a;border-bottom:0;box-shadow:3px 0 0 #d6d5c9}.diagram-label{font-family:VT323,monospace;font-size:calc(14px * var(--font-scale));letter-spacing:2px;margin-top:7px}.diagram-network{position:relative;width:150px;height:75px}.diagram-network:before,.diagram-network:after{content:"";height:2px;background:#1a1a1a;width:120px;position:absolute;left:15px;top:35px;transform:rotate(28deg)}.diagram-network:after{transform:rotate(-28deg)}.diagram-network i{position:absolute;z-index:1;width:35px;height:27px;border:2px solid #1a1a1a;background:#faf8f4;border-radius:4px;left:0;top:0}.diagram-network i:nth-child(2){left:auto;right:0;top:22px}.diagram-network i:nth-child(3){left:15px;top:auto;bottom:0}.diagram-network b{position:absolute;z-index:2;left:55px;top:20px;background:var(--category);border:2px solid #1a1a1a;border-radius:4px;padding:5px 8px;color:white;font-size:calc(12px * var(--font-scale))}.mini-window{width:130px;height:84px;border:2px solid #1a1a1a;border-radius:5px;background:#faf8f4;box-shadow:4px 4px 0 #bcb8ae}.mini-window>span{font-size:calc(10px * var(--font-scale));display:block;background:var(--category);padding:0 4px;color:white;border-bottom:2px solid #1a1a1a;height:18px}.mini-window>div{display:grid;grid-template-columns:1fr 1fr;gap:5px;padding:8px}.mini-window i{height:18px;border:1px solid #888;background:#e6e2d7}.post-card a{display:block;height:100%}.post-art{height:125px;background:var(--category);color:white;display:flex;flex-direction:column;justify-content:center;align-items:center;line-height:1}.post-art>span{font-family:VT323,monospace;font-size:calc(16px * var(--font-scale))}.post-art>b{font-size:calc(50px * var(--font-scale));opacity:.6}.post-body{padding:18px}.post-body h3{font-size:calc(19px * var(--font-scale));line-height:1.5;margin-bottom:8px}.post-body p{font-size:calc(12px * var(--font-scale));color:var(--text-muted)}.post-meta{font-size:calc(11px * var(--font-scale));color:var(--text-faint)}.subscribe-guide{max-width:690px;margin:60px auto}.subscribe-guide h3{font-size:calc(28px * var(--font-scale));margin-bottom:14px}.subscribe-guide>p{color:var(--text-muted);font-size:calc(14px * var(--font-scale))}.steps{list-style:none;padding:0;margin:30px 0}.steps li{display:flex;gap:20px;padding:20px 0;border-bottom:1px solid var(--line)}.steps li>span{font-family:VT323,monospace;font-size:calc(29px * var(--font-scale));color:var(--blue);line-height:1.2}.steps h4{font-size:calc(16px * var(--font-scale));margin-bottom:8px}.steps p{font-size:calc(13px * var(--font-scale));color:var(--text-muted);margin-bottom:0}.feed-copy{padding:19px 20px;margin-top:35px}.feed-copy>label{display:block;font-size:calc(12px * var(--font-scale));color:var(--text-muted);margin-bottom:12px}.feed-copy>div{display:flex;gap:13px}.feed-copy input{background:var(--paper);border:1px solid #a5a196;border-radius:3px;flex:1;min-width:0;font-family:monospace;padding:8px;font-size:calc(12px * var(--font-scale))}.feed-copy #copy-status{display:block;font-size:calc(12px * var(--font-scale));color:#387757;min-height:20px;margin-top:7px}.contact-layout{display:grid;grid-template-columns:1fr 340px;gap:50px;align-items:center;padding-top:45px}.contact-layout h3{font-size:calc(35px * var(--font-scale));line-height:1.5;margin-bottom:20px}.contact-layout p{color:var(--text-muted);font-size:calc(14px * var(--font-scale));line-height:1.9;margin-bottom:27px}.github-cta{font-size:calc(14px * var(--font-scale));min-width:260px}.github-cta .icon:last-child{width:16px;height:16px;margin-left:auto}.contact-layout .contact-note{font-size:calc(11px * var(--font-scale));color:var(--text-faint);margin-top:22px}.contact-terminal{overflow:hidden}.contact-terminal-body{padding:25px;background:#1b211d;color:#c1d5b5;min-height:310px;font-family:VT323,"Courier New",monospace;font-size:calc(17px * var(--font-scale))}.contact-terminal-body p{color:#90a48c;font-family:inherit;margin:10px 0;font-size:calc(17px * var(--font-scale))}.contact-terminal-body p>span{color:#58c997;margin-right:8px}.contact-terminal-body strong{font-size:calc(21px * var(--font-scale));font-weight:400}.contact-terminal-body ul{font-family:inherit;font-size:calc(15px * var(--font-scale));list-style:'↳ ';padding-left:20px;line-height:1.9}.retro-dialog{border:2px solid #1a1a1a;border-radius:9px;background:var(--hatch),var(--warm);color:var(--ink);padding:0;width:min(470px,calc(100% - 32px));box-shadow:5px 8px 0 #bcb8ae,5px 9px 0 2px #1a1a1a;max-height:calc(100dvh - 42px)}.retro-dialog::backdrop{background:rgba(20,20,18,.72);backdrop-filter:blur(3px)}.dialog-title{display:flex;align-items:center;justify-content:space-between;border-bottom:2px solid #1a1a1a;background:repeating-linear-gradient(0deg,#ece8dd 0 2px,#f8f5ee 2px 4px);padding:9px 16px;color:#1a1a1a}.dialog-title h2{font-size:calc(18px * var(--font-scale));font-family:VT323,"Courier New",monospace;letter-spacing:1px;margin:0;background:#f3efe6;padding:0 7px}.plain-close{padding:2px;background:#f3efe6;border:1px solid #555;display:grid;place-items:center}.plain-close .icon{width:20px;height:20px}.dialog-body{padding:24px}.dialog-body fieldset{border:0;padding:0;margin:0 0 25px}.dialog-body legend{font-size:calc(14px * var(--font-scale));margin-bottom:14px}.setting-buttons{display:flex;gap:10px;flex-wrap:wrap}.setting-buttons .selected{background:#222;color:#fff}.font-setting{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px;font-size:calc(14px * var(--font-scale))}.font-setting>div{display:flex;align-items:center;gap:12px}.font-setting .tiny-button{height:31px}.font-setting output{font-family:monospace}.checkbox-setting{display:flex;align-items:center;gap:10px;font-size:calc(14px * var(--font-scale));margin:16px 0}.checkbox-setting input{accent-color:#008cca;width:18px;height:18px}.setting-note{font-size:calc(11px * var(--font-scale));color:var(--text-muted);margin:24px 0 20px}.dialog-actions{display:flex;justify-content:space-between;gap:20px}.game-dialog{width:min(432px,calc(100% - 26px))}.game-body{padding:20px}.game-meta{display:flex;justify-content:space-between;font-family:VT323,monospace;line-height:1;font-size:calc(18px * var(--font-scale));margin-bottom:12px}.game-board{position:relative;background:#a3b88c;border:3px inset #aaa995;aspect-ratio:1}.game-board canvas{width:100%;height:100%;display:block;image-rendering:pixelated}.game-board #game-overlay{position:absolute;inset:0;display:flex;justify-content:center;align-items:center;flex-direction:column;background:rgba(190,201,165,.83);text-align:center}.game-board h3{font-family:VT323,monospace;font-size:calc(42px * var(--font-scale));margin:0 0 10px;color:#273a22}.game-board p{font-size:calc(12px * var(--font-scale));color:#455640;margin-bottom:20px;line-height:1.7}.game-help{font-size:calc(11px * var(--font-scale));color:var(--text-muted);text-align:center;margin:13px 0 8px;min-height:18px}.game-controls{display:flex;flex-direction:column;align-items:center;gap:5px}.game-controls>div{display:flex;gap:5px}.game-controls button{border:1px solid #111;border-radius:4px;background:#e2ded1;width:41px;height:28px;line-height:1;font-family:monospace;touch-action:manipulation;box-shadow:0 2px 0 #9e9a8d}.game-controls button:active{background:#b6c49c;transform:translateY(2px);box-shadow:none}.back-link{display:inline-block;font-size:calc(13px * var(--font-scale));color:var(--text-muted);margin:10px 0 45px}.article-heading{max-width:850px;margin:0 auto;border-bottom:1px solid var(--line);padding-bottom:25px}.article-heading h1{font-size:calc(36px * var(--font-scale));margin:20px 0}.article-heading p{font-size:calc(12px * var(--font-scale));color:var(--text-faint)}.category-pill{font-size:calc(12px * var(--font-scale));background:#ecf7fd;color:#007ab4;padding:5px 12px;border-left:3px solid #0099e5}.article-content{max-width:780px;margin:40px auto 60px;line-height:1.95}.article-content h2{margin-top:40px;font-size:calc(25px * var(--font-scale))}.article-content h3{margin-top:30px;font-size:calc(21px * var(--font-scale))}.article-content p{margin:20px 0}.article-content a{color:#0089cd;text-decoration:underline}.article-content pre{overflow:auto;background:#172019;color:#c5d8b9;padding:20px;border-radius:5px;font-size:calc(13px * var(--font-scale));line-height:1.7}.article-content code{font-family:monospace;background:#f2f0e9;padding:2px 4px;color:#725631}.article-content pre code{background:transparent;color:inherit;padding:0}.article-panel>.retro-button{display:flex;margin:auto;width:190px}.not-found{display:grid;place-items:center;padding:24px;background:#f5f2ea}.not-found>div{padding:40px;text-align:center;max-width:600px}.not-found h1{font-size:calc(30px * var(--font-scale));margin:20px 0 30px}.noscript{position:fixed;bottom:0;left:160px;right:0;background:#ffecb3;padding:20px;text-align:center;z-index:50;font-size:calc(14px * var(--font-scale))}.noscript a{text-decoration:underline}
body[data-theme=dark]{--paper:#232421;--warm:#38392f;--ink:#e9e5da;--muted:#bbb;--line:#444;--text-muted:#c0c0b7;--text-faint:#b7b7ad;--cream:#3b3b32;color-scheme:dark}body[data-theme=dark] .sidebar{box-shadow:14px 0 0 #1a1b18}body[data-theme=dark] .sidebar nav a{color:#ccc;border-color:#333}body[data-theme=dark] .sidebar nav a.active{background:#333c3c;color:#fff}body[data-theme=dark] .sidebar nav a:hover{background:#3b4543}body[data-theme=dark] .tags span{background:#38392f;color:#ddd;border-color:#56564b}body[data-theme=dark] .project-body p,body[data-theme=dark] .timeline-item p,body[data-theme=dark] .timeline-item li,body[data-theme=dark] .timeline-item h5,body[data-theme=dark] .skill-group h4{color:#b9b9af}body[data-theme=dark] .project-art{color:#222}body[data-theme=contrast]{--paper:#fff;--ink:#000;--muted:#222;--line:#000;--text-muted:#222;--text-faint:#333;--blue:#005d96}body[data-theme=contrast] p,body[data-theme=contrast] .timeline-item li,body[data-theme=contrast] .timeline-item h4,body[data-theme=contrast] .timeline-item .period{color:#222}body[data-theme=contrast] .hero-content p{color:white}body.underline-links a{text-decoration:underline}body.reduce-motion *,body.reduce-motion *:before,body.reduce-motion *:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}
@media(min-width:1440px){.hero-content h1{font-size:calc(48px * var(--font-scale))}.hero-role{font-size:calc(28px * var(--font-scale))}.content-panel{padding-left:55px;padding-right:45px}.about-copy{max-width:1120px}.panel-heading{margin-bottom:75px}.project-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.resume-columns{grid-template-columns:minmax(0,1fr) 230px}.timeline-item{padding-left:270px}.timeline-item:before{left:248px}.timeline-dot{left:243px}.timeline-item .period,.timeline-item h4{width:220px}}
@media(max-width:1100px) and (min-width:992px){.resume-columns{grid-template-columns:minmax(0,1fr) 145px;gap:25px}.timeline-item{padding-left:185px}.timeline-item:before{left:168px}.timeline-dot{left:163px}.timeline-item .period,.timeline-item h4{width:146px}.contact-layout{grid-template-columns:1fr 290px;gap:30px}.contact-layout h3{font-size:calc(30px * var(--font-scale))}}
@media(max-width:991px){.mobile-header{position:fixed;inset:0 0 auto;height:50px;background:var(--paper);display:flex;align-items:center;justify-content:space-between;padding:0 14px;z-index:50;border-bottom:1px solid #eee}.mobile-brand{font-size:calc(18px * var(--font-scale));font-weight:600;line-height:1}.mobile-brand span{font-size:calc(13px * var(--font-scale));font-weight:400;color:var(--text-faint);margin-left:5px}.mobile-header .icon-button{width:34px;height:32px;min-height:32px;border-radius:5px;box-shadow:0 2px 0 #bcb8ae,0 3px 0 1px #1a1a1a}.mobile-header .icon{width:19px;height:19px}.sidebar{top:50px;width:260px;max-width:85vw;transform:translateX(-110%);box-shadow:5px 0 10px #0002;transition:transform .3s;z-index:45}.sidebar.open{transform:translateX(0)}.sidebar .identity{margin-top:20px}.sidebar nav a{font-size:calc(14px * var(--font-scale));min-height:42px}.sidebar-signature{display:none}.sidebar-footer{margin-top:auto}.sidebar-social{margin-bottom:0}#nav-scrim:not([hidden]){display:block;position:fixed;inset:50px 0 0;background:#0006;z-index:40}.panel-arrows{top:62px;right:14px;gap:4px}.panel-arrows .icon-button{height:40px;width:40px;min-height:40px}.panel-arrows .icon{width:23px;height:23px}main{margin-left:0;height:calc(100dvh - 50px);margin-top:50px}.content-panel,.article-panel{padding:25px 30px 60px}.panel-heading{padding-right:90px;margin-bottom:70px}.panel-heading h2{font-size:calc(28px * var(--font-scale))}.hero-content{top:32%;padding-left:30px}.hero-content h1{font-size:calc(40px * var(--font-scale))}.home-panel{background-position:58% center}.blog-grid{grid-template-columns:repeat(2,1fr)}.resume-columns{grid-template-columns:minmax(0,1fr) 160px;gap:25px}.timeline-item{padding-left:180px}.timeline-item:before{left:161px}.timeline-dot{left:156px}.timeline-item .period,.timeline-item h4{width:140px}.newsletter{padding:25px}.newsletter-action{min-width:190px}.contact-layout{grid-template-columns:1fr 290px;gap:30px}.contact-layout h3{font-size:calc(30px * var(--font-scale))}.noscript{left:0}.skip-link{left:12px}.skip-link:focus{top:55px}}
@media(max-width:650px){.content-panel,.article-panel{padding:22px 20px 45px}.panel-heading{margin-bottom:67px}.panel-heading h2{font-size:calc(27px * var(--font-scale))}.panel-heading p{font-size:calc(11px * var(--font-scale));top:58px}.hero-content{padding-left:24px;top:31%}.hero-content h1{font-size:calc(34px * var(--font-scale))}.hero-role{font-size:calc(21px * var(--font-scale));height:38px}.hero-actions{width:min(280px,calc(100vw - 48px))}.hero-caption{font-size:calc(11px * var(--font-scale));bottom:19px;right:20px}.home-panel{background-position:59% center}.home-panel:before{background:linear-gradient(90deg,rgba(32,31,27,.59),rgba(40,38,32,.28))}.about-copy h3{font-size:calc(18px * var(--font-scale))}.about-copy p{font-size:calc(14px * var(--font-scale));line-height:1.9}.stats-grid{grid-template-columns:repeat(2,1fr);gap:17px;margin-bottom:30px}.stat{padding:19px 10px 16px}.stat strong{font-size:calc(31px * var(--font-scale))}.focus-grid{grid-template-columns:1fr;gap:10px}.focus-grid article{position:relative;padding-left:42px}.focus-number{position:absolute;left:0;top:14px}.resume-intro{flex-direction:column;gap:19px}.resume-columns{grid-template-columns:1fr;gap:25px}.timeline-item{padding-left:24px;min-height:0;padding-bottom:32px}.timeline-item:before{left:5px}.timeline-dot{left:0}.timeline-item .period,.timeline-item h4{position:static;text-align:left;width:auto}.timeline-item .period{font-size:calc(12px * var(--font-scale));display:block;margin-bottom:8px}.timeline-item h4{font-size:calc(14px * var(--font-scale));color:var(--text-muted);margin-bottom:10px}.timeline-item h5{font-size:calc(16px * var(--font-scale))}.timeline-item p,.timeline-item li{font-size:calc(13px * var(--font-scale))}.skills-column{display:grid;grid-template-columns:1fr 1fr;gap:10px 20px}.skills-column .section-title,.skills-column .resume-note,.skills-column .education-card{grid-column:1/-1}.skills-column .section-title{margin-top:15px}.skill-group{margin-bottom:15px}.newsletter{flex-direction:column;align-items:stretch;padding:23px 19px 20px;gap:18px;margin-bottom:30px}.newsletter-copy{gap:14px}.newsletter h3{font-size:calc(20px * var(--font-scale))}.newsletter p{font-size:calc(11px * var(--font-scale))}.newsletter-action{text-align:left;min-width:0;padding-left:50px}.newsletter-action .retro-button{font-size:calc(13px * var(--font-scale));min-height:37px;min-width:145px;padding:5px 12px}.newsletter-action .icon{width:17px;height:17px}.newsletter-action p{font-size:calc(10px * var(--font-scale));margin-top:12px}.newsletter-copy>.icon{width:30px;height:30px}.newsletter .eyebrow{font-size:calc(12px * var(--font-scale))}.sticker{top:-18px;padding:5px 10px}.blog-terminal{margin:0 0 28px}.terminal-body{padding:11px}.terminal-title{font-size:calc(13px * var(--font-scale));min-height:38px}.terminal-title>span:last-child{font-size:calc(12px * var(--font-scale))}.category-spectrum{margin-top:22px;margin-bottom:13px;height:9px}.filter{font-size:calc(12px * var(--font-scale));min-height:33px}.empty-categories{font-size:calc(10px * var(--font-scale));margin-left:2px;letter-spacing:0}.empty-state{margin-top:35px}.empty-state h3{font-size:calc(18px * var(--font-scale))}.empty-state p{font-size:calc(12px * var(--font-scale))}.empty-state .retro-button{font-size:calc(12px * var(--font-scale))}.blog-grid{grid-template-columns:1fr}.project-grid{grid-template-columns:1fr;gap:27px}.project-body{padding:20px}.project-body h3{font-size:calc(20px * var(--font-scale))}.panel-lead{font-size:calc(13px * var(--font-scale))}.subscribe-guide{margin-top:45px}.subscribe-guide h3{font-size:calc(23px * var(--font-scale))}.subscribe-guide>p{font-size:calc(13px * var(--font-scale))}.steps{margin-top:20px}.steps h4{font-size:calc(15px * var(--font-scale))}.feed-copy{padding:17px 14px}.feed-copy>div{flex-direction:column;align-items:stretch;gap:12px}.feed-copy input{width:100%;font-size:calc(11px * var(--font-scale))}.feed-copy button{align-self:flex-start;min-height:34px;font-size:calc(12px * var(--font-scale))}.contact-layout{grid-template-columns:1fr;gap:30px;padding-top:10px}.contact-layout h3{font-size:calc(30px * var(--font-scale))}.contact-layout p{font-size:calc(13px * var(--font-scale))}.contact-terminal{max-width:100%;margin-bottom:15px}.contact-terminal-body{min-height:260px}.article-heading h1{font-size:calc(29px * var(--font-scale))}.article-content{font-size:calc(14px * var(--font-scale))}.article-content h2{font-size:calc(22px * var(--font-scale))}.back-link{margin-bottom:35px}.game-body{padding:14px}.game-meta{font-size:calc(16px * var(--font-scale))}.game-dialog{max-width:390px}.dialog-body{padding:20px}.game-controls{gap:4px}.game-controls button{height:26px}.game-help{margin-bottom:5px}.retro-dialog{max-height:calc(100dvh - 30px)}.not-found>div{padding:25px}.not-found h1{font-size:calc(22px * var(--font-scale))}}
@media(max-height:650px) and (min-width:992px){.sidebar-signature{display:none}.sidebar-footer{padding-top:8px;min-height:65px}.identity{margin-top:10px}.portrait-placeholder{height:55px;width:63px}.portrait-placeholder>span{height:33px;font-size:calc(29px * var(--font-scale))}.sidebar nav a{padding:7px 0;min-height:35px}.sidebar-social{margin:9px 0}.hero-content{top:29%}}
@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important;scroll-behavior:auto!important}}
@media print{html,body{height:auto;overflow:visible;font-size:calc(11px * var(--font-scale));background:white!important;color:#111!important}.sidebar,.panel-arrows,.mobile-header,.hero-panel,.resume-intro button,dialog,.skip-link{display:none!important}main{margin:0;height:auto}main>.panel{display:none!important}main>#resume{display:block!important;height:auto;overflow:visible;padding:0}.panel-heading{margin-bottom:45px}.panel-heading h2{font-size:calc(25px * var(--font-scale))}.resume-columns{display:grid;grid-template-columns:minmax(0,1fr) 145px;gap:22px}.timeline-item{padding-left:155px;break-inside:avoid}.timeline-item:before{left:139px}.timeline-dot{left:134px}.timeline-item .period,.timeline-item h4{position:absolute;width:120px;text-align:right}.timeline-item .period{top:0}.timeline-item h4{top:24px}.timeline-item p,.timeline-item li{font-size:calc(10px * var(--font-scale))}.timeline-item h5{font-size:calc(13px * var(--font-scale))}.skills-column{display:block}.skill-group .tags span{font-size:calc(9px * var(--font-scale))}.retro-box{box-shadow:none}.resume-note{display:none}.panel-heading:before{content:"牟元礼 / Aaron";float:right;font-size:calc(16px * var(--font-scale))}.panel-heading{padding-right:0}a{text-decoration:none}}

body[data-theme=contrast] .contact-terminal-body p{color:#d3e3c9}body[data-theme=contrast] .contact-terminal-body p>span{color:#72e9ad}body[data-theme=dark] .project-body details ul,body[data-theme=dark] .focus-grid p,body[data-theme=dark] .panel-lead,body[data-theme=dark] .resume-intro p,body[data-theme=dark] .contact-layout p{color:var(--text-muted)}body[data-theme=dark] .contact-terminal-body p{color:#b9cbb0}body[data-theme=dark] .contact-terminal-body strong{color:#d8e9ca}body[data-theme=dark] .empty-categories{color:#ccc}body[data-theme=dark] .sidebar-signature{color:#ccc;border-color:#aaa}body[data-theme=dark] .project-period{color:#b7b7ad}

@media print{:root,body[data-theme]{--paper:#fff!important;--warm:#fff!important;--ink:#111!important;--text-muted:#333!important;--text-faint:#555!important;--line:#ddd!important;--font-scale:1!important}#resume,#resume *{background-color:transparent!important;color:#222!important;box-shadow:none!important}#resume{background:#fff!important}.timeline-dot{background:#fff!important}.sidebar{display:none!important}}

/* Public contact and anonymized case studies */
.contact-actions{display:flex;flex-direction:column;align-items:flex-start;gap:16px}.contact-email,.resume-email{font-size:calc(13px * var(--font-scale));color:var(--blue);text-decoration:underline;overflow-wrap:anywhere}.resume-email{display:inline-flex;align-items:center;gap:9px;margin:12px 0 0}.resume-email .icon{width:17px;height:17px;flex-shrink:0}.contact-actions .github-cta{margin-top:8px;min-width:0;width:100%;max-width:310px}.email-cta{min-width:165px}.contact-layout>div,.resume-intro>div{min-width:0}.resume-intro>div>p{margin-bottom:0}.sidebar-social{gap:13px}@media print{.resume-email{color:#222;font-size:11px}.resume-email:after{content:none}}

.article-references{margin-top:50px;padding-top:20px;border-top:1px dashed var(--line)}.article-references h2{font-size:calc(19px * var(--font-scale));margin:0 0 16px}.article-references ul{padding-left:20px}.article-references li{margin:14px 0;font-size:calc(13px * var(--font-scale));overflow-wrap:anywhere}.article-references li>span{display:block;color:var(--text-faint);font-size:calc(11px * var(--font-scale));margin-top:3px}.post-meta{display:block;line-height:1.9}.post-body h3,.article-heading h1{overflow-wrap:anywhere}
/* Approved portrait: preserve the full square image and existing typography. */
.identity-portrait{display:block;width:73px;height:69px;margin:0 auto 3px;border:2px solid var(--ink);border-radius:3px;object-fit:cover;object-position:center;box-shadow:3px 3px 0 #bcb8ae;background:var(--warm)}
.about-intro{display:grid;grid-template-columns:210px minmax(0,1fr);gap:32px;align-items:start}.about-visual{display:block;padding:8px;overflow:hidden}.about-portrait{display:block;width:100%;height:auto;aspect-ratio:1;object-fit:contain;border-radius:5px}.about-copy{min-width:0}
@media(max-width:650px){.about-intro{grid-template-columns:1fr;gap:26px}.about-visual{width:190px;max-width:100%;margin:0 auto}.about-copy{width:100%}}
