@import"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:ital,wght@0,300..800;1,300..800&family=JetBrains+Mono:wght@400;500;600&display=swap";:root{--bg-base: #15131A;--bg-sunken: #100E15;--bg-elevated: #1C1922;--bg-surface: rgba(32, 28, 39, .72);--bg-surface-hover: rgba(43, 38, 52, .9);--bg-card: rgba(29, 26, 35, .62);--bg-glass: rgba(30, 26, 36, .56);--bg-glass-strong: rgba(35, 31, 43, .88);--accent: #6B9AA0;--accent-deep: #4E7880;--accent-soft: #9FC6C9;--accent-wash: rgba(107, 154, 160, .1);--accent-line: rgba(107, 154, 160, .26);--accent-wash-strong: rgba(107, 154, 160, .22);--accent-hot: #7E6FD6;--sand: #C99B6E;--sand-soft: #DEBC97;--sand-wash: rgba(201, 155, 110, .12);--purple-primary: var(--accent);--purple-electric: var(--accent-deep);--purple-light: var(--accent-soft);--purple-glow: rgba(107, 154, 160, .14);--purple-glow-soft: rgba(107, 154, 160, .07);--purple-muted: #3F4A4C;--purple-subtle: #1F2529;--text-primary: #EDE9E3;--text-secondary: #B7B3B0;--text-muted: #918C8C;--text-dim: #6A6668;--hairline: 1px;--border-subtle: rgba(237, 233, 227, .075);--border-quiet: rgba(237, 233, 227, .045);--border-strong: rgba(159, 198, 201, .3);--border-highlight: rgba(159, 198, 201, .46);--edge-light: inset 0 1px 0 rgba(255, 255, 255, .05);--glass-shadow: 0 1px 2px rgba(0, 0, 0, .3), 0 10px 28px rgba(0, 0, 0, .34);--glass-shadow-lift: 0 2px 5px rgba(0, 0, 0, .32), 0 18px 44px rgba(0, 0, 0, .38);--glass-blur: blur(9px) saturate(1.06);--glass-blur-heavy: blur(14px) saturate(1.08);--radius-xs: 6px;--radius-sm: 10px;--radius-md: 14px;--radius-lg: 20px;--radius-xl: 26px;--radius-full: 9999px;--font-display: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-sans: "Plus Jakarta Sans", -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;--font-mono: "JetBrains Mono", ui-monospace, SFMono-Regular, monospace;--lh-display: 1.08;--lh-title: 1.2;--lh-body: 1.68;--ls-display: -.03em;--ls-title: -.02em;--ls-body: -.005em;--ls-label: .12em;--measure: 62ch;--ease-entrance: cubic-bezier(.16, .84, .24, 1);--ease-exit: cubic-bezier(.5, 0, .78, .42);--ease-settle: cubic-bezier(.22, 1.08, .36, 1);--ease-spring: cubic-bezier(.22, 1.16, .36, 1);--ease-weight: cubic-bezier(.28, .9, .28, 1);--ease-custom: var(--ease-entrance);--dur-tap: 90ms;--dur-quick: .16s;--dur-base: .24s;--dur-slow: .4s;--dur-reveal: .48s}@media(min-resolution:1.5dppx){:root{--hairline: .5px}}@supports (transition-timing-function: linear(0,1)){:root{--ease-spring: linear(0, .0729, .232, .4145, .5851, .7271, .8359, .9133, .9644, .9953, 1.0118, 1.0187, 1.0198, 1.0178, 1.0144, 1.0108, 1.0075, 1.0048, 1.0028, 1.0014, 1.0005, 1, 1);--ease-settle: linear(0, .0895, .2927, .5301, .7487, .9202, 1.0354, 1.098, 1.1192, 1.1121, 1.0895, 1.0613, 1.0344, 1.0127, .9977, .9892, .9859, .9863, .9887, .9921, .9954, .9981, 1);--ease-weight: linear(0, .0532, .1717, .3128, .4521, .5771, .6826, .7679, .8345, .885, .9223, .9491, .9679, .9808, .9893, .9948, .9981, 1, 1.001, 1.0014, 1.0015, 1.0014, 1)}}[data-theme=light]{--bg-base: #F4F1EA;--bg-sunken: #E7E2D8;--bg-elevated: #EBE6DC;--bg-surface: rgba(255, 253, 248, .86);--bg-surface-hover: rgba(255, 255, 255, .97);--bg-card: rgba(255, 253, 248, .8);--bg-glass: rgba(249, 246, 239, .74);--bg-glass-strong: rgba(255, 253, 248, .95);--accent: #3F6D74;--accent-deep: #2F565C;--accent-soft: #356066;--accent-wash: rgba(63, 109, 116, .09);--accent-line: rgba(63, 109, 116, .22);--accent-wash-strong: rgba(63, 109, 116, .16);--accent-hot: #5344A8;--sand: #A9733F;--sand-soft: #8E5F33;--sand-wash: rgba(169, 115, 63, .12);--purple-primary: var(--accent);--purple-electric: var(--accent-deep);--purple-light: var(--accent-soft);--purple-glow: rgba(63, 109, 116, .13);--purple-glow-soft: rgba(63, 109, 116, .06);--purple-muted: #B6C4C6;--purple-subtle: #E4EBEA;--text-primary: #211E26;--text-secondary: #4E4A50;--text-muted: #6D686E;--text-dim: #969196;--border-subtle: rgba(33, 30, 38, .11);--border-quiet: rgba(33, 30, 38, .07);--border-strong: rgba(63, 109, 116, .3);--border-highlight: rgba(63, 109, 116, .48);--edge-light: inset 0 1px 0 rgba(255, 255, 255, .7);--glass-shadow: 0 1px 2px rgba(60, 52, 44, .05), 0 10px 28px rgba(60, 52, 44, .08);--glass-shadow-lift: 0 2px 5px rgba(60, 52, 44, .07), 0 18px 44px rgba(60, 52, 44, .1)}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{scroll-behavior:auto;font-family:var(--font-sans);background-color:var(--bg-base);color:var(--text-primary);line-height:var(--lh-body);letter-spacing:var(--ls-body);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;overflow-x:clip;font-variant-numeric:proportional-nums}body{min-height:100vh;overflow-x:clip;position:relative;background-color:var(--bg-base);transition:background-color var(--dur-slow) var(--ease-weight),color var(--dur-slow) var(--ease-weight)}body:before{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:0;pointer-events:none;background:radial-gradient(58% 44% at 18% 12%,var(--accent-wash) 0%,transparent 68%),radial-gradient(46% 38% at 88% 62%,var(--sand-wash) 0%,transparent 70%),radial-gradient(120% 90% at 50% 108%,rgba(0,0,0,.28) 0%,transparent 62%)}[data-theme=light] body:before{background:radial-gradient(58% 44% at 18% 12%,var(--accent-wash) 0%,transparent 68%),radial-gradient(46% 38% at 88% 62%,var(--sand-wash) 0%,transparent 70%),radial-gradient(120% 90% at 50% 108%,rgba(90,76,60,.07) 0%,transparent 62%)}body:after{content:"";position:fixed;top:0;right:0;bottom:0;left:0;z-index:1;pointer-events:none;opacity:.035;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='160' height='160'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='0.85' numOctaves='3' stitchTiles='stitch'/%3E%3C/filter%3E%3Crect width='160' height='160' filter='url(%23n)'/%3E%3C/svg%3E")}[data-theme=light] body:after{opacity:.05}@media(prefers-reduced-motion:reduce){body:after{opacity:.02}}code,pre,.font-mono{font-family:var(--font-mono);font-variant-ligatures:none}h1,h2,h3,h4,h5,h6{font-family:var(--font-display);color:var(--text-primary);font-weight:700;line-height:var(--lh-title);letter-spacing:var(--ls-title);text-wrap:balance}h1{font-weight:800;line-height:var(--lh-display);letter-spacing:var(--ls-display)}p{line-height:var(--lh-body);text-wrap:pretty}:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:var(--radius-xs)}::selection{background:var(--accent-wash);color:var(--text-primary)}#bg-canvas{position:fixed;top:0;left:0;width:100vw;height:100vh;z-index:0;pointer-events:none}.glass-panel{background:var(--bg-card);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-md);box-shadow:var(--glass-shadow),var(--edge-light);transition:border-color var(--dur-base) var(--ease-entrance),background-color var(--dur-base) var(--ease-entrance),box-shadow var(--dur-base) var(--ease-entrance)}.glass-panel:hover{border-color:var(--border-strong);box-shadow:0 2px 4px #00000052,0 14px 36px #0006}.glass-pill{background:var(--bg-glass);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-full)}.header-controls{position:fixed;top:1.5rem;right:1.75rem;z-index:100;display:flex;align-items:center;gap:.75rem;padding:.4rem .6rem;background:var(--bg-surface);backdrop-filter:var(--glass-blur-heavy);-webkit-backdrop-filter:var(--glass-blur-heavy);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-full);box-shadow:var(--glass-shadow);transition:color .3s var(--ease-entrance),background-color .3s var(--ease-entrance),border-color .3s var(--ease-entrance),box-shadow .3s var(--ease-entrance),opacity .3s var(--ease-entrance),transform .405s var(--ease-spring)}.header-controls:hover{border-color:var(--border-strong);box-shadow:var(--glass-shadow)}.ctrl-btn{display:inline-flex;align-items:center;justify-content:center;padding:.45rem .85rem;border-radius:var(--radius-full);border:none;background:transparent;color:var(--text-secondary);font-family:var(--font-sans);font-size:.85rem;font-weight:600;cursor:pointer;transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),box-shadow .25s var(--ease-entrance),opacity .25s var(--ease-entrance),transform .338s var(--ease-spring);-webkit-user-select:none;user-select:none}.ctrl-btn:hover{color:var(--text-primary);background:var(--purple-subtle)}.ctrl-btn.active,.ctrl-btn:active{color:#f7f4ef;background:var(--accent);box-shadow:inset 0 1px #ffffff1f}.theme-btn{width:38px;height:38px;padding:0;border-radius:50%;display:flex;align-items:center;justify-content:center}.sticky-nav{position:fixed;right:1.75rem;top:50%;transform:translateY(-50%) scale(.84);transform-origin:right center;z-index:95;display:flex;flex-direction:column;gap:.85rem;padding:.65rem .5rem;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-radius:var(--radius-full);box-shadow:none;opacity:.78;transition:transform .35s cubic-bezier(.16,1,.3,1),opacity .25s var(--ease-entrance)}.sticky-nav:hover{transform:translateY(-50%) scale(1);opacity:1}.nav-indicator{position:absolute;top:0;left:.5rem;width:44px;height:44px;border-radius:50%;background:var(--accent);border:var(--hairline) solid var(--border-highlight);box-shadow:0 2px 6px #00000059,inset 0 1px #ffffff24;pointer-events:none;z-index:1;transition:transform var(--dur-slow) var(--ease-settle),opacity var(--dur-base) var(--ease-entrance);will-change:transform}.nav-item{position:relative;z-index:2;display:flex;align-items:center;justify-content:flex-end;text-decoration:none;outline:none}.nav-link{position:relative;display:flex;align-items:center;justify-content:flex-end;height:44px;min-width:44px;border-radius:var(--radius-full);color:var(--text-muted);background:transparent;transition:color .3s var(--ease-entrance),background-color .3s var(--ease-entrance),border-color .3s var(--ease-entrance),box-shadow .3s var(--ease-entrance),opacity .3s var(--ease-entrance),transform .405s var(--ease-spring);cursor:pointer;overflow:visible}.nav-icon-box{width:44px;height:44px;display:flex;align-items:center;justify-content:center;border-radius:50%;color:var(--text-muted);background:transparent;transition:color .3s ease,transform .3s ease;flex-shrink:0}.nav-icon-box svg{transition:stroke .3s ease,transform .3s ease,filter .3s ease}.nav-label{position:absolute;right:44px;white-space:nowrap;padding:.35rem .85rem;font-size:.82rem;font-weight:600;color:var(--text-primary);background:var(--bg-elevated);-webkit-backdrop-filter:var(--glass-blur);backdrop-filter:var(--glass-blur);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-full);box-shadow:0 1px 2px #0000004d,0 8px 22px #00000061;opacity:0;visibility:hidden;transform:translate(12px) scale(.95);transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),box-shadow .25s var(--ease-entrance),opacity .25s var(--ease-entrance),transform .338s var(--ease-spring);pointer-events:none;margin-right:.5rem}.nav-item:hover .nav-label{opacity:1;visibility:visible;transform:translate(0) scale(1)}.nav-item:not(.active):hover .nav-icon-box{color:var(--text-primary);background:var(--accent-wash);border-radius:50%}.nav-item.active .nav-icon-box{color:#f7f4ef}.nav-item.active .nav-icon-box svg{stroke:#f7f4ef;transform:scale(1.06)}@media(max-width:768px){.sticky-nav{top:auto;bottom:max(1rem,env(safe-area-inset-bottom,1rem));right:auto;left:50%;transform:translate(-50%);transform-origin:center bottom;flex-direction:row;padding:.35rem .5rem;gap:.35rem;background:var(--bg-glass-strong);backdrop-filter:var(--glass-blur-heavy);-webkit-backdrop-filter:var(--glass-blur-heavy);border:var(--hairline) solid var(--border-strong);border-radius:var(--radius-full);box-shadow:0 4px 20px #00000073,0 0 1px #ffffff1f,var(--edge-light);opacity:1;z-index:100}.nav-indicator{top:.35rem;left:0;width:44px;height:44px;border-radius:var(--radius-full)}.nav-label{display:none!important}.nav-item{width:44px;height:44px;justify-content:center}.nav-link{width:44px;height:44px;min-width:44px;justify-content:center}.nav-icon-box{width:44px;height:44px}.header-controls{top:max(.85rem,env(safe-area-inset-top,.85rem));right:max(.85rem,env(safe-area-inset-right,.85rem));gap:.35rem;padding:.3rem .55rem;background:var(--bg-glass-strong);backdrop-filter:var(--glass-blur-heavy);-webkit-backdrop-filter:var(--glass-blur-heavy);border:var(--hairline) solid var(--border-strong);box-shadow:0 4px 16px #00000059}}.portfolio-container{position:relative;z-index:10;max-width:1300px;margin-inline:auto;padding-left:clamp(1.25rem,3vw,2.5rem);padding-right:clamp(1.25rem,6vw,6.5rem)}@media(max-width:992px){.portfolio-container{padding-left:clamp(1.25rem,4vw,2rem);padding-right:clamp(1.25rem,4vw,2rem)}}.section-wrapper{min-height:100vh;box-sizing:border-box;display:flex;flex-direction:column;justify-content:center;padding:clamp(1.5rem,3.5vh,2.5rem) 0;position:relative}#hero{z-index:1}#about{z-index:2}#skills{z-index:3}#projects{z-index:4}#contact{z-index:5;padding-bottom:clamp(.75rem,2vh,1.5rem)}@media(max-width:768px){.section-wrapper{min-height:auto;padding:3.5rem 0 4.5rem}#contact{padding-bottom:calc(6.5rem + env(safe-area-inset-bottom,1rem))!important}}.section-header{position:relative;max-width:100%}.section-badge{display:inline-flex;align-items:center;gap:.55rem;padding:0;border:none;background:none;color:var(--accent-soft);font-family:var(--font-mono);font-size:.68rem;font-weight:500;text-transform:uppercase;letter-spacing:var(--ls-label);margin-bottom:.75rem;width:fit-content}.section-badge:after{content:"";display:block;width:clamp(2rem,7vw,5.5rem);height:var(--hairline);background:var(--accent-line);margin-left:.35rem}.section-title{font-size:clamp(2.1rem,4.2vw,3.2rem);font-weight:700;line-height:var(--lh-display);letter-spacing:var(--ls-display);margin-bottom:.75rem;color:var(--text-primary);max-width:24ch}.section-subtitle{font-size:.98rem;color:var(--text-secondary);line-height:var(--lh-body);max-width:54ch;margin-bottom:clamp(.85rem,2vh,1.6rem)}#skills .section-title{max-width:26ch}#skills .section-subtitle{max-width:52ch}#projects .section-header{padding-left:0}#projects .section-title,#contact .section-title{max-width:18ch}#contact .section-subtitle{max-width:48ch}.skills-header-row{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:.85rem;margin-bottom:.35rem}.skills-header-row .section-title{margin-bottom:0}.skills-mode-switcher{position:relative;display:inline-flex;align-items:center;background:#ffffff0a;border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-pill);padding:3px;gap:3px;-webkit-user-select:none;user-select:none}[data-theme=light] .skills-mode-switcher{background:#211e260f;border-color:#211e261f}.skills-mode-indicator{position:absolute;top:3px;bottom:3px;left:0;border-radius:var(--radius-pill);background:var(--accent-wash-strong);border:var(--hairline) solid var(--accent-line);box-shadow:0 1px 4px #00000040;pointer-events:none;transition:transform .32s cubic-bezier(.16,1,.3,1),width .32s cubic-bezier(.16,1,.3,1);z-index:1}[data-theme=light] .skills-mode-indicator{background:#fff;border-color:#211e2614;box-shadow:0 1px 3px #3c342c1f,0 1px 2px #3c342c14}.skills-mode-btn{position:relative;z-index:2;display:inline-flex;align-items:center;gap:.45rem;padding:.38rem .85rem;border-radius:var(--radius-pill);border:none;background:transparent;color:var(--text-muted);font-family:var(--font-body);font-size:.8rem;font-weight:500;cursor:pointer;transition:color .25s ease}.skills-mode-btn:hover{color:var(--text-primary)}.skills-mode-btn.active{color:var(--accent);background:transparent;box-shadow:none}[data-theme=light] .skills-mode-btn{color:var(--text-muted)}[data-theme=light] .skills-mode-btn:hover{color:var(--text-primary)}[data-theme=light] .skills-mode-btn.active{color:var(--accent-deep);background:transparent;box-shadow:none}@media(max-width:768px){.section-title{font-size:clamp(1.85rem,8vw,2.3rem)}.section-subtitle{font-size:.92rem;margin-bottom:1.5rem}#projects .section-header{padding-left:0}.skills-header-row{flex-direction:column;align-items:flex-start}}#hero{text-align:left;align-items:flex-start;justify-content:center}.hero-content{display:flex;flex-direction:column;align-items:flex-start;max-width:min(1080px,100%);width:100%}.status-indicator{width:7px;height:7px;background-color:#7fa36b;border-radius:50%;animation:pulseGreen 2.4s infinite}@keyframes pulseGreen{0%{transform:scale(.95);box-shadow:0 0 #7fa36b66}70%{transform:scale(1.06);box-shadow:0 0 0 7px #7fa36b00}to{transform:scale(.95);box-shadow:0 0 #7fa36b00}}.hero-title{font-size:clamp(2.2rem,5.6vw,4.8rem);font-weight:800;line-height:var(--lh-display);letter-spacing:var(--ls-display);margin-bottom:1.15rem;min-height:1.06em;display:block;text-align:left;max-width:100%;white-space:nowrap}.typewriter-text{display:inline-block;padding-bottom:.1em;margin-bottom:-.1em;color:var(--text-primary);font-family:var(--font-display)}.typewriter-cursor{display:inline-block;width:2px;height:.72em;background:var(--sand);margin-left:8px;border-radius:1px;animation:blinkCursor 1.05s steps(1,end) infinite;vertical-align:baseline}.hero-subtitle{font-family:var(--font-sans);font-size:clamp(1rem,1.5vw,1.18rem);font-weight:400;color:var(--text-secondary);letter-spacing:.02em;line-height:1.5;opacity:0;transform:translateY(14px);transition:opacity var(--dur-reveal) var(--ease-entrance),transform var(--dur-reveal) var(--ease-weight);margin-bottom:2.5rem;max-width:42ch}.hero-subtitle.visible{opacity:1;transform:translateY(0)}.hero-chips{display:flex;flex-wrap:wrap;justify-content:flex-start;column-gap:.65rem;row-gap:.55rem;margin-bottom:2.75rem}.hero-chip{display:inline-flex;align-items:center;gap:.5rem;padding:.38rem .85rem;background:transparent;border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-full);font-size:.8rem;letter-spacing:.005em;color:var(--text-muted);transition:color var(--dur-quick) var(--ease-entrance),border-color var(--dur-quick) var(--ease-entrance),transform var(--dur-base) var(--ease-spring)}.hero-chip:hover{border-color:var(--border-strong);color:var(--text-primary);transform:translateY(-2px)}.hero-actions{display:flex;align-items:center;gap:1.1rem;flex-wrap:wrap;justify-content:flex-start}.btn-primary{display:inline-flex;align-items:center;gap:.6rem;padding:.82rem 1.6rem;background:var(--accent);color:#0f1416;font-family:var(--font-sans);font-weight:600;font-size:.92rem;letter-spacing:.005em;border-radius:var(--radius-full);border:none;cursor:pointer;text-decoration:none;box-shadow:0 1px 2px #00000040,0 6px 16px #00000042;transition:background-color var(--dur-quick) var(--ease-entrance),box-shadow var(--dur-base) var(--ease-entrance),transform var(--dur-base) var(--ease-spring)}[data-theme=light] .btn-primary{color:#f7f9f9}.btn-primary:hover{background:var(--accent-soft);transform:translateY(-2px);box-shadow:0 2px 5px #00000047,0 12px 26px #0000004d}.btn-primary:active{transform:translateY(0);transition-duration:var(--dur-tap)}.btn-primary svg,.btn-secondary svg{transition:transform var(--dur-base) var(--ease-spring)}.hero-actions .btn-primary:hover svg{transform:translateY(3px)}.hero-actions .btn-secondary:hover svg{transform:translate(3px)}#hero .btn-primary{position:relative}#hero .btn-primary:after{content:"";position:absolute;top:-3px;right:-3px;bottom:-3px;left:-3px;border-radius:inherit;border:var(--hairline) solid var(--accent-hot);opacity:0;transform:scale(.97);transition:opacity var(--dur-base) var(--ease-entrance),transform var(--dur-slow) var(--ease-settle);pointer-events:none}#hero .btn-primary:hover:after,#hero .btn-primary:focus-visible:after{opacity:.55;transform:scale(1)}.btn-secondary{display:inline-flex;align-items:center;gap:.6rem;padding:.82rem 1.6rem;background:transparent;color:var(--text-primary);font-family:var(--font-sans);font-weight:500;font-size:.92rem;letter-spacing:.005em;border-radius:var(--radius-full);border:var(--hairline) solid var(--border-subtle);cursor:pointer;text-decoration:none;transition:background-color var(--dur-quick) var(--ease-entrance),border-color var(--dur-quick) var(--ease-entrance),transform var(--dur-base) var(--ease-spring),box-shadow var(--dur-base) var(--ease-entrance)}.btn-secondary:hover{border-color:var(--border-strong);background:var(--bg-surface);transform:translateY(-2px);box-shadow:0 1px 2px #00000038,0 8px 20px #0000003d}.btn-secondary:active{transform:translateY(0);transition-duration:var(--dur-tap)}.scroll-hint{margin-top:clamp(2.5rem,6vh,4.5rem);display:flex;flex-direction:row;align-items:center;gap:.85rem;color:var(--text-dim);font-family:var(--font-mono);font-size:.66rem;text-transform:uppercase;letter-spacing:var(--ls-label);text-decoration:none;transition:color var(--dur-base) var(--ease-entrance)}.scroll-hint:hover{color:var(--text-secondary)}.scroll-mouse{width:1px;height:42px;border:none;border-radius:0;background:linear-gradient(to bottom,var(--border-subtle),transparent);display:block;position:relative;padding:0;overflow:hidden;flex-shrink:0}.scroll-wheel{position:absolute;left:0;top:0;width:1px;height:14px;background:var(--accent);box-shadow:0 0 8px var(--accent-wash-strong);border-radius:0;animation:scrollWheel 2.6s var(--ease-weight) infinite}@keyframes scrollWheel{0%{transform:translateY(-16px);opacity:0}22%{opacity:.85}70%{opacity:.85}to{transform:translateY(44px);opacity:0}}@media(prefers-reduced-motion:reduce){.scroll-wheel{animation:none;opacity:.6}.typewriter-cursor,.status-indicator{animation:none}}@media(max-width:992px){#hero{text-align:center;align-items:center}.hero-content{align-items:center;max-width:min(720px,100%)}.hero-title{max-width:100%;text-align:center}.hero-chips,.hero-actions{justify-content:center}}@media(max-width:768px){.hero-title{font-size:clamp(1.8rem,6.8vw,2.5rem);line-height:1.18;white-space:normal;word-break:normal}.hero-subtitle{font-size:.96rem;line-height:1.45}.hero-chips{gap:.45rem;justify-content:center}.hero-chip{font-size:.74rem;padding:.26rem .62rem}}@media(max-width:480px){.hero-title{font-size:clamp(1.6rem,7.6vw,2.15rem)}.hero-actions{width:100%;flex-direction:column;align-items:stretch;gap:.65rem}.hero-actions .btn-primary,.hero-actions .btn-secondary{width:100%;justify-content:center}.scroll-hint{margin-top:clamp(1.5rem,3.5vh,2.5rem)}}.bento-grid{display:grid;gap:1.5rem}.bento-card{background:var(--bg-card);backdrop-filter:var(--glass-blur);-webkit-backdrop-filter:var(--glass-blur);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-xl);padding:clamp(.85rem,1.3vw,1.25rem);position:relative;overflow:hidden;box-shadow:var(--glass-shadow),var(--edge-light);transition:border-color var(--dur-base) var(--ease-exit),transform var(--dur-base) var(--ease-exit),box-shadow var(--dur-base) var(--ease-exit)}.bento-card:hover{border-color:var(--border-strong);box-shadow:var(--glass-shadow-lift),var(--edge-light);transform:translateY(-3px);transition:border-color var(--dur-base) var(--ease-entrance),transform var(--dur-slow) var(--ease-spring),box-shadow var(--dur-slow) var(--ease-entrance)}.card-ambient-glow{position:absolute;top:0;right:0;bottom:0;left:0;border-radius:inherit;pointer-events:none;z-index:0;background:linear-gradient(200deg,rgba(255,255,255,.045) 0%,rgba(255,255,255,.012) 26%,transparent 52%);opacity:.9}.bento-card>*:not(.card-ambient-glow),.project-card>*:not(.card-ambient-glow),.hardware-bento>*:not(.card-ambient-glow),.contact-form-card>*:not(.card-ambient-glow){position:relative;z-index:1}[data-theme=light] .card-ambient-glow{background:linear-gradient(200deg,rgba(255,255,255,.85) 0%,rgba(255,255,255,.3) 26%,transparent 52%)}.about-bento{grid-template-columns:minmax(290px,.72fr) minmax(0,1.28fr);column-gap:clamp(1.25rem,2.5vw,2.25rem);row-gap:1.25rem;align-items:stretch}@media(max-width:992px){.about-bento{display:flex;flex-direction:column;gap:1.25rem}.about-nav-panel,.about-nav-content{display:contents}.about-nav-header{order:1;margin-bottom:.1rem}.about-topic-list{order:2;display:flex;flex-direction:column;gap:.45rem}.portrait-card{order:3;min-height:410px;padding:clamp(1.1rem,3vw,1.6rem)}.about-nav-divider{order:4;margin:.4rem 0}.about-actions-list{order:5;display:flex;flex-direction:column;gap:.5rem}}.about-nav-panel{display:flex;flex-direction:column;padding:clamp(.5rem,1vw,.85rem) 0;background:transparent;border:none;box-shadow:none;backdrop-filter:none;-webkit-backdrop-filter:none}.about-nav-content{display:flex;flex-direction:column;gap:.85rem;height:100%}.about-nav-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.2rem}.about-nav-badge{font-family:var(--font-mono);font-size:.64rem;text-transform:uppercase;letter-spacing:var(--ls-label);color:var(--accent-soft);font-weight:600}.about-topic-list{display:flex;flex-direction:column;gap:.5rem}.about-topic-item{width:100%;display:flex;align-items:center;gap:.75rem;padding:.75rem .9rem;background:transparent;border:var(--hairline) solid transparent;border-radius:var(--radius-md);color:var(--text-primary);font-family:var(--font-sans);cursor:pointer;text-align:left;outline:none;position:relative;overflow:hidden;transition:background-color var(--dur-quick) var(--ease-entrance),border-color var(--dur-quick) var(--ease-entrance),box-shadow var(--dur-quick) var(--ease-entrance),transform var(--dur-quick) var(--ease-spring)}.about-topic-item:hover,.about-topic-item:focus-visible{background:var(--accent-wash);border-color:var(--accent-line);transform:translate(4px);box-shadow:none}.about-topic-item.active{background:var(--accent-wash-strong);border-color:var(--border-strong);transform:translate(4px);box-shadow:none}.about-topic-item.selected{background:var(--accent-wash-strong);border-color:var(--accent-soft);transform:translate(4px);box-shadow:0 0 20px -2px var(--accent-wash-strong),0 0 8px -1px var(--accent-line),inset 0 0 14px var(--accent-wash)}.about-topic-item.selected:hover{background:var(--accent-wash-strong);border-color:var(--accent);box-shadow:0 0 24px 0 var(--accent-wash-strong),0 0 10px 0 var(--accent-line),inset 0 0 16px var(--accent-wash)}.about-topic-icon{width:34px;height:34px;border-radius:var(--radius-sm);background:var(--accent-wash);border:var(--hairline) solid var(--accent-line);display:flex;align-items:center;justify-content:center;color:var(--accent-soft);flex-shrink:0;transition:transform var(--dur-quick) var(--ease-spring),color var(--dur-quick) var(--ease-entrance),background-color var(--dur-quick) var(--ease-entrance)}.about-topic-item:hover .about-topic-icon,.about-topic-item.active .about-topic-icon,.about-topic-item.selected .about-topic-icon{color:#f7f4ef;background:var(--accent);transform:scale(1.05)}.about-topic-info{flex:1;min-width:0;display:flex;flex-direction:column;gap:.15rem}.about-topic-title{font-family:var(--font-display);font-size:.95rem;font-weight:600;line-height:1.25;color:var(--text-primary);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.about-topic-tag{font-family:var(--font-mono);font-size:.65rem;color:var(--text-muted);letter-spacing:.02em}.about-topic-arrow{color:var(--text-dim);display:flex;align-items:center;justify-content:center;transition:transform var(--dur-quick) var(--ease-spring),color var(--dur-quick) var(--ease-entrance);flex-shrink:0}.about-topic-item:hover .about-topic-arrow,.about-topic-item.active .about-topic-arrow,.about-topic-item.selected .about-topic-arrow{color:var(--accent);transform:translate(3px)}.about-nav-divider{width:100%;height:var(--hairline);background:var(--border-subtle);margin-top:auto;margin-bottom:.5rem}.about-actions-list{display:flex;flex-direction:column;gap:.5rem}.about-action-row{display:flex;align-items:center;justify-content:space-between;gap:.75rem;padding:.55rem .85rem;background:transparent;border:var(--hairline) solid transparent;border-radius:var(--radius-md);transition:border-color var(--dur-quick) var(--ease-entrance),background-color var(--dur-quick) var(--ease-entrance)}.about-action-row:hover{border-color:var(--accent-line);background:var(--accent-wash)}.about-action-label{display:flex;flex-direction:column;gap:.12rem;min-width:0}.about-action-title{font-size:.84rem;font-weight:600;color:var(--text-primary);line-height:1.25}.about-action-sub{font-family:var(--font-mono);font-size:.62rem;color:var(--text-muted)}.about-action-btn{width:34px;height:34px;padding:0;display:inline-flex;align-items:center;justify-content:center;border-radius:var(--radius-sm);flex-shrink:0;cursor:pointer;text-decoration:none}.portrait-card{display:grid;grid-template-columns:1fr;grid-template-rows:1fr;align-items:stretch;text-align:left;position:relative;min-height:480px;padding:clamp(1.4rem,2.5vw,2.2rem);transform-origin:center center;will-change:transform}.portrait-card .card-ambient-glow{background:radial-gradient(520px circle at var(--mouse-x, 50%) var(--mouse-y, 50%),rgba(107,154,160,.22) 0%,rgba(107,154,160,.06) 40%,transparent 76%);opacity:0;transition:opacity .25s ease}.portrait-card:hover .card-ambient-glow{opacity:1}[data-theme=light] .portrait-card .card-ambient-glow{background:radial-gradient(520px circle at var(--mouse-x, 50%) var(--mouse-y, 50%),rgba(63,109,116,.24) 0%,rgba(63,109,116,.07) 40%,transparent 76%)}.about-card-view{grid-area:1 / 1;display:flex;flex-direction:column;width:100%;height:100%;opacity:0;visibility:hidden;pointer-events:none;transform:translateY(6px);transition:opacity .18s var(--ease-entrance),transform .18s var(--ease-spring),visibility .18s}.about-card-view.active{opacity:1;visibility:visible;pointer-events:auto;transform:translateY(0);z-index:2}.view-badge-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:.65rem;flex-wrap:wrap;gap:.5rem}.view-badge{font-family:var(--font-mono);font-size:.68rem;font-weight:600;text-transform:uppercase;letter-spacing:var(--ls-label);color:var(--accent-soft);display:inline-flex;align-items:center;gap:.4rem}.view-badge:before{content:"";width:6px;height:6px;border-radius:50%;background:var(--accent)}.view-title{font-family:var(--font-display);font-size:clamp(1.45rem,2.2vw,1.85rem);font-weight:700;line-height:var(--lh-title);letter-spacing:var(--ls-title);color:var(--text-primary);margin-bottom:.25rem}.view-subtitle{font-family:var(--font-mono);font-size:.78rem;color:var(--accent-soft);font-weight:500;letter-spacing:.03em;margin-bottom:1.1rem}.view-bio-text{font-size:.92rem;color:var(--text-secondary);line-height:1.62;margin-bottom:1.25rem}.view-tags-row{display:flex;flex-wrap:wrap;gap:.45rem;margin-bottom:1.25rem}.view-footer-tags{margin-top:auto;margin-bottom:0}.view-tag{display:inline-flex;align-items:center;gap:.35rem;font-family:var(--font-mono);font-size:.72rem;padding:.22rem .58rem;background:var(--accent-wash);border:var(--hairline) solid var(--accent-line);border-radius:var(--radius-full);color:var(--text-primary)}.view-tag svg{color:var(--accent);flex-shrink:0}.view-highlights{display:flex;flex-direction:column;gap:.5rem;margin-bottom:1.25rem;padding:.85rem 1rem;background:var(--bg-surface);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-md)}.view-highlight-item{display:flex;align-items:flex-start;gap:.6rem;font-size:.84rem;color:var(--text-secondary);line-height:1.5}.view-highlight-dot{width:5px;height:5px;border-radius:50%;background:var(--accent);margin-top:.48rem;flex-shrink:0}.view-action-footer{margin-top:auto;padding-top:.75rem;display:flex;align-items:center;justify-content:flex-start}.exp-link-btn{font-size:.82rem;padding:.45rem .95rem;display:inline-flex;align-items:center;gap:.5rem}.stats-pill-grid{display:grid;grid-template-columns:minmax(0,1.16fr) minmax(0,1fr);column-gap:.75rem;row-gap:.75rem;width:100%;margin-top:auto;margin-bottom:0}.stat-box{background:var(--bg-surface);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-sm);padding:.55rem .75rem;text-align:left;transition:border-color var(--dur-quick) var(--ease-entrance),transform var(--dur-quick) var(--ease-spring)}.stat-box:hover{border-color:var(--border-strong);transform:translateY(-2px)}.stat-value{font-family:var(--font-display);font-size:1.32rem;line-height:1.1;font-weight:600;letter-spacing:-.01em;color:var(--accent-soft);font-variant-numeric:tabular-nums lining-nums}.stat-label{font-size:.68rem;line-height:1.3;color:var(--text-muted);margin-top:.2rem}@media(max-width:576px){.stats-pill-grid{grid-template-columns:1fr 1fr;column-gap:.5rem;row-gap:.5rem}.stat-box{padding:.45rem .55rem}.stat-value{font-size:1.15rem}.stat-label{font-size:.62rem}.view-highlights{padding:.65rem .75rem;gap:.4rem}.view-highlight-item{font-size:.78rem}}.skills-showcase-wrapper{display:grid;grid-template-columns:1fr;gap:0;position:relative;width:100%;min-height:500px}@media(min-width:993px){.skills-showcase-wrapper{height:500px}}.skills-intro-ide{grid-row:1;grid-column:1;z-index:10;min-height:460px;background:#17141c;border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-lg);overflow:hidden;box-shadow:0 2px 4px #0000004d,0 18px 44px #00000073;display:flex;flex-direction:column;position:relative;transition:opacity var(--dur-slow) var(--ease-exit),filter var(--dur-slow) var(--ease-exit),transform var(--dur-slow) var(--ease-exit),visibility var(--dur-slow)}@media(max-width:768px){.skills-showcase-wrapper{min-height:auto}.skills-intro-ide{min-height:320px}.ide-editor{padding:.85rem;font-size:.78rem}}[data-theme=light] .skills-intro-ide{background:#faf8f5;border-color:#211e261f;box-shadow:0 2px 4px #3c342c0f,0 18px 44px #3c342c1a}[data-theme=light] .ide-titlebar{background:#efece6;border-bottom-color:#211e2617}[data-theme=light] .ide-title{color:var(--text-secondary)}[data-theme=light] .ide-line .keyword{color:#a34870}[data-theme=light] .ide-line .package{color:#2f565c}[data-theme=light] .enter-key-badge{background:#e5e0d6;border-color:#211e262e;color:var(--text-primary);box-shadow:0 2px #3c342c1f}.skills-intro-ide.dissolve{opacity:0;filter:blur(14px);transform:scale(.96);pointer-events:none;visibility:hidden}.ide-titlebar{display:flex;align-items:center;justify-content:space-between;padding:.85rem 1.25rem;background:#1f1b26;border-bottom:var(--hairline) solid var(--border-subtle);-webkit-user-select:none;user-select:none}.ide-window-controls{display:flex;align-items:center;gap:.5rem}.ide-dot{width:11px;height:11px;border-radius:50%}.ide-dot.red{background:#ff5f56}.ide-dot.yellow{background:#ffbd2e}.ide-dot.green{background:#27c93f}.ide-title{display:flex;align-items:center;gap:.5rem;font-family:var(--font-mono);font-size:.76rem;color:var(--text-muted)}.ide-editor{flex:1;padding:1.5rem;font-family:var(--font-mono);font-size:.9rem;line-height:1.8;display:flex;flex-direction:column;gap:.25rem}.ide-line{display:flex;align-items:center}.ide-line .keyword{color:#c98ca7;font-weight:600;margin-right:.6rem}.ide-line .package{color:var(--sand)}.typewriter-cursor{display:inline-block;width:8px;height:1.1em;background:var(--sand);margin-left:4px;vertical-align:middle;animation:blinkCursor .95s infinite}@keyframes blinkCursor{0%,to{opacity:1}50%{opacity:0}}.enter-cue{display:flex;align-items:center;gap:.65rem;color:var(--text-dim);font-family:var(--font-mono);font-size:.76rem;opacity:0;transform:translateY(6px);transition:opacity .3s var(--ease-entrance),transform .3s var(--ease-entrance)}.enter-cue.active{opacity:1;transform:translateY(0)}.enter-key-badge{padding:.2rem .6rem;background:#2e2838;border:var(--hairline) solid var(--border-strong);border-radius:4px;font-size:.75rem;box-shadow:0 2px #00000059;letter-spacing:.05em}.skills-main-ui{grid-row:1;grid-column:1;z-index:1;display:none;grid-template-columns:minmax(0,1.4fr) minmax(0,.75fr);column-gap:clamp(1.5rem,3vw,2.5rem);row-gap:1.25rem;align-items:stretch;opacity:0;transform:scale(.98);pointer-events:none;transition:opacity .38s cubic-bezier(.16,1,.3,1),transform .38s cubic-bezier(.16,1,.3,1),filter .38s cubic-bezier(.16,1,.3,1);will-change:transform,opacity,filter;position:relative;height:100%;box-sizing:border-box}.skills-main-ui.active{display:grid;opacity:1;transform:scale(1);filter:blur(0);pointer-events:auto}@media(max-width:992px){.skills-main-ui{grid-template-columns:1fr;height:auto;gap:1.5rem}}.skills-globe-column{display:flex;flex-direction:column;height:100%}.globe-glass-card{position:relative;flex:1;height:100%;min-height:500px;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-radius:0;box-shadow:none;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:visible;cursor:grab;-webkit-user-select:none;user-select:none;touch-action:pan-y}@media(max-width:992px){.globe-glass-card{min-height:310px;height:auto}}@media(max-width:480px){.globe-glass-card{min-height:275px;height:auto}}.globe-glass-card:active{cursor:grabbing}#skills-globe-canvas{width:100%;height:100%;display:block;touch-action:pan-y}.globe-hint{position:absolute;bottom:1rem;display:flex;align-items:center;gap:.5rem;padding:.35rem .85rem;background:#16131bd1;-webkit-backdrop-filter:blur(8px);backdrop-filter:blur(8px);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-full);font-size:.72rem;font-family:var(--font-mono);color:var(--text-muted);pointer-events:none;-webkit-user-select:none;user-select:none}.skills-stacks-column{display:flex;flex-direction:column;justify-content:center;height:100%;position:relative;min-width:0}.skills-stacks-list{display:flex;flex-direction:column;width:100%;height:100%;justify-content:space-between}@media(max-width:992px){.skills-stacks-list{height:auto}}.skill-list-item{position:relative;display:flex;align-items:center;justify-content:flex-end;padding:.55rem .6rem;background:transparent;border:none;border-bottom:1px solid var(--border-subtle);border-radius:0;cursor:pointer;transition:background-color .22s var(--ease-entrance),border-color .22s var(--ease-entrance),padding .22s var(--ease-entrance),transform .26s var(--ease-spring);-webkit-user-select:none;user-select:none;box-sizing:border-box;text-align:right}.skill-list-item:last-child{border-bottom:none}.skill-list-item:hover,.skill-list-item.active{background:var(--accent-wash);border-bottom-color:var(--accent);padding-left:.75rem;padding-right:.75rem;border-radius:var(--radius-xs);transform:translate(-3px)}.skill-list-info{display:flex;flex-direction:column;align-items:flex-end;gap:.15rem;text-align:right;width:100%;min-width:0}.skill-list-name{font-family:var(--font-sans);font-size:.92rem;font-weight:600;color:var(--text-primary);letter-spacing:-.01em;line-height:1.25;text-align:right}.skill-list-meta{display:flex;align-items:center;justify-content:flex-end;gap:.4rem;font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted);line-height:1.2;transition:color .2s ease;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;text-align:right}.skill-list-item:hover .skill-list-meta,.skill-list-item.active .skill-list-meta{color:var(--accent-soft)}.skill-list-category{font-weight:500}.skill-list-dot{opacity:.45;font-size:.65rem}.skill-list-badge{color:var(--text-dim);font-size:.68rem;transition:color .2s ease}.skill-list-item:hover .skill-list-badge,.skill-list-item.active .skill-list-badge{color:var(--accent);opacity:.9}.skill-list-icon{display:flex;align-items:center;justify-content:center;width:32px;height:32px;border-radius:var(--radius-xs);background:transparent;border:none;flex-shrink:0;margin-left:.75rem;transition:transform .25s var(--ease-spring)}.skill-list-icon svg{width:22px;height:22px;display:block}.skill-list-item:hover .skill-list-icon,.skill-list-item.active .skill-list-icon{transform:scale(1.15)}[data-theme=light] .skill-list-item{background:transparent;border-bottom-color:var(--border-subtle)}[data-theme=light] .skill-list-item:hover,[data-theme=light] .skill-list-item.active{background:#6b9aa014;border-bottom-color:var(--accent)}[data-theme=light] .skill-list-icon{background:transparent;border:none}.skill-modal-overlay{position:fixed;top:0;right:0;bottom:0;left:0;z-index:9999;background:#0c0a10bd;backdrop-filter:blur(10px);-webkit-backdrop-filter:blur(10px);display:flex;align-items:center;justify-content:center;padding:1.5rem;opacity:0;visibility:hidden;pointer-events:none;transition:opacity var(--dur-quick) var(--ease-entrance),visibility var(--dur-quick)}.skill-modal-overlay.active{opacity:1;visibility:visible;pointer-events:auto}.skill-modal-dialog{width:100%;max-width:540px;background:#17141d;border:var(--hairline) solid var(--border-strong);border-radius:var(--radius-md);box-shadow:0 8px 32px #000000a6,0 0 40px #6b9aa024;overflow:hidden;transform:scale(.92) translateY(12px);transition:transform var(--dur-base) var(--ease-spring);display:flex;flex-direction:column}.skill-modal-overlay.active .skill-modal-dialog{transform:scale(1) translateY(0)}.skill-modal-close{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;border-radius:50%;background:#ffffff0f;border:var(--hairline) solid var(--border-subtle);color:var(--text-muted);cursor:pointer;transition:background-color .2s ease,border-color .2s ease,color .2s ease,transform .2s ease}.skill-modal-close:hover{background:#e0665c38;border-color:#e0665c;color:#ede9e3;transform:rotate(90deg)}[data-theme=light] .skill-modal-dialog{background:#fdfcfa;border-color:var(--border-strong);box-shadow:0 8px 32px #00000038,0 0 40px #6b9aa029}@media(max-width:768px){.skill-modal-overlay{padding:.75rem}.skill-modal-dialog{max-width:calc(100vw - 1.5rem);max-height:85vh}.skill-code-body{padding:.85rem 1rem;font-size:.76rem;-webkit-overflow-scrolling:touch}.skill-expanded-footer{padding:.5rem .85rem;flex-wrap:wrap;gap:.35rem}}.skill-build-bar{position:absolute;top:0;left:0;right:0;height:3px;background:var(--accent-wash);display:none;z-index:5}.skill-build-bar.active{display:block}.skill-build-fill{height:100%;width:0%;background:linear-gradient(90deg,var(--accent),var(--sand))}.skill-code-header{display:flex;align-items:center;justify-content:space-between;padding:.75rem 1.25rem;background:#1f1b26;border-bottom:var(--hairline) solid var(--border-subtle);-webkit-user-select:none;user-select:none}.skill-code-header-left{display:flex;align-items:center;gap:.75rem}.skill-code-dots{display:flex;gap:5px}.skill-code-dots span{width:9px;height:9px;border-radius:50%}.dot-r{background:#e0665c}.dot-y{background:#dfae4e}.dot-g{background:#5fa85c}.skill-code-filename{font-family:var(--font-mono);font-size:.82rem;color:var(--accent-soft);font-weight:600}.skill-close-btn{display:inline-flex;align-items:center;justify-content:center;width:24px;height:24px;background:#ffffff0f;border:var(--hairline) solid rgba(255,255,255,.12);border-radius:50%;color:var(--text-muted);cursor:pointer;transition:color .2s var(--ease-entrance),background-color .2s var(--ease-entrance),border-color .2s var(--ease-entrance),box-shadow .2s var(--ease-entrance),opacity .2s var(--ease-entrance),transform .27s var(--ease-spring)}.skill-close-btn:hover{background:#be5a502e;border-color:#b5675e;color:var(--text-primary)}.skill-code-body{padding:1.25rem 1.5rem;flex:1;position:relative;overflow-y:auto;font-family:var(--font-mono);font-size:.85rem;line-height:1.7;color:#dcd6de}.skill-code-pre{margin:0;white-space:pre-wrap;word-break:break-word;font-family:inherit}.cascaded-code-line{display:block;line-height:1.7}.terminal-green-cursor{display:none;width:8px;height:15px;background:var(--sand);margin-left:2px;vertical-align:middle}.terminal-green-cursor.active{display:inline-block;animation:blinkCursor .75s infinite}@keyframes blinkCursor{0%,49%{opacity:1}50%,to{opacity:0}}.skill-expanded-footer{display:flex;align-items:center;justify-content:space-between;padding:.65rem 1.25rem;background:#110e1ccc;border-top:var(--hairline) solid var(--border-subtle)}.skill-runtime-note{display:inline-flex;align-items:center;gap:.4rem;font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted)}.skill-github-badge{display:inline-flex;align-items:center;gap:.4rem;padding:.3rem .85rem;background:var(--accent-wash);border:var(--hairline) solid var(--accent-line);border-radius:var(--radius-full);font-family:var(--font-sans);font-size:.74rem;font-weight:600;color:var(--text-secondary);-webkit-user-select:none;user-select:none}[data-theme=light] .skill-box-expanded{background:#fffdf8fa;border-color:var(--border-strong);box-shadow:0 2px 6px #3c342c14,0 22px 52px #3c342c26}[data-theme=light] .skill-code-header{background:#ebe6dc;border-bottom-color:var(--border-subtle)}[data-theme=light] .skill-code-filename{color:var(--accent-deep)}[data-theme=light] .skill-close-btn{background:#211e260f;border-color:#211e261f;color:var(--text-secondary)}[data-theme=light] .skill-close-btn:hover{background:#be5a5024;border-color:#b5675e;color:#943a30}[data-theme=light] .skill-code-body{color:#211e26}[data-theme=light] .skill-expanded-footer{background:#e7e2d8;border-top-color:var(--border-subtle)}[data-theme=light] .skill-runtime-note{color:var(--text-secondary)}.skill-github-badge svg{color:var(--text-muted)}.syntax-keyword{color:#c98ca7;font-weight:600}.syntax-annotation{color:#c99b6e;font-weight:600}.syntax-type{color:#8fa9b8;font-weight:500}.syntax-func{color:#b49bcb;font-weight:500}.syntax-str{color:#9db08b}.syntax-num{color:#c99b6e}.syntax-comment{color:#6b646f;font-style:italic}.hardware-bento{grid-row:1;grid-column:1;z-index:1;display:none;opacity:0;transform:scale(.98);pointer-events:none;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-radius:0;padding:clamp(.5rem,1.5vw,1rem) 0;box-shadow:none;transition:opacity .38s cubic-bezier(.16,1,.3,1),transform .38s cubic-bezier(.16,1,.3,1),filter .38s cubic-bezier(.16,1,.3,1);will-change:transform,opacity,filter;height:100%;box-sizing:border-box;flex-direction:column;justify-content:flex-start;gap:1.25rem}.hardware-bento.active{display:flex;opacity:1;transform:scale(1);filter:blur(0);pointer-events:auto}.skills-main-ui.mode-enter-right,.hardware-bento.mode-enter-right{opacity:0!important;transform:translate(36px) scale(.97)!important;filter:blur(4px)!important;pointer-events:none!important}.skills-main-ui.mode-enter-left,.hardware-bento.mode-enter-left{opacity:0!important;transform:translate(-36px) scale(.97)!important;filter:blur(4px)!important;pointer-events:none!important}.skills-main-ui.mode-exit-left,.hardware-bento.mode-exit-left{position:absolute!important;top:0;left:0;width:100%;opacity:0!important;transform:translate(-36px) scale(.97)!important;filter:blur(4px)!important;pointer-events:none!important;z-index:1}.skills-main-ui.mode-exit-right,.hardware-bento.mode-exit-right{position:absolute!important;top:0;left:0;width:100%;opacity:0!important;transform:translate(36px) scale(.97)!important;filter:blur(4px)!important;pointer-events:none!important;z-index:1}@media(prefers-reduced-motion:reduce){.skills-main-ui,.hardware-bento{transition:opacity .2s ease!important;transform:none!important;filter:none!important}.skills-main-ui.mode-enter-right,.skills-main-ui.mode-enter-left,.hardware-bento.mode-enter-right,.hardware-bento.mode-enter-left,.skills-main-ui.mode-exit-left,.skills-main-ui.mode-exit-right,.hardware-bento.mode-exit-left,.hardware-bento.mode-exit-right{transform:none!important;filter:none!important}}@media(max-width:992px){.hardware-bento{height:auto}}.skills-switch-prompt-wrap{margin-top:1rem;display:flex;justify-content:flex-end}.skills-switch-prompt{display:inline-flex;align-items:center;gap:.45rem;background:#6b9aa012;border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-pill);color:var(--accent-soft);font-family:var(--font-mono);font-size:.74rem;font-weight:500;cursor:pointer;padding:.4rem .95rem;transition:color .22s ease,border-color .22s ease,background .22s ease,transform .22s ease,box-shadow .22s ease}.skills-switch-prompt:hover{color:var(--accent);border-color:var(--accent-line);background:var(--accent-wash-strong);transform:translateY(-1px);box-shadow:0 4px 12px #0003}[data-theme=light] .skills-switch-prompt{background:#2f565c0f;border-color:#211e261f;color:var(--accent-deep)}[data-theme=light] .skills-switch-prompt:hover{background:#2f565c1f;border-color:var(--accent);box-shadow:0 4px 12px #3c342c1a}.hardware-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.5rem;flex-wrap:wrap;gap:.75rem}.hardware-title-group{display:flex;align-items:center;gap:.75rem}.hardware-content-row{display:grid;grid-template-columns:minmax(0,1.08fr) minmax(0,.92fr);column-gap:clamp(1.5rem,3.5vw,3rem);row-gap:1.5rem;align-items:flex-start;width:100%}@media(max-width:992px){.hardware-content-row{grid-template-columns:1fr;gap:1.75rem}}.hardware-specs-col{display:flex;flex-direction:column;width:100%;min-width:0}.hardware-specs-grid,.hardware-specs-list{display:flex;flex-direction:column;width:100%;margin-top:0}.hardware-desc-col{display:flex;flex-direction:column;justify-content:flex-start;min-width:0;padding-top:.35rem}.hardware-main-desc{margin:0 0 1.25rem;font-family:var(--font-sans);font-size:.95rem;line-height:1.75;color:var(--text-secondary);letter-spacing:.01em}.hardware-tags-row{display:flex;flex-wrap:wrap;gap:.5rem}.hardware-tag{display:inline-flex;align-items:center;gap:.45rem;padding:.35rem .75rem;background:var(--surface-translucent);border:1px solid var(--border-subtle);border-radius:var(--radius-pill);font-family:var(--font-mono);font-size:.72rem;color:var(--text-muted);transition:all .22s ease}.hardware-tag svg{color:var(--accent);flex-shrink:0}.hardware-tag:hover{border-color:var(--accent);color:var(--text-primary);background:var(--accent-wash);transform:translateY(-1px)}.spec-item{display:flex;align-items:center;justify-content:space-between;padding:.75rem .5rem;background:transparent;border:none;border-bottom:1px solid var(--border-subtle);border-radius:0;transition:background-color .22s var(--ease-entrance),border-color .22s var(--ease-entrance),padding .22s var(--ease-entrance),transform .26s var(--ease-spring);box-sizing:border-box}.spec-item:last-child{border-bottom:none}.spec-item:hover{background:var(--accent-wash);border-bottom-color:var(--accent);padding-left:.75rem;padding-right:.75rem;border-radius:var(--radius-xs);transform:translate(4px)}.spec-item-info{display:flex;flex-direction:column;align-items:flex-start;gap:.2rem;text-align:left;min-width:0}.spec-item-main{display:flex;align-items:baseline;gap:.65rem;flex-wrap:wrap}.spec-item-val{font-family:var(--font-display);font-size:1.05rem;font-weight:600;line-height:1.25;color:var(--text-primary);letter-spacing:var(--ls-title)}.spec-item-label{font-family:var(--font-mono);font-size:.64rem;color:var(--accent-soft);text-transform:uppercase;letter-spacing:var(--ls-label);font-weight:600;padding:.12rem .45rem;background:var(--accent-wash);border:var(--hairline) solid var(--accent-line);border-radius:var(--radius-xs)}.spec-item-detail{font-family:var(--font-sans);font-size:.8rem;line-height:1.4;color:var(--text-muted)}.spec-item-icon{display:flex;align-items:center;justify-content:center;width:36px;height:36px;color:var(--accent);flex-shrink:0;margin-left:1rem;background:transparent;border:none;transition:transform .25s var(--ease-spring),color .2s ease}.spec-item:hover .spec-item-icon{transform:scale(1.15);color:var(--text-primary)}[data-theme=light] .spec-item{background:transparent;border-bottom-color:var(--border-subtle)}[data-theme=light] .spec-item:hover{background:#6b9aa014;border-bottom-color:var(--accent)}[data-theme=light] .spec-item-label{background:#6b9aa01f;border-color:var(--accent-line);color:var(--accent-deep)}.projects-bento{display:grid;grid-template-columns:minmax(270px,320px) minmax(0,1fr);column-gap:clamp(1.25rem,2.5vw,2.25rem);row-gap:1.5rem;align-items:center;width:100%}@media(max-width:768px){.projects-bento{grid-template-columns:1fr;row-gap:1.25rem}}.projects-nav-panel{position:relative;z-index:20;display:flex;flex-direction:column;padding:clamp(.5rem,1vw,.85rem) 0;background:transparent;border:none;box-shadow:none}.projects-nav-content{display:flex;flex-direction:column;gap:.75rem;height:100%}.projects-nav-header{display:flex;align-items:center;justify-content:space-between;margin-bottom:.15rem}.projects-nav-badge{font-family:var(--font-mono);font-size:.64rem;text-transform:uppercase;letter-spacing:var(--ls-label);color:var(--accent-soft);font-weight:600}.projects-nav-count{font-family:var(--font-mono);font-size:.68rem;color:var(--text-muted)}.projects-topic-list{display:flex;flex-direction:column;gap:.45rem}@media(max-width:768px){.projects-topic-list{display:grid;grid-template-columns:1fr 1fr;gap:.45rem}}.project-topic-item{width:100%;display:flex;align-items:center;gap:.75rem;padding:.68rem .85rem;background:transparent;border:var(--hairline) solid transparent;border-radius:var(--radius-md);color:var(--text-primary);font-family:var(--font-sans);cursor:pointer;text-align:left;outline:none;position:relative;overflow:hidden;transition:background-color var(--dur-quick) var(--ease-entrance),border-color var(--dur-quick) var(--ease-entrance),transform var(--dur-quick) var(--ease-spring)}@media(max-width:768px){.project-topic-item{padding:.5rem .65rem;gap:.5rem}}.project-topic-item:hover,.project-topic-item:focus-visible{background:var(--accent-wash);border-color:var(--accent-line);transform:translate(4px)}.project-topic-item.active{background:var(--accent-wash-strong);border-color:var(--border-strong);transform:translate(4px)}[data-theme=light] .project-topic-item:hover,[data-theme=light] .project-topic-item:focus-visible{background:#6b9aa014;border-color:var(--accent)}[data-theme=light] .project-topic-item.active{background:#6b9aa01f;border-color:var(--border-strong)}.project-item-num{font-family:var(--font-mono);font-size:.78rem;font-weight:700;color:var(--accent);min-width:1.5rem}.project-item-icon{width:32px;height:32px;border-radius:var(--radius-sm);background:var(--accent-wash);border:var(--hairline) solid var(--accent-line);display:flex;align-items:center;justify-content:center;color:var(--accent-soft);flex-shrink:0}@media(max-width:768px){.project-item-icon{width:26px;height:26px}.project-item-icon svg{width:15px;height:15px}}.project-item-info{display:flex;flex-direction:column;gap:.12rem;flex:1;min-width:0}.project-item-title{font-size:.86rem;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.project-item-tag{font-size:.7rem;color:var(--text-muted);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}@media(max-width:768px){.project-item-tag{display:none}}.project-item-arrow{opacity:.4;transition:transform var(--dur-quick) var(--ease-spring),opacity var(--dur-quick) ease;color:var(--accent-soft);flex-shrink:0}@media(max-width:768px){.project-item-arrow{display:none}}.project-topic-item:hover .project-item-arrow,.project-topic-item.active .project-item-arrow{opacity:1;transform:translate(3px)}.projects-panel-controls{display:flex;align-items:center;justify-content:space-between;padding-top:.65rem;margin-top:auto;border-top:var(--hairline) solid var(--border-subtle)}.projects-hint-text{font-size:.72rem;font-family:var(--font-mono);color:var(--text-muted);opacity:.75;margin-top:.1rem}@media(max-width:768px){.projects-hint-text{text-align:center}}.projects-pyramid-stage{position:relative;z-index:5;width:100%;display:flex;flex-direction:column;justify-content:center;align-items:center;min-height:480px}:root{--prism-radius: 300px;--prism-width: 400px;--prism-height: 440px}@media(max-width:992px){:root{--prism-radius: 250px;--prism-width: 370px;--prism-height: 430px}}@media(max-width:768px){:root{--prism-radius: 170px;--prism-width: min(340px, calc(100vw - 2.5rem) );--prism-height: 420px}}@media(max-width:480px){:root{--prism-radius: 155px;--prism-width: min(320px, calc(100vw - 2rem) );--prism-height: 410px}}.projects-viewport{perspective:1200px;perspective-origin:50% 50%;position:relative;width:var(--prism-width);height:var(--prism-height);min-height:var(--prism-height);cursor:grab;touch-action:pan-y;overflow:visible;display:flex;align-items:center;justify-content:center}.projects-track.projects-pyramid{position:relative;width:100%;height:100%;transform-style:preserve-3d;transition:transform .75s cubic-bezier(.2,.85,.3,1.02);will-change:transform}.projects-track.is-dragging{cursor:grabbing;transition:none!important}.pyramid-mesh{position:absolute;top:50%;left:50%;width:0;height:0;transform-style:preserve-3d;pointer-events:none;opacity:0;transition:opacity .3s ease}.projects-pyramid[data-wireframe=true] .pyramid-mesh{opacity:.85}.pyramid-edge{position:absolute;width:2px;height:var(--prism-height);top:calc(-.5 * var(--prism-height));background:linear-gradient(180deg,transparent,var(--accent),transparent);box-shadow:0 0 8px var(--accent)}.edge-1{transform:translate3d(var(--prism-radius),0,var(--prism-radius))}.edge-2{transform:translate3d(calc(-1 * var(--prism-radius)),0,var(--prism-radius))}.edge-3{transform:translate3d(calc(-1 * var(--prism-radius)),0,calc(-1 * var(--prism-radius)))}.edge-4{transform:translate3d(var(--prism-radius),0,calc(-1 * var(--prism-radius)))}.pyramid-face-mesh{position:absolute;width:var(--prism-width);height:var(--prism-height);top:calc(-.5 * var(--prism-height));left:calc(-.5 * var(--prism-width));border:1px dashed var(--accent-line);background:#6b9aa005}.mesh-face-0{transform:rotateY(0) translateZ(var(--prism-radius))}.mesh-face-1{transform:rotateY(90deg) translateZ(var(--prism-radius))}.mesh-face-2{transform:rotateY(180deg) translateZ(var(--prism-radius))}.mesh-face-3{transform:rotateY(270deg) translateZ(var(--prism-radius))}.project-slide.project-face{position:absolute;top:0;left:0;width:var(--prism-width);height:var(--prism-height);box-sizing:border-box;transform-style:preserve-3d;backface-visibility:hidden;-webkit-backface-visibility:hidden;transform-origin:center center;transition:opacity .6s cubic-bezier(.2,.85,.3,1),filter .6s cubic-bezier(.2,.85,.3,1),border-color .3s var(--ease-entrance),box-shadow .4s var(--ease-entrance)}.project-face.face-0{transform:rotateY(0) translateZ(var(--prism-radius)) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg))}.project-face.face-1{transform:rotateY(90deg) translateZ(var(--prism-radius)) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg))}.project-face.face-2{transform:rotateY(180deg) translateZ(var(--prism-radius)) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg))}.project-face.face-3{transform:rotateY(270deg) translateZ(var(--prism-radius)) rotateX(var(--tilt-x, 0deg)) rotateY(var(--tilt-y, 0deg))}.project-face[data-active=true]{opacity:1;filter:none;pointer-events:auto;cursor:default;z-index:10}.project-face[data-active=true]>div:not(.card-ambient-glow),.project-face[data-active=true]>.project-actions{opacity:1;pointer-events:auto}.project-face[data-active=true]:hover{border-color:var(--border-strong);box-shadow:0 2px 4px #0000004d,0 16px 38px #0006}.project-face[data-adjacent=true]{opacity:.58;filter:brightness(.82) saturate(.9);border:1px solid var(--accent-line);box-shadow:0 10px 30px #00000073,0 0 18px #6b9aa024;pointer-events:auto;cursor:pointer;z-index:5}.project-face[data-adjacent=true]:hover{opacity:.88;filter:brightness(.96) saturate(1);border-color:var(--accent);box-shadow:0 14px 38px #0000008c,0 0 24px #6b9aa040}.project-face[data-adjacent=true]>div:not(.card-ambient-glow),.project-face[data-adjacent=true]>.project-actions{opacity:.9}.project-face:not([data-active=true]) *{pointer-events:none!important}.project-face:not([data-active=true]):not([data-adjacent=true]){opacity:.05;filter:blur(1px);pointer-events:none;z-index:1}.project-card .card-ambient-glow{background:radial-gradient(560px circle at var(--mouse-x, 50%) var(--mouse-y, 50%),rgba(107,154,160,.22) 0%,rgba(107,154,160,.06) 40%,transparent 76%);opacity:0;transition:opacity .25s ease}.project-slide[data-active=true]:hover .card-ambient-glow{opacity:1}[data-theme=light] .project-card .card-ambient-glow{background:radial-gradient(560px circle at var(--mouse-x, 50%) var(--mouse-y, 50%),rgba(63,109,116,.24) 0%,rgba(63,109,116,.07) 40%,transparent 76%)}@media(max-width:768px){.projects-viewport{min-height:var(--prism-height);height:var(--prism-height);padding:0;margin:0 auto}.projects-track.projects-pyramid{min-height:var(--prism-height);height:var(--prism-height)}.project-slide.project-face{padding:1.1rem 1.15rem;width:var(--prism-width);height:var(--prism-height);display:flex;flex-direction:column;justify-content:space-between;box-sizing:border-box}.project-header{margin-bottom:.35rem}.project-icon-box{width:32px;height:32px}.project-slide .project-title{font-size:1.02rem;line-height:1.3;margin-bottom:.25rem}.project-slide .project-desc{font-size:.78rem;line-height:1.42;display:-webkit-box;-webkit-line-clamp:2;line-clamp:2;-webkit-box-orient:vertical;overflow:hidden;margin-bottom:.4rem}.project-slide .tech-tags-list{margin-bottom:.4rem;gap:.25rem}.project-slide .tech-tag{font-size:.65rem;padding:.12rem .42rem}.project-actions{padding-top:.45rem;gap:.35rem;display:flex;flex-wrap:wrap}.btn-project-link{padding:.32rem .65rem;font-size:.72rem;gap:.35rem}.projects-panel-controls{justify-content:center;gap:.85rem;flex-wrap:wrap;padding-top:.5rem}}.deck-controls{display:flex;align-items:center;justify-content:space-between;gap:1.25rem;flex-wrap:wrap}.deck-counter{font-family:var(--font-display);font-size:1.25rem;color:var(--text-muted);letter-spacing:.04em;min-width:5.5rem;-webkit-user-select:none;user-select:none}.deck-counter i{font-style:normal;color:var(--sand);margin:0 .15rem}.deck-dots{display:flex;align-items:center;gap:.5rem}.deck-dot{width:8px;height:8px;padding:0;border:none;border-radius:var(--radius-full);background:var(--purple-muted);cursor:pointer;transition:width var(--dur-slow) var(--ease-weight),background-color var(--dur-base) var(--ease-entrance)}.deck-dot:hover{background:var(--accent-soft)}.deck-dot[aria-selected=true]{width:26px;background:var(--accent)}.deck-arrows{display:flex;align-items:center;gap:.6rem;min-width:5.5rem;justify-content:flex-end}.deck-arrow{width:40px;height:40px;display:inline-flex;align-items:center;justify-content:center;border-radius:50%;background:var(--bg-surface);border:var(--hairline) solid var(--border-subtle);color:var(--text-secondary);cursor:pointer;transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),box-shadow .25s var(--ease-entrance),opacity .25s var(--ease-entrance),transform .338s var(--ease-spring)}.deck-arrow:hover:not(:disabled){color:var(--text-primary);border-color:var(--border-strong);background:var(--bg-surface-hover)}.deck-arrow:disabled{opacity:.32;cursor:default}@media(max-width:576px){.deck-controls{justify-content:center}.deck-counter,.deck-arrows{min-width:0}}@media(prefers-reduced-motion:reduce){.projects-track{transition-duration:.01ms}}.project-card{background:#1c1922f0;backdrop-filter:var(--glass-blur-heavy);-webkit-backdrop-filter:var(--glass-blur-heavy);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-xl);padding:clamp(1.2rem,2vw,1.75rem);display:flex;flex-direction:column;justify-content:space-between;position:relative;overflow:hidden;box-shadow:0 4px 12px #00000040,0 20px 48px #00000061;transition:color .35s var(--ease-entrance),background-color .35s var(--ease-entrance),border-color .35s var(--ease-entrance),box-shadow .35s var(--ease-entrance),opacity .35s var(--ease-entrance),transform .472s var(--ease-spring)}.project-card:hover{border-color:var(--border-strong);transform:translateY(-3px);box-shadow:0 2px 4px #0000004d,0 16px 38px #0006}.project-header{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:.75rem}.project-icon-box{width:42px;height:42px;border-radius:var(--radius-md);background:var(--purple-subtle);border:var(--hairline) solid var(--border-subtle);display:flex;align-items:center;justify-content:center;color:var(--purple-light)}.project-type-badge{font-size:.72rem;font-family:var(--font-mono);padding:.2rem .6rem;background:var(--bg-surface);border:var(--hairline) solid var(--border-subtle);border-radius:var(--radius-full);color:var(--purple-light)}.project-title{font-size:clamp(1.2rem,1.7vw,1.5rem);font-weight:500;line-height:1.35;letter-spacing:var(--ls-title);margin-bottom:.45rem;max-width:100%;display:block}.project-desc{font-size:.86rem;color:var(--text-secondary);line-height:1.48;max-width:100%;margin-bottom:.85rem;display:-webkit-box;-webkit-line-clamp:3;line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}.tech-tags-list{display:flex;flex-wrap:wrap;gap:.35rem;margin-bottom:.85rem}.tech-tag{font-size:.72rem;font-family:var(--font-mono);padding:.18rem .55rem;border-radius:var(--radius-xs);background:transparent;border:var(--hairline) solid var(--border-subtle);color:var(--text-muted);letter-spacing:.01em;transition:color .2s var(--ease-entrance),background-color .2s var(--ease-entrance),border-color .2s var(--ease-entrance),box-shadow .2s var(--ease-entrance),opacity .2s var(--ease-entrance),transform .27s var(--ease-spring)}.tech-tag:hover{background:var(--purple-subtle);border-color:var(--border-strong);color:var(--text-primary)}.project-actions{display:flex;flex-wrap:wrap;gap:.55rem;align-items:center;padding-top:.75rem;border-top:var(--hairline) solid var(--border-subtle)}.btn-project-link{display:inline-flex;align-items:center;gap:.4rem;padding:.42rem .85rem;font-size:.78rem;font-weight:600;border-radius:var(--radius-full);text-decoration:none;transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),box-shadow .25s var(--ease-entrance),opacity .25s var(--ease-entrance),transform .338s var(--ease-spring)}.btn-project-primary{background:var(--accent);color:#f7f4ef;box-shadow:0 1px 2px #00000038,0 4px 12px #0000003d}.btn-project-primary:hover{filter:brightness(1.12);transform:translateY(-1px)}.btn-project-secondary{background:var(--bg-surface);border:var(--hairline) solid var(--border-subtle);color:var(--text-primary)}.btn-project-secondary:hover{border-color:var(--border-strong);background:var(--purple-subtle);transform:translateY(-2px)}[data-theme=light] .project-card{background:#fffdf8f5;border-color:#211e261a;box-shadow:0 4px 12px #3c342c0f,0 20px 48px #3c342c1a}[data-theme=light] .project-card:hover{border-color:var(--accent);box-shadow:0 6px 18px #3c342c17,0 24px 54px #3c342c24}[data-theme=light] .project-icon-box{background:#3f6d7414;border-color:#3f6d7433;color:var(--accent)}[data-theme=light] .project-type-badge{background:#3f6d7414;border-color:#3f6d7433;color:var(--accent-deep)}[data-theme=light] .project-title{color:var(--text-primary)}[data-theme=light] .project-desc{color:var(--text-secondary)}[data-theme=light] .tech-tag{background:#211e260a;border-color:#211e261a;color:var(--text-secondary)}[data-theme=light] .tech-tag:hover{background:#3f6d741a;border-color:var(--accent);color:var(--accent-deep)}[data-theme=light] .btn-project-secondary{background:#fff;border-color:#211e2624;color:var(--text-primary);box-shadow:0 1px 3px #3c342c0f}[data-theme=light] .btn-project-secondary:hover{background:#3f6d7414;border-color:var(--accent);color:var(--accent-deep)}[data-theme=light] .deck-counter{color:var(--text-secondary)}[data-theme=light] .deck-arrow{background:#fffdf8e6;border-color:#211e261f;color:var(--text-secondary)}[data-theme=light] .deck-arrow:hover:not(:disabled){background:#fff;border-color:var(--accent);color:var(--accent-deep);box-shadow:0 2px 6px #3c342c14}.contact-bento-grid{display:grid;grid-template-columns:minmax(0,.86fr) minmax(0,1.3fr);column-gap:clamp(1.25rem,2.8vw,2.75rem);row-gap:1.25rem;align-items:stretch}@media(max-width:992px){.contact-bento-grid{grid-template-columns:1fr;gap:1.25rem;align-items:start}.contact-info-panel{height:auto;gap:.55rem}.contact-chip{flex:initial}}.contact-info-panel{display:flex;flex-direction:column;gap:.55rem;height:100%}.contact-chip{display:flex;align-items:center;gap:.85rem;padding:.65rem .85rem;background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-bottom:var(--hairline) solid var(--border-quiet);border-radius:0;text-decoration:none;color:var(--text-primary);transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),transform .338s var(--ease-spring);flex:1;min-height:0}.contact-chip:hover{background:var(--accent-wash);border-bottom-color:var(--accent-line);transform:translate(4px);box-shadow:none;border-radius:var(--radius-sm)}.contact-chip-icon{width:36px;height:36px;border-radius:var(--radius-md);background:var(--accent-wash);border:var(--hairline) solid var(--accent-line);display:flex;align-items:center;justify-content:center;color:var(--accent-soft);flex-shrink:0;transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),transform .338s var(--ease-spring)}.contact-chip:hover .contact-chip-icon{background:var(--accent);color:#f7f4ef;transform:scale(1.04)}.contact-chip-label{font-size:.68rem;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em}.contact-chip-value{font-size:.88rem;font-weight:600;color:var(--text-primary)}.contact-form-card{background:transparent;backdrop-filter:none;-webkit-backdrop-filter:none;border:none;border-radius:0;padding:0;box-shadow:none;position:relative;height:100%;box-sizing:border-box;display:flex;flex-direction:column}#contact-form{height:100%;display:flex;flex-direction:column}.form-group{margin-bottom:.75rem}#contact-form .form-group:nth-of-type(3){flex:1;display:flex;flex-direction:column;margin-bottom:1rem}.form-label{display:block;font-size:.78rem;font-weight:600;color:var(--text-secondary);margin-bottom:.35rem}.form-input,.form-textarea{width:100%;padding:.65rem .85rem;background:#0e0c16b3;border:1.5px solid var(--border-subtle);border-radius:var(--radius-md);color:var(--text-primary);font-family:var(--font-sans);font-size:.88rem;transition:color .3s var(--ease-entrance),background-color .3s var(--ease-entrance),border-color .3s var(--ease-entrance),box-shadow .3s var(--ease-entrance),opacity .3s var(--ease-entrance),transform .405s var(--ease-spring);outline:none;box-sizing:border-box}@media(max-width:768px){.form-input,.form-textarea{font-size:16px!important}}[data-theme=light] .form-input,[data-theme=light] .form-textarea{background:#ffffffd9}.form-input:focus,.form-textarea:focus{border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-wash);background:#26222ed9}[data-theme=light] .form-input:focus,[data-theme=light] .form-textarea:focus{background:#fff}.form-textarea{resize:none;flex:1;min-height:110px;height:100%}#contact-form button[type=submit]{margin-top:auto}.form-input[aria-invalid=true],.form-textarea[aria-invalid=true]{border-color:#c4776b}.form-input[aria-invalid=true]:focus,.form-textarea[aria-invalid=true]:focus{box-shadow:0 0 0 3px #c4776b29}a.skill-github-badge{text-decoration:none}a.skill-github-badge[href]:hover{text-decoration:underline;text-underline-offset:3px}.form-trap{position:absolute;left:-10000px;width:1px;height:1px;overflow:hidden}[data-theme=light] .contact-chip{background:transparent;border-color:transparent;border-bottom-color:#211e2614;box-shadow:none}[data-theme=light] .contact-chip:hover{background:var(--accent-wash);border-bottom-color:var(--accent);box-shadow:none}[data-theme=light] .contact-chip-icon{background:#3f6d7414;color:var(--accent)}[data-theme=light] .contact-chip:hover .contact-chip-icon{background:var(--accent);color:#f7f4ef}[data-theme=light] .contact-form-card{background:transparent;border-color:transparent;box-shadow:none}[data-theme=light] .form-label{color:var(--text-secondary)}[data-theme=light] .form-input,[data-theme=light] .form-textarea{background:#fff;border:1.5px solid rgba(33,30,38,.14);color:var(--text-primary)}[data-theme=light] .form-input::placeholder,[data-theme=light] .form-textarea::placeholder{color:var(--text-dim)}[data-theme=light] .form-input:focus,[data-theme=light] .form-textarea:focus{background:#fff;border-color:var(--accent);box-shadow:0 0 0 3px var(--accent-wash)}.site-footer{margin-top:clamp(1rem,2vh,1.6rem);padding-top:.75rem;border-top:var(--hairline) solid var(--border-subtle);display:flex;flex-direction:column;align-items:center;gap:.55rem;text-align:center}.footer-social-links{display:flex;align-items:center;gap:.85rem}.footer-icon-link{width:42px;height:42px;border-radius:50%;background:var(--bg-surface);border:var(--hairline) solid var(--border-subtle);display:flex;align-items:center;justify-content:center;color:var(--text-secondary);transition:color .25s var(--ease-entrance),background-color .25s var(--ease-entrance),border-color .25s var(--ease-entrance),box-shadow .25s var(--ease-entrance),opacity .25s var(--ease-entrance),transform .338s var(--ease-spring);text-decoration:none}.footer-icon-link:hover{color:#f7f4ef;background:var(--accent);border-color:var(--accent);box-shadow:0 1px 2px #00000042,0 6px 16px #0000004d;transform:translateY(-2px)}.copyright-text{font-size:.85rem;color:var(--text-muted)}[data-theme=light] .footer-icon-link{background:#fffdf8e6;border-color:#211e261a;color:var(--text-secondary)}[data-theme=light] .footer-icon-link:hover{background:var(--accent);border-color:var(--accent);color:#f7f4ef}.modal-overlay{position:fixed;top:0;left:0;right:0;bottom:0;background:#05040ad9;backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);z-index:200;display:flex;align-items:center;justify-content:center;padding:1.5rem;opacity:0;visibility:hidden;transition:color .3s var(--ease-entrance),background-color .3s var(--ease-entrance),border-color .3s var(--ease-entrance),box-shadow .3s var(--ease-entrance),opacity .3s var(--ease-entrance),transform .405s var(--ease-spring)}.modal-overlay.active{opacity:1;visibility:visible}.modal-container{width:100%;max-width:850px;max-height:90vh;background:var(--bg-elevated);border:var(--hairline) solid var(--border-strong);border-radius:var(--radius-lg);box-shadow:0 3px 8px #0006,0 28px 64px #0000008c;display:flex;flex-direction:column;overflow:hidden;transform:scale(.95);transition:transform var(--dur-base) var(--ease-spring)}.modal-overlay.active .modal-container{transform:scale(1)}.modal-header{display:flex;align-items:center;justify-content:space-between;padding:1.25rem 1.75rem;background:var(--bg-surface);border-bottom:var(--hairline) solid var(--border-subtle)}.modal-title{font-size:1.2rem;font-weight:700;display:flex;align-items:center;gap:.6rem}.modal-close-btn{background:transparent;border:none;color:var(--text-muted);cursor:pointer;padding:.4rem;border-radius:50%;display:flex;align-items:center;justify-content:center;transition:color .2s var(--ease-entrance),background-color .2s var(--ease-entrance),border-color .2s var(--ease-entrance),box-shadow .2s var(--ease-entrance),opacity .2s var(--ease-entrance),transform .27s var(--ease-spring)}.modal-close-btn:hover{color:var(--text-primary);background:var(--purple-subtle)}[data-theme=light] .modal-overlay{background:#28231e73}[data-theme=light] .modal-container{background:#faf8f5;border-color:#211e261f;box-shadow:0 4px 16px #3c342c1f,0 24px 64px #3c342c33}[data-theme=light] .modal-header{background:#efece6;border-bottom-color:#211e261a}[data-theme=light] .modal-close-btn:hover{background:#211e2614}.modal-body{padding:1.75rem;overflow-y:auto;font-size:.92rem;line-height:1.65}.cv-section-title{font-size:1rem;font-weight:700;color:var(--purple-light);border-bottom:var(--hairline) solid var(--border-subtle);padding-bottom:.4rem;margin:1.5rem 0 .75rem;text-transform:uppercase;letter-spacing:.05em}.cv-section-title:first-of-type{margin-top:0}@media(max-width:768px){.modal-overlay{padding:.75rem}.modal-container{max-height:94vh;border-radius:var(--radius-md)}.modal-header{padding:.75rem .95rem;flex-wrap:wrap;gap:.5rem}.modal-title{font-size:.95rem;flex:1;min-width:0;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}#cv-modal-print{display:none!important}.modal-body{padding:.95rem;font-size:.85rem;line-height:1.55;-webkit-overflow-scrolling:touch}.cv-section-title{font-size:.85rem;margin:1rem 0 .5rem}}.toast-notification{position:fixed;bottom:2rem;right:2rem;padding:.9rem 1.4rem;background:var(--bg-elevated);border:var(--hairline) solid var(--border-strong);border-radius:var(--radius-md);color:var(--text-primary);box-shadow:0 2px 6px #00000059,0 16px 40px #00000073;font-size:.9rem;font-weight:600;display:flex;align-items:center;gap:.75rem;z-index:300;transform:translateY(100px);opacity:0;transition:color .35s var(--ease-entrance),background-color .35s var(--ease-entrance),border-color .35s var(--ease-entrance),box-shadow .35s var(--ease-entrance),opacity .35s var(--ease-entrance),transform .472s var(--ease-spring)}.toast-notification.active{transform:translateY(0);opacity:1}@property --mask-stop{syntax: "<percentage>"; inherits: false; initial-value: 0%;}[data-reveal]{opacity:0;transform:translateY(20px);transition:opacity var(--dur-reveal) var(--ease-entrance) var(--reveal-delay, 0ms),transform var(--dur-reveal) var(--ease-weight) var(--reveal-delay, 0ms);will-change:opacity,transform}[data-reveal].is-revealed{opacity:1;transform:translateY(0)}@supports (mask-image: linear-gradient(#000,#000)) and (animation-timeline: auto){[data-reveal]{--mask-stop: 0%;mask-image:linear-gradient(to bottom,#000 var(--mask-stop),rgba(0,0,0,.35) calc(var(--mask-stop) + 14%),transparent calc(var(--mask-stop) + 30%));-webkit-mask-image:linear-gradient(to bottom,#000 var(--mask-stop),rgba(0,0,0,.35) calc(var(--mask-stop) + 14%),transparent calc(var(--mask-stop) + 30%));transition:opacity var(--dur-reveal) var(--ease-entrance) var(--reveal-delay, 0ms),transform var(--dur-reveal) var(--ease-weight) var(--reveal-delay, 0ms),--mask-stop var(--dur-reveal) var(--ease-entrance) var(--reveal-delay, 0ms)}[data-reveal].is-revealed{--mask-stop: 110%}[data-reveal].reveal-done{mask-image:none;-webkit-mask-image:none}}@media(prefers-reduced-motion:reduce){[data-reveal]{opacity:1;transform:none;mask-image:none;-webkit-mask-image:none;transition:none}}.project-type-badge,.contact-chip-label,.form-label,.deck-counter,.skill-runtime-note,.copyright-text,.admin-route-badge{font-family:var(--font-mono);letter-spacing:var(--ls-label);text-transform:uppercase;font-weight:500}.project-type-badge{font-size:.62rem;background:transparent;border:var(--hairline) solid var(--border-subtle);color:var(--text-muted);border-radius:var(--radius-full);padding:.28rem .7rem}.contact-chip-label{font-size:.6rem;color:var(--text-dim);margin-bottom:.25rem}.contact-chip-value{font-size:.92rem;letter-spacing:.005em;color:var(--text-primary)}.form-label{font-size:.6rem;color:var(--text-dim)}.deck-counter{font-size:.68rem;font-variant-numeric:tabular-nums}.skill-runtime-note{font-size:.62rem;text-transform:none;letter-spacing:.05em;line-height:1.6}.copyright-text{font-size:.62rem;text-transform:none;letter-spacing:.06em;color:var(--text-dim)}.admin-route-badge{font-size:.6rem;text-transform:none;letter-spacing:.05em;line-height:1.6}.hardware-header h3,.modal-title,.cv-section-title{font-family:var(--font-display);font-weight:700;letter-spacing:var(--ls-title);line-height:var(--lh-title)}.form-input,.form-textarea{font-family:var(--font-sans);font-size:.92rem;line-height:1.6;letter-spacing:var(--ls-body);border-radius:var(--radius-sm);transition:border-color var(--dur-quick) var(--ease-entrance),background-color var(--dur-quick) var(--ease-entrance),box-shadow var(--dur-base) var(--ease-entrance)}.form-input::placeholder,.form-textarea::placeholder{color:var(--text-dim)}
