:root{color-scheme:light dark}.theme-blueprint{color-scheme:dark;--page: #0b1522;--paper: #101d2e;--surface: #16283d;--ink: #e7edf5;--muted: #9db0c8;--accent: #38bdf8;--accent-text: var(--accent);--accent-strong: #7dd3fc;--accent-soft: #12324a;--rule: #28425e;--danger: #f87171;--group-fill: rgba(125, 211, 252, 0.05);--diagram-tech: #c3d0e0;--font-mono: ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace}.theme-editorial{color-scheme:light;--page: #f7f2ea;--paper: #fffdf8;--surface: #f1ead9;--ink: #262019;--muted: #6b6053;--accent: #9a4b08;--accent-text: var(--accent);--accent-strong: #7c3a06;--accent-soft: #f6e3cc;--rule: #e2d6c1;--danger: #9f1d1d;--group-fill: rgba(255, 255, 255, 0.55);--diagram-tech: #4a4136;--font-mono: inherit}.palette-precision.theme-editorial{--page: #f3f6fa;--paper: #ffffff;--surface: #eef3f8;--ink: #17202b;--muted: #5c6877;--accent: #2563eb;--accent-strong: #1d4ed8;--accent-soft: #dbeafe;--rule: #cdd6e1;--danger: #c9362b;--group-fill: rgba(37, 99, 235, 0.04);--diagram-tech: #334155}.palette-precision.theme-blueprint{--page: #0b1220;--paper: #111827;--surface: #172033;--ink: #e6edf7;--muted: #9aa8bc;--accent: #60a5fa;--accent-strong: #93c5fd;--accent-soft: #172b4d;--rule: #2b3a50;--danger: #fb7185;--group-fill: rgba(96, 165, 250, 0.05);--diagram-tech: #c5d0e0}.palette-product.theme-editorial{--page: #f5f7fa;--paper: #ffffff;--surface: #edf2f5;--ink: #14213d;--muted: #5d687a;--accent: #0f766e;--accent-strong: #115e59;--accent-soft: #ccfbf1;--rule: #d2dae3;--danger: #c2413b;--group-fill: rgba(15, 118, 110, 0.04);--diagram-tech: #36465d}.palette-product.theme-blueprint{--page: #0a1220;--paper: #111b2d;--surface: #17253a;--ink: #e7edf6;--muted: #9aa7ba;--accent: #2dd4bf;--accent-strong: #5eead4;--accent-soft: #123c38;--rule: #2c3c53;--danger: #fb7185;--group-fill: rgba(45, 212, 191, 0.05);--diagram-tech: #c6d1df}.palette-industrial.theme-editorial{--page: #eceff1;--paper: #fafbfc;--surface: #e2e7ea;--ink: #1c2329;--muted: #58636c;--accent: #e05a1f;--accent-strong: #b94717;--accent-soft: #fce1d3;--rule: #bcc6cc;--danger: #b42318;--accent-text: #b94717;--group-fill: rgba(56, 69, 78, 0.04);--diagram-tech: #38454e}.palette-industrial.theme-blueprint{--page: #11161a;--paper: #181e23;--surface: #222a30;--ink: #edf1f3;--muted: #a4afb7;--accent: #ff7a33;--accent-strong: #ff9a62;--accent-soft: #3a261b;--rule: #3b464e;--danger: #ff5b5b;--group-fill: rgba(255, 122, 51, 0.05);--diagram-tech: #cbd3d8}.palette-daangn.theme-editorial{--page: #fff8f2;--paper: #ffffff;--surface: #fff1e6;--ink: #242424;--muted: #656565;--accent: #ff6f0f;--accent-text: #b94717;--accent-strong: #b94717;--accent-soft: #ffead9;--hero-cta-ink: #242424;--rule: #eadfd5;--danger: #b42318;--group-fill: rgba(255, 111, 15, 0.04);--diagram-tech: #514237}.palette-daangn.theme-blueprint{--page: #181410;--paper: #211c17;--surface: #2c241d;--ink: #fff8f2;--muted: #c2b4a7;--accent: #ff8a3d;--accent-text: #ffab73;--accent-strong: #ffab73;--accent-soft: #493020;--rule: #514033;--danger: #ff7b72;--group-fill: rgba(255, 138, 61, 0.05);--diagram-tech: #dfcabb}body.theme-blueprint{background-image:linear-gradient(rgba(125,211,252,0.06) 1px, transparent 1px),linear-gradient(90deg, rgba(125,211,252,0.06) 1px, transparent 1px);background-size:32px 32px;background-position:-1px -1px;background-color:var(--page)}@media print{body.theme-blueprint{background-image:none}}*{box-sizing:border-box}html{scroll-behavior:smooth}body.portfolio{margin:0;background:var(--page);color:var(--ink);font-family:system-ui, -apple-system, "Pretendard", "Malgun Gothic", sans-serif;line-height:1.6}.portfolio-shell{width:min(1120px, 100%);margin:0 auto;border-top:5px solid var(--accent);background:var(--paper);box-shadow:0 22px 70px rgba(29,34,40,0.12)}.skip-link{position:absolute;left:-9999px}.skip-link:focus{left:1rem;top:1rem;z-index:20;padding:0.75rem 1rem;background:#fff;color:var(--ink)}@media (prefers-reduced-motion: reduce){html{scroll-behavior:auto}*,*::before,*::after{animation-duration:0.01ms !important;animation-iteration-count:1 !important;transition-duration:0.01ms !important}}@page{size:A4 portrait;margin:12mm 10mm 12mm}@media print{body.portfolio{background:var(--paper);font-size:9.5pt}.portfolio-shell{width:100%;max-width:none;border-top-width:3px;box-shadow:none}.portfolio-section{padding:7mm 0}.journey-item,.automation-layers li{break-inside:avoid}.screen-only{display:none !important}.architecture-mobile{display:none !important}a{color:inherit;text-decoration:none}}.portfolio-nav{position:sticky;top:0;z-index:30;background:var(--paper);border-bottom:1px solid var(--rule)}.nav-progress{height:3px;background:var(--rule)}.nav-progress-fill{display:block;height:100%;transform:scaleX(0);transform-origin:left center;background:var(--accent)}@media (prefers-reduced-motion: no-preference){.nav-progress-fill{transition:transform 120ms linear}}.nav-inner{display:flex;align-items:center;gap:24px;width:min(1120px, 100%);margin:0 auto;padding:14px 48px;overflow-x:auto}.nav-brand{flex-shrink:0;color:var(--ink);font-weight:850;font-size:0.95rem;letter-spacing:-0.02em;text-decoration:none;white-space:nowrap}.nav-links{display:flex;flex:1;gap:20px;margin:0;padding:0;list-style:none}.nav-links a{padding:4px 0;border-bottom:2px solid transparent;color:var(--muted);font-size:0.82rem;font-weight:750;text-decoration:none;white-space:nowrap}.nav-links a.is-active{border-bottom-color:var(--accent);color:var(--ink)}.nav-actions{display:flex;flex-shrink:0;align-items:center;gap:12px}.nav-resume{padding:6px 12px;border:1px solid var(--rule);border-radius:6px;color:var(--ink);font-size:0.78rem;font-weight:750;text-decoration:none;white-space:nowrap}.theme-toggle{padding:6px 12px;border:1px solid var(--rule);border-radius:6px;background:var(--surface);color:var(--ink);font-size:0.78rem;font-weight:750;cursor:pointer;white-space:nowrap}@media print{.portfolio-nav{display:none}}@media (max-width: 760px){.nav-inner{gap:16px;padding:12px 22px}.nav-links{gap:14px}}.portfolio-hero{padding:48px 48px 40px;border-top:0}.hero-top{display:flex;align-items:flex-start;gap:32px}.hero-intro{flex:1 1 auto;min-width:0}.hero-aside{flex:0 0 auto;display:flex;flex-direction:column;align-items:flex-end;gap:12px}.hero-eyebrow{margin:0;color:var(--muted);font-size:0.76rem;font-weight:800;letter-spacing:0.12em}.hero-name{margin:10px 0 0;color:var(--ink);font-size:clamp(2rem, 4vw, 2.75rem);line-height:1.1;letter-spacing:-0.03em}.hero-headline{margin:10px 0 0;max-width:640px;color:var(--ink);font-size:clamp(1.1rem, 2vw, 1.35rem);line-height:1.4;letter-spacing:-0.01em}.hero-summary{margin:10px 0 0;max-width:640px;color:var(--muted);font-size:0.95rem;line-height:1.6}.hero-metrics{display:grid;grid-template-columns:repeat(4, minmax(0, 1fr));gap:0;margin:28px 0 0;padding:0;border-top:1px solid var(--rule);border-bottom:1px solid var(--rule);list-style:none}.hero-metrics li{border-left:1px solid var(--rule)}.hero-metrics li:first-child{border-left:0}.hero-metrics a{display:block;padding:16px 15px;color:inherit;text-decoration:none}.hero-metrics strong{display:block;color:var(--accent-strong);font-family:var(--font-mono);font-size:1.35rem;line-height:1.2;letter-spacing:-0.03em}.hero-metrics span{display:block;margin-top:6px;color:var(--muted);font-size:0.76rem;line-height:1.4;overflow-wrap:anywhere}@media (prefers-reduced-motion: no-preference){.hero-metrics a{transition:background-color 160ms ease}}.hero-metrics a:hover,.hero-metrics a:focus-visible{background:var(--surface)}.hero-actions{display:flex;flex-wrap:wrap;gap:12px;margin:24px 0 0}.hero-cta{padding:11px 20px;border:1px solid var(--accent);border-radius:7px;background:var(--accent);color:var(--hero-cta-ink, var(--paper));font-size:0.85rem;font-weight:800;text-decoration:none}.hero-cta-secondary{background:transparent;border-color:var(--rule);color:var(--ink)}.hero-contact{display:flex;flex-wrap:wrap;gap:6px 16px;margin:18px 0 0}.hero-contact a{color:var(--muted);font-size:0.8rem;font-weight:650;text-decoration:none}.hero-contact a:hover,.hero-contact a:focus-visible{color:var(--accent-text)}.hero-aside .hero-actions{margin:0}.hero-aside .hero-contact{margin:0;flex-direction:column;align-items:flex-end;gap:6px}@media print{.hero-metrics a{padding:10px}}@media (max-width: 760px){.portfolio-hero{padding:32px 22px 28px}.hero-top{flex-direction:column;gap:20px}.hero-aside{align-items:flex-start}.hero-aside .hero-contact{align-items:flex-start}.hero-metrics{grid-template-columns:repeat(2, minmax(0, 1fr))}.hero-metrics li:nth-child(odd){border-left:0}.hero-metrics li:nth-child(even){border-left:1px solid var(--rule)}.hero-metrics li:nth-child(n+3){border-top:1px solid var(--rule)}}.portfolio-section{padding:72px 48px;border-top:1px solid var(--rule)}.portfolio-section:first-child{border-top:0}.section-heading{display:grid;grid-template-columns:180px minmax(0, 1fr);column-gap:32px;margin-bottom:42px}.section-heading h2{margin:0;font-size:clamp(2rem, 4vw, 3.25rem);line-height:1.15;letter-spacing:-0.045em}.section-heading>p:last-child{grid-column:2;max-width:680px;margin:12px 0 0;color:var(--muted)}.section-number{margin:0;color:var(--muted);font-size:0.76rem;font-weight:800;letter-spacing:0.12em}.subsection-label{margin:0;color:var(--muted);font-size:0.7rem;font-weight:850;letter-spacing:0.12em}.subsection-heading{margin-bottom:22px}.subsection-heading h3{margin:7px 0 0;font-size:clamp(1.45rem, 2.4vw, 2rem);line-height:1.3;letter-spacing:-0.035em}.subsection-heading>p:last-child:not(.subsection-label){margin:8px 0 0;color:var(--muted)}@media (max-width: 760px){.portfolio-section{padding:56px 22px}.section-heading{grid-template-columns:1fr;margin-bottom:32px}.section-heading>p:last-child{grid-column:1}.section-number{margin-bottom:10px}}.journey-list{position:relative;display:grid;gap:0;max-width:880px;margin:0 0 0 180px;padding:0;list-style:none}.journey-list::before{position:absolute;top:12px;bottom:12px;left:116px;width:1px;background:var(--rule);content:""}.journey-item{position:relative;display:grid;grid-template-columns:92px minmax(0, 1fr);gap:48px;padding:0 0 36px;color:var(--muted)}.journey-item::before{position:absolute;top:8px;left:110px;width:13px;height:13px;border:3px solid #fff;border-radius:50%;background:var(--muted);box-shadow:0 0 0 1px var(--rule);content:""}.journey-item time{padding-top:2px;font-size:0.78rem;font-weight:800}.journey-content h3{margin:4px 0 7px;color:var(--ink);font-size:1.25rem;letter-spacing:-0.025em}.journey-content p{margin:0}.journey-meta{font-size:0.8rem;font-weight:750}.journey-item.is-current::before{background:var(--accent);box-shadow:0 0 0 4px var(--accent-soft)}.journey-item.is-current{color:var(--ink)}@media (prefers-reduced-motion: no-preference){.journey-item,.journey-item::before{transition:color 220ms ease, background-color 220ms ease, box-shadow 220ms ease}}@media (max-width: 760px){.journey-list{margin-left:0}.journey-list::before{left:8px}.journey-item{grid-template-columns:1fr;gap:6px;padding:0 0 32px 34px}.journey-item::before{left:2px}}.architecture-transition{margin-bottom:60px}.transition-figure{margin:0;padding:14px;overflow-x:auto;border:1px solid var(--rule);border-radius:12px;background:var(--surface)}.transition-map{display:block;width:100%;height:auto}.transition-side-label{fill:var(--muted);font-size:12px;font-weight:850;letter-spacing:0.12em}.transition-before rect{fill:var(--page);stroke:var(--muted);stroke-dasharray:4 3;stroke-width:1.3}@media (prefers-reduced-motion: no-preference){.transition-before rect:nth-child(3n){transform:rotate(-2.5deg);transform-box:fill-box;transform-origin:center}.transition-before rect:nth-child(3n+1){transform:rotate(2deg);transform-box:fill-box;transform-origin:center}}.transition-caption{fill:var(--muted);font-size:11px;font-weight:700}.transition-arrow path{fill:none;stroke:var(--accent);stroke-width:3}.transition-arrow text{fill:var(--accent-strong);font-family:var(--font-mono);font-size:20px;font-weight:800;text-anchor:middle}#arrow-transition path{fill:var(--accent)}.transition-boundary{fill:none;stroke:var(--accent-strong);stroke-dasharray:6 4;stroke-width:1.6}.transition-boundary-label{fill:var(--accent-strong);font-size:12px;font-weight:850;letter-spacing:0.1em}.transition-after-node rect{fill:var(--paper);stroke:var(--accent);stroke-width:1.5}.transition-after-node text{fill:var(--ink);font-size:14px;font-weight:800}.transition-note{margin:14px 0 0;max-width:62ch;color:var(--ink);font-size:0.95rem;line-height:1.7}.transition-figure figcaption{margin-top:10px;color:var(--muted);font-size:0.75rem}@media (max-width: 760px){.transition-figure{padding:10px}.transition-map{width:1200px;max-width:none}}.architecture-scope{margin-bottom:60px}.architecture-scope-list{display:grid;grid-template-columns:repeat(6, minmax(0, 1fr));margin:0;padding:0;border-block:1px solid var(--rule);list-style:none}.architecture-scope-list li{min-width:0;min-height:112px;padding:22px 15px;border-left:1px solid var(--rule)}.architecture-scope-list li:first-child{border-left:0}.architecture-scope-list strong,.architecture-scope-list span{display:block}.architecture-scope-list strong{color:var(--accent-strong);font-family:var(--font-mono);font-size:1.45rem;line-height:1.2;letter-spacing:-0.04em}.architecture-scope-list span{margin-top:8px;color:var(--muted);font-size:0.78rem;line-height:1.4;overflow-wrap:anywhere}.implementation-architecture{padding-top:48px;border-top:1px solid var(--rule)}.architecture-heading{max-width:760px}.architecture-principles{margin:12px 0 0;padding:0;list-style:none}.architecture-principles li{position:relative;padding-left:14px;color:var(--ink);font-size:0.88rem;line-height:1.7}.architecture-principles li::before{content:"·";position:absolute;left:2px;color:var(--accent-text);font-weight:800}.architecture-legend{display:flex;flex-wrap:wrap;gap:8px 18px;margin-bottom:14px;padding:12px 14px;border:1px solid var(--rule);border-radius:8px;background:var(--paper)}.architecture-legend span{position:relative;padding-left:18px;color:var(--muted);font-size:0.7rem;font-weight:750}.legend-node::before{position:absolute;top:50%;left:0;width:10px;height:10px;border:2px solid var(--accent);border-radius:3px;background:var(--paper);content:"";transform:translateY(-50%)}.legend-infra::before{border-color:var(--muted);background:var(--surface)}.legend-boundary::before{border-style:dashed;border-color:var(--accent-strong)}.legend-flow::before{position:absolute;top:50%;left:0;width:12px;border-top:2px solid var(--accent);content:"";transform:translateY(-50%)}.legend-async::before{border-color:var(--accent-strong);border-top-style:dashed}.architecture-figure{margin:0 auto;padding:14px;border:1px solid var(--rule);border-radius:12px;background:var(--surface)}.architecture-map{display:block;width:100%;height:auto;color:var(--ink)}.architecture-boundary rect{fill:var(--group-fill);stroke:var(--rule);stroke-width:1.5}.architecture-boundary .boundary-label{fill:var(--accent-strong);font-size:11px;font-weight:850;letter-spacing:0.11em}.architecture-boundary .boundary-description{fill:var(--muted);font-size:10px;font-weight:650}.architecture-edge path{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.4}.architecture-edge text{fill:var(--muted);font-size:10px;font-weight:800;paint-order:stroke;stroke:var(--surface);stroke-linejoin:round;stroke-width:5px}.architecture-edge-sync path{stroke:var(--accent)}.architecture-edge-async path{stroke:var(--accent-strong);stroke-dasharray:7 5}.architecture-edge.is-related path{stroke-width:4}.architecture-edge.is-related text{fill:var(--ink)}#arrow-sync path{fill:var(--accent)}#arrow-async path{fill:var(--accent-strong)}.architecture-node{cursor:pointer;outline:none}.architecture-node rect{fill:var(--paper);stroke:var(--accent);stroke-width:1.5}.architecture-node-app rect{fill:var(--paper);stroke:var(--accent)}.architecture-node-infra rect{fill:var(--surface);stroke:var(--muted)}.architecture-node-boundary rect{fill:var(--paper);stroke:var(--accent-strong);stroke-dasharray:5 3}.architecture-node-pipeline rect{fill:var(--accent-soft);stroke:var(--accent)}.architecture-node.is-selected rect,.architecture-node:focus rect{stroke:var(--accent-strong);stroke-width:3.5}.architecture-node .node-label{fill:var(--ink);font-size:15px;font-weight:850;pointer-events:none}.architecture-node .node-tech{fill:var(--diagram-tech);font-size:10px;font-weight:650;pointer-events:none}.architecture-figure figcaption{margin-top:10px;color:var(--muted);font-size:0.75rem}.architecture-mobile{display:none}.architecture-detail{display:grid;grid-template-columns:minmax(220px, 0.7fr) minmax(0, 1.8fr);gap:30px;margin-top:18px;padding:28px;border:1px solid var(--rule);border-left:4px solid var(--accent);border-radius:10px;background:var(--paper)}.architecture-detail-heading h3{margin:7px 0 2px;font-size:1.55rem;letter-spacing:-0.035em}.architecture-detail-heading>p:last-child{margin:14px 0 0;color:var(--ink);font-size:0.9rem}.architecture-detail-tech{margin:0;color:var(--accent-strong);font-size:0.78rem;font-weight:800}.architecture-detail-grid{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0 24px;margin:0}.architecture-detail-grid>div{min-width:0;padding:11px 0;border-top:1px solid var(--rule)}.architecture-detail-grid>div:nth-child(-n+2){border-top:0}.architecture-detail-grid .detail-wide{grid-column:1 / -1}.architecture-detail-grid dt{color:var(--muted);font-size:0.68rem;font-weight:850;letter-spacing:0.08em}.architecture-detail-grid dd{margin:4px 0 0;font-size:0.8rem;line-height:1.55}.architecture-detail-tree{overflow-x:auto;white-space:pre;font-family:ui-monospace, "SF Mono", "JetBrains Mono", Menlo, Consolas, monospace}.architecture-detail-rationale{grid-column:1 / -1;margin-top:6px;padding-top:18px;border-top:1px solid var(--rule)}.architecture-detail-rationale[hidden]{display:none}.architecture-detail-rationale p:last-child{margin:6px 0 0;color:var(--ink);font-size:0.85rem;line-height:1.6}.architecture-detail-writeup{grid-column:1 / -1;margin-top:6px;padding-top:18px;border-top:1px solid var(--rule)}.architecture-detail-writeup[hidden]{display:none}.architecture-detail-writeup a{display:inline-block;margin-top:6px;color:var(--accent-text);font-size:0.85rem;font-weight:750;line-height:1.6;text-decoration:none}.architecture-detail-writeup a:hover,.architecture-detail-writeup a:focus-visible{text-decoration:underline}.architecture-print-appendix{display:none}@media (max-width: 760px){.architecture-figure{padding:10px}.architecture-map{display:none}.architecture-mobile{display:grid;grid-template-columns:1fr;gap:8px}.architecture-mobile-node{display:grid;grid-template-columns:minmax(88px, 0.55fr) minmax(0, 1.45fr);gap:2px 12px;width:100%;padding:14px;border:1px solid var(--rule);border-radius:8px;background:var(--paper);color:var(--ink);font:inherit;text-align:left}.architecture-mobile-node.is-selected,.architecture-mobile-node:focus-visible{border-color:var(--accent);box-shadow:inset 3px 0 0 var(--accent);outline:none}.architecture-mobile-node .mobile-node-boundary{grid-row:1 / span 3;align-self:center;color:var(--muted);font-size:0.7rem;font-weight:850;line-height:1.3;letter-spacing:0.08em;text-transform:uppercase}.architecture-mobile-node strong{font-size:1rem}.architecture-mobile-node>span:not(.mobile-node-boundary){color:var(--accent-strong);font-size:0.72rem;font-weight:750}.architecture-mobile-node small{color:var(--muted);font-size:0.74rem}.architecture-scope-list{grid-template-columns:repeat(2, minmax(0, 1fr))}.architecture-scope-list li{min-height:96px;border-bottom:1px solid var(--rule)}.architecture-scope-list li:nth-child(odd){border-left:0}.architecture-scope-list li:nth-last-child(-n+2){border-bottom:0}.architecture-detail{grid-template-columns:1fr;gap:20px;padding:22px 18px}.architecture-detail-grid{grid-template-columns:1fr}.architecture-detail-grid>div,.architecture-detail-grid>div:nth-child(-n+2){border-top:1px solid var(--rule)}.architecture-detail-grid>div:first-child{border-top:0}}@media print{.architecture-map{display:block !important}.architecture-detail{display:grid !important}}.document-flow{margin-top:56px}.document-flow .subsection-heading>p{margin:8px 0 0;color:var(--muted)}.document-flow .subsection-heading>p+p{margin-top:10px}.document-flow-figure{margin:0;padding:14px;overflow-x:auto;border:1px solid var(--rule);border-radius:12px;background:var(--surface)}.document-flow-map{display:block;width:100%;height:auto;color:var(--ink)}.document-flow-boundary rect{fill:rgba(255,255,255,0.04);stroke:var(--rule);stroke-width:1.5;stroke-dasharray:6 4}.document-flow-boundary .boundary-label{fill:var(--accent-strong);font-size:11px;font-weight:850;letter-spacing:0.11em}.document-flow-boundary .boundary-description{fill:var(--muted);font-size:10px;font-weight:650}.document-flow-edge path{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.2}.document-flow-edge text{fill:var(--muted);font-size:10px;font-weight:800;paint-order:stroke;stroke:var(--surface);stroke-linejoin:round;stroke-width:5px}.document-flow-edge-flow path{stroke:var(--accent)}.document-flow-edge-branch-pass path{stroke:var(--accent);stroke-width:2.8}.document-flow-edge-branch-retry path{stroke:var(--accent-strong);stroke-dasharray:6 4}.document-flow-edge-branch-fail path{stroke:var(--danger);stroke-dasharray:3 4}.document-flow-edge-branch-fail text{fill:var(--danger)}.document-flow-edge-observe path{stroke:var(--muted);stroke-width:1.4;stroke-dasharray:1 4}#arrow-doc-flow path,#arrow-doc-branch-pass path{fill:var(--accent)}#arrow-doc-branch-retry path{fill:var(--accent-strong)}#arrow-doc-branch-fail path{fill:var(--danger)}#arrow-doc-observe path{fill:var(--muted)}.document-flow-node rect{fill:var(--paper);stroke:var(--accent);stroke-width:1.5}.document-flow-node-decision rect{fill:var(--page);stroke:var(--accent-strong);stroke-dasharray:5 3}.document-flow-node-pass rect{fill:var(--accent-soft);stroke:var(--accent)}.document-flow-node-retry rect{fill:var(--paper);stroke:var(--accent-strong);stroke-dasharray:5 4}.document-flow-node-fail rect{fill:var(--paper);stroke:var(--danger);stroke-dasharray:3 3}.document-flow-node-info rect{fill:var(--page);stroke:var(--muted);stroke-dasharray:2 4}.document-flow-node .node-label{fill:var(--ink);font-size:13px;font-weight:850;pointer-events:none}.document-flow-node .node-detail{fill:var(--muted);font-size:9.5px;font-weight:600;pointer-events:none}.document-flow-node-fail .node-label{fill:var(--danger)}.document-flow-figure figcaption{margin-top:10px;color:var(--muted);font-size:0.75rem}@media (max-width: 760px){.document-flow-figure{padding:10px}.document-flow-map{width:1260px;max-width:none}}.delivery-flow{margin-top:56px}.delivery-flow-figure{margin:0;padding:14px;overflow-x:auto;border:1px solid var(--rule);border-radius:12px;background:var(--surface)}.delivery-flow-map{display:block;width:100%;height:auto;color:var(--ink)}.delivery-flow-boundary rect{fill:rgba(255,255,255,0.04);stroke:var(--rule);stroke-width:1.5;stroke-dasharray:6 4}.delivery-flow-boundary .boundary-label{fill:var(--accent-strong);font-size:11px;font-weight:850;letter-spacing:0.11em}.delivery-flow-boundary .boundary-description{fill:var(--muted);font-size:10px;font-weight:650}.delivery-flow-edge path{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:2.2}.delivery-flow-edge text{fill:var(--muted);font-size:10px;font-weight:800;paint-order:stroke;stroke:var(--surface);stroke-linejoin:round;stroke-width:5px}.delivery-flow-edge-flow path{stroke:var(--accent)}.delivery-flow-edge-branch-pass path{stroke:var(--accent);stroke-width:2.8}.delivery-flow-edge-branch-fail path{stroke:var(--danger);stroke-width:2.4;stroke-dasharray:2 7}.delivery-flow-edge-branch-fail text{fill:var(--danger);font-weight:850}.delivery-flow-edge-skip path{stroke:var(--muted);stroke-width:1.6;stroke-dasharray:3 5;opacity:0.6}.delivery-flow-edge-skip text{opacity:0.7}#arrow-dep-flow path,#arrow-dep-branch-pass path{fill:var(--accent)}#arrow-dep-branch-fail path{fill:var(--danger)}#arrow-dep-skip path{fill:var(--muted);opacity:0.6}.delivery-flow-node rect{fill:var(--paper);stroke:var(--accent);stroke-width:1.5}.delivery-flow-node-decision rect{fill:var(--page);stroke:var(--accent-strong);stroke-dasharray:5 3}.delivery-flow-node-pass rect{fill:var(--accent-soft);stroke:var(--accent);stroke-width:2}.delivery-flow-node-fail rect{fill:var(--paper);stroke:var(--danger);stroke-width:2;stroke-dasharray:3 3}.delivery-flow-node-fail .node-label{fill:var(--danger)}.delivery-flow-node-skip{opacity:0.55}.delivery-flow-node-skip rect{fill:var(--page);stroke:var(--muted);stroke-dasharray:2 4}.delivery-flow-node .node-label{fill:var(--ink);font-size:13px;font-weight:850;pointer-events:none}.delivery-flow-node .node-detail{fill:var(--muted);font-size:9.5px;font-weight:600;pointer-events:none}.delivery-flow-figure figcaption{margin-top:10px;color:var(--muted);font-size:0.75rem}@media (max-width: 760px){.delivery-flow-figure{padding:10px}.delivery-flow-map{width:1220px;max-width:none}}.automation-brief{display:grid;grid-template-columns:repeat(3, minmax(0, 1fr));gap:12px}.automation-brief article{padding:22px;border-left:3px solid var(--accent);background:var(--surface)}.automation-brief span{display:block;margin-bottom:8px;color:var(--muted);font-size:0.7rem;font-weight:850;letter-spacing:0.12em}.automation-brief p{margin:0}.automation-layers{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:12px;margin:28px 0 0;padding:0;list-style:none}.automation-layers li{display:grid;grid-template-columns:minmax(max-content, 0.55fr) minmax(0, 1.45fr);gap:14px;padding:22px;border:1px solid var(--rule);border-radius:9px}.automation-layers>li>span{align-self:start;color:var(--accent);font-size:clamp(2rem, 4vw, 3.25rem);font-weight:850;line-height:normal;white-space:nowrap}.automation-layers h3,.automation-case h3{margin:0 0 8px;font-size:1.2rem}.automation-layers p,.automation-case p{margin:0;color:var(--muted);font-size:0.88rem}.automation-case{margin-top:28px;padding:24px;border:1px solid var(--rule);border-radius:9px}.automation-savings{margin-top:28px}.automation-table-wrap{overflow-x:auto;border:1px solid var(--rule);border-radius:9px}.automation-savings table{width:100%;min-width:720px;border-collapse:collapse;text-align:left}.automation-savings caption{padding:16px 18px;color:var(--muted);font-size:0.85rem;text-align:left}.automation-savings th,.automation-savings td{padding:11px 18px;border-top:1px solid var(--rule);vertical-align:top}.automation-savings th{color:var(--muted);font-size:0.78rem;font-weight:800;white-space:nowrap}.automation-savings .num{color:var(--accent-text);font-family:var(--font-mono);font-weight:800;text-align:right;white-space:nowrap}.automation-savings th.num,.automation-savings td.num{width:1%}.automation-savings tfoot th{color:var(--ink)}@media (max-width: 760px){.automation-brief,.automation-layers{grid-template-columns:1fr}.automation-layers li{grid-template-columns:max-content minmax(0, 1fr)}}@media print{.automation-section .section-heading{margin-bottom:22px}.automation-brief article,.automation-layers li,.automation-case{padding:14px}.automation-layers li,.automation-case{break-inside:avoid}}.automation-section .section-heading h2{word-break:keep-all;text-wrap:balance}.writings-list{display:flex;flex-direction:column;gap:12px}.writings-list article{padding:24px;border:1px solid var(--rule);border-radius:9px}.writings-list h3{margin:0;font-size:1.08rem}.writings-list p{margin:10px 0 0;color:var(--muted);font-size:0.9rem;line-height:1.65}.writings-list .writing-facts{margin-top:14px;color:var(--ink);font-size:0.82rem;font-weight:750}.writing-link{display:inline-block;margin-top:18px;padding:5px 9px;border:1px solid var(--rule);border-radius:5px;color:var(--accent-text);font-size:0.75rem;font-weight:750;text-decoration:none}.writing-link:hover,.writing-link:focus-visible{text-decoration:underline}.additional-work-list{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:12px}.additional-work-list article{padding:22px;border:1px solid var(--rule);border-radius:9px}.additional-work-list h3{margin:0 0 10px;font-size:1.08rem}.additional-work-list p{margin:8px 0 0;color:var(--muted);font-size:0.85rem}.work-tech-list{color:var(--accent-text) !important;font-weight:750}.work-screenshots{display:flex;gap:8px;margin-bottom:14px}.work-screenshots img{width:72px;height:auto;border:1px solid var(--rule);border-radius:6px}.work-links{display:flex;flex-wrap:wrap;gap:8px;margin-top:18px}.work-links a{padding:5px 9px;border:1px solid var(--rule);border-radius:5px;color:var(--accent-text);font-size:0.75rem;font-weight:750;text-decoration:none}@media (max-width: 760px){.additional-work-list{grid-template-columns:1fr}}.portfolio-footer{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:12px;padding:28px 48px;border-top:1px solid var(--rule)}.footer-name{margin:0;color:var(--muted);font-size:0.8rem;font-weight:750}.footer-links{display:flex;flex-wrap:wrap;gap:8px 18px;margin:0;padding:0;list-style:none}.footer-links a{color:var(--muted);font-size:0.8rem;font-weight:750;text-decoration:none}.footer-links a:hover,.footer-links a:focus-visible{color:var(--accent-text)}@media print{.portfolio-footer{display:none}}@media (max-width: 760px){.portfolio-footer{padding:22px}}@media (prefers-reduced-motion: no-preference){[data-reveal]{transition:opacity 480ms ease, transform 480ms ease}[data-reveal].reveal-pending{opacity:0;transform:translateY(16px)}}@media print{[data-reveal].reveal-pending{opacity:1 !important;transform:none !important}}@media print{.transition-figure,.document-flow-figure,.delivery-flow-figure,.architecture-figure,.automation-table-wrap{overflow:visible !important}.transition-map,.document-flow-map,.delivery-flow-map,.architecture-map{width:100% !important;max-width:100% !important}.architecture-mobile{display:none !important}.portfolio-hero{padding:22px 36px 14px !important}.hero-top{flex-direction:row !important;gap:24px !important}.hero-aside,.hero-aside .hero-contact{align-items:flex-end !important}.hero-actions{gap:6px !important}.hero-cta{padding:8px 12px !important;font-size:0.74rem !important}.hero-name{font-size:2.35rem !important}.hero-headline{margin-top:6px !important;font-size:1.05rem !important}.hero-summary{margin-top:6px !important;font-size:0.82rem !important;line-height:1.45 !important}.hero-metrics{grid-template-columns:repeat(4, minmax(0, 1fr)) !important;margin-top:14px !important}.hero-metrics li{border-left:1px solid var(--rule) !important}.hero-metrics li:first-child{border-left:0 !important}.hero-metrics a{padding:8px 10px !important}.hero-metrics strong{font-size:1.08rem !important}.hero-metrics span{margin-top:3px !important;font-size:0.66rem !important}.journey-section{padding:10px 36px 14px !important;break-after:page}.journey-section .section-heading{margin-bottom:12px !important}.journey-section .section-heading>p:last-child{margin-top:5px !important;font-size:0.78rem !important}.journey-list{display:grid !important;max-width:none !important;margin-left:118px !important}.journey-list::before{left:98px !important;top:8px !important;bottom:8px !important}.journey-item{grid-template-columns:76px minmax(0, 1fr) !important;gap:26px !important;padding-bottom:13px !important}.journey-item::before{left:92px !important;width:11px !important;height:11px !important;border-width:2px !important}.journey-item time,.journey-meta{font-size:0.68rem !important}.journey-content h3{margin:1px 0 3px !important;font-size:0.98rem !important}.journey-content>p:last-child{font-size:0.75rem !important;line-height:1.4 !important}.flagship-section{padding:9px 36px 0 !important}.flagship-section>.section-heading{margin-bottom:9px !important}.flagship-section>.section-heading h2{font-size:2.15rem !important}.flagship-section>.section-heading>p:last-child{margin-top:6px !important;font-size:0.8rem !important;line-height:1.45 !important}.architecture-scope{margin-bottom:10px !important}.architecture-scope .subsection-heading{margin-bottom:8px !important}.architecture-scope-list li{min-height:52px !important;padding:7px 8px !important}.architecture-scope-list{grid-template-columns:repeat(6, minmax(0, 1fr)) !important}.architecture-scope-list strong{font-size:0.9rem !important}.architecture-scope-list span{margin-top:2px !important;font-size:0.54rem !important;line-height:1.2 !important}.architecture-transition{margin-bottom:3px !important}.transition-figure{padding:5px !important}.transition-map{height:190px !important;object-fit:contain}.transition-note{margin-top:3px !important;font-size:0.65rem !important;line-height:1.3 !important}.transition-figure figcaption{margin-top:3px !important;font-size:0.55rem !important}.implementation-architecture{padding-top:4px !important;break-before:avoid !important;break-after:page}.implementation-architecture .architecture-heading{margin-bottom:5px !important}.architecture-heading h3{font-size:1.25rem !important}.architecture-principles{display:grid !important;grid-template-columns:repeat(2, minmax(0, 1fr));column-gap:12px;margin-top:2px !important}.architecture-principles li{font-size:0.61rem !important;line-height:1.2 !important}.architecture-heading>p:last-child{margin-top:2px !important;font-size:0.58rem !important}.architecture-legend{gap:3px 8px !important;margin-bottom:4px !important;padding:4px 6px !important}.architecture-legend span{font-size:0.54rem !important}.architecture-figure{padding:5px !important}.architecture-map{height:345px !important;object-fit:contain}.implementation-architecture .architecture-detail{display:none !important}.document-flow{margin-top:0 !important;break-before:page;break-after:avoid}.document-flow .subsection-heading,.delivery-flow .subsection-heading{margin-bottom:7px !important}.document-flow .subsection-heading h3,.delivery-flow .subsection-heading h3{font-size:1.35rem !important}.document-flow .subsection-heading>p,.delivery-flow .subsection-heading>p{margin-top:4px !important;font-size:0.7rem !important;line-height:1.35 !important}.document-flow .subsection-heading>p+p{margin-top:4px !important}.document-flow-figure,.delivery-flow-figure{padding:7px !important}.document-flow-map{height:350px !important;object-fit:contain}.delivery-flow{margin-top:15px !important;break-before:avoid;break-inside:avoid}.delivery-flow-map{height:220px !important;object-fit:contain}.document-flow-figure figcaption,.delivery-flow-figure figcaption{margin-top:5px !important;font-size:0.62rem !important}.automation-section{padding:14px 36px 0 !important;break-before:page;break-after:page}.automation-section .section-heading{margin-bottom:12px !important}.automation-section .section-heading h2{font-size:2rem !important}.automation-section .section-heading>p:last-child{margin-top:5px !important;font-size:0.72rem !important;line-height:1.4 !important}.automation-brief{grid-template-columns:repeat(3, minmax(0, 1fr)) !important;gap:7px !important}.automation-brief article{padding:10px !important;border-left-width:2px !important}.automation-brief span{margin-bottom:4px !important;font-size:0.6rem !important}.automation-brief p{font-size:0.7rem !important;line-height:1.38 !important}.automation-layers{grid-template-columns:repeat(2, minmax(0, 1fr)) !important;gap:7px !important;margin-top:12px !important}.automation-layers li{grid-template-columns:56px minmax(0, 1fr) !important;gap:8px !important;padding:10px !important}.automation-layers>li>span{font-size:1.8rem !important}.automation-layers h3,.automation-case h3{margin-bottom:3px !important;font-size:0.9rem !important}.automation-layers p,.automation-case p{font-size:0.68rem !important;line-height:1.38 !important}.automation-case{margin-top:12px !important;padding:10px !important}.automation-savings{margin-top:12px !important}.automation-savings table{min-width:0 !important;font-size:0.66rem !important;table-layout:fixed}.automation-savings th,.automation-savings td{white-space:nowrap !important}.automation-savings th:nth-child(1),.automation-savings td:nth-child(1){width:14%}.automation-savings th:nth-child(2),.automation-savings td:nth-child(2){width:42%}.automation-savings th:nth-child(3),.automation-savings td:nth-child(3){width:16%}.automation-savings th:nth-child(4),.automation-savings td:nth-child(4){width:28%;text-align:right !important}.automation-savings caption{padding:6px 8px !important;font-size:0.64rem !important}.automation-savings th,.automation-savings td{padding:4px 6px !important;line-height:1.25 !important}.automation-savings th{font-size:0.62rem !important}.writings-section{padding:14px 36px 0 !important;break-before:page}.writings-section .section-heading,.additional-work-section .section-heading{margin-bottom:10px !important}.writings-section .section-heading h2,.additional-work-section .section-heading h2{font-size:1.8rem !important}.writings-list{gap:6px !important}.writings-list article{padding:10px 12px !important}.writings-list h3,.additional-work-list h3{font-size:0.9rem !important}.writings-list p{margin-top:4px !important;font-size:0.7rem !important;line-height:1.4 !important}.writings-list .writing-facts{margin-top:5px !important;font-size:0.64rem !important}.writing-link{margin-top:7px !important;padding:3px 6px !important;font-size:0.62rem !important}.additional-work-section{padding:12px 36px 14px !important;break-before:avoid;break-after:page}.additional-work-list{grid-template-columns:repeat(3, minmax(0, 1fr)) !important;gap:7px !important}.additional-work-list article{padding:8px !important}.work-screenshots{gap:5px !important;margin-bottom:7px !important}.work-screenshots img{width:38px !important}.additional-work-list h3{margin-bottom:4px !important}.additional-work-list p{margin-top:4px !important;font-size:0.62rem !important;line-height:1.35 !important}.additional-work-list .work-tech-list{font-size:0.59rem !important;line-height:1.3 !important}.work-links{gap:4px !important;margin-top:8px !important}.work-links a{padding:3px 6px !important;font-size:0.62rem !important}.architecture-print-appendix{display:block !important;padding:14px 36px 14px !important;break-before:page}.architecture-print-appendix .section-heading{margin-bottom:12px !important}.architecture-print-appendix .section-heading h2{font-size:2rem !important}.architecture-print-appendix .section-heading>p:last-child{margin-top:5px !important;font-size:0.75rem !important}.architecture-print-detail{padding:18px !important;border:1px solid var(--rule);border-left:4px solid var(--accent);border-radius:10px;background:var(--paper);break-inside:avoid}.architecture-print-detail-pair{display:grid;grid-template-columns:1fr;gap:8px;break-before:page;break-inside:avoid}.architecture-print-detail-pair .architecture-print-detail{min-width:0;margin:0 !important;padding:12px 14px !important}.architecture-print-detail-pair .architecture-print-detail-heading h3{margin-top:3px;font-size:1.16rem}.architecture-print-detail-pair .architecture-detail-tech{font-size:0.7rem}.architecture-print-detail-pair .architecture-print-detail-heading>p:last-child{margin-top:5px;font-size:0.69rem;line-height:1.3}.architecture-print-detail-pair .architecture-print-detail-grid{gap:0 12px;margin-top:7px}.architecture-print-detail-pair .architecture-print-detail-grid>div{padding:6px 0}.architecture-print-detail-pair .architecture-print-detail-grid dd{font-size:0.66rem;line-height:1.3}.architecture-print-detail-pair .architecture-print-detail-grid .architecture-detail-tree{font-size:0.6rem;line-height:1.2}.architecture-print-detail-pair .architecture-print-detail-rationale,.architecture-print-detail-pair .architecture-print-detail-writeup{margin-top:5px;padding-top:8px}.architecture-print-detail-pair .architecture-print-detail-rationale p:last-child,.architecture-print-detail-pair .architecture-print-detail-writeup a{font-size:0.66rem;line-height:1.3}.architecture-print-detail-heading h3{margin:5px 0 2px;font-size:1.45rem}.architecture-print-detail-heading>p:last-child{margin:8px 0 0;font-size:0.78rem;line-height:1.45}.architecture-print-detail-grid{display:grid;grid-template-columns:repeat(2, minmax(0, 1fr));gap:0 22px;margin:12px 0 0}.architecture-print-detail-grid>div{min-width:0;padding:8px 0;border-top:1px solid var(--rule);break-inside:avoid}.architecture-print-detail-grid>div:nth-child(-n+2){border-top:0}.architecture-print-detail-grid .detail-wide{grid-column:1 / -1}.architecture-print-detail-grid dt{color:var(--muted);font-size:0.64rem;font-weight:850;letter-spacing:0.08em}.architecture-print-detail-grid dd{margin:3px 0 0;font-size:0.74rem;line-height:1.45}.architecture-print-detail-grid .architecture-detail-tree{overflow:visible;white-space:pre-wrap;overflow-wrap:anywhere;font-size:0.68rem;line-height:1.35}.architecture-print-detail-rationale,.architecture-print-detail-writeup{margin-top:7px;padding-top:11px;border-top:1px solid var(--rule);break-inside:avoid}.architecture-print-detail-rationale p:last-child,.architecture-print-detail-writeup a{margin:4px 0 0;font-size:0.74rem;line-height:1.45}.section-heading,.subsection-heading,h2,h3{break-after:avoid}p,li,td{orphans:2;widows:2}}.portfolio-print-url{display:none}@media print{.portfolio-print-url{display:block !important}.hero-cta-resume,a[href*="/assets/resume/"]{display:none !important}.journey-item{gap:38px !important}.automation-section{break-after:auto}.automation-section h2{word-break:keep-all}.automation-savings{break-inside:avoid}.automation-savings tfoot{display:table-row-group}.external-call-print-group{break-before:page;padding-top:10px}.external-call-print-group .automation-case{margin-top:0 !important}.external-call-print-group .automation-case h3{font-size:1.25rem !important}.writings-section{break-before:auto}.writings-list{display:grid !important;grid-template-columns:repeat(3, minmax(0, 1fr))}.writings-list article{padding:10px !important}.writings-list h3{word-break:keep-all}}
