:root {
  --ink:#202323;
  --muted:#5c6262;
  --paper:#fbfbf8;
  --line:#dce0dc;
  --sea:#436779;
  --surface:#f1f3f0;
  --hover:#e9ede9;
  --border:#b8c0ba;
  --focus:#2d5c72;
  --button-ink:#fff;
  --error:#56352f;
  --error-surface:#f7ece7;
  color-scheme:light;
  font-family:Arial,"Hiragino Kaku Gothic ProN","Noto Sans JP",sans-serif;
  color:var(--ink);
  background:var(--paper);
  font-synthesis:none
}
* {
  box-sizing:border-box
}
body {
  margin:0
}
a {
  color:inherit;
  text-underline-offset:4px
}
button,input,textarea {
  font:inherit
}
button {
  border:1px solid var(--border);
  background:transparent;
  color:var(--ink);
  min-height:42px;
  padding:9px 14px;
  cursor:pointer;
  border-radius:3px
}
button:hover {
  background:var(--hover)
}
button:disabled {
  cursor:not-allowed;
  opacity:.55
}
button:focus-visible,a:focus-visible,input:focus-visible,textarea:focus-visible {
  outline:3px solid var(--focus);
  outline-offset:3px
}
button[aria-pressed=true] {
  background:var(--ink);
  color:var(--button-ink);
  border-color:var(--ink)
}
.skip {
  position:absolute;
  left:20px;
  top:-60px;
  z-index:3;
  background:var(--paper);
  padding:12px
}
.skip:focus {
  top:8px
}
.masthead,main,footer {
  width:min(1280px,calc(100% - 64px));
  margin:auto
}
.masthead {
  padding:24px 0;
  border-bottom:1px solid var(--line);
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:20px
}
.wordmark {
  font-size:14px;
  font-weight:750;
  letter-spacing:.16em;
  text-decoration:none
}
.masthead nav {
  display:flex;
  gap:22px;
  align-items:center;
  font-size:13px
}
.masthead button {
  font-size:12px;
  min-height:36px
}
.intro {
  padding:54px 0 32px;
  max-width:840px
}
.eyebrow {
  font-size:10px;
  font-weight:700;
  letter-spacing:.16em;
  margin:0 0 16px;
  color:var(--muted)
}
h1 {
  font-size:clamp(32px,4.4vw,58px);
  letter-spacing:-.035em;
  line-height:1.16;
  margin:0 0 20px
}
h2 {
  font-size:20px;
  line-height:1.45;
  margin:0 0 12px
}
p {
  line-height:1.75;
  margin:0 0 16px
}
.lede {
  font-size:17px;
  max-width:720px;
  color:var(--muted)
}
.lab-layout {
  display:grid;
  grid-template-columns:minmax(0,1fr) 280px;
  border:1px solid var(--line);
  border-radius:4px;
  overflow:hidden
}
.viewer {
  min-width:0;
  background:var(--surface)
}
.viewer-heading {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:12px;
  padding:20px 22px 10px
}
.viewer-heading h2 {
  font-size:14px;
  margin:0
}
.badge {
  font-size:10px;
  letter-spacing:.04em;
  color:var(--muted)
}
.stage-picker {
  display:flex;
  gap:8px;
  padding:8px 22px 0
}
.stage-picker button {
  flex:1;
  display:flex;
  align-items:center;
  justify-content:center;
  gap:10px;
  font-size:12px;
  padding:10px 8px
}
.stage-picker span {
  font-size:10px;
  opacity:.7
}
.stage-picker b {
  font-weight:500
}
#canvas-wrap {
  height:380px;
  position:relative
}
#ocean-canvas {
  display:block;
  width:100%;
  height:100%
}
#fallback {
  text-align:center;
  padding:24px;
  max-width:460px;
  margin:auto
}
#fallback svg {
  width:min(300px,100%);
  height:110px
}
#fallback h3 {
  font-size:18px
}
#fallback p {
  font-size:13px
}
#render-status {
  font-size:11px;
  color:var(--muted);
  padding:0 22px;
  margin:0 0 13px
}
.playback {
  display:flex;
  align-items:center;
  flex-wrap:wrap;
  gap:8px;
  padding:0 22px
}
.playback button {
  font-size:12px;
  min-height:38px
}
.playback output {
  font:12px ui-monospace,monospace;
  margin-left:auto
}
.small {
  font-size:12px;
  color:var(--muted);
  line-height:1.7
}
.viewer>.small {
  padding:8px 22px 0;
  margin:0
}
.stage-description {
  padding:15px 22px 20px;
  margin:0;
  font-size:13px;
  min-height:76px
}
.controls {
  padding:25px 24px;
  background:var(--paper);
  border-left:1px solid var(--line);
  outline-offset:-5px
}
.controls .eyebrow {
  margin-bottom:8px
}
.controls h2 {
  font-size:22px
}
.controls label:not(.check) {
  display:flex;
  justify-content:space-between;
  align-items:center;
  gap:8px;
  font-size:12px;
  font-weight:600;
  margin-top:20px
}
.controls output {
  font:11px ui-monospace,monospace;
  font-weight:400
}
input[type=range] {
  display:block;
  accent-color:var(--ink);
  width:100%;
  height:30px;
  margin:4px 0 0;
  cursor:pointer
}
.control-help {
  font-size:11px;
  line-height:1.5;
  color:var(--muted);
  margin:0
}
.check {
  display:flex;
  gap:9px;
  align-items:center;
  font-size:12px;
  margin-top:22px;
  min-height:38px
}
.check input {
  accent-color:var(--ink);
  width:18px;
  height:18px;
  margin:0
}
.mesh-info {
  margin:20px 0 0;
  border-top:1px solid var(--line);
  padding-top:12px;
  display:flex;
  gap:20px;
  font-size:11px
}
.mesh-info dt {
  color:var(--muted)
}
.mesh-info dd {
  margin:4px 0 0;
  font:12px ui-monospace,monospace
}
.experiment {
  display:grid;
  grid-template-columns:1fr 1.1fr;
  gap:60px;
  padding:45px 0;
  border-bottom:1px solid var(--line)
}
.experiment p {
  font-size:13px
}
.experiment button {
  font-size:12px
}
.notebook label {
  display:block;
  font-size:12px;
  font-weight:600;
  margin-bottom:8px
}
textarea {
  width:100%;
  resize:vertical;
  border:1px solid var(--border);
  border-radius:3px;
  background:var(--paper);
  padding:10px;
  line-height:1.6;
  font-size:13px;
  margin-bottom:10px
}
#experiment-result {
  min-height:24px;
  margin:10px 0 16px;
  font-size:12px;
  color:var(--sea)
}
.concepts {
  display:grid;
  grid-template-columns:repeat(3,minmax(0,1fr));
  gap:36px;
  padding:40px 0
}
.concepts .number {
  font-size:10px;
  letter-spacing:.08em;
  color:var(--muted)
}
.concepts h2 {
  font-size:19px;
  margin:12px 0
}
.concepts p {
  font-size:13px;
  color:var(--muted)
}
.concepts code {
  font:12px ui-monospace,monospace;
  background:var(--surface);
  padding:8px;
  display:inline-block
}
.next {
  border-top:1px solid var(--line);
  padding:24px 0 40px;
  display:flex;
  gap:48px;
  align-items:start
}
.next p {
  font-size:12px;
  color:var(--muted);
  flex:1;
  margin:0
}
.next a {
  font-size:13px;
  max-width:340px;
  line-height:1.6
}
footer {
  border-top:1px solid var(--line);
  padding:20px 0 24px;
  font-size:10px;
  color:var(--muted);
  display:flex;
  justify-content:space-between;
  gap:20px
}
[hidden] {
  display:none!important
}
.guide-main {
  max-width:900px
}
.guide-main section {
  margin:30px 0
}
.guide-main pre {
  overflow:auto;
  padding:16px;
  background:var(--surface);
  font-size:13px;
  line-height:1.65
}
.guide-main li {
  line-height:1.8;
  margin:8px 0
}
.guide-main table {
  border-collapse:collapse;
  width:100%;
  font-size:13px
}
.guide-main th,.guide-main td {
  border-bottom:1px solid var(--line);
  padding:12px;
  text-align:left
}
.guide-main code {
  overflow-wrap:anywhere
}
.guide-main h2 {
  margin-top:30px
}
@media(max-width:900px) {
  .lab-layout {
    grid-template-columns:minmax(0,1fr) 250px
  }
  .controls {
    padding:22px 18px
  }
  .viewer-heading {
    flex-wrap:wrap
  }
  #canvas-wrap {
    height:350px
  }
  .stage-picker {
    gap:5px
  }
  .stage-picker button {
    display:block;
    line-height:1.6
  }
  .stage-picker span {
    margin-right:5px
  }
  .experiment {
    gap:30px
  }
  .concepts {
    gap:22px
  }
}
@media(max-width:680px) {
  .masthead,main,footer {
    width:calc(100% - 32px)
  }
  .masthead {
    padding:16px 0;
    gap:12px
  }
  .masthead nav {
    gap:12px;
    font-size:11px
  }
  .wordmark {
    font-size:11px
  }
  .intro {
    padding:34px 0 22px
  }
  .lede {
    font-size:14px
  }
  .lab-layout {
    display:block
  }
  .viewer-heading {
    padding:18px 14px 10px
  }
  .stage-picker {
    padding:5px 14px 0
  }
  .stage-picker button {
    font-size:11px;
    padding:9px 4px
  }
  #canvas-wrap {
    height:290px
  }
  .playback {
    padding:0 14px;
    gap:6px
  }
  .playback button {
    font-size:10px;
    padding:8px 10px
  }
  .playback output {
    font-size:11px
  }
  .viewer>.small,#render-status {
    padding-left:14px;
    padding-right:14px
  }
  .stage-description {
    padding:14px;
    font-size:12px
  }
  .controls {
    border-left:0;
    border-top:1px solid var(--line);
    padding:22px
  }
  .controls label:not(.check) {
    margin-top:16px
  }
  .experiment {
    display:block;
    padding:32px 0
  }
  .notebook {
    margin-top:26px
  }
  .concepts {
    display:block;
    padding:15px 0
  }
  .concepts article {
    margin:24px 0
  }
  .next {
    display:block;
    padding-bottom:28px
  }
  .next a {
    display:inline-block;
    margin-top:18px
  }
  footer {
    display:block;
    line-height:2
  }
  footer span {
    display:block
  }
  .guide-main table {
    display:block;
    overflow:auto
  }
}
@media(prefers-reduced-motion:reduce) {
  * {
    scroll-behavior:auto
  }
}
#diagnostics {
  margin:0 22px 14px;
  font-size:12px;
  color:var(--error)
}
#diagnostics summary {
  cursor:pointer;
  min-height:32px;
  padding:8px 0
}
#error-output {
  white-space:pre-wrap;
  overflow-wrap:anywhere;
  max-height:220px;
  overflow:auto;
  padding:10px;
  background:var(--error-surface);
  font:11px/1.6 ui-monospace,monospace
}

:root[data-theme="dark"]{color-scheme:dark;--ink:#eef0e9;--muted:#bdc9c7;--paper:#191f20;--line:#4b5a59;--sea:#9bc7df;--surface:#273133;--hover:#354244;--border:#687a77;--focus:#96cce7;--button-ink:#192125;--error:#f4b7a7;--error-surface:#3d2727;}
@media(prefers-color-scheme:dark){:root:not([data-theme]){color-scheme:dark;--ink:#eef0e9;--muted:#bdc9c7;--paper:#191f20;--line:#4b5a59;--sea:#9bc7df;--surface:#273133;--hover:#354244;--border:#687a77;--focus:#96cce7;--button-ink:#192125;--error:#f4b7a7;--error-surface:#3d2727;}}

.theme-control{display:flex;flex-wrap:wrap;align-items:center;gap:.5rem;font-size:.8rem;min-width:0}.theme-control label{color:var(--muted)}.theme-control select{font:inherit;color:var(--ink);background:var(--paper);border:1px solid var(--line);min-height:42px;padding:.4rem .6rem;max-width:100%}.theme-control [role="status"]{flex-basis:100%;max-width:30rem;color:var(--muted);font-size:.75rem}.masthead{flex-wrap:wrap}.lab-appearance{display:flex;flex-wrap:wrap;align-items:center;justify-content:space-between;gap:1rem;margin-top:1rem}
