/* V3 paper/editorial language, V4 course clarity, V5 causal interaction. */
:root{--v5-teal:#137f78;--v5-orange:#b87911;--v5-danger:#a73534}
.v5-page{font-family:"Avenir Next",Avenir,"Segoe UI",Arial,sans-serif!important;line-height:1.55!important}
.v5-page [hidden]{display:none!important}.v5-page button,.v5-page input,.v5-page select{font:inherit}.v5-page button{cursor:pointer;touch-action:manipulation;min-height:44px;border:1px solid var(--portal-line);border-radius:8px;padding:9px 14px;background:var(--portal-white);color:var(--portal-ink)}
.v5-page button:hover{border-color:var(--portal-blue);background:var(--portal-pale-blue)}.v5-page button:disabled{opacity:.4;cursor:default}
.v5-page button:focus-visible,.v5-page a:focus-visible,.v5-page input:focus-visible,.v5-page summary:focus-visible{outline:3px solid var(--portal-blue);outline-offset:4px}
.v5-page h1,.v5-page h2,.v5-page h3{font-family:var(--portal-serif);font-weight:400;line-height:1.08;letter-spacing:-.035em}.v5-page h1{font-size:clamp(38px,4.7vw,70px);margin:0}.v5-page h2{font-size:clamp(28px,3vw,42px)}.v5-page h1 em{color:var(--portal-blue);font-style:normal}.v5-page p{max-width:78ch}.v5-page img{max-width:100%;height:auto}
.v5-page a{text-underline-offset:4px}.v5-page .skip-link{position:absolute;top:-100px;left:12px;z-index:50;background:white;padding:14px}.v5-page .skip-link:focus{top:12px}.v5-topbar{padding:17px 36px;gap:20px;grid-template-columns:auto 1fr auto;max-width:1520px}.v5-topbar .course-credit{font-size:12px;color:var(--portal-muted);text-align:center}.v5-topbar .portal-nav{font-size:14px;gap:22px}.v5-topbar .portal-nav a{padding:10px 0}.v5-main{max-width:1480px;padding:0 36px 48px}.v5-page .portal-footer{font-size:13px;display:flex;gap:12px;flex-wrap:wrap;padding:20px 36px}.v5-page .portal-footer p{flex-basis:100%;font-size:12px}
.experience-intro{padding:30px 0 26px}.experience-intro .portal-kicker{margin-bottom:9px;font-size:12px}.experience-intro h1{font-size:clamp(38px,4.5vw,67px)}.experience-intro>p:last-child{font-size:19px;color:var(--portal-muted);margin:12px 0 0}
.world-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.world-card{display:flex;flex-direction:column;min-width:0;border:1px solid #c9d0d3;border-radius:18px;background:var(--portal-white);text-decoration:none;color:var(--portal-ink)!important;overflow:hidden;box-shadow:0 9px 24px #18354e08;transition:transform .25s,box-shadow .25s,border-color .25s}.world-card:hover,.world-card:focus-visible{transform:translateY(-6px);box-shadow:0 18px 36px #18354e1d;border-color:var(--portal-blue)}.world-card-top{padding:17px 20px 0;display:flex;justify-content:space-between;gap:8px;font-size:10px;font-weight:800;letter-spacing:.07em;color:var(--portal-muted)}.world-card-top span:last-child{color:var(--portal-blue)}.world-card>svg{width:100%;height:180px;background:radial-gradient(ellipse at 50% 50%,#e8f2fc88,transparent 70%)}.world-remote>svg{background:radial-gradient(ellipse at 50% 50%,#e0eeec88,transparent 70%)}.world-engineer>svg{background:radial-gradient(ellipse at 50% 50%,#f0ddc888,transparent 70%)}.world-card-copy{padding:0 22px 20px;display:flex;flex-direction:column;flex:1}.world-card-copy .level{font-size:11px;text-transform:uppercase;letter-spacing:.06em;font-weight:700;color:var(--portal-muted);margin:0 0 8px}.world-card-copy h2{font-size:32px;margin:0 0 10px}.world-card-copy>p:not(.level){font-size:15px;color:var(--portal-muted);line-height:1.5;margin:0 0 14px;min-height:45px}.world-cta{display:flex;justify-content:space-between;align-items:center;color:var(--portal-blue);margin-top:auto;min-height:40px;border-top:1px solid #dbe2e8;padding-top:12px;font-size:14px}.world-card-copy small{font-size:11px;color:var(--portal-muted);margin-top:7px}.world-engineer{border-color:#cdb699}.world-engineer .world-cta,.world-engineer .world-card-top span:last-child{color:#91512f}
.flow-pulse{animation:flow-dash 2s linear infinite;animation-play-state:paused}.world-card:hover .flow-pulse,.world-card:focus-visible .flow-pulse{animation-play-state:running}@keyframes flow-dash{to{stroke-dashoffset:-26}}
.surface-dock{margin-top:24px;border-top:1px solid var(--portal-line);border-bottom:1px solid var(--portal-line);padding:18px 0;display:grid;grid-template-columns:repeat(4,1fr);gap:18px}.surface-dock a{text-decoration:none;color:var(--portal-ink)}.surface-dock a:hover strong{color:var(--portal-blue)}.surface-dock span{display:block;color:var(--portal-muted);font-size:10px;letter-spacing:.09em;margin-bottom:5px}.surface-dock strong{font-size:14px}.home-footnote{font-size:13px;color:var(--portal-muted);margin:17px 0 0}
.section-intro{padding:38px 0 26px}.section-intro .portal-kicker{margin-bottom:12px}.section-intro p:last-child{font-size:19px;color:var(--portal-muted)}
.world-strip{position:relative;border:1px solid var(--portal-line);background:#fffefa;border-radius:12px;padding:16px 20px;margin:20px 0 28px}.world-selector{display:flex;flex-wrap:wrap;gap:6px;margin-bottom:12px}.world-selector button{font-size:13px;padding:8px 13px}.world-selector button[aria-pressed=true]{background:var(--portal-blue-deep);color:white;border-color:var(--portal-blue-deep)}[data-world=engineer] .world-selector button[aria-pressed=true]{background:#795030;border-color:#795030}.world-panel{display:flex;gap:15px;align-items:center}.world-symbol{font-size:31px;color:var(--portal-blue);flex-shrink:0}.world-panel strong{font-size:15px}.world-panel p{font-size:14px;margin:5px 0;color:var(--portal-muted)}.world-strip .setup-link{display:inline-block;margin:7px 0 0 45px;font-size:13px}
[data-course-world-bar]{padding:10px 30px;border-bottom:1px solid var(--portal-line,#d8d1c5);display:flex;flex-wrap:wrap;align-items:center;gap:9px;font-size:13px}[data-course-world-bar] button{min-height:44px;font-size:13px}[data-course-world-bar] [aria-pressed=true]{background:#0d3c70;color:white}[data-course-world-bar] p{margin:0;flex:1 1 300px}
.architecture{margin:20px 0;border:1px solid #d5d7d5;border-radius:12px;overflow:hidden;background:var(--portal-white)}.architecture>img{display:block;width:100%;aspect-ratio:16/9;object-fit:contain}.architecture figcaption{display:flex;justify-content:space-between;gap:12px;align-items:center;padding:10px 16px;font-size:13px;color:var(--portal-muted);border-top:1px solid var(--portal-line)}.architecture figcaption button{font-size:12px;white-space:nowrap}.asset-pending{padding:24px}.hero-dialog{border:1px solid var(--portal-line);border-radius:12px;background:var(--portal-white);width:min(1500px,94vw);max-height:94vh;padding:16px}.hero-dialog::backdrop{background:#10283fcc}.hero-dialog>button{float:right;margin-bottom:10px}.hero-dialog img{clear:both;display:block;width:100%;max-height:75vh;object-fit:contain}.hero-dialog p{font-size:14px;max-width:none}.reference-reading{max-width:980px;margin:auto}.v5-page pre{background:#10283f;color:#ecf5fa;padding:20px;border-radius:10px;overflow:auto;font:14px/1.55 Consolas,"Liberation Mono",monospace}.v5-page pre code{white-space:pre;overflow-wrap:normal}.v5-page code{font-family:Consolas,"Liberation Mono",monospace;overflow-wrap:anywhere}.v5-page details{border:1px solid var(--portal-line);border-radius:10px;padding:16px;margin:16px 0;background:#fffefa}.v5-page summary{cursor:pointer;font-weight:650;min-height:30px}.v5-page details[open]>summary{margin-bottom:16px}.v5-page table{border-collapse:collapse;max-width:100%;display:block;overflow:auto}.v5-page th,.v5-page td{padding:10px;border-bottom:1px solid var(--portal-line);text-align:left}
.project-workbench{background:var(--portal-white);border:1px solid var(--portal-line);border-radius:16px;padding:22px}.project-timeline{display:grid;grid-template-columns:repeat(7,1fr);gap:7px}.project-timeline button{padding:10px 6px;font-size:13px;font-weight:750}.project-timeline button[aria-pressed=true]{background:var(--portal-blue-deep);color:white}.stage-slider{display:flex;align-items:center;gap:20px;font-size:12px;color:var(--portal-muted);margin:16px 4px}.stage-slider input{flex:1;accent-color:var(--portal-blue);min-height:30px}.scene-scroll{overflow-x:auto;overscroll-behavior-inline:contain;border-radius:12px}.project-scene{display:block;width:100%;min-width:780px;max-height:620px}.project-node rect{fill:#edf3fa;stroke:#6c90b3;stroke-width:1.5}.project-node.data rect{fill:#e5f1eb;stroke:#568f7a}.project-node,.project-scene [data-min-stage],.project-scene [data-project-edge]{transition:opacity .35s,filter .35s}.project-scene .stage-off{opacity:0;pointer-events:none}.project-scene .node-title{font-size:21px;font-family:Arial,sans-serif;fill:#10283f;font-weight:700}.project-scene .node-detail{font-size:16px;font-family:Arial,sans-serif;fill:#506276}.project-links path{stroke:#1a62c6}.project-links .data-line{stroke:#137f78}.project-scene .boundary-label{font:700 14px Arial;letter-spacing:.13em;fill:#ad5b3b}.project-scene .port-label{font:16px Consolas,monospace;fill:#1a62c6}.project-scene .edge-label{font:16px Arial;fill:#506276}.project-scene .security-label{font:14px Arial;fill:#ad5b3b}.project-scene .rollback-label{font:17px Arial;fill:#137f78}.network-boundary{fill:none;stroke-dasharray:5 4;stroke:#137f78;stroke-width:2}.edge-boundary{stroke:#1a62c6}.scene-hint{font-size:12px;color:var(--portal-muted);margin:12px 0}.project-controls{display:flex;flex-wrap:wrap;align-items:center;gap:10px;padding:15px 0;border-top:1px solid var(--portal-line)}.project-controls span{margin-right:auto;font-size:14px}.project-stage-copy{padding:18px 0 0}.project-stage-copy h2{margin:0 0 12px}.project-stage-copy>p{font-size:18px}.proof-line{padding:16px;border-left:3px solid var(--v5-teal);background:#e9f1ed;font-size:15px!important}.proof-line strong{display:block;margin-bottom:5px}.action-row{display:flex;gap:10px;flex-wrap:wrap}.v5-button{display:inline-flex;align-items:center;min-height:44px;padding:10px 16px;border-radius:8px;background:var(--portal-blue-deep);color:white!important;text-decoration:none;font-size:14px}.v5-button.secondary{background:#e7eef7;color:var(--portal-blue-deep)!important}.defense-strip{border-top:1px solid var(--portal-line);margin-top:34px;padding:30px 0}.defense-strip>span{font-size:12px;letter-spacing:.1em;color:var(--portal-rust)}.defense-strip h2{font-size:44px;margin:18px 0}.no-script{margin:24px;padding:16px;background:white}
@media(min-width:1600px){.experience-intro{padding-top:46px;padding-bottom:35px}.world-card>svg{height:235px}.world-card-copy{padding:6px 28px 26px}.world-card-copy h2{font-size:39px}.world-card-copy>p:not(.level){font-size:17px}.world-card-top{padding:20px 26px 0}.surface-dock{padding:25px 0}.surface-dock strong{font-size:17px}}
@media(max-width:1050px){.v5-topbar{grid-template-columns:1fr auto;padding:16px 24px}.v5-topbar .course-credit{display:none}.v5-topbar .portal-nav{grid-column:auto;grid-row:auto;font-size:13px;gap:15px}.v5-main{padding:0 24px 36px}.world-grid{gap:12px}.world-card-copy{padding:0 15px 17px}.world-card-copy h2{font-size:27px}.world-card>svg{height:155px}.world-card-top{font-size:9px;padding:15px 14px 0;flex-wrap:wrap}.world-card-copy>p:not(.level){font-size:14px}.world-cta{font-size:12px}.world-card-copy .level{font-size:10px}}
@media(max-width:680px){.v5-topbar{display:flex;flex-wrap:wrap;padding:15px 18px;gap:12px}.v5-topbar .portal-brand{font-size:10px}.v5-topbar .portal-nav{width:100%;justify-content:space-between;gap:8px;font-size:13px}.v5-topbar .portal-nav a{padding:8px 0}.v5-main{padding:0 18px 30px}.experience-intro{padding:24px 0}.experience-intro h1{font-size:41px;max-width:11ch}.experience-intro>p:last-child{font-size:17px}.world-grid{grid-template-columns:1fr;gap:18px}.world-card>svg{height:190px}.world-card-top{font-size:10px;flex-wrap:nowrap}.world-card-copy{padding:0 23px 22px}.world-card-copy h2{font-size:34px}.world-card-copy>p:not(.level){font-size:16px;min-height:0}.world-cta{font-size:15px}.world-card-copy .level{font-size:11px}.surface-dock{grid-template-columns:1fr 1fr;gap:20px}.surface-dock strong{font-size:14px}.world-strip{padding:13px}.world-selector{display:grid;grid-template-columns:1fr 1fr}.world-selector button:last-child{grid-column:1/-1}.world-panel{align-items:flex-start}.world-symbol{font-size:24px}.world-strip .setup-link{margin-left:0}.world-panel p{font-size:14px}.architecture figcaption{flex-wrap:wrap;font-size:12px}.architecture figcaption button{min-height:44px}.project-workbench{padding:12px}.project-timeline{grid-template-columns:repeat(4,1fr)}.stage-slider{display:block}.stage-slider input{display:block;width:100%;margin:5px 0}.project-controls button{font-size:13px}.project-controls span{order:-1;flex-basis:100%}.project-stage-copy>p{font-size:16px}.defense-strip h2{font-size:35px}.section-intro h1{font-size:41px}.v5-page .portal-footer{padding:20px 18px}.v5-page pre{padding:14px;font-size:13px}.world-card:hover{transform:none}}
@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto!important}*,*::before,*::after{animation:none!important;transition:none!important}.flow-pulse{stroke-dasharray:none!important}}
@media print{.v5-topbar,.world-selector,.project-timeline,.stage-slider,.project-controls,[data-zoom-hero],.skip-link{display:none!important}.v5-page [data-stage-copy][hidden]{display:block!important}.v5-page,.v5-main{background:white;padding:0}.scene-scroll{overflow:visible}.project-scene{min-width:0}.architecture{break-inside:avoid}.v5-page pre{white-space:pre-wrap}.v5-page pre code{white-space:pre-wrap;overflow-wrap:anywhere}}

/* Keep the current activity ahead of optional environment explanation. */
.v5-page .world-strip{display:grid;grid-template-columns:auto 1fr auto;align-items:center;gap:16px;padding:12px 16px;margin:16px 0}.world-selector{margin:0}.world-panel{gap:10px}.v5-page .world-panel details{border:0;padding:0;margin:2px 0;background:transparent}.v5-page .world-panel summary{font-size:12px;min-height:24px;font-weight:400}.v5-page .world-panel details[open]>summary{margin-bottom:5px}.world-strip .setup-link{margin:0}.world-symbol{font-size:24px}.v5-project .section-intro{padding:22px 0 5px}.v5-project .section-intro h1{font-size:clamp(34px,3.3vw,49px)}.v5-project .section-intro p:last-child{margin:10px 0;font-size:17px}
@media(max-width:1050px){.v5-page .world-strip{grid-template-columns:1fr auto}.world-selector{grid-column:1/-1}.world-panel strong{font-size:14px}}
@media(max-width:680px){.v5-page .world-strip{display:block}.world-selector{display:flex;gap:5px;flex-wrap:wrap;margin-bottom:9px}.world-selector button{font-size:12px;padding:7px 9px}.world-panel{margin:7px 0}.world-strip .setup-link{font-size:12px}.world-panel strong{font-size:13px}.v5-page .world-panel details{margin:0}}
