:root{color-scheme:dark;--bg: #0a0c0f;--bg-soft: #0c0f13;--surface-1: #11151a;--surface-2: #181d24;--surface-3: #1f262f;--text: #e6edf3;--text-muted: #8a97a6;--text-faint: #5a6675;--border: #232a33;--border-strong: #303945;--accent: #4fd1c5;--accent-bright: #6ee7db;--accent-2: #7c8cff;--success: #56d364;--danger: #f47174;--warning: #e3b341;--accent-glow: rgba(79, 209, 197, .14);--accent-line: rgba(79, 209, 197, .3);--accent-soft: rgba(79, 209, 197, .08);--accent2-soft: rgba(124, 140, 255, .1);--font-display: "Space Grotesk", "Inter", system-ui, sans-serif;--font-sans: "Inter", system-ui, -apple-system, "Segoe UI", sans-serif;--font-mono: "JetBrains Mono", "SFMono-Regular", Consolas, monospace;--fs-xs: .75rem;--fs-sm: .875rem;--fs-base: 1rem;--fs-md: 1.25rem;--fs-lg: 1.5625rem;--fs-xl: 1.953rem;--fs-2xl: 2.441rem;--fs-3xl: 3.052rem;--fs-hero: clamp(2.6rem, 7vw, 5rem);--fs-section: clamp(1.75rem, 4vw, 2.6rem);--lh-tight: 1.1;--lh-snug: 1.3;--lh-normal: 1.65;--fw-regular: 400;--fw-medium: 500;--fw-semibold: 600;--fw-bold: 700;--sp-1: .25rem;--sp-2: .5rem;--sp-3: .75rem;--sp-4: 1rem;--sp-5: 1.5rem;--sp-6: 2rem;--sp-8: 3rem;--sp-10: 4rem;--sp-12: 6rem;--sp-16: 8rem;--r-sm: 4px;--r-md: 8px;--r-lg: 12px;--r-xl: 18px;--r-full: 9999px;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow-md: 0 4px 16px rgba(0, 0, 0, .45);--shadow-lg: 0 12px 40px rgba(0, 0, 0, .55);--glow-accent: 0 0 0 1px var(--accent-line), 0 0 24px var(--accent-glow);--glow-focus: 0 0 0 2px var(--bg), 0 0 0 4px var(--accent);--maxw: 1120px;--maxw-narrow: 760px;--nav-h: 68px;--ease: cubic-bezier(.22, 1, .36, 1);--t-fast: .14s;--t-med: .22s;--t-slow: .42s}*,*:before,*:after{box-sizing:border-box}*{margin:0}html{scroll-behavior:smooth;scroll-padding-top:calc(var(--nav-h) + 16px);-webkit-text-size-adjust:100%}body{background-color:var(--bg);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-base);line-height:var(--lh-normal);font-weight:var(--fw-regular);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;text-rendering:optimizeLegibility;min-height:100vh;overflow-x:hidden}.backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:-1;pointer-events:none;background-color:var(--bg)}.backdrop:before{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background-image:linear-gradient(rgba(230,237,243,.022) 1px,transparent 1px),linear-gradient(90deg,rgba(230,237,243,.022) 1px,transparent 1px);background-size:32px 32px;mask-image:radial-gradient(ellipse 100% 70% at 50% 0%,#000 35%,transparent 85%);-webkit-mask-image:radial-gradient(ellipse 100% 70% at 50% 0%,#000 35%,transparent 85%)}.backdrop:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;background:radial-gradient(600px 320px at 12% -5%,var(--accent-soft),transparent 60%),radial-gradient(680px 360px at 100% 8%,var(--accent2-soft),transparent 60%)}img,picture,svg,video{display:block;max-width:100%}a{color:inherit;text-decoration:none}button,input,textarea{font:inherit;color:inherit}button{background:none;border:none;cursor:pointer}ul,ol{list-style:none;padding:0}::selection{background:var(--accent);color:var(--bg)}*{scrollbar-width:thin;scrollbar-color:var(--border-strong) transparent}*::-webkit-scrollbar{width:10px;height:10px}*::-webkit-scrollbar-thumb{background:var(--border-strong);border-radius:var(--r-full);border:2px solid var(--bg)}*::-webkit-scrollbar-thumb:hover{background:var(--text-faint)}h1,h2,h3,h4{font-family:var(--font-display);font-weight:var(--fw-semibold);line-height:var(--lh-tight);letter-spacing:-.02em;color:var(--text)}p{color:var(--text)}code{font-family:var(--font-mono);font-size:.9em}:focus-visible{outline:none;box-shadow:var(--glow-focus);border-radius:var(--r-sm)}.skip-link{position:fixed;top:8px;left:8px;z-index:200;transform:translateY(-150%);padding:.6rem 1rem;background:var(--accent);color:#04201d;font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:var(--fw-semibold);border-radius:var(--r-sm);transition:transform var(--t-fast) var(--ease)}.skip-link:focus{transform:none;outline:none;box-shadow:var(--glow-focus)}main:focus-visible{outline:none}.container{width:100%;max-width:var(--maxw);margin-inline:auto;padding-inline:var(--sp-5)}.section{padding-block:clamp(var(--sp-10),12vw,var(--sp-16));position:relative}.section--tight{padding-block:var(--sp-10)}.eyebrow{font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:var(--fw-medium);letter-spacing:.08em;color:var(--text-muted);display:inline-flex;align-items:center;gap:.4ch;margin-bottom:var(--sp-4)}.eyebrow .tok{color:var(--accent)}.section-title{font-size:var(--fs-section);margin-bottom:var(--sp-3)}.section-lead{color:var(--text-muted);max-width:60ch;font-size:var(--fs-md);line-height:var(--lh-snug)}.section-head{margin-bottom:var(--sp-8)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:var(--sp-2);padding:.7rem 1.25rem;min-height:44px;border-radius:var(--r-sm);font-family:var(--font-mono);font-size:var(--fs-sm);font-weight:var(--fw-medium);letter-spacing:.02em;border:1px solid var(--border-strong);background:var(--surface-1);color:var(--text);transition:border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease),transform var(--t-fast) var(--ease),background var(--t-med) var(--ease)}.btn:hover{border-color:var(--accent-line);box-shadow:var(--glow-accent);transform:translateY(-2px)}.btn:active{transform:translateY(0)}.btn--primary{background:var(--accent);color:#04201d;border-color:var(--accent);font-weight:var(--fw-semibold)}.btn--primary:hover{background:var(--accent-bright);border-color:var(--accent-bright)}.btn--ghost{background:transparent}.btn-icon{width:1.05em;height:1.05em}.tag{display:inline-flex;align-items:center;gap:.4ch;padding:.2rem .55rem;border-radius:var(--r-sm);font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:var(--fw-medium);letter-spacing:.02em;color:var(--text-muted);background:var(--surface-2);border:1px solid var(--border);white-space:nowrap}.reveal{opacity:0;transform:translateY(18px);transition:opacity var(--t-slow) var(--ease),transform var(--t-slow) var(--ease);will-change:opacity,transform}.reveal.is-visible{opacity:1;transform:none}.reveal[data-delay="1"]{transition-delay:80ms}.reveal[data-delay="2"]{transition-delay:.16s}.reveal[data-delay="3"]{transition-delay:.24s}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}.reveal{opacity:1;transform:none}}@keyframes blink{0%,to{opacity:1}50%{opacity:0}}@keyframes shimmer{0%{background-position:-180% 0}to{background-position:180% 0}}@keyframes modal-in{0%{opacity:0;transform:translateY(12px) scale(.98)}to{opacity:1;transform:none}}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.nav{position:fixed;top:0;left:0;right:0;z-index:50;height:var(--nav-h);display:flex;align-items:center;transition:background var(--t-med) var(--ease),border-color var(--t-med) var(--ease),backdrop-filter var(--t-med) var(--ease);border-bottom:1px solid transparent}.nav.is-scrolled{background:#0a0c0fc7;background:color-mix(in srgb,var(--bg) 78%,transparent);backdrop-filter:blur(12px) saturate(140%);-webkit-backdrop-filter:blur(12px) saturate(140%);border-bottom-color:var(--border)}.nav__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);width:100%}.nav__brand{display:inline-flex;align-items:center;gap:var(--sp-3);font-family:var(--font-mono);font-size:var(--fs-sm)}.nav__logo{display:grid;place-items:center;width:36px;height:36px;border-radius:var(--r-sm);background:var(--surface-2);border:1px solid var(--accent-line);color:var(--accent);font-weight:var(--fw-bold);letter-spacing:.02em;box-shadow:inset 0 0 12px var(--accent-soft)}.nav__prompt{color:var(--accent)}.nav__at{color:var(--text-faint)}.nav__links{display:flex;align-items:center;gap:var(--sp-5)}.nav__link{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text-muted);display:inline-flex;align-items:baseline;gap:.4ch;transition:color var(--t-fast) var(--ease);position:relative}.nav__link-idx{color:var(--accent);font-size:var(--fs-xs)}.nav__link:hover,.nav__link.is-active{color:var(--text)}.nav__link.is-active:after{content:"";position:absolute;left:0;bottom:-6px;width:100%;height:2px;background:var(--accent);border-radius:var(--r-full)}.nav__cta{display:flex;align-items:center}.nav__resume{padding:.45rem .9rem;min-height:38px}.nav__burger{display:none;flex-direction:column;justify-content:center;gap:5px;width:42px;height:42px;border-radius:var(--r-sm);border:1px solid var(--border)}.nav__burger span{display:block;height:2px;width:20px;margin-inline:auto;background:var(--text);transition:transform var(--t-med) var(--ease),opacity var(--t-med) var(--ease)}.nav__burger.is-open span:nth-child(1){transform:translateY(7px) rotate(45deg)}.nav__burger.is-open span:nth-child(2){opacity:0}.nav__burger.is-open span:nth-child(3){transform:translateY(-7px) rotate(-45deg)}.nav__mobile{position:fixed;inset:var(--nav-h) 0 0 0;background:#0a0c0fdb;background:color-mix(in srgb,var(--bg) 86%,transparent);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px);opacity:0;pointer-events:none;transition:opacity var(--t-med) var(--ease);z-index:49}.nav__mobile.is-open{opacity:1;pointer-events:auto}.nav__mobile-inner{display:flex;flex-direction:column;gap:var(--sp-2);padding:var(--sp-6) var(--sp-5)}.nav__mobile-link{font-family:var(--font-mono);font-size:var(--fs-md);color:var(--text);padding:var(--sp-3) 0;border-bottom:1px solid var(--border);display:inline-flex;gap:.6ch;align-items:baseline}.nav__mobile-resume{margin-top:var(--sp-4);align-self:flex-start}.hero{min-height:100svh;display:flex;align-items:center;padding-top:calc(var(--nav-h) + var(--sp-6));padding-bottom:var(--sp-10);position:relative}.hero__inner{display:grid;grid-template-columns:1.15fr .85fr;gap:var(--sp-8);align-items:center;width:100%}.hero__eyebrow{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text-muted);display:inline-flex;align-items:center;gap:.6ch;margin-bottom:var(--sp-5)}.hero__eyebrow .tok{color:var(--accent)}.hero__pin{display:inline-flex;align-items:center;gap:.3ch;margin-left:.6ch;padding-left:.8ch;border-left:1px solid var(--border);color:var(--text-faint)}.hero__title{font-size:var(--fs-hero);line-height:1.04;letter-spacing:-.03em;margin-bottom:var(--sp-4)}.hero__title-line{display:block}.hero__title-line:last-child{background:linear-gradient(90deg,var(--accent),var(--accent-2));-webkit-background-clip:text;background-clip:text;color:transparent}.hero__roles{font-family:var(--font-mono);font-size:clamp(1rem,2.4vw,1.4rem);color:var(--text);display:flex;align-items:center;gap:.6ch;margin-bottom:var(--sp-5);min-height:1.6em}.hero__roles-prefix{color:var(--accent)}.hero__cursor{display:inline-block;width:.6ch;height:1.15em;background:var(--accent);animation:blink 1s step-end infinite;translate:0 2px}.hero__tagline{color:var(--text-muted);font-size:var(--fs-md);line-height:var(--lh-snug);max-width:48ch;margin-bottom:var(--sp-6)}.hero__actions{display:flex;flex-wrap:wrap;gap:var(--sp-3)}.hero__scroll{position:absolute;bottom:var(--sp-5);left:50%;translate:-50% 0;display:inline-flex;flex-direction:column;align-items:center;gap:2px;font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.1em;color:var(--text-faint);text-transform:uppercase}.hero__scroll svg{animation:blink 1.8s ease-in-out infinite}.terminal{background:color-mix(in srgb,var(--surface-1) 92%,#000);border:1px solid var(--border);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);overflow:hidden;font-family:var(--font-mono);font-size:var(--fs-sm)}.terminal__bar{display:flex;align-items:center;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);background:var(--surface-2);border-bottom:1px solid var(--border)}.terminal__dot{width:11px;height:11px;border-radius:var(--r-full);background:var(--text-faint);opacity:.6}.terminal__dot:nth-child(1){background:var(--danger)}.terminal__dot:nth-child(2){background:var(--warning)}.terminal__dot:nth-child(3){background:var(--success)}.terminal__name{margin-left:auto;color:var(--text-faint);font-size:var(--fs-xs)}.terminal__body{padding:var(--sp-5);display:grid;gap:.4rem}.terminal__line{color:var(--text)}.terminal__prompt{color:var(--accent);margin-right:.6ch}.terminal__out{color:var(--text-muted);padding-left:.5ch;margin-bottom:var(--sp-2)}.terminal__out--accent{color:var(--accent-bright);margin-bottom:0}.terminal__caret,.terminal__out--accent .terminal__caret{display:inline-block;width:.55ch;height:1em;background:var(--accent);translate:2px 2px;animation:blink 1s step-end infinite}.about__grid{display:grid;grid-template-columns:1.4fr 1fr;gap:var(--sp-8);align-items:start}.about__p{color:var(--text-muted);font-size:var(--fs-md);line-height:var(--lh-normal);margin-bottom:var(--sp-4);max-width:62ch}.about__certs{margin-top:var(--sp-6)}.about__certs-label{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent);letter-spacing:.06em}.about__certs-list{margin-top:var(--sp-3);display:grid;gap:var(--sp-2)}.cert{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-sm);color:var(--text)}.cert__dot{width:8px;height:8px;border-radius:var(--r-full);background:var(--text-faint);flex:none}.cert--achieved .cert__dot{background:var(--success);box-shadow:0 0 8px var(--success)}.cert--in-progress .cert__dot{background:var(--warning)}.cert__status{margin-left:auto;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-faint);border:1px solid var(--border);padding:.1rem .5rem;border-radius:var(--r-sm)}.about__aside{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-5)}.facts{display:grid;gap:var(--sp-1)}.facts__row{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-3) 0;border-bottom:1px solid var(--border);font-size:var(--fs-sm)}.facts__row:last-child{border-bottom:none}.facts__key{display:inline-flex;align-items:center;gap:.5ch;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-xs);letter-spacing:.04em}.facts__key svg{color:var(--accent)}.facts__val{color:var(--text);text-align:right}.facts__val--link:hover{color:var(--accent)}.facts__val--ok{color:var(--success)}.about__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-3);margin-top:var(--sp-5)}.stat{text-align:center;padding:var(--sp-3) var(--sp-2);background:var(--surface-2);border:1px solid var(--border);border-radius:var(--r-md)}.stat__value{display:block;font-family:var(--font-display);font-size:var(--fs-xl);font-weight:var(--fw-bold);color:var(--accent);line-height:1}.stat__label{display:block;margin-top:var(--sp-2);font-size:.7rem;color:var(--text-muted);line-height:1.3}.skills__grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:var(--sp-4)}.skill-card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-5);transition:border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease),transform var(--t-fast) var(--ease)}.skill-card:hover{border-color:var(--accent-line);box-shadow:var(--glow-accent);transform:translateY(-3px)}.skill-card__head{display:flex;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-4)}.skill-card__icon{display:grid;place-items:center;width:40px;height:40px;border-radius:var(--r-md);background:var(--accent-soft);border:1px solid var(--accent-line);color:var(--accent);flex:none}.skill-card__title{font-size:var(--fs-md)}.skill-card__idx{margin-left:auto;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-faint)}.skill-card__items{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.filters{display:grid;gap:var(--sp-4);margin-bottom:var(--sp-6)}.filters__search{position:relative;display:flex;align-items:center}.filters__search-icon{position:absolute;left:var(--sp-4);color:var(--text-faint);pointer-events:none}.filters__search input{width:100%;padding:.85rem 1rem .85rem 2.85rem;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-md);color:var(--text);font-family:var(--font-mono);font-size:var(--fs-sm);transition:border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease)}.filters__search input::placeholder{color:var(--text-muted)}.filters__search input:focus{outline:none;border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}.filters__reset{position:absolute;right:var(--sp-3);display:inline-flex;align-items:center;gap:.4ch;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted);padding:.3rem .6rem;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--surface-2)}.filters__reset:hover{color:var(--danger);border-color:var(--danger)}.filters__types{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.pill{display:inline-flex;align-items:center;gap:.5ch;padding:.45rem .85rem;border-radius:var(--r-full);border:1px solid var(--border);background:var(--surface-1);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-sm);transition:all var(--t-fast) var(--ease)}.pill:hover{color:var(--text);border-color:var(--border-strong)}.pill.is-active{color:var(--bg);background:var(--accent);border-color:var(--accent);font-weight:var(--fw-semibold)}.pill__count{font-size:var(--fs-xs);opacity:.7}.pill.is-active .pill__count{opacity:.85}.filters__tech{display:flex;align-items:baseline;gap:var(--sp-3);flex-wrap:wrap}.filters__tech-label{display:inline-flex;align-items:center;gap:.4ch;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-faint);letter-spacing:.06em;flex:none}.filters__chips{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.chip{padding:.3rem .7rem;border-radius:var(--r-sm);border:1px solid var(--border);background:transparent;color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-xs);transition:all var(--t-fast) var(--ease)}.chip:hover{color:var(--text);border-color:var(--accent-line)}.chip.is-active{color:var(--accent);border-color:var(--accent-line);background:var(--accent-soft)}.chip--more{color:var(--text-muted);font-style:italic}.projects__results{min-height:200px}.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(290px,1fr));gap:var(--sp-4)}.card{display:flex;flex-direction:column;background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);overflow:hidden;text-align:left;cursor:pointer;position:relative;transition:border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease),transform var(--t-fast) var(--ease)}.card:before{content:"";position:absolute;top:0;left:0;height:2px;width:0;background:linear-gradient(90deg,var(--accent),var(--accent-2));transition:width var(--t-med) var(--ease);z-index:3}.card:hover,.card:focus-within{border-color:var(--accent-line);box-shadow:var(--glow-accent);transform:translateY(-4px)}.card:hover:before,.card:focus-within:before{width:100%}.card__thumb{position:relative;aspect-ratio:16 / 9;overflow:hidden}.card__thumb img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover;transition:transform var(--t-slow) var(--ease)}.card:hover .card__thumb img,.card:focus-within .card__thumb img{transform:scale(1.05)}.card__type{position:absolute;top:var(--sp-3);left:var(--sp-3);z-index:2;font-family:var(--font-mono);font-size:var(--fs-xs);font-weight:var(--fw-medium);padding:.2rem .55rem;border-radius:var(--r-sm);color:var(--c, var(--accent));border:1px solid color-mix(in srgb,var(--c, var(--accent)) 38%,transparent);background:color-mix(in srgb,var(--c, var(--accent)) 16%,#0a0c0f);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.card__type--security{--c: var(--accent)}.card__type--web{--c: var(--accent-2)}.card__type--mobile{--c: #56d364}.card__type--ai-ml{--c: #b78cff}.card__type--scripting{--c: var(--warning)}.card__type--ctf{--c: var(--danger)}.card__status{position:absolute;top:var(--sp-3);right:var(--sp-3);z-index:2;font-family:var(--font-mono);font-size:.65rem;text-transform:uppercase;letter-spacing:.08em;padding:.18rem .5rem;border-radius:var(--r-sm);background:color-mix(in srgb,var(--bg) 70%,transparent);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.card__status--wip{color:var(--warning);border:1px solid color-mix(in srgb,var(--warning) 40%,transparent)}.card__status--archived{color:var(--text-faint);border:1px solid var(--border)}.card__idx{position:absolute;bottom:var(--sp-2);right:var(--sp-3);z-index:2;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-faint);transition:color var(--t-med) var(--ease)}.card:hover .card__idx,.card:focus-within .card__idx{color:var(--accent)}.card__body{padding:var(--sp-4);display:flex;flex-direction:column;gap:var(--sp-3);flex:1}.card__titlerow{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-2);min-width:0}.card__title{font-size:var(--fs-md);line-height:var(--lh-snug);min-width:0;overflow-wrap:anywhere}.card__open{font:inherit;color:inherit;letter-spacing:inherit;text-align:left;background:none;border:none;padding:0;cursor:pointer}.card__open:after{content:"";position:absolute;top:0;right:0;bottom:0;left:0;z-index:4}.card__open:focus-visible{outline:none}.card__ext{color:var(--text-faint);flex:none;margin-top:2px}.card:hover .card__ext,.card:focus-within .card__ext{color:var(--accent)}.card__desc{color:var(--text-muted);font-size:var(--fs-sm);line-height:var(--lh-snug);display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.card__tech{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-top:auto}.tag--mini{font-size:.68rem;padding:.15rem .45rem;background:var(--surface-2);white-space:normal;overflow-wrap:anywhere}.modal__tech .tag{white-space:normal;overflow-wrap:anywhere}.tag--more{color:var(--accent);border-color:var(--accent-line)}.card--skeleton{aspect-ratio:auto;height:360px;cursor:default;background:linear-gradient(100deg,var(--surface-1) 30%,var(--surface-2) 50%,var(--surface-1) 70%);background-size:200% 100%;animation:shimmer 1.4s ease-in-out infinite;border-color:var(--border)}.card--skeleton:before{display:none}.projects__error{color:var(--text-muted);padding:var(--sp-6);text-align:center;border:1px dashed var(--border);border-radius:var(--r-lg)}.projects__error code{color:var(--danger)}.pager{display:flex;align-items:center;justify-content:space-between;flex-wrap:wrap;gap:var(--sp-4);margin-top:var(--sp-6)}.pager__count{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted)}.pager__count .tok{color:var(--accent)}.pager__nav{display:flex;align-items:center;gap:var(--sp-2)}.pager__btn{min-width:38px;height:38px;display:inline-grid;place-items:center;padding:0 .6rem;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--surface-1);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-sm);transition:all var(--t-fast) var(--ease)}.pager__btn:hover:not(:disabled){color:var(--text);border-color:var(--accent-line)}.pager__btn.is-active{color:var(--bg);background:var(--accent);border-color:var(--accent);font-weight:var(--fw-semibold)}.pager__btn:disabled{opacity:.35;cursor:not-allowed}.pager__ellipsis{color:var(--text-faint);padding:0 .2rem}.empty{text-align:center;padding:var(--sp-10) var(--sp-4);border:1px dashed var(--border);border-radius:var(--r-lg);background:var(--surface-1)}.empty__cmd{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text);text-align:left;display:inline-block;margin:0 auto var(--sp-4);white-space:pre-wrap;word-break:break-word}.empty__cmd .tok{color:var(--accent)}.empty__zero{color:var(--danger)}.empty__hint{color:var(--text-muted);margin-bottom:var(--sp-5)}.modal{position:fixed;top:0;right:0;bottom:0;left:0;z-index:100;display:grid;place-items:center;padding:var(--sp-4);background:#000000b8;background:color-mix(in srgb,#000 72%,transparent);backdrop-filter:blur(6px);-webkit-backdrop-filter:blur(6px);animation:fade-in var(--t-med) var(--ease);overflow-y:auto}.modal__panel{position:relative;width:min(720px,100%);max-height:calc(100svh - var(--sp-8));overflow-y:auto;background:var(--surface-1);border:1px solid var(--border-strong);border-radius:var(--r-lg);box-shadow:var(--shadow-lg);animation:modal-in var(--t-med) var(--ease)}.modal__close{position:absolute;top:var(--sp-3);right:var(--sp-3);z-index:3;display:grid;place-items:center;width:38px;height:38px;border-radius:var(--r-sm);background:color-mix(in srgb,var(--bg) 60%,transparent);border:1px solid var(--border);color:var(--text);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.modal__close:hover{color:var(--danger);border-color:var(--danger)}.modal__cover{aspect-ratio:16 / 8;position:relative;overflow:hidden;border-bottom:1px solid var(--border)}.modal__cover img{position:absolute;top:0;right:0;bottom:0;left:0;width:100%;height:100%;object-fit:cover}.modal__content{padding:var(--sp-6)}.modal__meta{display:flex;align-items:center;gap:var(--sp-2);flex-wrap:wrap;margin-bottom:var(--sp-3)}.modal__meta .card__type,.modal__meta .card__status{position:static}.modal__date{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-faint);margin-left:auto}.modal__title{font-size:var(--fs-xl);margin-bottom:var(--sp-3)}.modal__desc{color:var(--text-muted);line-height:var(--lh-normal);margin-bottom:var(--sp-4)}.modal__note{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--warning);background:color-mix(in srgb,var(--warning) 8%,transparent);border:1px solid color-mix(in srgb,var(--warning) 26%,transparent);border-radius:var(--r-sm);padding:var(--sp-3);margin-bottom:var(--sp-4);line-height:var(--lh-snug)}.modal__tech{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-5)}.modal__actions{display:flex;flex-wrap:wrap;gap:var(--sp-3);padding-top:var(--sp-5);border-top:1px solid var(--border)}.timeline{position:relative;display:grid;gap:var(--sp-5);padding-left:var(--sp-6)}.timeline:before{content:"";position:absolute;left:11px;top:6px;bottom:6px;width:2px;background:linear-gradient(var(--accent-line),var(--border),transparent)}.timeline__item{position:relative}.timeline__marker{position:absolute;left:calc(-1 * var(--sp-6));top:4px;display:grid;place-items:center;width:24px;height:24px;border-radius:var(--r-full);background:var(--surface-2);border:1px solid var(--accent-line);color:var(--accent);z-index:1}.timeline__card{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-5);transition:border-color var(--t-med) var(--ease),transform var(--t-fast) var(--ease)}.timeline__item:hover .timeline__card{border-color:var(--accent-line);transform:translate(4px)}.timeline__top{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap}.timeline__role{font-size:var(--fs-md)}.timeline__period{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--accent);white-space:nowrap}.timeline__org{color:var(--text-muted);font-size:var(--fs-sm);margin:var(--sp-1) 0 var(--sp-3)}.timeline__points{display:grid;gap:var(--sp-2)}.timeline__points li{position:relative;padding-left:var(--sp-4);color:var(--text-muted);font-size:var(--fs-sm);line-height:var(--lh-snug)}.timeline__points li:before{content:"▹";position:absolute;left:0;color:var(--accent)}.contact__grid{display:grid;grid-template-columns:1fr 1.1fr;gap:var(--sp-8);align-items:start}.contact__blurb{color:var(--text-muted);font-size:var(--fs-md);line-height:var(--lh-normal);margin-bottom:var(--sp-5);max-width:42ch}.contact__prompt{font-family:var(--font-mono);font-size:var(--fs-sm);background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-md);padding:var(--sp-4);margin-bottom:var(--sp-5)}.contact__email{display:inline-block;margin-top:var(--sp-2);color:var(--accent-bright);word-break:break-all}.contact__email:hover{text-decoration:underline}.contact__socials{display:flex;flex-wrap:wrap;gap:var(--sp-2)}.social{display:inline-flex;align-items:center;gap:.6ch;padding:.5rem .85rem;border-radius:var(--r-sm);border:1px solid var(--border);background:var(--surface-1);color:var(--text-muted);font-family:var(--font-mono);font-size:var(--fs-xs);transition:all var(--t-fast) var(--ease)}.social:hover{color:var(--accent);border-color:var(--accent-line);transform:translateY(-2px)}.contact__right{background:var(--surface-1);border:1px solid var(--border);border-radius:var(--r-lg);padding:var(--sp-6)}.form{display:grid;gap:var(--sp-4)}.form__note{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted);letter-spacing:.04em}.form__row{display:grid;grid-template-columns:1fr 1fr;gap:var(--sp-4)}.form__field{display:grid;gap:var(--sp-2)}.form__field>span{font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted);letter-spacing:.04em}.form__field input,.form__field textarea{width:100%;padding:.75rem .9rem;background:var(--bg-soft);border:1px solid var(--border);border-radius:var(--r-md);color:var(--text);font-family:var(--font-sans);font-size:var(--fs-sm);resize:vertical;transition:border-color var(--t-med) var(--ease),box-shadow var(--t-med) var(--ease)}.form__field input:focus,.form__field textarea:focus{outline:none;border-color:var(--accent-line);box-shadow:0 0 0 3px var(--accent-soft)}.form__field input::placeholder,.form__field textarea::placeholder{color:var(--text-muted)}.form__hp{position:absolute;left:-9999px;opacity:0;height:0;width:0}.form__foot{display:flex;align-items:center;gap:var(--sp-4);flex-wrap:wrap}.form__error{color:var(--danger);font-size:var(--fs-sm)}.contact__success{display:grid;place-items:center;gap:var(--sp-3);text-align:center;padding:var(--sp-8) var(--sp-4);color:var(--success)}.contact__success p{color:var(--text)}.footer{border-top:1px solid var(--border);padding-block:var(--sp-6);margin-top:var(--sp-8)}.footer__inner{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);flex-wrap:wrap}.footer__whoami{font-family:var(--font-mono);font-size:var(--fs-sm);color:var(--text-muted)}.footer__whoami .terminal__prompt{color:var(--accent)}.footer__copy{font-size:var(--fs-xs);color:var(--text-faint)}.footer__top{display:inline-flex;align-items:center;gap:.4ch;font-family:var(--font-mono);font-size:var(--fs-xs);color:var(--text-muted)}.footer__top:hover{color:var(--accent)}@media (max-width: 960px){.hero__inner{grid-template-columns:1fr;gap:var(--sp-6)}.terminal{order:-1;max-width:460px}.about__grid,.contact__grid{grid-template-columns:1fr}}@media (max-width: 820px){.nav__links,.nav__cta{display:none}.nav__burger{display:flex}}@media (max-width: 560px){.container{padding-inline:var(--sp-4)}.hero__actions{width:100%}.hero__actions .btn{flex:1 1 auto;justify-content:center}.about__stats,.form__row{grid-template-columns:1fr}.pager{justify-content:center}.footer__inner{justify-content:center;text-align:center}}
