/* Shared shell and design tokens. Learning data and simulation models remain independent. */
:root{--lab-bg:#f3f6fc;--lab-surface:#fff;--lab-ink:#152139;--lab-muted:#5a677d;--lab-line:#dce3ef;--lab-accent:#4359ca;--lab-panel:#121c32;--lab-radius:12px;--ink:var(--lab-ink);--muted:var(--lab-muted);--line:var(--lab-line);--blue:var(--lab-accent);--surface:var(--lab-surface);--paper:var(--lab-bg)}
body{background:var(--lab-bg);color:var(--lab-ink);font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI","PingFang SC","Microsoft YaHei",sans-serif;line-height:1.65}
.lab-header{min-height:76px;padding:14px 28px;background:var(--lab-surface);border-bottom:1px solid var(--lab-line);display:flex;align-items:center;justify-content:space-between;gap:24px;position:relative;z-index:31}
.lab-brand{display:flex;gap:10px;align-items:center;flex-shrink:0;font-size:17px;line-height:1.3;font-weight:750;color:var(--lab-ink);text-decoration:none;white-space:nowrap}
.lab-mark{display:grid;place-items:center;width:36px;height:36px;border-radius:9px;background:var(--lab-panel);color:#b9c5ff;font:700 18px Consolas,monospace}
.lab-nav{display:flex;gap:5px;align-items:center;flex-wrap:wrap}.lab-nav a{font-size:14px;font-weight:600;white-space:nowrap;min-height:44px;display:flex;align-items:center;padding:9px 13px;text-decoration:none;color:var(--lab-muted);border-radius:9px}.lab-nav a:hover{background:#f3f6fc}.lab-nav a[aria-current]{background:#edf0ff;color:var(--lab-accent)}
.lab-breadcrumb{display:flex;gap:9px;flex-wrap:wrap;align-items:baseline;font-size:12px;color:var(--lab-muted);margin:0 0 20px;line-height:1.7}.lab-breadcrumb a{text-decoration:none;color:var(--lab-muted)}.lab-breadcrumb>span[aria-hidden]{color:#9eacc2}.lab-breadcrumb [aria-current]{color:var(--lab-ink)}
button,input,select,textarea{font-family:inherit}button,.button{border-radius:9px}button.primary,.button.primary{background:var(--lab-accent);border-color:var(--lab-accent);color:white}button.primary:hover:not(:disabled),.button.primary:hover{background:#3448af;color:white}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible,summary:focus-visible,pre:focus-visible,video:focus-visible{outline:3px solid #6384f5;outline-offset:3px}pre,code,kbd,.mono{font-family:"SFMono-Regular",Consolas,"Liberation Mono",monospace}
.course-page .sidebar{top:76px;padding-top:18px}.sidebar-topic{padding:0 10px 12px;font-size:11px;color:var(--lab-muted);letter-spacing:.05em}.sidebar-topic strong{display:block;font-size:17px;color:var(--lab-ink);margin-top:4px}.course-page main{padding-top:24px}.course-page .mobile-head{z-index:28}.course-page .map-overview{margin-top:20px}.course-page .lifecycle-sample{background:#edf0ff;border-color:#ced7f1;color:var(--lab-ink);border-radius:var(--lab-radius);padding:20px}.course-page .lifecycle-sample strong{font-size:20px}
.learning-page .lab-breadcrumb{margin:22px 0 0}.learning-page .learn-nav{margin-top:6px}.learning-page .learn-nav a[aria-current]{background:#edf0ff;color:var(--lab-accent)}.learning-page .card,.lesson-card,.concept{border-radius:var(--lab-radius)}
.lifecycle-page main{padding-top:24px}.lifecycle-page .intro{padding:0 0 22px}.lifecycle-page h1{font-size:clamp(28px,3vw,36px);letter-spacing:-.03em;margin:6px 0 9px}.lifecycle-page .eyebrow{color:var(--lab-muted);letter-spacing:.08em}.lifecycle-page .intro>p:not(.eyebrow),.lifecycle-page .section-head>span,.lifecycle-page .footnote,.lifecycle-page .story-note,.lifecycle-page .note,.lifecycle-page .code-head span{color:var(--lab-muted)}.lifecycle-page a{color:var(--lab-accent)}.lifecycle-page .lab-brand{color:var(--lab-ink)}.lifecycle-page .lab-nav a{color:var(--lab-muted)}.lifecycle-page .lab-nav a[aria-current]{color:var(--lab-accent)}.lifecycle-page .map-shell,.lifecycle-page .theater{border-radius:var(--lab-radius);background:white}.lifecycle-page .section-head{border-top:1px solid var(--lab-line)}.lifecycle-page .state-node{background:white;border-color:#bac8df}.lifecycle-page .state-node[aria-pressed=true]{background:var(--lab-accent);border-color:var(--lab-accent);box-shadow:0 3px 0 #cdd5f4}.lifecycle-page .state-info{background:#edf1fa}.lifecycle-page .state-map svg text{fill:#5a677d}.lifecycle-page .state-map path:not(defs path){stroke:#acbbd1}.lifecycle-page .state-map path.edge-active{stroke:#c28a2e}.lifecycle-page .theater{background:var(--lab-panel);color:#edf1ff;border-color:var(--lab-panel)}.lifecycle-page .stage{background:radial-gradient(ellipse at center,#233553,transparent 70%)}.lifecycle-page .scene-top span,.lifecycle-page .thread>span:last-child{color:#b3c0d7}.lifecycle-page .monitor{background:#23334e;border-color:#566782;box-shadow:0 6px 0 #0c1425;color:#edf1ff}.lifecycle-page .scene-detail{border-color:#34415a}.lifecycle-page .prediction{color:var(--lab-ink);background:#fff5df}.lifecycle-page .prediction button{color:var(--lab-ink)}.lifecycle-page .timeline .past{background:#e9eefb}.lifecycle-page .timeline button[aria-current=step]{background:var(--lab-accent);border-color:var(--lab-accent);color:white}.lifecycle-page pre{background:var(--lab-panel);color:#e2e8ff;border-radius:var(--lab-radius)}.lifecycle-page .code-line.hot{background:#34466a;border-color:#ffc17c;color:#fff1cb}.lifecycle-page .code-line i{color:#91a2c1}.lifecycle-page video{background:var(--lab-panel);border-radius:var(--lab-radius)}.lifecycle-page button{background:white}.lifecycle-page button:hover:not(:disabled){background:#edf1fb;border-color:#a9b9df}.lifecycle-page button.primary{background:var(--lab-accent)}.lifecycle-page button.primary:hover:not(:disabled){background:#3448af}.lifecycle-page footer{color:var(--lab-muted)}
.count-page main{padding-top:24px}.embedded .lab-header,.embedded .lab-breadcrumb{display:none}
@media(max-width:900px){.lab-header{padding:14px 18px;gap:16px}.lab-nav a{padding:8px 10px;font-size:13px}}
@media(max-width:760px){.lab-header{display:block;padding:14px 16px 8px}.lab-brand{font-size:16px}.lab-mark{width:31px;height:31px;font-size:16px}.lab-nav{margin-top:9px;flex-wrap:nowrap;overflow:auto;gap:4px}.lab-nav a{min-height:40px;padding:8px 10px;font-size:12px;flex-shrink:0}.lab-breadcrumb{font-size:11px;gap:6px;margin-bottom:16px}.course-page .sidebar{top:0;z-index:40}.course-page .scrim{z-index:39}.course-page main,.lifecycle-page main,.count-page main{padding-top:18px}.course-page .mobile-head{position:sticky;top:0}.learning-page .learn-shell{padding-left:16px;padding-right:16px}.learning-page .lab-breadcrumb{margin-top:18px}.learning-page .learn-nav{padding:12px 0}.learning-page .learn-nav a{padding:8px 12px;min-height:44px}.lifecycle-page .intro{padding-bottom:18px}.lifecycle-page .intro nav{gap:16px;flex-wrap:wrap}.lifecycle-page .scene-top h3{font-size:18px}.count-page:not(.embedded) main{width:calc(100% - 32px)}}
@media print{.lab-header,.lab-breadcrumb{display:none}.course-page .sidebar{display:none}.course-page main{margin:0}.lab-header a{color:inherit}}
.skip{z-index:99}
.lifecycle-page .state-node[aria-pressed=true]:hover:not(:disabled),.lifecycle-page .timeline button[aria-current=step]:hover:not(:disabled){background:#3448af;border-color:#3448af;color:white}
