@charset "UTF-8";*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}body{background:#0b0a14;min-height:100dvh;overflow-x:hidden;padding-top:env(safe-area-inset-top);padding-bottom:env(safe-area-inset-bottom);padding-left:env(safe-area-inset-left);padding-right:env(safe-area-inset-right)}button{font-family:inherit;cursor:pointer}a{color:inherit}.portfolio-loading{position:fixed;inset:0;z-index:9999;display:flex;align-items:center;justify-content:center;background:#0b0a14}.portfolio-loading:before{content:"";display:inline-block;width:8px;height:8px;border-radius:50%;background:#ff3d9a;box-shadow:0 0 8px #ff3d9a;margin-right:16px;flex-shrink:0;animation:loading-pulse 1.2s ease-in-out infinite}@keyframes loading-pulse{0%,to{opacity:1}50%{opacity:.15}}.portfolio-loading:after{content:"JEJINNI.SITE / LOADING";color:#ffffff59;font-family:JetBrains Mono,ui-monospace,monospace;font-size:13px;letter-spacing:.16em}.aurora{--bg: #0b0a14;--surface: rgba(255, 255, 255, .025);--surface-2: rgba(255, 255, 255, .045);--surface-3: rgba(255, 255, 255, .075);--fg: #f0ecf8;--fg-dim: rgba(240, 236, 248, .6);--fg-faint: rgba(240, 236, 248, .34);--line: rgba(255, 255, 255, .07);--line-2: rgba(255, 255, 255, .13);--a1: #ff3d9a;--a2: #9b5cff;--accent-soft: rgba(255, 61, 154, .14);--accent-glow: rgba(255, 61, 154, .35);--f-display: "Instrument Serif", "Pretendard", serif;--f-sans: "Pretendard", "Inter", ui-sans-serif, system-ui, sans-serif;--f-mono: "JetBrains Mono", ui-monospace, monospace;color:var(--fg);background:var(--bg);font-family:var(--f-sans);font-feature-settings:"ss01","ss02","cv11";letter-spacing:-.011em;min-height:100vh;position:relative;overflow-x:hidden}.aurora[data-theme=light]{--bg: #f6f4fb;--surface: rgba(11, 10, 20, .03);--surface-2: rgba(11, 10, 20, .06);--surface-3: rgba(11, 10, 20, .09);--fg: #0b0a14;--fg-dim: rgba(11, 10, 20, .62);--fg-faint: rgba(11, 10, 20, .4);--line: rgba(11, 10, 20, .08);--line-2: rgba(11, 10, 20, .16);--a1: #e0277e;--a2: #6a37d8}.aurora-bg{position:fixed;inset:0;pointer-events:none;z-index:0;overflow:hidden;filter:blur(70px) saturate(120%)}.aurora-blob{position:absolute;border-radius:50%;mix-blend-mode:screen;opacity:.4}.aurora[data-theme=light] .aurora-blob{mix-blend-mode:multiply;opacity:.32}.aurora-blob.b1{width:55vw;height:55vw;right:-8vw;top:-10vh;background:radial-gradient(circle,var(--a1) 0%,transparent 60%);animation:aFloat1 30s ease-in-out infinite alternate}.aurora-blob.b2{width:50vw;height:50vw;left:-12vw;bottom:-15vh;background:radial-gradient(circle,var(--a2) 0%,transparent 60%);animation:aFloat2 36s ease-in-out infinite alternate}@keyframes aFloat1{to{transform:translate(-6vw,10vh) scale(1.08)}}@keyframes aFloat2{to{transform:translate(8vw,-8vh) scale(.92)}}.aurora-grid{position:fixed;inset:0;pointer-events:none;z-index:1;opacity:.35;background-image:linear-gradient(to right,var(--line) 1px,transparent 1px),linear-gradient(to bottom,var(--line) 1px,transparent 1px);background-size:88px 88px;mask-image:radial-gradient(ellipse 80% 60% at 50% 30%,rgba(0,0,0,.8),transparent 100%);-webkit-mask-image:radial-gradient(ellipse 80% 60% at 50% 30%,rgba(0,0,0,.8),transparent 100%)}.aurora-noise{position:fixed;inset:0;pointer-events:none;z-index:2;opacity:.05;mix-blend-mode:overlay;background-image:url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='200' height='200'><filter id='n'><feTurbulence baseFrequency='.85'/></filter><rect width='100%' height='100%' filter='url(%23n)'/></svg>")}.aurora-cursor{position:fixed;pointer-events:none;z-index:3;width:460px;height:460px;border-radius:50%;background:radial-gradient(circle,var(--accent-glow) 0%,transparent 60%);transform:translate(-50%,-50%);mix-blend-mode:screen;filter:blur(16px);opacity:.4}.aurora[data-theme=light] .aurora-cursor{mix-blend-mode:multiply;opacity:.22}.aurora-main{position:relative;z-index:5;max-width:1280px;margin:0 auto;padding:0 var(--gx, 32px)}.aurora[data-density=compact]{--gx: 24px;--gy: 64px;--hero-py: 90px}.aurora[data-density=regular]{--gx: 32px;--gy: 96px;--hero-py: 140px}.aurora[data-density=comfy]{--gx: 48px;--gy: 140px;--hero-py: 200px}@media (max-width: 480px){.aurora[data-density=regular]{--gx: 20px;--gy: 56px;--hero-py: 72px}}.aurora-nav-wrap{position:sticky;top:14px;z-index:50;max-width:1280px;margin:14px auto 0;padding:0 var(--gx, 32px)}.aurora-nav{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;padding:10px 16px;background:#0b0a1473}@media (max-width: 760px){.aurora-nav{display:flex;justify-content:space-between;padding:8px 14px}}.aurora-nav{border:1px solid var(--line-2);backdrop-filter:blur(28px) saturate(180%);-webkit-backdrop-filter:blur(28px) saturate(180%);border-radius:999px;font-size:13px}.aurora[data-theme=light] .aurora-nav{background:#f6f4fb8c}.aurora-nav-brand{display:flex;align-items:center;gap:10px;font-weight:600}.aurora-nav-brand .dot{width:7px;height:7px;border-radius:50%;background:linear-gradient(135deg,var(--a1),var(--a2));box-shadow:0 0 10px var(--a1)}.aurora-nav-brand .en{color:var(--fg-faint);font-size:11.5px;font-family:var(--f-mono);letter-spacing:.04em}.aurora-nav-links{display:flex;gap:2px;justify-self:center}.aurora-nav-links a{font-size:12.5px;color:var(--fg-dim);padding:7px 12px;border-radius:999px;cursor:pointer;text-decoration:none}.aurora-nav-links a:hover{color:var(--fg);background:var(--surface-2)}@media (max-width: 760px){.aurora-nav-links{display:none}}.aurora-nav-cta{font-size:12.5px;padding:8px 16px;border-radius:999px;background:var(--fg);color:var(--bg);border:0;font-weight:500;cursor:pointer;display:inline-flex;align-items:center;gap:6px;transition:transform .25s}.aurora-nav-cta:hover{transform:translateY(-1px)}@media (max-width: 480px){.aurora-nav-cta{font-size:11.5px;padding:6px 12px}}.aurora-nav-actions{display:flex;align-items:center;gap:8px;justify-self:end}.aurora-nav-theme{width:32px;height:32px;border-radius:999px;background:var(--surface-3);border:1px solid var(--line-2);color:var(--fg);cursor:pointer;display:inline-flex;align-items:center;justify-content:center;font-size:14px;line-height:1;padding:0;transition:background .25s,border-color .25s,transform .35s,color .25s}.aurora-nav-theme:hover{background:var(--surface-3);border-color:var(--a1);color:var(--a1);transform:rotate(-15deg)}.aurora-hero{padding:var(--hero-py) 0 var(--gy);display:grid;grid-template-columns:1fr;gap:56px;position:relative}.aurora-eyebrow{display:inline-flex;align-items:center;gap:10px;padding:7px 14px;border-radius:999px;background:var(--surface);border:1px solid var(--line);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);font-size:11px;letter-spacing:.14em;text-transform:uppercase;color:var(--fg-dim);font-family:var(--f-mono);align-self:start;justify-self:start}.aurora-eyebrow .pulse{width:6px;height:6px;border-radius:50%;background:#7dffae;box-shadow:0 0 10px #7dffae;animation:aPulse 2s infinite}@keyframes aPulse{50%{opacity:.4}}.aurora-h1{margin:22px 0 0;font-family:var(--f-sans);font-size:clamp(44px,7vw,92px);font-weight:700;letter-spacing:-.035em;line-height:.96}.aurora-h1 .ln1,.aurora-h1 .ln2{display:block;font-size:.46em;font-weight:500;letter-spacing:-.01em;color:var(--fg-dim);line-height:1}.aurora-h1 .ln2{margin-top:6px}.aurora-h1 .ln3{display:block;margin-top:16px}.aurora-h1 .name{display:inline-block;position:relative;background:linear-gradient(115deg,var(--a1) 0%,var(--a2) 80%);-webkit-background-clip:text;background-clip:text;color:transparent;background-size:180% 180%;animation:gradMove 9s ease-in-out infinite alternate}.aurora-h1 .name:after{content:"";position:absolute;inset:-6% -2%;background:radial-gradient(ellipse 70% 80% at 50% 50%,var(--accent-glow) 0%,transparent 70%);z-index:-1;filter:blur(20px)}.aurora-h1 .en{display:block;margin-top:36px;font-family:var(--f-mono);font-weight:400;font-size:clamp(13px,1.2vw,15.5px);color:var(--fg-faint);letter-spacing:.04em;line-height:1.3;text-transform:uppercase}@keyframes gradMove{to{background-position:100% 50%}}.aurora-section{padding:var(--gy) 0;position:relative}.aurora-shead{display:grid;grid-template-columns:1fr 1fr;gap:32px;align-items:end;margin-bottom:48px;padding-bottom:24px;border-bottom:1px solid var(--line)}@media (max-width: 760px){.aurora-shead{grid-template-columns:1fr;gap:16px;margin-bottom:32px}}.aurora-shead-tag{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.18em;text-transform:uppercase;color:var(--a1)}.aurora-shead-title{margin-top:12px;font-size:clamp(28px,3.6vw,48px);font-weight:600;letter-spacing:-.028em;line-height:1.05;white-space:nowrap}.aurora-shead-title em{font-style:normal;font-family:inherit;font-weight:inherit;color:var(--a1)}@media (max-width: 480px){.aurora-shead-title{white-space:normal}}.aurora-shead-sub{color:var(--fg-dim);font-size:14.5px;line-height:1.6;max-width:420px;justify-self:end}@media (max-width: 760px){.aurora-shead-sub{justify-self:start}}.about-qa{display:flex;flex-direction:column;gap:clamp(48px,7vw,80px);padding:0 0 0 clamp(16px,3vw,40px)}@media (max-width: 760px){.about-qa{padding-left:12px}}.qa-block{display:grid;grid-template-columns:72px 1fr 1.2fr;gap:clamp(20px,3vw,48px);align-items:start;position:relative;padding-top:clamp(28px,4vw,40px);border-top:1px solid var(--line)}.qa-block:first-child{border-top:0;padding-top:0}@media (max-width: 900px){.qa-block{grid-template-columns:60px 1fr;row-gap:18px}.qa-block .qa-answer-wrap{grid-column:2}}@media (max-width: 600px){.qa-block{grid-template-columns:1fr;row-gap:14px}.qa-block .qa-answer-wrap{grid-column:1}}.qa-num{font-family:var(--f-mono);font-size:12px;color:var(--a1);letter-spacing:.14em;padding-top:8px;display:flex;flex-direction:column;gap:6px}.qa-num:after{content:"";width:28px;height:1px;background:var(--a1);opacity:.4}.qa-question{font-size:clamp(22px,2.6vw,34px);font-weight:600;letter-spacing:-.024em;line-height:1.2;color:var(--fg);margin:0;padding-top:2px;text-wrap:balance}.qa-question .hl{color:var(--a1)}.qa-answer-wrap{display:flex;flex-direction:column;gap:16px;padding-top:4px}.qa-answer{font-size:clamp(15px,1.15vw,17px);line-height:1.7;color:var(--fg-dim);letter-spacing:-.003em;margin:0}.qa-answer .hl{color:var(--fg);font-weight:600;background:linear-gradient(transparent 60%,var(--accent-soft) 60%);padding:0 2px}.qa-tags{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}.qa-tag{padding:5px 11px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);font-family:var(--f-mono);font-size:10.5px;color:var(--fg-dim);letter-spacing:.04em}.aurora-tech{display:flex;flex-direction:column;background:var(--surface);border:1px solid var(--line);border-radius:18px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);overflow:hidden}.tech-row{display:grid;grid-template-columns:200px 1fr;gap:20px;align-items:center;padding:22px 28px}.tech-row+.tech-row{border-top:1px solid var(--line)}@media (max-width: 720px){.tech-row{grid-template-columns:1fr;gap:12px;padding:20px}}.tech-row-label{display:flex;align-items:baseline;gap:10px}.tech-row-label .ko{font-size:16px;font-weight:600;color:var(--fg);letter-spacing:-.01em}.tech-row-label .en{font-family:var(--f-mono);font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--fg-faint)}.tech-chips{display:flex;flex-wrap:wrap;gap:8px}.tech-chip{display:inline-flex;align-items:center;gap:9px;padding:7px 13px 7px 7px;border-radius:10px;background:var(--surface-2);border:1px solid var(--line);font-size:13px;letter-spacing:-.003em;transition:transform .25s,border-color .25s,background .25s,box-shadow .25s}.tech-chip:hover{transform:translateY(-2px);border-color:var(--chip-accent);background:var(--surface-3);box-shadow:0 8px 24px color-mix(in oklch,var(--chip-accent),transparent 72%)}.tech-chip .sq{width:26px;height:26px;border-radius:5px;overflow:hidden;background:transparent;color:#fff;font-weight:700;font-size:10px;letter-spacing:-.02em;display:flex;align-items:center;justify-content:center;flex-shrink:0}.tech-chip .sq:not(:has(svg)){background:var(--chip-accent)}.tech-chip .sq svg{width:26px;height:26px}.aurora-projects{display:grid;grid-template-columns:repeat(2,1fr);gap:14px}@media (max-width: 820px){.aurora-projects{grid-template-columns:1fr}}.project-card{position:relative;border-radius:20px;padding:28px;background:var(--surface);border:1px solid var(--line);backdrop-filter:blur(20px) saturate(160%);-webkit-backdrop-filter:blur(20px) saturate(160%);overflow:hidden;min-height:320px;display:flex;flex-direction:column;justify-content:space-between;transition:transform .4s cubic-bezier(.2,.8,.2,1),border-color .4s,box-shadow .4s;cursor:pointer;--c: var(--a1)}.project-card:hover{transform:translateY(-4px);border-color:var(--c);box-shadow:0 20px 60px color-mix(in oklch,var(--c),transparent 80%)}.project-card:before{display:none}.project-card:after{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:linear-gradient(90deg,transparent,var(--c),transparent);opacity:.6}.project-card .num{position:relative;font-family:var(--f-mono);font-size:24px;font-weight:500;letter-spacing:.04em;color:var(--c);line-height:1;font-variant-numeric:tabular-nums}.project-card .title{position:relative;font-size:clamp(24px,2.5vw,30px);font-weight:600;letter-spacing:-.02em;margin-top:16px;line-height:1.1}.project-card .desc{position:relative;font-size:13.5px;color:var(--fg-dim);line-height:1.6;margin-top:20px;max-width:38ch}.project-card .foot{position:relative;display:flex;align-items:center;justify-content:space-between;margin-top:22px;gap:12px;flex-wrap:wrap}.project-card .stack{display:flex;flex-wrap:wrap;gap:5px;max-width:70%}.project-card .stack span{font-size:10.5px;padding:4px 8px;border-radius:999px;background:var(--surface-2);border:1px solid var(--line);color:var(--fg-dim);font-family:var(--f-mono);letter-spacing:.02em;max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.project-card .stack span.more{background:color-mix(in oklch,var(--c),transparent 88%);border:1px solid color-mix(in oklch,var(--c),transparent 55%);padding:4px 10px;color:var(--c);font-weight:600;letter-spacing:.04em}.project-card .role{font-size:10.5px;color:var(--fg-faint);font-family:var(--f-mono);letter-spacing:.06em;text-transform:uppercase;white-space:nowrap}.aurora-career{background:var(--surface);border:1px solid var(--line);border-radius:18px;backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);overflow:hidden}.career-item{display:grid;grid-template-columns:140px 1fr 80px;gap:24px;padding:22px 28px;align-items:start;position:relative}.career-item+.career-item{border-top:1px solid var(--line)}@media (max-width: 720px){.career-item{grid-template-columns:1fr;gap:6px;padding:20px}}.career-year{font-family:var(--f-mono);font-size:11.5px;color:var(--a1);letter-spacing:.04em;padding-top:4px}.career-body .company{font-size:18px;font-weight:600;letter-spacing:-.015em}.career-body .role{font-size:13.5px;color:var(--fg-dim);margin-top:4px}.career-body .note{font-size:12.5px;color:var(--fg-faint);margin-top:4px}.career-badge{justify-self:end;font-family:var(--f-mono);font-size:10px;padding:4px 10px;border-radius:999px;border:1px solid var(--line-2);color:var(--fg-dim);letter-spacing:.12em;text-transform:uppercase}.career-badge.current{background:linear-gradient(115deg,var(--a1),var(--a2));color:#fff;border-color:transparent}@media (max-width: 720px){.career-badge{justify-self:start}}.aurora-posts{display:grid;gap:6px}.post-row{display:grid;grid-template-columns:80px 1fr auto auto;gap:20px;align-items:center;padding:18px 22px;border-radius:14px;border:1px solid transparent;transition:background .3s,border-color .3s,transform .25s;cursor:pointer;text-decoration:none;color:inherit}.post-row:hover{background:var(--surface);border-color:var(--line-2);transform:translate(4px)}@media (max-width: 720px){.post-row{grid-template-columns:1fr;gap:4px;padding:16px 18px}.post-row .ptag{width:fit-content}}.post-row .date{font-family:var(--f-mono);font-size:11px;color:var(--fg-faint);letter-spacing:.04em}.post-row .ptitle{font-size:15.5px;letter-spacing:-.01em}.post-row .ptag{font-size:10.5px;padding:4px 9px;border-radius:999px;background:var(--accent-soft);color:var(--a1);font-family:var(--f-mono);letter-spacing:.04em}.post-row .pread{font-size:11px;color:var(--fg-faint);font-family:var(--f-mono)}.aurora-contact{position:relative;padding:clamp(48px,7vw,88px) clamp(28px,5vw,64px);border-radius:24px;background:var(--surface);border:1px solid var(--line);backdrop-filter:blur(24px) saturate(160%);-webkit-backdrop-filter:blur(24px) saturate(160%);overflow:hidden}.aurora-contact:before{content:"";position:absolute;inset:0;background:radial-gradient(circle at 100% 0%,var(--a1) 0%,transparent 45%),radial-gradient(circle at 0% 100%,var(--a2) 0%,transparent 50%);opacity:.14;pointer-events:none}.aurora-contact-inner{position:relative;display:grid;grid-template-columns:1.2fr .8fr;gap:40px;align-items:end}@media (max-width: 800px){.aurora-contact-inner{grid-template-columns:1fr;gap:24px}}.aurora-contact-inner h2{font-size:clamp(36px,5.8vw,70px);font-weight:600;letter-spacing:-.028em;line-height:1;margin:0}.aurora-contact-inner h2 .em{font-style:normal;color:var(--a1)}.aurora-contact-inner p{margin:16px 0 0;color:var(--fg-dim);font-size:14.5px;line-height:1.55;max-width:440px}.contact-links{display:grid;grid-template-columns:1fr 1fr;gap:8px}.contact-link{display:flex;flex-direction:column;gap:6px;padding:16px 18px;border-radius:12px;background:var(--surface-2);border:1px solid var(--line);backdrop-filter:blur(16px);-webkit-backdrop-filter:blur(16px);transition:transform .25s,background .25s,border-color .25s;cursor:pointer;text-decoration:none;color:inherit}.contact-link:hover{transform:translateY(-3px);background:var(--surface-3);border-color:var(--a1)}.contact-link .lbl{font-family:var(--f-mono);font-size:10px;letter-spacing:.12em;text-transform:uppercase;color:var(--fg-faint)}.contact-link .hdl{font-size:13.5px;font-weight:500}.aurora-foot{display:flex;justify-content:space-between;align-items:center;padding:32px 0 56px;border-top:1px solid var(--line);margin-top:64px;font-size:11px;color:var(--fg-faint);font-family:var(--f-mono);letter-spacing:.06em}@media (max-width: 600px){.aurora-foot{flex-direction:column;gap:8px}}[data-reveal]{opacity:0;transform:translateY(20px);transition:opacity 1s ease,transform 1s cubic-bezier(.2,.8,.2,1)}[data-reveal][data-in="1"]{opacity:1;transform:none}[data-reveal][data-delay="1"]{transition-delay:.08s}[data-reveal][data-delay="2"]{transition-delay:.16s}[data-reveal][data-delay="3"]{transition-delay:.24s}[data-reveal][data-delay="4"]{transition-delay:.32s}.proj-overlay{--pm-bg: #0b0a14;--pm-surface: rgba(255,255,255,.03);--pm-surface2: rgba(255,255,255,.06);--pm-fg: #f0ecf8;--pm-fg-dim: rgba(240,236,248,.62);--pm-fg-faint: rgba(240,236,248,.36);--pm-line: rgba(255,255,255,.08);--pm-line2: rgba(255,255,255,.14);--pm-mono: "JetBrains Mono", ui-monospace, monospace;--c: #ff3d9a}.proj-overlay[data-theme=light]{--pm-bg: #f6f4fb;--pm-surface: rgba(11,10,20,.03);--pm-surface2: rgba(11,10,20,.06);--pm-fg: #0b0a14;--pm-fg-dim: rgba(11,10,20,.62);--pm-fg-faint: rgba(11,10,20,.4);--pm-line: rgba(11,10,20,.08);--pm-line2: rgba(11,10,20,.16)}.proj-overlay{position:fixed;inset:0;z-index:2000;overflow-y:auto;overflow-x:hidden;animation:pmOverlayIn .3s ease;background:transparent;-webkit-backdrop-filter:none;backdrop-filter:none}@media (min-width: 768px){.proj-overlay{background:#0b0a14b8;-webkit-backdrop-filter:blur(20px) saturate(140%);backdrop-filter:blur(20px) saturate(140%)}}.proj-overlay-inner{min-height:100%;display:flex;justify-content:center;align-items:flex-start;padding:0}@media (min-width: 768px){.proj-overlay-inner{padding:clamp(16px,3vw,40px)}}@keyframes pmOverlayIn{0%{opacity:0}to{opacity:1}}.proj-modal{position:relative;width:100%;max-width:920px;background:var(--pm-bg);display:flex;flex-direction:column;animation:pmModalIn .4s cubic-bezier(.2,.8,.2,1);border:none;border-radius:0;min-height:100vh;box-shadow:none}@media (min-width: 768px){.proj-modal{border:1px solid var(--pm-line2);border-radius:22px;min-height:auto;box-shadow:0 30px 80px #00000080}}.proj-modal:before{content:"";position:absolute;top:0;left:0;right:0;height:2px;background:var(--c);opacity:.9}@keyframes pmModalIn{0%{opacity:0;transform:scale(.97) translateY(12px)}to{opacity:1;transform:none}}.proj-modal-close-row{position:sticky;top:0;z-index:10;display:flex;justify-content:flex-end;padding:16px 16px 0;background:var(--pm-bg)}.proj-modal-head{padding:12px 32px 28px;border-bottom:1px solid var(--pm-line)}.proj-modal-head .num{font-family:var(--pm-mono);font-size:11px;letter-spacing:.14em;color:var(--c)}.proj-modal-head .title{font-size:clamp(28px,3.6vw,42px);font-weight:600;letter-spacing:-.025em;line-height:1.05;margin:8px 0 0;color:var(--pm-fg)}.proj-modal-head .sub{font-size:14px;color:var(--pm-fg-dim);margin-top:10px}.proj-modal-head .tags{display:flex;gap:6px;flex-wrap:wrap;margin-top:14px}.proj-modal-close{width:36px;height:36px;border-radius:50%;background:var(--pm-surface2);border:1px solid var(--pm-line2);color:var(--pm-fg);cursor:pointer;font-size:15px;display:flex;align-items:center;justify-content:center;transition:background .25s,color .25s,transform .25s,border-color .25s}.proj-modal-close:hover{background:var(--c);color:#fff;border-color:var(--c);transform:rotate(90deg)}.pill{display:inline-flex;align-items:center;gap:6px;padding:5px 11px;border-radius:999px;font-family:var(--pm-mono);font-size:10.5px;letter-spacing:.08em;background:var(--pm-surface2);border:1px solid var(--pm-line);color:var(--pm-fg-dim)}.pill .dot{width:6px;height:6px;border-radius:50%;background:var(--c);box-shadow:0 0 8px var(--c)}.proj-modal-body{padding:32px;display:flex;flex-direction:column;gap:32px}.proj-meta{display:grid;gap:1px;background:var(--pm-line);border:1px solid var(--pm-line);border-radius:14px;overflow:hidden}@media (max-width: 600px){.proj-meta{grid-template-columns:1fr 1fr!important}}.proj-meta-cell{background:var(--pm-surface);padding:18px 20px}.proj-meta-cell .k{font-family:var(--pm-mono);font-size:10px;letter-spacing:.14em;text-transform:uppercase;color:var(--c)}.proj-meta-cell .v{font-size:14.5px;font-weight:500;margin-top:6px;color:var(--pm-fg);letter-spacing:-.01em;line-height:1.3}.proj-block{display:grid;grid-template-columns:140px 1fr;gap:28px;align-items:start}@media (max-width: 600px){.proj-block{grid-template-columns:1fr;gap:10px}}.proj-block--contents{grid-template-columns:1fr}.proj-block-label{font-family:var(--pm-mono);font-size:10.5px;letter-spacing:.14em;text-transform:uppercase;color:var(--c);padding-top:4px;display:flex;align-items:center;gap:8px}.proj-block-label:after{content:"";flex:1;height:1px;background:linear-gradient(to right,color-mix(in oklch,var(--c),transparent 60%),transparent)}@media (max-width: 600px){.proj-block-label:after{display:none}}.proj-block-body{font-size:14.5px;color:var(--pm-fg);line-height:1.7;letter-spacing:-.003em}.proj-block-body p{margin:0}.proj-block-body ul{margin:0;padding:0;list-style:none;display:flex;flex-direction:column;gap:10px}.proj-block-body li{display:grid;grid-template-columns:16px 1fr;gap:12px;align-items:start}.proj-block-body li:before{content:"→";color:var(--c);font-family:var(--pm-mono);font-size:12px;line-height:1.5;font-weight:600}.proj-features{display:grid;grid-template-columns:1fr 1fr;gap:8px}@media (max-width: 600px){.proj-features{grid-template-columns:1fr}}.proj-feature{padding:18px 20px;border-radius:12px;background:var(--pm-surface);border:1px solid var(--pm-line);display:grid;grid-template-columns:32px 1fr;gap:12px;align-items:start;position:relative;overflow:hidden;transition:border-color .25s,background .25s}.proj-feature:hover{border-color:color-mix(in oklch,var(--c),transparent 50%);background:var(--pm-surface2)}.proj-feature:before{content:"";position:absolute;left:0;top:0;bottom:0;width:2px;background:var(--c);opacity:.5}.proj-feature .n{font-family:var(--pm-mono);font-size:12px;font-weight:600;color:var(--c);letter-spacing:.04em;padding-top:2px}.proj-feature .body .ttl{font-size:15px;font-weight:600;letter-spacing:-.015em;color:var(--pm-fg);line-height:1.3}.proj-feature .body .note{font-size:12.5px;color:var(--pm-fg-dim);margin-top:5px;line-height:1.5}.proj-stack-chips{display:flex;flex-wrap:wrap;gap:6px}.proj-stack-chip{padding:7px 13px;border-radius:999px;background:var(--pm-surface);border:1px solid color-mix(in oklch,var(--c),transparent 70%);font-family:var(--pm-mono);font-size:11px;color:var(--pm-fg);letter-spacing:.02em;transition:border-color .25s}.proj-stack-chip:hover{border-color:var(--c)}.proj-modal-foot{position:relative;padding:20px 32px;border-top:1px solid var(--pm-line);display:flex;gap:8px;flex-wrap:wrap;background:var(--pm-surface)}.proj-link{display:inline-flex;align-items:center;gap:8px;padding:10px 16px;border-radius:10px;background:var(--pm-surface2);border:1px solid var(--pm-line2);color:var(--pm-fg);font-size:13px;font-weight:500;text-decoration:none;cursor:pointer;transition:background .25s,border-color .25s,color .25s,transform .25s}.proj-link:hover{background:var(--c);border-color:var(--c);color:#fff;transform:translateY(-2px)}.proj-link.primary{background:var(--c);border-color:var(--c);color:#fff;box-shadow:0 8px 24px color-mix(in oklch,var(--c),transparent 70%)}.proj-link.primary:hover{box-shadow:0 14px 36px color-mix(in oklch,var(--c),transparent 50%)}.proj-markdown{color:var(--pm-fg);font-size:14px;line-height:1.75}.proj-markdown h2,.proj-markdown h3,.proj-markdown h4{color:var(--pm-fg);font-weight:600;margin:1.5em 0 .5em;letter-spacing:-.02em}.proj-markdown h2{font-size:1.2em}.proj-markdown h3{font-size:1.05em}.proj-markdown h4{font-size:.95em;color:var(--pm-fg-dim);font-family:var(--pm-mono);letter-spacing:.06em;text-transform:uppercase}.proj-markdown p{margin:.75em 0;color:var(--pm-fg-dim)}.proj-markdown a{color:var(--c);text-decoration:none}.proj-markdown a:hover{text-decoration:underline}.proj-markdown img{max-width:100%;border-radius:10px;margin:1em 0}.proj-markdown table{width:100%;border-collapse:collapse;margin:1em 0;font-size:13px}.proj-markdown table th{background:var(--pm-surface2);color:var(--c);font-family:var(--pm-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;padding:10px 14px;border-bottom:1px solid var(--pm-line2);text-align:left}.proj-markdown table td{padding:10px 14px;border-bottom:1px solid var(--pm-line);color:var(--pm-fg-dim)}.proj-markdown table tr:last-child td{border-bottom:none}.proj-markdown ul,.proj-markdown ol{padding-left:1.5em;margin:.75em 0;color:var(--pm-fg-dim)}.proj-markdown ul li,.proj-markdown ol li{margin:.3em 0}.proj-markdown code{font-family:var(--pm-mono);font-size:.88em;background:var(--pm-surface2);padding:2px 6px;border-radius:4px;color:var(--c)}.proj-markdown pre{background:var(--pm-surface);border:1px solid var(--pm-line);border-radius:10px;padding:16px;overflow-x:auto;margin:1em 0}.proj-markdown pre code{background:none;padding:0;color:var(--pm-fg)}
