@import "https://fonts.googleapis.com/css2?family=Syne:wght@700;800&family=JetBrains+Mono:wght@400;500&display=swap";:root{--bg:#f0edcc;--bg2:#e8e5c0;--text:#02343f;--accent:#02343f;--on-accent:#f0edcc;--muted:#02343f6b;--border:#02343f24;--ease-out:cubic-bezier(.23, 1, .32, 1);--ease-in-out:cubic-bezier(.77, 0, .175, 1)}*,:before,:after{box-sizing:border-box;-webkit-user-select:text;user-select:text;margin:0;padding:0}html{scroll-behavior:smooth}body{background:var(--bg);color:var(--text);font-family:JetBrains Mono,monospace;overflow-x:hidden}::selection{background:var(--accent);color:var(--on-accent)}a{color:inherit;text-decoration:none}#root{min-height:100vh}body:after{content:"";opacity:.035;pointer-events:none;z-index:9998;mix-blend-mode:multiply;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='300'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.75' numOctaves='4' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='300' height='300' filter='url(%23n)' opacity='0.4'/%3E%3C/svg%3E");background-size:300px 300px;position:fixed;inset:0}::-webkit-scrollbar{width:3px}::-webkit-scrollbar-track{background:var(--bg)}::-webkit-scrollbar-thumb{background:var(--muted)}@media (prefers-reduced-motion:reduce){*,:before,:after{transition-duration:.01ms!important;animation-duration:.01ms!important;animation-iteration-count:1!important}}nav{z-index:100;-webkit-backdrop-filter:blur(12px);border-top:3px solid var(--text);background:#f0edcceb;border-bottom:2px solid #02343f38;justify-content:space-between;align-items:center;height:56px;padding:0 48px;display:flex;position:fixed;top:0;left:0;right:0;box-shadow:0 4px 24px #02343f14}.nav-logo{letter-spacing:.1em;color:var(--text);font-family:Syne,sans-serif;font-size:10px;font-weight:800}.nav-links{gap:40px;display:flex}.nav-link{letter-spacing:.15em;color:#02343fb3;transition:color .12s var(--ease-out);font-size:10px}@media (hover:hover) and (pointer:fine){.nav-link:hover{color:var(--text)}}.nav-status{letter-spacing:.1em;color:var(--muted);align-items:center;gap:8px;font-size:10px;display:flex}.status-dot{background:#22c55e;border-radius:50%;flex-shrink:0;width:6px;height:6px;animation:2.5s ease-in-out infinite pulse}@keyframes pulse{0%,to{opacity:1;box-shadow:0 0 #22c55e80}50%{opacity:.7;box-shadow:0 0 0 5px #22c55e00}}@media (width<=768px){nav{padding:0 24px}.nav-links{gap:24px}.nav-status{display:none}}.nav-hamburger{cursor:pointer;background:0 0;border:none;flex-direction:column;justify-content:center;align-items:center;gap:5px;width:38px;height:38px;margin-right:-8px;padding:8px;display:none}.nav-hamburger-line{background:var(--text);transform-origin:50%;width:22px;height:2px;transition:transform .24s var(--ease-out), opacity .18s, width .2s var(--ease-out);display:block}.nav-hamburger-line:nth-child(2){width:15px}.nav-hamburger--open .nav-hamburger-line:first-child{transform:translateY(7px)rotate(45deg)}.nav-hamburger--open .nav-hamburger-line:nth-child(2){opacity:0;width:0}.nav-hamburger--open .nav-hamburger-line:nth-child(3){transform:translateY(-7px)rotate(-45deg)}@media (width<=480px){.nav-links{display:none}.nav-hamburger{display:flex}}.nav-mobile-backdrop{z-index:98;position:fixed;inset:56px 0 0}.nav-mobile-menu{z-index:99;-webkit-backdrop-filter:blur(12px);border-bottom:2px solid var(--text);animation:navMenuDown .2s var(--ease-out);background:#f0edccf7;flex-direction:column;display:flex;position:fixed;top:56px;left:0;right:0}@keyframes navMenuDown{0%{opacity:0;transform:translateY(-8px)}to{opacity:1;transform:translateY(0)}}.nav-mobile-link{letter-spacing:.2em;min-height:52px;color:var(--text);border-bottom:1px solid var(--border);align-items:center;padding:0 24px;font-family:Syne,sans-serif;font-size:11px;font-weight:800;transition:background .1s,color .1s;display:flex}.nav-mobile-link:last-of-type{border-bottom:none}.nav-mobile-link:active{background:var(--accent);color:var(--on-accent)}.nav-mobile-status{letter-spacing:.1em;color:var(--muted);border-top:1px solid var(--border);align-items:center;gap:8px;padding:14px 24px;font-size:10px;display:flex}#hero{border-bottom:1px solid var(--border);grid-template-columns:1fr 300px;min-height:100vh;padding-top:56px;display:grid;position:relative}#hero:before{content:"";opacity:.07;pointer-events:none;z-index:0;background:url(/lain-bg.gif) 50%/cover no-repeat;position:absolute;inset:0}.hero-main{z-index:1;border-right:1px solid var(--border);flex-direction:column;justify-content:flex-end;align-items:flex-start;min-width:0;padding:40px 48px 52px;display:flex;position:relative}.hero-name{-webkit-user-select:none;user-select:none;letter-spacing:-.035em;color:var(--text);font-family:Syne,sans-serif;font-size:clamp(52px,10.5vw - 44px,158px);font-weight:800;line-height:.88}.hero-sidebar{z-index:1;flex-direction:column;padding:0 36px 52px 20px;display:flex;position:relative}.hero-photo{border-bottom:1px solid var(--border);flex-shrink:0;width:calc(100% + 56px);margin:0 -36px 0 -20px;display:block}.hero-info-row{border-bottom:1px solid var(--border);flex-direction:column;gap:5px;padding:14px 0;display:flex}.hero-info-label{letter-spacing:.2em;color:var(--muted);text-transform:uppercase;font-size:9px}.hero-info-val{color:var(--text);font-size:13px;line-height:1.55}.hero-info-val strong{font-weight:500}.hero-info-status{align-items:center;gap:8px;display:flex}.hero-quote{color:var(--muted);flex-direction:column;gap:10px;margin-top:28px;font-size:12px;line-height:1.85;display:flex}.hero-quote-sig{color:var(--text);letter-spacing:.04em;font-size:11px;display:block}@media (width<=960px){#hero{grid-template-rows:auto auto;grid-template-columns:1fr}#hero:before{opacity:.11;background-position:70%}}@media (width<=768px){#hero:before{display:none}.hero-main{border-right:none;justify-content:flex-end;padding:clamp(80px,20vh,140px) 20px 36px}.hero-name{font-size:clamp(40px,9.7vw,96px)}.hero-sidebar{border-top:1px solid var(--border);grid-template-columns:1fr 1fr;align-items:start;gap:0 20px;padding:0 20px 28px;display:grid}.hero-photo{object-fit:cover;object-position:center 20%;grid-column:1/-1;width:calc(100% + 40px);max-height:42vh;margin:0 -20px}.hero-quote{grid-column:1/-1;margin-top:16px}}@media (width<=560px){.hero-sidebar{grid-template-columns:1fr}.hero-name{font-size:clamp(29px,9.5vw,52px)}.hero-photo{object-fit:contain;object-position:bottom center;border-bottom:none;width:62%;height:auto;max-height:none;margin:0 auto -8px}}@media (width<=480px){.hero-main{justify-content:flex-start;padding:48px 20px 28px}.hero-info-row{padding:10px 0}.hero-quote{margin-top:20px;font-size:11px}}.marquee-wrap{border-top:1px solid var(--text);border-bottom:1px solid var(--text);background:var(--text);padding:14px 0;overflow:hidden}.marquee-track{white-space:nowrap;width:max-content;animation:28s linear infinite marquee;display:flex}@keyframes marquee{0%{transform:translate(0)}to{transform:translate(-50%)}}.marquee-item{color:#f0edcc6b;letter-spacing:.15em;text-transform:uppercase;padding:0 32px;font-size:11px}.marquee-item.accent{background:var(--on-accent);color:var(--accent);padding:0 8px}.s-inner{max-width:1200px;margin:0 auto;padding:100px 48px}@media (width<=768px){.s-inner{padding:72px 24px}}@media (width<=480px){.s-inner{padding:56px 20px}}.s-header{margin-bottom:56px}.s-title{-webkit-user-select:none;user-select:none;letter-spacing:-.03em;color:var(--text);font-family:Syne,sans-serif;font-size:clamp(36px,6vw,72px);font-weight:800;line-height:1}.s-title em{color:#02343f17;font-style:normal}@media (width<=480px){.s-title{font-size:clamp(24px,7vw,36px)}}#skills{border-top:1px solid var(--border)}.skills-block{margin-bottom:52px}.skills-block:last-child{margin-bottom:0}.skills-block-label{letter-spacing:.2em;color:var(--muted);text-transform:uppercase;margin-bottom:20px;font-size:10px}.skill-pills{flex-wrap:wrap;gap:10px;display:flex}.skill-pill{border:1px solid var(--border);color:var(--text);letter-spacing:.01em;cursor:default;transition:background .14s var(--ease-out), color .14s var(--ease-out), border-color .14s var(--ease-out);padding:10px 22px;font-size:13px}@media (width<=480px){.skill-pill{padding:8px 16px;font-size:12px}.skills-block{margin-bottom:36px}}@media (hover:hover) and (pointer:fine){.skill-pill:hover{background:var(--accent);color:var(--on-accent);border-color:var(--accent)}}#projects{border-top:1px solid var(--border)}.proj-grid{background:var(--border);border:1px solid var(--border);grid-template-columns:1fr 1fr;gap:1px;display:grid}@media (width<=768px){.proj-grid{grid-template-columns:1fr}}@media (width<=480px){.proj-card{gap:14px;padding:28px 20px}}.proj-card{background:var(--bg);cursor:default;transition:background .2s var(--ease-out);flex-direction:column;gap:20px;padding:40px;display:flex}@media (hover:hover) and (pointer:fine){.proj-card:hover{background:var(--accent)}.proj-card:hover .proj-card-num{color:#f0edcc47}.proj-card:hover .proj-card-name{color:var(--on-accent)}.proj-card:hover .proj-card-desc{color:#f0edcc9e}.proj-card:hover .proj-card-tag{color:#f0edcc61}.proj-card:hover .proj-card-link{color:var(--bg);opacity:1;border-color:var(--bg)}.proj-card:hover .proj-card-badge{color:var(--on-accent);background:#f0edcc1f}}.proj-card-top{justify-content:space-between;align-items:center;display:flex}.proj-card-num{letter-spacing:.18em;color:#02343f47;font-size:11px;transition:color .2s}.proj-card-badge{letter-spacing:.1em;color:var(--text);background:#02343f12;padding:4px 10px;font-size:9px;transition:background .2s,color .2s}.proj-card-name{letter-spacing:-.02em;color:var(--text);font-family:Syne,sans-serif;font-size:clamp(17px,4.5vw,22px);font-weight:700;line-height:1.15;transition:color .2s}.proj-card-desc{color:#02343f8a;flex:1;font-size:13px;line-height:1.85;transition:color .2s}.proj-card-bottom{justify-content:space-between;align-items:flex-end;gap:12px;margin-top:auto;display:flex}.proj-card-tags{flex-wrap:wrap;gap:8px;display:flex}.proj-card-link{letter-spacing:.08em;color:var(--text);white-space:nowrap;opacity:.7;border:1px solid;border-radius:4px;padding:3px 8px;font-size:10px;text-decoration:none;transition:opacity .15s,color .15s,border-color .15s}.proj-card-link .link-arrow{color:#22c55e;transition:text-shadow .15s}.proj-card-link:hover{opacity:1;border-color:#22c55e}.proj-card-link:hover .link-arrow{text-shadow:0 0 8px #22c55eb3}.proj-card-tag{letter-spacing:.08em;color:#02343f66;font-size:9px;transition:color .2s}.proj-card--clickable{cursor:pointer}.proj-card-more{letter-spacing:.1em;color:var(--muted);flex-shrink:0;margin-left:auto;font-size:9px;transition:color .2s}@media (hover:hover) and (pointer:fine){.proj-card--clickable:hover .proj-card-more{color:var(--on-accent)}}.modal-overlay{-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px);z-index:999;animation:fadeIn .18s var(--ease-out);background:#02343f8c;justify-content:center;align-items:center;padding:24px;display:flex;position:fixed;inset:0}@keyframes fadeIn{0%{opacity:0}to{opacity:1}}.modal-panel{background:var(--bg);border:1px solid var(--border);width:100%;max-width:680px;max-height:88vh;animation:slideUp .22s var(--ease-out);border-radius:4px;flex-direction:column;gap:28px;padding:48px;display:flex;position:relative;overflow-y:auto}@keyframes slideUp{0%{opacity:0;transform:translateY(16px)}to{opacity:1;transform:translateY(0)}}.modal-panel::-webkit-scrollbar{width:3px}.modal-panel::-webkit-scrollbar-thumb{background:var(--muted)}.modal-close{cursor:pointer;color:var(--muted);background:0 0;border:none;font-family:JetBrains Mono,monospace;font-size:14px;line-height:1;transition:color .15s;position:absolute;top:20px;right:20px}.modal-close:hover{color:var(--text)}.modal-header{align-items:center;gap:12px;display:flex}.modal-num{letter-spacing:.18em;color:var(--muted);font-size:11px}.modal-title{letter-spacing:-.02em;color:var(--text);font-family:Syne,sans-serif;font-size:clamp(22px,5vw,32px);font-weight:800;line-height:1.1}.modal-overview{color:var(--text);opacity:.75;font-size:13px;line-height:1.9}.modal-overview+.modal-overview{margin-top:14px}.modal-section-label{letter-spacing:.14em;color:var(--muted);margin-bottom:14px;font-size:10px}.modal-list{flex-direction:column;gap:8px;list-style:none;display:flex}.modal-list li{color:var(--text);padding-left:16px;font-size:12px;line-height:1.6;position:relative}.modal-list li:before{content:"→";color:var(--muted);font-size:11px;position:absolute;left:0}.modal-stack-grid{flex-direction:column;gap:14px;display:flex}.modal-stack-group{align-items:flex-start;gap:16px;display:flex}.modal-stack-label{letter-spacing:.1em;color:var(--muted);flex-shrink:0;min-width:80px;padding-top:2px;font-size:9px}.modal-stack-tags{flex-wrap:wrap;gap:6px;display:flex}.modal-link{letter-spacing:.08em;color:var(--text);border-bottom:1px solid var(--border);align-items:center;gap:6px;width:fit-content;padding-bottom:2px;font-size:10px;transition:border-color .15s;display:inline-flex}.modal-link:hover{border-color:#22c55e}.modal-link:hover .link-arrow{text-shadow:0 0 8px #22c55eb3}@media (width<=600px){.modal-panel{padding:28px 20px}.modal-stack-group{flex-direction:column;gap:6px}.modal-stack-label{min-width:unset}}.lab-page{-webkit-user-select:text;user-select:text;min-height:100vh;padding-top:56px}.log-inner{max-width:860px;margin:0 auto;padding:80px 48px 120px}@media (width<=768px){.log-inner{padding:60px 24px 80px}}@media (width<=480px){.log-inner{padding:48px 20px 64px}}.log-header{align-items:baseline;gap:28px;margin-bottom:72px;display:flex}.log-title{letter-spacing:-.04em;color:var(--text);font-family:Syne,sans-serif;font-size:clamp(48px,8vw,96px);font-weight:800;line-height:1}.log-sub{color:var(--muted);letter-spacing:.05em;font-size:11px}@media (width<=560px){.log-header{flex-direction:column;gap:10px}}.log-feed{border-top:1px solid var(--border);flex-direction:column;display:flex}.log-entry{border-bottom:1px solid var(--border)}.log-entry-head{cursor:pointer;text-align:left;background:0 0;border:none;justify-content:space-between;align-items:flex-start;gap:24px;width:100%;padding:28px 0;display:flex}@media (width<=480px){.log-entry-head{gap:16px;padding:20px 0}}@media (hover:hover) and (pointer:fine){.log-entry-head:hover .log-entry-title{opacity:.5}}.log-entry-main{flex-direction:column;flex:1;gap:10px;min-width:0;display:flex}.log-entry-meta{align-items:center;gap:10px;display:flex}.log-date{letter-spacing:.14em;color:var(--muted);font-size:9px}.log-time{letter-spacing:.1em;color:var(--muted);opacity:.6;font-size:9px}.log-entry-title{letter-spacing:-.02em;color:var(--text);transition:opacity .14s var(--ease-out);overflow-wrap:break-word;word-break:break-word;font-family:Syne,sans-serif;font-size:clamp(18px,4vw,26px);font-weight:800;line-height:1.15}.log-entry-tags{flex-wrap:wrap;gap:8px;display:flex}.log-tag{letter-spacing:.12em;color:var(--muted);font-size:9px}.log-toggle{color:var(--muted);-webkit-user-select:none;user-select:none;flex-shrink:0;justify-content:center;align-items:center;width:32px;height:32px;padding-top:12px;font-family:JetBrains Mono,monospace;font-size:18px;display:flex}.log-entry-body{animation:logOpen .2s var(--ease-out);flex-direction:column;gap:32px;padding:4px 56px 40px 0;display:flex}@keyframes logOpen{0%{opacity:0;transform:translateY(-6px)}to{opacity:1;transform:translateY(0)}}@media (width<=480px){.log-entry-body{padding:4px 0 28px}}@media (prefers-reduced-motion:reduce){.log-entry-body{animation:none}}.log-excerpt{color:var(--text);opacity:.55;-webkit-user-select:text;user-select:text;font-size:13px;line-height:1.9}.log-sections{flex-direction:column;gap:24px;display:flex}.log-section{flex-direction:column;gap:7px;display:flex}.log-section-label{letter-spacing:.16em;color:var(--muted);text-transform:uppercase;font-size:9px}.log-section-text{color:var(--text);opacity:.8;-webkit-user-select:text;user-select:text;font-size:13px;line-height:1.9}#contact{border-top:1px solid var(--border)}.contact-inner{grid-template-columns:1fr 1fr;align-items:end;gap:0;padding:80px 48px 100px;display:grid}@media (width<=768px){.contact-inner{grid-template-columns:1fr;gap:48px;padding:64px 24px 80px}}@media (width<=480px){.contact-inner{padding:48px 20px 64px}}.contact-heading{-webkit-user-select:none;user-select:none;letter-spacing:-.04em;color:var(--text);text-wrap:balance;font-family:Syne,sans-serif;font-size:clamp(36px,6vw,80px);font-weight:800;line-height:1}.contact-availability{letter-spacing:.1em;color:var(--muted);margin-top:20px;font-size:11px}.contact-right{flex-direction:column;gap:28px;padding-bottom:4px;display:flex}.contact-email{color:var(--text);letter-spacing:-.02em;transition:border-color .16s var(--ease-out);border-bottom:1px solid #0000;width:fit-content;font-family:Syne,sans-serif;font-size:clamp(18px,2.5vw,28px);font-weight:700}@media (hover:hover) and (pointer:fine){.contact-email:hover{border-color:var(--text)}}.contact-socials{flex-direction:column;gap:10px;display:flex}.contact-social{color:#02343fb3;transition:color .16s var(--ease-out);align-items:center;gap:14px;width:fit-content;font-family:JetBrains Mono,monospace;font-size:14px;display:flex}.contact-social-label{letter-spacing:.12em;color:var(--border);min-width:18px;font-size:9px}@media (hover:hover) and (pointer:fine){.contact-social:hover{color:var(--text)}}.chat-trigger{z-index:200;background:var(--accent);color:var(--on-accent);letter-spacing:.12em;cursor:pointer;transition:opacity .14s var(--ease-out);border:none;align-items:center;gap:8px;padding:12px 20px;font-family:JetBrains Mono,monospace;font-size:11px;display:flex;position:fixed;bottom:32px;right:32px}.chat-trigger:hover{opacity:.8}.chat-trigger-dot{background:#22c55e;border-radius:50%;width:6px;height:6px;animation:2.5s ease-in-out infinite pulse}.chat-trigger-dot.loading{animation:.6s ease-in-out infinite blink}@keyframes blink{0%,to{opacity:1}50%{opacity:.15}}.chat-window{z-index:200;background:var(--bg);border:1px solid var(--text);flex-direction:column;width:400px;font-family:JetBrains Mono,monospace;display:flex;position:fixed;bottom:88px;right:32px}.chat-chrome{background:var(--accent);border-bottom:1px solid #f0edcc1f;align-items:center;gap:10px;padding:10px 16px;display:flex}.chat-dots{gap:5px;display:flex}.chat-dots span{cursor:pointer;border-radius:50%;justify-content:center;align-items:center;width:12px;height:12px;transition:filter .15s;display:flex;position:relative}.chat-dots span:hover{filter:brightness(.8)}.chat-window--minimized .chat-messages,.chat-window--minimized .chat-input-row{display:none}.chat-dots span:first-child{background:#ff5f57}.chat-dots span:nth-child(2){background:#febc2e}.chat-dots span:nth-child(3){background:#28c840}.chat-dots span:before{color:#000000a6;font-family:JetBrains Mono,monospace;font-size:8px;font-weight:700;line-height:1}.chat-dots span:first-child:before{content:"×"}.chat-dots span:nth-child(2):before{content:"−"}.chat-dots span:nth-child(3):before{content:"+"}.chat-title{color:#f0edcc80;letter-spacing:.12em;font-size:9px}.chat-messages{flex-direction:column;flex:1;gap:16px;min-height:120px;max-height:320px;padding:20px;display:flex;overflow-y:auto}.chat-empty{color:var(--muted);font-size:11px;line-height:1.75}.chat-msg{align-items:flex-start;gap:10px;font-size:12px;line-height:1.65;display:flex}.chat-msg-prefix{color:var(--muted);flex-shrink:0;margin-top:1px}.chat-msg--user .chat-msg-text{color:var(--muted)}.chat-msg--assistant .chat-msg-text{color:var(--text)}.chat-typing{color:var(--muted);animation:.8s ease-in-out infinite blink}.chat-input-row{border-top:1px solid var(--border);align-items:center;gap:8px;padding:12px 16px;display:flex}.chat-prompt{color:var(--muted);flex-shrink:0;font-size:12px}.chat-input{color:var(--text);-webkit-user-select:text;user-select:text;background:0 0;border:none;outline:none;flex:1;font-family:JetBrains Mono,monospace;font-size:12px}.chat-input::placeholder{color:var(--muted);opacity:.5}.chat-send{color:var(--muted);cursor:pointer;background:0 0;border:none;padding:0 2px;font-family:JetBrains Mono,monospace;font-size:16px;line-height:1;transition:color .12s}.chat-send:hover:not(:disabled){color:var(--text)}.chat-send:disabled{opacity:.25;cursor:default}@media (width<=480px){.chat-trigger{bottom:16px;right:16px}.chat-window{width:auto;bottom:80px;left:16px;right:16px}}.footer{border-top:1px solid var(--border);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:12px;padding:24px 48px;display:flex}.footer-copy,.footer-built,.footer-unit{color:var(--muted);font-size:11px}.footer-unit{letter-spacing:.1em}.footer-built span{background:var(--accent);color:var(--on-accent);padding:1px 5px}@media (width<=600px){.footer{flex-direction:column;align-items:flex-start;gap:6px;padding:20px 24px}}
