:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,sans-serif;color:#172033;background:#edf2f7;font-synthesis:none;text-rendering:optimizeLegibility;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}*{box-sizing:border-box}body{min-width:320px;min-height:100vh;margin:0}button,textarea{font:inherit}button{cursor:pointer}#root{min-height:100vh}.app-shell{min-height:100vh;padding:18px;overflow-x:hidden}.developer-footer{display:flex;flex-wrap:wrap;justify-content:center;gap:8px 18px;max-width:1440px;margin:16px auto 0;border-top:1px solid #dbe4ea;padding:16px 8px 2px;color:#64748b;font-size:.9rem;text-align:center}.app-header{display:grid;grid-template-columns:minmax(0,1fr) minmax(520px,900px);gap:24px;align-items:end;max-width:1440px;margin:0 auto 16px}.app-header h1{margin:4px 0 0;color:#0f172a;font-size:clamp(1.8rem,3vw,3rem);font-weight:760;line-height:1.02;letter-spacing:0}.eyebrow{margin:0;color:#475569;font-size:.76rem;font-weight:760;letter-spacing:.08em;text-transform:uppercase}.header-summary{margin:0;color:#475569;font-size:.98rem;line-height:1.7}.header-tools{display:grid;gap:12px}.header-actions{display:flex;flex-wrap:wrap;gap:8px;align-items:center}.language-button{display:inline-flex;min-height:42px;align-items:center;justify-content:center;gap:7px;border:1px solid #cbd5e1;border-radius:7px;padding:8px 11px;background:#fff;color:#172033;font-weight:720;line-height:1.2;touch-action:manipulation;transition:border-color .14s ease,background .14s ease,color .14s ease}.language-button:hover{border-color:#64748b;background:#eef6ff}.mode-switch{display:grid;grid-template-columns:repeat(6,minmax(0,1fr));gap:6px;flex:1 1 300px;width:min(100%,900px);padding:5px;border:1px solid #cbd5e1;border-radius:8px;background:#fff}.mode-button{min-height:36px;border:0;border-radius:6px;padding:7px 8px;background:transparent;color:#334155;font-weight:720;font-size:.9rem;line-height:1.25;touch-action:manipulation;overflow-wrap:anywhere}.mode-button:hover{background:#eef6ff}.mode-button.is-active{background:#0f766e;color:#fff}.workspace{display:grid;grid-template-columns:minmax(240px,300px) minmax(520px,1fr) minmax(280px,360px);gap:16px;max-width:1440px;margin:0 auto;align-items:stretch}.assembly-workspace{display:grid;grid-template-columns:minmax(0,1fr) minmax(240px,300px);gap:16px;max-width:1440px;margin:0 auto;align-items:start}.assembly-main-grid{display:grid;grid-template-columns:minmax(520px,1.1fr) minmax(360px,.9fr);gap:16px;min-width:0;align-items:start}.assembly-preview-stack,.stage-column{display:grid;min-width:0;gap:16px}.sidebar{display:flex;min-width:0;flex-direction:column;gap:16px}.panel,.scene-panel{border:1px solid #d7dee8;border-radius:8px;background:#fff;box-shadow:0 14px 36px #0f172a14}.panel{padding:16px}.panel-heading{margin-bottom:14px}.panel h2{margin:2px 0 0;color:#0f172a;font-size:1.05rem;line-height:1.25;letter-spacing:0}.scene-panel{position:relative;height:720px;min-height:720px;overflow:hidden;touch-action:none}.scene-panel.is-compact{height:430px;min-height:430px}.scene-panel canvas{width:100%!important;height:100%!important}.scene-fallback{position:relative;display:grid;height:100%;min-height:inherit;place-items:center;overflow:hidden;background:#f7fafc}.scene-fallback svg{width:min(100%,540px);height:calc(100% - 48px);padding:18px}.scene-fallback-empty p,.scene-fallback-note{border:1px dashed #94a3b8;border-radius:8px;padding:10px 12px;background:#f8fafceb;color:#334155;font-size:.88rem;font-weight:720;line-height:1.55;text-align:center}.scene-fallback-note{position:absolute;right:14px;bottom:14px;max-width:min(300px,calc(100% - 28px));margin:0}.fallback-backbone{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:20;opacity:.72}.fallback-backbone-a{stroke:#8bdff2}.fallback-backbone-b{stroke:#0ea5e9}.fallback-rung{stroke:#334155;stroke-width:1.3;opacity:.62}.fallback-hydrogen{stroke:#111827;stroke-dasharray:2 4;stroke-linecap:round;stroke-width:2}.fallback-hydrogen.is-A-T{stroke:#d97706}.fallback-hydrogen.is-C-G{stroke:#0f766e}.fallback-base{cursor:pointer}.fallback-base rect{stroke:#0f172a38;stroke-width:1}.fallback-base text{fill:#0f172a;font-size:12px;font-weight:800;pointer-events:none}.fallback-base.is-selected rect,.fallback-base:hover rect{stroke:#2563eb;stroke-width:2}.assembly-workspace .scene-panel.is-compact{height:min(52vh,500px);min-height:360px}.assembly-workspace .assembly-board{max-height:min(46vh,430px);overflow:auto;padding-right:3px}.control-grid{display:grid;gap:9px}.control-button,.step-button{display:inline-flex;width:100%;min-height:42px;align-items:center;justify-content:flex-start;gap:9px;border:1px solid #cbd5e1;border-radius:7px;background:#f8fafc;color:#172033;font-weight:650;line-height:1.25;text-align:left;touch-action:manipulation;overflow-wrap:anywhere;transition:border-color .14s ease,background .14s ease,color .14s ease,box-shadow .14s ease}.control-button{padding:9px 11px}.control-button:hover,.step-button:hover{border-color:#64748b;background:#eef6ff}.control-button:focus-visible,.step-button:focus-visible,.sequence-input:focus-visible{outline:3px solid rgba(37,99,235,.32);outline-offset:2px}.mode-button:focus-visible,.language-button:focus-visible,.base-token:focus-visible,.assembly-slot:focus-visible{outline:3px solid rgba(37,99,235,.32);outline-offset:2px}.control-button.is-active,.step-button.is-active{border-color:#2563eb;background:#dbeafe;color:#0f3f91}.control-button:disabled{cursor:not-allowed;opacity:.52}.control-button svg{flex:0 0 auto}.control-button span,.step-button span{min-width:0}.step-list{display:grid;gap:8px}.step-button{display:grid;grid-template-columns:92px minmax(0,1fr);padding:9px 10px}.step-index{color:#475569;font-size:.78rem;font-weight:760}.step-description{margin:14px 0 0;color:#334155;font-size:.92rem;line-height:1.65}.info-list{display:grid;gap:12px;margin:0}.info-list div{display:grid;gap:4px;padding-bottom:12px;border-bottom:1px solid #e2e8f0}.info-list div:last-child{border-bottom:0;padding-bottom:0}.info-list dt{color:#64748b;font-size:.78rem;font-weight:760}.info-list dd{margin:0;color:#172033;font-size:.96rem;line-height:1.6}.empty-state{margin:0 0 12px;color:#334155;line-height:1.6}.science-note{margin:12px 0 0;padding:10px 12px;border-left:3px solid #0f766e;background:#ecfdf5;color:#164e63;font-size:.86rem;line-height:1.6}.field-label{display:block;margin-bottom:7px;color:#334155;font-size:.88rem;font-weight:720}.sequence-input{width:100%;min-height:96px;resize:vertical;border:1px solid #cbd5e1;border-radius:7px;padding:10px;color:#0f172a;background:#f8fafc;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.94rem;line-height:1.55;letter-spacing:0}.sequence-input.has-error{border-color:#dc2626;background:#fff7f7}.form-error,.form-notice{margin:9px 0 0;font-size:.86rem;line-height:1.55}.form-error{color:#b91c1c;font-weight:720}.form-notice{color:#475569}.sequence-output{display:grid;gap:5px;margin-top:13px}.sequence-output span{color:#64748b;font-size:.78rem;font-weight:760}.sequence-output output{display:block;min-height:38px;overflow-wrap:anywhere;border:1px solid #e2e8f0;border-radius:7px;padding:8px 10px;background:#f8fafc;color:#172033;font-family:ui-monospace,SFMono-Regular,Menlo,Monaco,Consolas,monospace;font-size:.9rem;line-height:1.45;letter-spacing:0}.assembly-workbench{--slot-error: #dc2626}.assembly-header{display:flex;gap:12px;align-items:start;justify-content:space-between;margin-bottom:8px}.assembly-header h2{margin:2px 0 0}.assembly-progress{display:inline-flex;min-width:72px;min-height:38px;align-items:center;justify-content:center;gap:3px;border:1px solid #cbd5e1;border-radius:7px;background:#f8fafc;color:#0f172a;font-weight:780}.assembly-intro{margin:0;color:#334155;font-size:.92rem;line-height:1.65}.assembly-progress-track{height:8px;overflow:hidden;margin:14px 0;border-radius:999px;background:#e2e8f0}.assembly-progress-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,#0f766e,#2563eb);transition:width .18s ease}.base-palette{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px;margin:0 0 14px}.base-token,.assembly-template-base,.assembly-slot{--base-color: #2563eb}.base-token{display:grid;min-height:64px;gap:2px;place-items:center;border:2px solid color-mix(in srgb,var(--base-color),#ffffff 38%);border-radius:8px;background:color-mix(in srgb,var(--base-color),#ffffff 88%);color:#0f172a;touch-action:manipulation;transition:border-color .14s ease,background .14s ease,transform .14s ease}.base-token:hover,.base-token.is-selected{border-color:var(--base-color);background:color-mix(in srgb,var(--base-color),#ffffff 78%)}.base-token:active{transform:translateY(1px)}.base-token span{font-size:1.22rem;font-weight:840}.base-token small{color:#334155;font-size:.72rem;font-weight:680;line-height:1.18;text-align:center}.assembly-board{display:grid;gap:8px}.assembly-row{display:grid;grid-template-columns:32px 48px minmax(46px,1fr) 88px minmax(112px,1fr);gap:8px;align-items:center;min-height:46px;padding:6px 8px;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc;transition:border-color .14s ease,background .14s ease}.assembly-row.is-complete{border-color:#86efac;background:#f0fdf4}.assembly-row.is-error{border-color:var(--slot-error);background:#fff7f7}.assembly-row.is-hinted{border-color:#2563eb;background:#eff6ff}.assembly-index{color:#64748b;font-size:.78rem;font-weight:760;text-align:center}.assembly-template-base,.assembly-slot{display:inline-flex;min-width:44px;min-height:34px;align-items:center;justify-content:center;border-radius:7px;font-weight:820;letter-spacing:0}.assembly-template-base{border:1px solid color-mix(in srgb,var(--base-color),#ffffff 36%);background:color-mix(in srgb,var(--base-color),#ffffff 84%);color:#0f172a}.assembly-rung{height:3px;border-radius:999px;background:linear-gradient(90deg,#94a3b8 45%,transparent 45% 58%,#94a3b8 58%)}.assembly-slot{border:1px dashed #64748b;background:#fff;color:#475569;line-height:1.18;text-align:center;touch-action:manipulation;overflow-wrap:anywhere}.assembly-row.is-complete .assembly-slot{border-color:#16a34a;border-style:solid;background:#dcfce7;color:#14532d}.assembly-row.is-error .assembly-slot{border-color:var(--slot-error);color:#991b1b}.assembly-row.is-hinted .assembly-slot{border-color:#2563eb;color:#1d4ed8}.assembly-pair-note{display:inline-flex;min-width:0;align-items:center;flex-wrap:wrap;gap:5px;color:#475569;font-size:.83rem;line-height:1.35}.assembly-row.is-complete .assembly-pair-note{color:#166534;font-weight:720}.assembly-feedback{margin:12px 0 0;padding:10px 12px;border-radius:7px;font-size:.9rem;font-weight:680;line-height:1.55}.assembly-feedback.is-neutral{background:#eff6ff;color:#1e3a8a}.assembly-feedback.is-success{background:#ecfdf5;color:#166534}.assembly-feedback.is-error{background:#fef2f2;color:#991b1b}.assembly-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-top:12px}.assembly-help p{margin:0 0 12px;color:#334155;font-size:.92rem;line-height:1.65}.pairing-rule-list{display:grid;gap:8px;margin:0}.pairing-rule-list div{display:grid;grid-template-columns:64px minmax(0,1fr);gap:8px;align-items:center;padding:8px 10px;border:1px solid #e2e8f0;border-radius:7px;background:#f8fafc}.pairing-rule-list dt{color:#0f172a;font-weight:820}.pairing-rule-list dd{margin:0;color:#475569;font-size:.88rem}.photosynthesis-workspace{display:grid;grid-template-columns:minmax(260px,340px) minmax(0,1fr);gap:16px;max-width:1440px;margin:0 auto;align-items:start}.photosynthesis-sidebar{display:grid;gap:16px}.period-control{display:grid;gap:8px;margin-bottom:14px}.period-switch{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px;padding:5px;border:1px solid #cbd5e1;border-radius:8px;background:#f8fafc}.period-button,.task-button{display:inline-flex;min-width:0;align-items:center;justify-content:center;gap:7px;border:1px solid transparent;border-radius:7px;background:transparent;color:#334155;font-weight:720;line-height:1.2;touch-action:manipulation;overflow-wrap:anywhere}.period-button{min-height:38px;padding:7px 8px}.period-button:hover,.task-button:hover{background:#eef6ff}.period-button.is-active{background:#f59e0b;color:#111827}.period-button.is-active:last-child{background:#1e293b;color:#f8fafc}.metabolism-slider-list{display:grid;gap:13px}.metabolism-slider{display:grid;gap:7px}.slider-label-row{display:flex;gap:10px;align-items:center;justify-content:space-between}.slider-label{display:inline-flex;min-width:0;align-items:center;gap:7px;color:#334155;font-size:.9rem;font-weight:720;line-height:1.25}.slider-label svg{flex:0 0 auto;color:#0f766e}.slider-label-row output{flex:0 0 auto;color:#0f172a;font-size:.88rem;font-weight:820}.metabolism-slider input[type=range]{width:100%;accent-color:#0f766e}.effective-light{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:14px 0 12px;border:1px solid #d7dee8;border-radius:7px;padding:9px 10px;background:#f8fafc;color:#475569;font-size:.9rem;line-height:1.3}.effective-light strong{color:#0f172a}.reset-metabolism{justify-content:center}.task-selector{display:grid;gap:8px}.task-button{justify-content:flex-start;min-height:40px;border-color:#cbd5e1;padding:8px 10px;background:#f8fafc;text-align:left}.task-button.is-active{border-color:#2563eb;background:#dbeafe;color:#0f3f91}.task-prompt{margin:13px 0 0;color:#334155;font-size:.92rem;line-height:1.65}.task-feedback{display:flex;gap:8px;align-items:flex-start;margin:12px 0 0;border-radius:7px;padding:10px 12px;font-size:.88rem;line-height:1.55}.task-feedback svg{flex:0 0 auto;margin-top:2px}.task-feedback strong{font-weight:820}.task-feedback.is-pending{background:#fff7ed;color:#9a3412}.task-feedback.is-success{background:#ecfdf5;color:#166534}.metabolism-stage{display:grid;gap:16px;min-width:0}.metabolism-stage-heading{display:flex;gap:16px;align-items:start;justify-content:space-between;margin-bottom:0}.stage-status{flex:0 0 auto;margin:0;border:1px solid #bbf7d0;border-radius:999px;padding:6px 10px;background:#f0fdf4;color:#166534;font-size:.82rem;font-weight:820;line-height:1.2}.metabolism-stage.is-night .stage-status{border-color:#cbd5e1;background:#f8fafc;color:#334155}.plant-simulation{position:relative;display:grid;min-height:310px;overflow:hidden;place-items:center;border:1px solid #d7dee8;border-radius:8px;background:linear-gradient(180deg,#0ea5e933,#ecfdf5eb),linear-gradient(90deg,#fef3c7,#dff7ec)}.metabolism-stage.is-night .plant-simulation{background:linear-gradient(180deg,#1e293beb,#334155c7),#172033}.sky-badge{position:absolute;top:18px;right:20px;display:grid;width:58px;height:58px;place-items:center;border-radius:50%;background:#fde68a;color:#92400e;box-shadow:0 10px 24px #92400e33}.metabolism-stage.is-night .sky-badge{background:#dbeafe;color:#1e3a8a;box-shadow:0 10px 24px #0f172a3d}.plant-model{position:relative;width:min(38vw,250px);min-width:190px;height:230px}.plant-stem{position:absolute;left:50%;bottom:38px;width:18px;height:150px;border-radius:999px;background:linear-gradient(180deg,#22c55e,#15803d);transform:translate(-50%)}.leaf-shape{position:absolute;width:112px;height:70px;border:2px solid rgba(20,83,45,.18);border-radius:999px 0;background:radial-gradient(circle at 30% 35%,rgba(255,255,255,.5),transparent 28%),linear-gradient(135deg,#86efac,#16a34a);box-shadow:0 12px 22px #14532d2e}.leaf-left{left:22px;top:68px;transform:rotate(-24deg)}.leaf-right{right:20px;top:86px;transform:scaleX(-1) rotate(-28deg)}.leaf-center{left:50%;top:24px;transform:translate(-50%) rotate(-45deg)}.plant-soil{position:absolute;left:50%;bottom:22px;width:190px;height:26px;border-radius:50%;background:linear-gradient(90deg,#78350f,#a16207,#78350f);transform:translate(-50%)}.gas{position:absolute;display:inline-flex;min-width:94px;align-items:center;gap:8px;border:1px solid rgba(15,23,42,.12);border-radius:999px;padding:7px 10px;background:#ffffffc7;color:#0f172a;font-weight:840;line-height:1}.metabolism-stage.is-night .gas{background:#f8fafce6}.gas i{position:relative;display:block;flex:1 1 auto;height:3px;min-width:38px;border-radius:999px;background:currentColor}.gas i:after{position:absolute;top:50%;width:9px;height:9px;border-top:3px solid currentColor;border-right:3px solid currentColor;content:""}.gas-co2.is-inbound i:after,.gas-o2.is-outbound i:after{right:-1px;transform:translateY(-50%) rotate(45deg)}.gas-co2.is-outbound i:after,.gas-o2.is-inbound i:after{left:-1px;transform:translateY(-50%) rotate(-135deg)}.gas-co2{left:34px;top:40%;color:#2563eb}.gas-o2{right:34px;top:46%;color:#0f766e}.process-note{margin:-2px 0 0;color:#334155;font-size:.95rem;line-height:1.65}.process-bars{display:grid;gap:10px}.process-row{display:grid;grid-template-columns:minmax(150px,190px) minmax(140px,1fr) minmax(98px,auto);gap:12px;align-items:center}.process-row>span{display:inline-flex;align-items:center;gap:7px;color:#334155;font-weight:760}.process-track{height:12px;overflow:hidden;border-radius:999px;background:#e2e8f0}.process-fill{height:100%;min-width:3px;border-radius:inherit;transition:width .16s ease}.process-fill.is-photosynthesis{background:linear-gradient(90deg,#16a34a,#84cc16)}.process-fill.is-respiration{background:linear-gradient(90deg,#2563eb,#38bdf8)}.process-row strong{color:#0f172a;font-size:.9rem;text-align:right}.metabolism-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:10px}.metabolism-metrics div{display:grid;gap:5px;min-height:76px;border:1px solid #e2e8f0;border-radius:8px;padding:10px;background:#f8fafc}.metabolism-metrics span{color:#64748b;font-size:.78rem;font-weight:760;line-height:1.25}.metabolism-metrics strong{align-self:end;color:#0f172a;font-size:1rem;line-height:1.25}.equation-panel{display:grid;gap:8px;border:1px solid #d7dee8;border-radius:8px;padding:13px;background:#fff}.equation-panel h3,.chart-heading h3{margin:0;color:#0f172a;font-size:.98rem;line-height:1.25}.equation-panel p{display:grid;grid-template-columns:minmax(110px,150px) minmax(0,1fr);gap:10px;align-items:center;margin:0;color:#334155;font-size:.9rem;line-height:1.5}.equation-panel span{color:#64748b;font-weight:760}.equation-panel strong{color:#172033;font-weight:760}.chart-panel{min-width:0;border:1px solid #d7dee8;border-radius:8px;padding:13px 13px 6px;background:#f8fafc}.chart-heading{display:flex;align-items:center;gap:8px;margin-bottom:4px}.chart-heading svg{color:#0f766e}.metabolism-chart{display:block;width:100%;height:auto;overflow:visible}.chart-axis{stroke:#94a3b8;stroke-width:1.2}.chart-grid-line{stroke:#d7dee8;stroke-dasharray:3 6;stroke-width:1}.chart-line{fill:none;stroke-linecap:round;stroke-linejoin:round;stroke-width:4}.chart-line-photosynthesis{stroke:#16a34a}.chart-line-respiration{stroke:#2563eb}.chart-current-hour{stroke:#f59e0b;stroke-dasharray:5 5;stroke-width:2}.chart-tick,.chart-legend text{fill:#475569;font-size:12px;font-weight:720;text-anchor:middle}.chart-legend text{text-anchor:start}.legend-dot.is-photosynthesis{fill:#16a34a}.legend-dot.is-respiration{fill:#2563eb}.ecosystem-workspace{display:grid;grid-template-columns:minmax(280px,360px) minmax(0,1fr);gap:16px;max-width:1440px;margin:0 auto;align-items:start}.ecosystem-sidebar{display:grid;gap:16px}.ecosystem-scenarios{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px;margin-bottom:14px}.ecosystem-scenario-button{display:inline-flex;min-width:0;min-height:42px;align-items:center;justify-content:flex-start;gap:7px;border:1px solid #cbd5e1;border-radius:7px;padding:8px 10px;background:#f8fafc;color:#172033;font-weight:720;line-height:1.25;text-align:left;touch-action:manipulation;overflow-wrap:anywhere}.ecosystem-scenario-button:hover{border-color:#64748b;background:#eef6ff}.ecosystem-scenario-button svg{flex:0 0 auto;color:#0f766e}.ecosystem-slider-list{display:grid;gap:13px;margin-bottom:14px}.ecosystem-slider{display:grid;gap:7px}.ecosystem-slider input[type=range]{width:100%;accent-color:#0f766e}.ecosystem-reset-button{justify-content:center}.species-toggle-list{display:grid;gap:8px}.species-toggle{--species-color: #0f766e;display:grid;grid-template-columns:34px minmax(0,1fr) minmax(58px,auto);gap:9px;align-items:center;min-height:54px;border:1px solid color-mix(in srgb,var(--species-color),#ffffff 58%);border-radius:8px;padding:8px 10px;background:color-mix(in srgb,var(--species-color),#ffffff 92%);color:#172033;text-align:left;touch-action:manipulation}.species-toggle:hover{border-color:var(--species-color);background:color-mix(in srgb,var(--species-color),#ffffff 86%)}.species-toggle.is-removed{border-style:dashed;background:#f8fafc;color:#64748b}.species-toggle-icon{display:grid;width:32px;height:32px;place-items:center;border-radius:50%;background:color-mix(in srgb,var(--species-color),#ffffff 78%);color:var(--species-color)}.species-toggle-copy{display:grid;min-width:0;gap:2px}.species-toggle-copy strong{color:#0f172a;font-size:.92rem;line-height:1.2}.species-toggle-copy small{color:#64748b;font-size:.75rem;font-weight:720;line-height:1.2}.species-toggle-value{justify-self:end;color:#0f172a;font-size:.86rem;font-weight:840;line-height:1.2}.species-toggle.is-removed .species-toggle-value{color:#2563eb}.ecosystem-stage{display:grid;min-width:0;gap:16px}.ecosystem-stage-heading{display:flex;gap:16px;align-items:start;justify-content:space-between;margin-bottom:0}.ecosystem-status{flex:0 0 auto;margin:0;border:1px solid #bbf7d0;border-radius:999px;padding:6px 10px;background:#f0fdf4;color:#166534;font-size:.82rem;font-weight:820;line-height:1.2}.ecosystem-stage.is-stressed .ecosystem-status{border-color:#fed7aa;background:#fff7ed;color:#9a3412}.ecosystem-stage.is-collapse .ecosystem-status{border-color:#fecaca;background:#fef2f2;color:#991b1b}.ecosystem-metrics{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}.ecosystem-metrics div{display:grid;gap:5px;min-height:72px;border:1px solid #e2e8f0;border-radius:8px;padding:10px;background:#f8fafc}.ecosystem-metrics span{color:#64748b;font-size:.78rem;font-weight:760;line-height:1.25}.ecosystem-metrics strong{align-self:end;color:#0f172a;font-size:1.35rem;line-height:1.1}.ecosystem-grid{display:grid;grid-template-columns:minmax(0,1.5fr) minmax(250px,.7fr);gap:12px;align-items:stretch}.ecosystem-card{min-width:0;border:1px solid #d7dee8;border-radius:8px;padding:13px;background:#fff}.ecosystem-card-heading{display:flex;align-items:center;gap:8px;margin-bottom:8px}.ecosystem-card-heading h3{margin:0;color:#0f172a;font-size:.98rem;line-height:1.25}.ecosystem-card-heading svg{color:#0f766e}.food-web-card{display:grid;align-content:start}.food-web-diagram{display:block;width:100%;height:auto;min-height:300px;border:1px solid #e2e8f0;border-radius:8px;background:linear-gradient(180deg,#f0fdf4e6,#eff6ffd1),#f8fafc}.food-web-link{stroke:#475569;stroke-linecap:round;stroke-width:3}.food-web-link.is-muted{opacity:.2;stroke-dasharray:6 7}.food-web-link.is-active{opacity:.75}.food-web-recycle-link{fill:none;opacity:.58;stroke:#a16207;stroke-dasharray:7 8;stroke-linecap:round;stroke-width:3}.food-web-node-ring{fill:#fff;fill-opacity:.58;stroke-width:2}.food-web-node.is-empty{opacity:.56}.food-web-node-label,.food-web-node-value{fill:#0f172a;font-weight:840;text-anchor:middle}.food-web-node-label{font-size:14px}.food-web-node-value{font-size:13px}.ecosystem-model-note{margin:9px 0 0;color:#475569;font-size:.86rem;line-height:1.55}.energy-flow-card{display:grid;align-content:start}.energy-flow-list{display:grid;gap:8px}.energy-flow-row{display:grid;grid-template-columns:minmax(0,1fr) minmax(48px,auto);gap:8px;align-items:center;border:1px solid #e2e8f0;border-radius:7px;padding:8px 9px;background:#f8fafc}.energy-flow-row span{min-width:0;color:#334155;font-size:.84rem;font-weight:720;line-height:1.35;overflow-wrap:anywhere}.energy-flow-row strong{color:#0f172a;font-size:.9rem;text-align:right}.ecosystem-empty-flow{margin:0;border:1px dashed #94a3b8;border-radius:7px;padding:10px;color:#475569;font-size:.88rem;line-height:1.5}.ecosystem-observations{background:#f8fafc}.observation-list{display:grid;gap:8px}.observation-list p{margin:0;border-left:3px solid #0f766e;padding:8px 10px;background:#fff;color:#334155;font-size:.9rem;line-height:1.55}.ecosystem-stage.is-stressed .observation-list p{border-left-color:#f59e0b}.ecosystem-stage.is-collapse .observation-list p{border-left-color:#dc2626}.population-chart-card{background:#f8fafc}.ecosystem-chart{display:block;width:100%;height:auto;overflow:visible}.ecosystem-chart-line{fill:none;stroke:var(--species-color);stroke-linecap:round;stroke-linejoin:round;stroke-width:3.4}.ecosystem-chart-legend text{fill:#475569;font-size:11px;font-weight:720}.geography-workspace{display:grid;grid-template-columns:minmax(290px,370px) minmax(0,1fr);gap:16px;max-width:1440px;margin:0 auto;align-items:start}.geography-sidebar{display:grid;gap:16px}.geography-season-grid,.local-wind-switches{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:8px}.geography-season-grid{margin-bottom:14px}.geography-chip,.geography-toggle{display:inline-flex;min-width:0;align-items:center;justify-content:center;gap:7px;border:1px solid #cbd5e1;border-radius:7px;background:#f8fafc;color:#172033;font-weight:720;line-height:1.2;touch-action:manipulation;overflow-wrap:anywhere}.geography-chip{min-height:40px;padding:8px 9px}.geography-chip:hover,.geography-toggle:hover,.latitude-presets button:hover{border-color:#64748b;background:#eef6ff}.geography-chip.is-active,.geography-toggle.is-active{border-color:#0f766e;background:#ccfbf1;color:#134e4a}.geography-toggle{width:100%;justify-content:flex-start;min-height:44px;margin-bottom:14px;padding:9px 10px}.geography-toggle strong{margin-left:auto;color:#0f172a;font-size:.86rem}.geography-slider{display:grid;gap:7px;margin-bottom:13px}.geography-slider input[type=range]{width:100%;accent-color:#0f766e}.latitude-presets{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:6px;margin:2px 0 14px}.latitude-presets button{min-height:34px;border:1px solid #cbd5e1;border-radius:7px;background:#f8fafc;color:#334155;font-size:.82rem;font-weight:760}.geography-reset{justify-content:center}.geography-action-row{display:grid;grid-template-columns:minmax(0,1.1fr) minmax(0,.9fr);gap:8px}.geography-play-button{justify-content:center;border-color:#99f6e4;background:#ccfbf1;color:#134e4a;font-weight:760}.geography-play-button:hover,.geography-play-button.is-playing{border-color:#0f766e;background:#0f766e;color:#fff}.wind-control-group{display:grid;gap:7px;margin-bottom:13px}.wind-control-group>span{color:#334155;font-size:.88rem;font-weight:720}.geography-field{display:grid;gap:7px;margin:12px 0}.geography-field span{color:#334155;font-size:.88rem;font-weight:720}.geography-field select{width:100%;min-height:40px;border:1px solid #cbd5e1;border-radius:7px;padding:7px 9px;background:#fff;color:#172033;font:inherit}.geography-stage{display:grid;min-width:0;gap:16px}.geography-stage-heading{display:flex;gap:16px;align-items:start;justify-content:space-between;margin-bottom:0}.geography-status{flex:0 0 auto;margin:0;border:1px solid #bae6fd;border-radius:999px;padding:6px 10px;background:#f0f9ff;color:#075985;font-size:.82rem;font-weight:820;line-height:1.2}.geography-metrics,.geography-fact-grid,.local-wind-metrics{display:grid;gap:10px}.geography-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.geography-fact-grid{grid-template-columns:repeat(5,minmax(0,1fr))}.local-wind-metrics{grid-template-columns:repeat(4,minmax(0,1fr));margin-top:10px}.geography-metrics div,.geography-fact-grid div,.local-wind-metrics div{display:grid;gap:5px;min-height:70px;border:1px solid #e2e8f0;border-radius:8px;padding:10px;background:#f8fafc}.geography-metrics span,.geography-fact-grid span,.local-wind-metrics span{color:#64748b;font-size:.76rem;font-weight:760;line-height:1.25}.geography-metrics strong,.geography-fact-grid strong,.local-wind-metrics strong{align-self:end;color:#0f172a;font-size:1rem;line-height:1.25}.geography-metrics strong{font-size:1.24rem}.geography-main-grid{display:grid;gap:12px}.geography-main-grid{grid-template-columns:minmax(0,1.45fr) minmax(320px,.55fr)}.geography-side-stack{display:grid;gap:12px;align-content:start}.wind-reading-workspace{grid-template-columns:minmax(300px,360px) minmax(0,1fr)}.wind-reading-main-grid{display:grid;grid-template-columns:minmax(0,1.35fr) minmax(320px,.65fr);gap:12px}.wind-reading-metrics{grid-template-columns:repeat(5,minmax(0,1fr))}.geography-card{min-width:0;border:1px solid #d7dee8;border-radius:8px;padding:13px;background:#fff}.geography-card-heading{display:flex;align-items:center;gap:8px;margin-bottom:8px}.geography-card-heading h3{margin:0;color:#0f172a;font-size:.98rem;line-height:1.25}.geography-card-heading svg{color:#0f766e}.geography-ocean-diagram,.local-wind-diagram{display:block;width:100%;height:auto;border:1px solid #e2e8f0;border-radius:8px;background:linear-gradient(180deg,#eff6fff2,#f0fdf4d1),#f8fafc}.geography-earth-hero{display:grid;min-width:0;gap:8px}.geography-earth-heading{margin:0 2px}.earth-circulation-scene{position:relative;width:100%;height:min(60svh,620px);min-height:500px;overflow:hidden;border-radius:8px;background:radial-gradient(circle at 45% 42%,#e0f2fec7,#f8fbfff0 54%,#f8fbff),#f8fbff}.earth-circulation-scene canvas{display:block;width:100%;height:100%}.earth-scene-fallback{display:grid;min-height:420px;place-items:center;gap:12px;color:#0f172a;text-align:center}.earth-fallback-globe{position:relative;width:min(56vw,320px);aspect-ratio:1;border-radius:999px;background:radial-gradient(circle at 34% 30%,rgba(255,255,255,.88),transparent 24%),radial-gradient(circle at 50% 50%,#dff6ff 0,#dff6ff 54%,#bae6fd 55%,#bae6fd);box-shadow:inset -24px -18px 48px #0e749038}.earth-fallback-heat,.earth-fallback-selected,.earth-fallback-wind{position:absolute;left:10%;width:80%;border-radius:999px;transform:rotate(-8deg)}.earth-fallback-heat{top:47%;height:10%;background:#f59e0b52}.earth-fallback-selected{top:32%;height:3%;background:#ef4444}.earth-fallback-wind{height:2%;background:#10b981}.earth-fallback-wind.is-one{top:41%}.earth-fallback-wind.is-two{top:61%;background:#2563eb}.geography-earth-legend{display:flex;flex-wrap:wrap;gap:7px;align-items:center;color:#334155;font-size:.8rem;font-weight:820;line-height:1.2}.geography-earth-legend span{display:inline-flex;align-items:center;gap:6px}.geography-earth-legend span:before{content:"";display:block;width:18px;height:5px;border-radius:999px;background:#f59e0b}.geography-earth-legend .is-low:before{background:#38bdf8}.geography-earth-legend .is-high:before{background:#f59e0b}.geography-earth-legend .is-wind:before{background:#10b981}.geography-side-stack .geography-fact-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.geography-side-stack .geography-fact-grid div{min-height:64px}.geo-ocean-water{fill:#e0f2fe;stroke:#bae6fd}.geo-continent{fill:#d9f99d;stroke:#84cc16;stroke-width:1.2}.geo-current-path,.geo-equatorial-current,.geo-west-wind-drift{fill:none;stroke:#2563eb;stroke-dasharray:12 9;stroke-linecap:round;stroke-width:4}.geography-ocean-diagram.is-playing .geo-current-path,.geography-ocean-diagram.is-playing .geo-equatorial-current,.geography-ocean-diagram.is-playing .geo-west-wind-drift{animation:geoDashFlow 1.05s linear infinite}.geo-current-path.is-south{stroke:#0f766e}.geo-equatorial-current{stroke:#f59e0b}.geo-west-wind-drift{stroke:#7c3aed;stroke-dasharray:7 7}.geo-ocean-wind{fill:none;stroke:#0f766e;stroke-dasharray:9 8;stroke-linecap:round;stroke-width:3.2}.geo-ocean-wind.is-south{stroke:#14b8a6}.geography-ocean-diagram.is-playing .geo-ocean-wind{animation:geoDashFlow .95s linear infinite}.geo-ocean-wind-label{fill:#134e4a;font-size:13px;font-weight:840;text-anchor:middle}.geo-current-label,.geo-current-strength text{fill:#0f172a;font-size:13px;font-weight:820}.geo-current-strength rect{fill:#dbeafe}.geo-current-strength-fill{fill:#2563eb}.geography-note,.geography-explanation{margin:9px 0 0;color:#475569;font-size:.88rem;line-height:1.6}.geography-explanation{border-left:3px solid #0f766e;padding:9px 10px;background:#f8fafc;color:#334155}.geography-latitude-section-diagram{display:block;width:100%;height:auto;border:1px solid #e2e8f0;border-radius:8px;background:#f8fafc}.geo-column-sky{fill:#e0f2fe;stroke:#bae6fd}.geo-column-ground{fill:#dcfce7;stroke:#bbf7d0}.geo-column-layer-label{fill:#475569;font-size:12px;font-weight:820}.geo-column-motion{fill:none;stroke:#0f766e;stroke-linecap:round;stroke-width:7}.geography-latitude-section-diagram.is-sinking .geo-column-motion{stroke:#d97706}.geo-column-cloud{fill:#f0f9ff;stroke:#0284c7;stroke-linejoin:round;stroke-width:2}.geo-column-rain{fill:none;stroke:#2563eb;stroke-linecap:round;stroke-width:3}.geo-column-heat{fill:#f59e0b59;stroke:#f59e0b;stroke-width:2}.geo-column-sun{fill:#fde68a;stroke:#f59e0b;stroke-width:2.4}.geo-column-rays,.geo-column-dry{fill:none;stroke:#d97706;stroke-linecap:round;stroke-width:3}.geo-column-dry{stroke:#b45309}.geo-column-badge rect{fill:#ffffffdb;stroke:#cbd5e1}.geo-column-badge text{fill:#0f172a;font-size:11px;font-weight:800;text-anchor:middle}.geo-column-badge text:first-of-type{font-size:15px;font-weight:880}.geo-column-motion-label{fill:#334155;font-size:12px;font-weight:820;text-anchor:middle}.local-wind-diagram{background:linear-gradient(180deg,#f8fafcf2,#eff6ffe0),#fff}.local-isobar{fill:none;stroke:#94a3b8;stroke-width:2}.local-isobar-label{fill:#64748b;font-size:12px;font-weight:760}.local-wind-origin{fill:#0f172a}.local-pgf-arrow{stroke:#2563eb;stroke-linecap:round;stroke-width:4}.local-geo-arrow{stroke:#f59e0b;stroke-dasharray:7 6;stroke-linecap:round;stroke-width:3.5}.local-final-arrow{stroke:#0f766e;stroke-linecap:round;stroke-width:5}.local-wind-tag,.local-pressure-label{font-weight:840}.local-wind-tag{font-size:12px}.local-wind-tag.is-pgf{fill:#2563eb}.local-wind-tag.is-geo{fill:#b45309}.local-wind-tag.is-final{fill:#0f766e}.local-pressure-label{font-size:28px;text-anchor:middle}.local-pressure-label.is-high{fill:#dc2626}.local-pressure-label.is-low{fill:#2563eb}.local-pressure-word{font-size:11px;font-weight:820;text-anchor:middle}.local-pressure-word.is-high{fill:#991b1b}.local-pressure-word.is-low{fill:#1d4ed8}.wind-reading-diagram{min-height:330px;background:radial-gradient(circle at 50% 50%,rgba(204,251,241,.42),transparent 36%),linear-gradient(180deg,#f8fafcf5,#eff6ffe6),#fff}.wind-reading-diagram .local-isobar{stroke-width:2.4}.wind-reading-diagram.is-playing .local-isobar{animation:windIsobarPulse 1.35s ease-in-out infinite}.wind-reading-diagram.is-playing .local-pgf-arrow,.wind-reading-diagram.is-playing .local-geo-arrow,.wind-reading-diagram.is-playing .local-final-arrow{stroke-dasharray:12 8;animation:geoDashFlow .95s linear infinite}.wind-flow-dot{fill:#14b8a6;opacity:0;transform-box:fill-box;transform-origin:center}.wind-reading-diagram.is-playing .wind-flow-dot{animation:windDotPulse 1.15s ease-in-out infinite}.wind-reading-diagram.is-playing .wind-flow-dot.is-late{animation-delay:.45s}.wind-force-legend{display:flex;flex-wrap:wrap;gap:8px;margin-top:10px}.wind-force-legend span{display:inline-flex;align-items:center;gap:7px;border:1px solid #e2e8f0;border-radius:999px;padding:6px 9px;background:#f8fafc;color:#334155;font-size:.82rem;font-weight:760;line-height:1.2}.wind-force-legend i{width:18px;height:4px;border-radius:999px;background:#2563eb}.wind-force-legend i.is-geo{background:repeating-linear-gradient(90deg,#f59e0b 0 6px,transparent 6px 10px)}.wind-force-legend i.is-final{height:5px;background:#0f766e}.wind-rule-grid{display:grid;gap:10px}.wind-rule-grid div{display:grid;grid-template-columns:34px minmax(0,1fr);gap:4px 9px;align-items:center;border:1px solid #e2e8f0;border-radius:8px;padding:10px;background:#f8fafc}.wind-rule-grid span{grid-row:span 2;display:grid;width:30px;height:30px;place-items:center;border-radius:999px;background:#ccfbf1;color:#134e4a;font-weight:860}.wind-rule-grid strong{color:#0f172a;font-size:.92rem;line-height:1.25}.wind-rule-grid p{margin:0;color:#475569;font-size:.86rem;font-weight:720;line-height:1.35}.wind-reading-chain{background:#f0fdfa}.geography-causal-chain{display:flex;align-items:center;flex-wrap:wrap;gap:8px;background:#f8fafc;color:#334155;font-size:.9rem;font-weight:760;line-height:1.35}.geography-causal-chain svg{flex:0 0 auto;color:#0f766e}@keyframes geoDashFlow{to{stroke-dashoffset:-42}}@keyframes windIsobarPulse{0%,to{stroke:#94a3b8}50%{stroke:#38bdf8}}@keyframes windDotPulse{0%{opacity:0;transform:scale(.68)}45%{opacity:.95;transform:scale(1)}to{opacity:0;transform:scale(1.28)}}@media (max-width: 1180px){.workspace{grid-template-columns:minmax(230px,290px) minmax(460px,1fr)}.assembly-workspace{grid-template-columns:1fr}.assembly-main-grid{grid-template-columns:minmax(500px,1fr) minmax(330px,.75fr)}.photosynthesis-workspace,.ecosystem-workspace,.geography-workspace{grid-template-columns:1fr}.photosynthesis-sidebar,.ecosystem-sidebar,.geography-sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}.geography-main-grid{grid-template-columns:1fr}.earth-circulation-scene{height:min(62svh,640px);min-height:500px}.wind-reading-main-grid{grid-template-columns:1fr}.assembly-sidebar{display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.sidebar-right{grid-column:1 / -1;display:grid;grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.scene-panel{height:660px;min-height:660px}.scene-panel.is-compact{height:420px;min-height:420px}}@media (max-width: 1020px){.assembly-main-grid,.assembly-sidebar{grid-template-columns:1fr}.assembly-workspace .assembly-board{max-height:none;overflow:visible;padding-right:0}}@media (max-width: 820px){.app-shell{padding:10px}.developer-footer{margin-top:12px;padding-top:14px;font-size:.84rem}.app-header,.workspace,.assembly-workspace,.assembly-main-grid,.assembly-preview-stack,.assembly-sidebar,.photosynthesis-workspace,.photosynthesis-sidebar,.ecosystem-workspace,.ecosystem-sidebar,.geography-workspace,.wind-reading-main-grid,.geography-sidebar,.sidebar-right{grid-template-columns:1fr}.app-header{gap:12px;margin-bottom:10px}.app-header h1{font-size:1.7rem;line-height:1.08}.header-summary{font-size:.92rem;line-height:1.55}.workspace,.assembly-workspace,.assembly-main-grid,.stage-column,.sidebar{gap:10px}.stage-column{order:1}.sidebar-left{order:2}.sidebar-right{order:3}.panel{padding:12px}.panel-heading{margin-bottom:10px}.scene-panel{height:min(58svh,520px);min-height:min(58svh,520px);border-radius:8px}.scene-panel.is-compact{height:min(44svh,380px);min-height:min(48svh,420px)}.assembly-workspace .scene-panel.is-compact{height:min(42svh,360px);min-height:300px}.mode-switch{width:100%}.header-actions{align-items:stretch}.language-button{flex:1 1 118px}.mode-button,.control-button,.step-button{min-height:44px}.control-grid,.step-list{gap:7px}.control-panel .control-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.metabolism-stage{gap:12px}.plant-simulation{min-height:260px}.plant-model{width:210px;min-width:180px;height:210px}.leaf-shape{width:96px;height:60px}.gas-co2{left:12px}.gas-o2{right:12px}.process-row{grid-template-columns:1fr;gap:6px}.process-row strong{text-align:left}.metabolism-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.ecosystem-stage{gap:12px}.ecosystem-grid{grid-template-columns:1fr}.food-web-diagram{min-height:250px}.ecosystem-metrics{grid-template-columns:repeat(3,minmax(0,1fr))}.geography-stage{gap:12px}.earth-circulation-scene{height:min(58svh,560px);min-height:390px}.geography-fact-grid,.local-wind-metrics,.wind-reading-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.control-button{justify-content:center;padding:9px 8px;text-align:center}.control-button span,.step-button span{overflow-wrap:anywhere}.step-button{grid-template-columns:84px minmax(0,1fr)}.base-palette{grid-template-columns:repeat(4,minmax(0,1fr));gap:7px}.base-token{min-height:56px}.base-token span{font-size:1.1rem}.base-token small{font-size:.66rem}.assembly-row{grid-template-columns:26px 42px minmax(30px,1fr) 70px;gap:6px;padding:6px}.assembly-template-base,.assembly-slot{min-width:40px;min-height:38px}.assembly-pair-note{grid-column:2 / -1}.assembly-actions{grid-template-columns:1fr}.sequence-input{min-height:82px}}@media (max-width: 430px){.app-shell{padding:8px}.developer-footer{gap:6px 12px}.app-header h1{font-size:1.5rem}.eyebrow{font-size:.7rem}.header-summary{font-size:.88rem}.mode-switch{grid-template-columns:repeat(2,minmax(0,1fr))}.mode-button{justify-content:center}.scene-panel{height:min(52svh,430px);min-height:min(52svh,430px)}.scene-panel.is-compact{height:min(40svh,340px);min-height:min(42svh,360px)}.control-button{justify-content:flex-start;text-align:left}.assembly-header{align-items:stretch}.assembly-progress{min-width:62px}.assembly-row{grid-template-columns:24px 40px minmax(24px,1fr) 58px;font-size:.9rem}.metabolism-stage-heading,.ecosystem-stage-heading,.geography-stage-heading{display:grid}.stage-status,.ecosystem-status,.geography-status{width:fit-content}.plant-simulation{min-height:230px}.sky-badge{top:12px;right:12px;width:48px;height:48px}.plant-model{width:180px;min-width:170px;height:196px}.plant-stem{height:130px}.leaf-left{left:14px}.leaf-right{right:12px}.gas{min-width:78px;padding:6px 8px;font-size:.86rem}.gas i{min-width:24px}.gas-co2{top:34%}.gas-o2{top:56%}.metabolism-metrics,.ecosystem-metrics,.geography-metrics,.wind-reading-metrics,.geography-fact-grid,.local-wind-metrics,.equation-panel p,.ecosystem-scenarios{grid-template-columns:1fr}.species-toggle{grid-template-columns:32px minmax(0,1fr)}.species-toggle-value{grid-column:2;justify-self:start}.food-web-diagram{min-height:220px}.geography-season-grid,.local-wind-switches{grid-template-columns:1fr}.earth-circulation-scene{height:min(54svh,450px);min-height:320px}.latitude-presets{grid-template-columns:repeat(3,minmax(0,1fr))}.assembly-pair-note{font-size:.78rem}.science-note{font-size:.8rem}}@media (max-width: 360px){.base-token small{display:none}.base-token{min-height:48px}.step-button{grid-template-columns:58px minmax(0,1fr);font-size:.9rem}}
