:root{--paper: #f4efe4;--paper-2: #ece5d6;--card: #fffcf5;--rule: #d8ceb9;--rule-soft: #e5ddcc;--grid: rgba(120, 104, 74, .09);--ink: #1e2633;--ink-2: #4a5263;--ink-3: #7c8291;--highlight: #f2cf4a;--success: #2f7d4f;--error: #b4382b;--bonus: #9a6a00;--font-display: "Fraunces", Georgia, serif;--font-body: "IBM Plex Sans", system-ui, sans-serif;--font-mono: "IBM Plex Mono", ui-monospace, monospace;--font-hand: "Caveat", "Comic Sans MS", cursive;--radius: 8px;--shadow: 0 1px 0 rgba(30, 38, 51, .04), 0 2px 8px rgba(30, 38, 51, .06);--shadow-lg: 0 2px 0 rgba(30, 38, 51, .04), 0 12px 32px rgba(30, 38, 51, .14);color-scheme:light}*,*:before,*:after{box-sizing:border-box;margin:0;padding:0}html,body,#root{width:100%;height:100%;overflow:hidden;background:var(--paper);color:var(--ink);font-family:var(--font-body);font-size:15px;line-height:1.5;-webkit-font-smoothing:antialiased}button{font:inherit;color:inherit;cursor:pointer;background:none;border:none}button:disabled{cursor:not-allowed}a{color:inherit}:focus-visible{outline:2px solid var(--ink);outline-offset:2px}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:var(--rule);border-radius:4px}::-webkit-scrollbar-track{background:transparent}.graph-paper{background-color:var(--paper);background-image:linear-gradient(var(--grid) 1px,transparent 1px),linear-gradient(90deg,var(--grid) 1px,transparent 1px);background-size:24px 24px}.display{font-family:var(--font-display);font-weight:600;letter-spacing:-.01em;line-height:1.15}.eyebrow{font-family:var(--font-mono);font-size:11px;letter-spacing:.08em;text-transform:uppercase;color:var(--ink-3)}.mono{font-family:var(--font-mono)}.hand{font-family:var(--font-hand);font-size:1.35em;line-height:1.1}.italic{font-style:italic}.muted{color:var(--ink-2)}.faint{color:var(--ink-3)}.small{font-size:13px}.btn{display:inline-flex;align-items:center;justify-content:center;gap:8px;padding:9px 16px;border-radius:6px;border:1px solid var(--ink);font-weight:500;font-size:14px;line-height:1.2;transition:background .15s,color .15s,transform .08s,box-shadow .15s;white-space:nowrap}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.4}.btn--primary{background:var(--ink);color:var(--paper);box-shadow:0 2px #0003}.btn--primary:hover:not(:disabled){background:#2d384a}.btn--ghost{background:transparent;color:var(--ink)}.btn--ghost:hover:not(:disabled){background:#1e26330f}.btn--quiet{border-color:transparent;color:var(--ink-2);padding:6px 10px}.btn--quiet:hover:not(:disabled){color:var(--ink);background:#1e26330d}.btn--block{width:100%}.btn--lg{padding:12px 22px;font-size:15px}.card{background:var(--card);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow)}.section{padding:16px;border-bottom:1px solid var(--rule-soft)}.section:last-child{border-bottom:none}.section>.eyebrow{margin-bottom:8px;display:block}.chip{display:inline-flex;align-items:center;gap:6px;padding:3px 9px;border-radius:999px;border:1px solid currentColor;font-family:var(--font-mono);font-size:11px;letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}.progress{height:6px;background:var(--rule-soft);border-radius:999px;overflow:hidden}.progress>div{height:100%;background:var(--success);border-radius:999px;transition:width .4s ease}.menu{height:100%;overflow-y:auto}.menu__inner{max-width:1080px;margin:0 auto;padding:32px 24px 64px}.menu__top{display:flex;justify-content:space-between;align-items:center;gap:16px;margin-bottom:48px}.menu__brand{display:flex;align-items:baseline;gap:12px}.menu__logo{font-family:var(--font-display);font-weight:700;font-size:22px;letter-spacing:.02em}.menu__hero{max-width:640px;margin-bottom:40px}.menu__hero h1{font-size:clamp(34px,6vw,56px);margin-bottom:14px}.menu__hero p{font-size:17px;color:var(--ink-2);max-width:540px}.menu__hero .hand{color:var(--error);display:inline-block;transform:rotate(-2deg)}.level-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:16px}.level-card{position:relative;display:flex;flex-direction:column;text-align:left;padding:0;overflow:hidden;transition:transform .15s,box-shadow .15s}.level-card:hover{transform:translateY(-2px);box-shadow:var(--shadow-lg)}.level-card__art{height:132px;display:flex;align-items:center;justify-content:center;border-bottom:1px solid var(--rule-soft)}.level-card__body{padding:16px 18px 18px;display:flex;flex-direction:column;gap:6px;flex:1}.level-card__num{position:absolute;top:12px;left:14px;font-family:var(--font-display);font-size:28px;font-weight:600;color:var(--ink-3);opacity:.6}.level-card__title{font-family:var(--font-display);font-size:21px;font-weight:600}.level-card__meta{display:flex;gap:12px;flex-wrap:wrap;margin-top:auto;padding-top:10px;font-family:var(--font-mono);font-size:12px;color:var(--ink-3)}.level-card--tutorial{border:1.5px solid var(--ink)}.level-card__flag{position:absolute;top:12px;right:12px;background:var(--highlight);padding:2px 10px;border-radius:4px;font-family:var(--font-hand);font-size:19px;transform:rotate(3deg)}.game{height:100%;display:flex;flex-direction:column}.topbar{display:flex;align-items:center;gap:14px;padding:10px 16px;background:var(--card);border-bottom:1px solid var(--rule);min-height:56px;flex-shrink:0}.topbar__title{min-width:0}.topbar__title .display{font-size:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar__title .italic{font-size:12.5px;color:var(--ink-3);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.topbar__progress{display:flex;align-items:center;gap:10px;min-width:160px;flex-shrink:0}.topbar__progress .progress{flex:1;min-width:80px}.topbar__score{font-family:var(--font-mono);font-size:14px;white-space:nowrap}.topbar__spacer{flex:1}.layout{flex:1;display:grid;grid-template-columns:290px minmax(0,1fr) 310px;min-height:0}.side{background:var(--paper-2);overflow-y:auto;min-height:0}.side--left{border-right:1px solid var(--rule)}.side--right{border-left:1px solid var(--rule);display:flex;flex-direction:column}.board{position:relative;min-width:0;min-height:0;overflow:hidden}.tabbar{display:none}@media(max-width:900px){.layout{grid-template-columns:1fr;grid-template-rows:minmax(0,1fr) auto}.side{display:none}.side.is-open{display:block;grid-row:2;max-height:42vh;border:none;border-top:1px solid var(--rule)}.side--right.is-open{display:flex}.tabbar{display:flex;border-top:1px solid var(--rule);background:var(--card);flex-shrink:0}.tabbar button{flex:1;padding:10px 4px 12px;font-size:13px;color:var(--ink-3);border-top:2px solid transparent}.tabbar button.is-active{color:var(--ink);border-top-color:var(--ink);font-weight:600}.topbar{gap:10px;padding:8px 12px}.topbar__progress{min-width:0}.topbar__progress .progress{display:none}.hide-mobile{display:none!important}}.piece-group+.piece-group{margin-top:12px}.piece-group__label{display:flex;align-items:center;gap:6px;font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;margin-bottom:4px}.piece{display:flex;align-items:center;gap:8px;width:100%;padding:7px 10px;border-radius:6px;text-align:left;font-size:14px;border:1px solid transparent;transition:background .12s}.piece:hover{background:#fffcf5cc}.piece.is-selected{background:var(--card);border-color:var(--rule)}.piece.is-pending{background:var(--highlight)}.piece.is-done{color:var(--ink-3)}.piece__dot{width:8px;height:8px;border-radius:50%;flex-shrink:0}.piece__label{flex:1;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.piece__check{color:var(--success);font-size:12px}.chain{display:flex;flex-direction:column;align-items:flex-start;font-size:13.5px}.chain__node{display:inline-flex;align-items:center;gap:6px;font-weight:500}.chain__verb{font-family:var(--font-hand);font-size:18px;color:var(--ink-3);line-height:1;padding:1px 0 1px 7px;border-left:1px dashed var(--rule);margin-left:7px}.edge-help{display:flex;flex-direction:column;gap:6px;margin-top:2px}.edge-help>div{display:flex;flex-direction:column}.edge-help__verb{font-family:var(--font-hand);font-size:19px;line-height:1.1}.construct{overflow-y:auto}.construct__inner{max-width:860px;margin:0 auto;padding:70px 20px 120px}.construct__head{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:8px}.construct__strip{position:relative;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);gap:8px;padding:14px 10px;background:var(--card);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow)}.construct__strip:before{content:"";position:absolute;left:10px;right:10px;top:50%;height:6px;border-top:2px solid var(--ink-3);border-bottom:2px solid var(--ink-3);opacity:.35;pointer-events:none}.construct__strip.is-reading:after{content:"";position:absolute;top:6px;bottom:6px;width:28px;border-radius:14px;background:#f2cf4a8c;animation:reading 1.6s ease-in-out infinite;pointer-events:none}@keyframes reading{0%{left:8px}to{left:calc(100% - 36px)}}.slot{position:relative;z-index:1;min-height:118px;display:flex;flex-direction:column;align-items:stretch;gap:4px;border-radius:6px;cursor:pointer}.slot__num{font-size:10.5px;color:var(--ink-3);text-align:center}.slot__empty{flex:1;display:flex;align-items:center;justify-content:center;border:1.5px dashed var(--rule);border-radius:6px;color:var(--ink-3);font-size:12.5px;background:var(--paper)}.slot.is-target .slot__empty{border-color:#d9b52d;background:#f2cf4a2e}.slot.is-wrong .part,.slot.is-wrong .slot__empty{box-shadow:0 0 0 2px var(--error)}.construct__actions{display:flex;gap:8px;justify-content:center;margin-top:14px}.construct__tray{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:8px}.part{display:flex;flex-direction:column;align-items:flex-start;gap:3px;padding:10px 10px 12px;background:var(--card);border:1px solid var(--rule);border-top:4px solid;border-radius:6px;text-align:left;box-shadow:var(--shadow);transition:transform .12s;width:100%}.part:hover{transform:translateY(-1px)}.part.is-selected{background:var(--highlight)}.part__kind{font-family:var(--font-mono);font-size:10px;letter-spacing:.05em;text-transform:uppercase}.part__label{font-size:13.5px;font-weight:500;line-height:1.25}.part--compact{flex:1;box-shadow:none}.part--compact .part__label{font-size:12.5px}.construct__success{margin-top:16px;padding:16px 18px}.construct__success ol{margin:8px 0 14px 18px;display:flex;flex-direction:column;gap:6px;font-size:14px}.construct__success li{opacity:.15;transition:opacity .4s}.construct__success li.is-shown{opacity:1}@media(max-width:900px){.construct__inner{padding:64px 12px 120px}.construct__strip{grid-auto-flow:row;grid-auto-columns:auto}.construct__strip:before{inset:10px auto 10px 50%;width:6px;height:auto;border:none;border-left:2px solid var(--ink-3);border-right:2px solid var(--ink-3)}.construct__strip.is-reading:after{display:none}.slot{min-height:0}.slot__empty{min-height:48px}.construct__tray{grid-template-columns:repeat(2,minmax(0,1fr))}}.seq{list-style:none;display:flex;flex-direction:column;gap:6px}.seq__item{display:flex;align-items:center;gap:12px;padding:10px 14px;background:var(--card);border:1px solid var(--rule);border-radius:6px;font-size:14.5px;cursor:pointer}.seq__item.is-empty{border-style:dashed;background:var(--paper);cursor:default}.seq__item.is-wrong{box-shadow:0 0 0 2px var(--error)}.seq__item.is-done{cursor:default;border-color:#2f7d4f73;background:#2f7d4f0f}.seq__num{font-family:var(--font-display);font-weight:600;font-size:20px;color:var(--ink-3);min-width:22px;text-align:center}.seq__tray{display:flex;flex-wrap:wrap;gap:8px}.step-card{padding:9px 13px;background:var(--card);border:1px solid var(--rule);border-top:3px solid var(--ink-2);border-radius:6px;box-shadow:var(--shadow);font-size:14px;font-weight:500;text-align:left;max-width:100%}.step-card:hover{background:var(--highlight)}.inherit__parents{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.inherit__parent{padding:12px 14px;display:flex;flex-direction:column;gap:2px}.punnett{display:grid;grid-template-columns:44px repeat(2,minmax(0,150px));grid-auto-rows:auto;gap:8px;justify-content:center;align-items:stretch;margin:8px 0}.punnett__head{display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:500;color:var(--ink-2);min-height:36px}.punnett__cell{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:2px;min-height:92px;background:var(--card);border:1.5px solid var(--rule);border-radius:8px;box-shadow:var(--shadow)}.punnett__cell:hover:not(:disabled){border-color:var(--ink)}.punnett__cell.is-empty{background:var(--paper);border-style:dashed;color:var(--ink-3)}.punnett__cell.is-wrong{box-shadow:0 0 0 2px var(--error)}.inherit__squares{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px 22px}.inherit__gene{display:flex;flex-direction:column;align-items:center;gap:2px}.punnett--small{grid-template-columns:36px repeat(2,minmax(0,112px))}.punnett--small .punnett__cell{min-height:76px}.punnett--small .punnett__genotype{font-size:22px}@media(max-width:900px){.inherit__squares{grid-template-columns:1fr}}.punnett__cell.is-locked{cursor:default}.punnett__genotype{font-size:26px;font-weight:500}.inherit__answers{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.mut__strand{display:flex;flex-wrap:wrap;gap:10px 14px;padding:12px 14px;background:var(--card);border:1px solid var(--rule);border-radius:var(--radius)}.codon{display:flex;flex-direction:column;align-items:center;gap:4px}.codon__bases{display:flex;gap:2px}.base{width:26px;height:32px;display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--rule);border-radius:4px;background:var(--paper);font-size:16px;font-weight:500}button.base:hover:not(:disabled){background:var(--highlight);border-color:#d9b52d}.base.is-static{background:transparent;border-color:transparent}.base.is-wrong{background:#b4382b1f;color:var(--error);border-color:var(--error)}.base.is-changed{background:var(--highlight);border-color:#d9b52d}.codon__amino{font-size:12.5px;color:var(--ink-2);min-height:18px}.codon__amino.is-changed{color:var(--error);font-weight:600}.mut__effects{display:flex;flex-direction:column;gap:6px;margin-top:8px}@media(max-width:900px){.base{width:22px;height:30px;font-size:14.5px}}.tune__status{padding:14px 16px;display:flex;flex-direction:column;gap:10px;margin-bottom:14px}.meter{position:relative;height:8px;background:var(--rule-soft);border-radius:999px}.meter>div{height:100%;border-radius:999px;background:var(--ink-3);transition:width .4s}.meter>div.is-ok{background:var(--success)}.meter>i{position:absolute;top:-3px;bottom:-3px;width:2px;background:var(--ink)}.knob{margin-bottom:14px}.knob__options{display:grid;grid-template-columns:repeat(auto-fill,minmax(190px,1fr));gap:8px;margin-top:6px}.opt{display:flex;flex-direction:column;align-items:flex-start;gap:4px;padding:10px 12px;text-align:left;background:var(--card);border:1.5px solid var(--rule);border-radius:8px}.opt:hover:not(:disabled){border-color:var(--ink-2)}.opt.is-selected{border-color:var(--ink);background:var(--highlight)}.opt__cost{color:var(--ink-3);margin-top:auto}.clues{margin:6px 0 0 16px;display:flex;flex-direction:column;gap:6px;font-size:13.5px;color:var(--ink-2)}.fixes{display:flex;flex-direction:column;gap:6px;margin-top:8px}.fix{text-align:left;padding:9px 11px;border:1px solid var(--rule);border-radius:6px;background:var(--paper);font-size:13.5px}.fix:hover:not(:disabled){border-color:var(--ink);background:var(--card)}.fix.is-tried{text-decoration:line-through;opacity:.5}.board__instruction{position:absolute;top:14px;left:50%;transform:translate(-50%);max-width:calc(100% - 28px);padding:7px 14px;background:var(--card);border:1px solid var(--rule);border-radius:999px;box-shadow:var(--shadow);font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;pointer-events:none;z-index:5}.board__instruction.is-pending{background:var(--highlight);border-color:#d9b52d}.board__controls{position:absolute;bottom:10px;right:14px;font-size:12px;color:var(--ink-3);pointer-events:none}.toast{position:absolute;left:50%;bottom:18px;transform:translate(-50%);width:min(520px,calc(100% - 28px));padding:12px 16px 12px 14px;border-radius:var(--radius);background:var(--card);border:1px solid var(--rule);border-left:4px solid var(--ink-3);box-shadow:var(--shadow-lg);z-index:40}.toast--success{border-left-color:var(--success)}.toast--bonus{border-left-color:var(--bonus)}.toast--error{border-left-color:var(--error)}.toast__title{font-weight:600;font-size:14.5px}.toast__detail{margin-top:4px;font-size:13.5px;color:var(--ink-2)}.toast__close{position:absolute;top:6px;right:8px;color:var(--ink-3);padding:4px}@media(max-width:900px){.toast{bottom:10px;padding:9px 30px 9px 12px}.toast__title{font-size:13.5px}.toast__detail{font-size:12.5px}}.b2d{position:absolute;inset:0;overflow:hidden;touch-action:none;cursor:grab;user-select:none;-webkit-user-select:none}.b2d.is-dragging{cursor:grabbing}.b2d__world{position:absolute;left:0;top:0;transform-origin:0 0;will-change:transform}.b2d__edges{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}.b2d__verb{position:absolute;z-index:3;transform:translate(-50%,-50%);padding:0 5px;border-radius:4px;background:#f4efe4eb;font-family:var(--font-hand);font-size:17px;line-height:1.15;white-space:nowrap;pointer-events:none}.b2d__flow{stroke-dasharray:2 12;stroke-linecap:round;animation:b2d-flow .9s linear infinite}@keyframes b2d-flow{to{stroke-dashoffset:-14}}.card2d{position:absolute;display:flex;align-items:center;gap:8px;padding:8px 10px;text-align:left;background:var(--card);border:1px solid var(--rule);border-left:4px solid var(--ink-3);border-radius:8px;box-shadow:0 1px 4px #1e263324;transform:translate(-50%,-50%);z-index:2;cursor:pointer;transition:box-shadow .12s,background .12s,opacity .2s}.card2d:before{content:"";position:absolute;inset:-6px -6px -6px -10px}.card2d:hover{box-shadow:0 3px 10px #1e263333}.card2d svg{flex-shrink:0}.card2d__text{display:flex;flex-direction:column;gap:1px;min-width:0}.card2d__label{font-size:13px;font-weight:600;line-height:1.22;overflow-wrap:anywhere}.card2d__type{font-family:var(--font-mono);font-size:9.5px;letter-spacing:.06em;text-transform:uppercase;opacity:.85}.card2d.is-pending{background:var(--highlight)}.card2d.is-selected{box-shadow:0 0 0 2px var(--ink)}.card2d.is-guided{animation:guided 1.2s ease-in-out infinite}.card2d.is-dim{opacity:.4}.card2d.is-faulty{box-shadow:0 0 0 3px var(--error);background:#b4382b12}.b2d__zoom{position:absolute;right:12px;bottom:44px;display:flex;flex-direction:column;gap:6px;z-index:5}.b2d__zoom .btn{width:40px;height:40px;padding:0;background:var(--card)}@keyframes guided{0%,to{box-shadow:0 0 #f2cf4ae6}50%{box-shadow:0 0 0 6px #f2cf4a59}}@media(max-width:900px){.card2d{padding:5px 6px;gap:4px}.card2d__label{font-size:11.5px}.card2d__type{font-size:8.5px}.b2d__verb{font-size:14px}.b2d__zoom{right:8px;bottom:110px}.b2d__zoom .btn{width:44px;height:44px}}.guide-slot{position:absolute;top:58px;left:14px;width:min(340px,calc(100% - 28px));z-index:40}.guide{padding:14px 16px;border:1.5px solid var(--ink)}@media(max-width:900px){.guide{padding:10px 12px}.guide__text{font-size:13.5px;margin:4px 0 8px}}.guide__text{font-size:14.5px;margin:6px 0 10px}.guide__task{display:flex;align-items:center;gap:6px;flex-wrap:wrap;padding:8px 10px;background:#f2cf4a59;border-radius:6px;font-size:13.5px;font-weight:500}.tour{margin-bottom:14px}.tour__head{display:flex;justify-content:space-between;align-items:center}.tour__actions{display:flex;align-items:center;justify-content:space-between;gap:10px;flex-wrap:wrap}.tour__wait{font-size:19px;color:var(--ink-2)}.construct__inner>.tour{position:sticky;top:8px;z-index:30}.guide-slot>.tour{margin-bottom:8px}body[data-tour-on=genome] [data-tour-el=genome],body[data-tour-on=guides] [data-tour-el=guides],body[data-tour-on=map] [data-tour-el=map],body[data-tour-on=enzymes] [data-tour-el=enzymes],body[data-tour-on=gel] [data-tour-el=gel],body[data-tour-on=template] [data-tour-el=template],body[data-tour-on=slots] [data-tour-el=slots],body[data-tour-on=strip] [data-tour-el=strip],body[data-tour-on=tray] [data-tour-el=tray],body[data-tour-on=test] [data-tour-el=test],body[data-tour-on=list] [data-tour-el=list],body[data-tour-on=parents] [data-tour-el=parents],body[data-tour-on=square] [data-tour-el=square],body[data-tour-on=check] [data-tour-el=check],body[data-tour-on=answers] [data-tour-el=answers],body[data-tour-on=healthy] [data-tour-el=healthy],body[data-tour-on=patient] [data-tour-el=patient],body[data-tour-on=effects] [data-tour-el=effects],body[data-tour-on=budget] [data-tour-el=budget],body[data-tour-on=knobs] [data-tour-el=knobs],body[data-tour-on=pieces] [data-tour-el=pieces],body[data-tour-on=zoom] [data-tour-el=zoom],body[data-tour-on=simulate] [data-tour-el=simulate],body[data-tour-on=accuse] [data-tour-el=accuse],body[data-tour-on=fixes] [data-tour-el=fixes]{animation:guided 1.2s ease-in-out infinite;border-radius:8px}@media(max-width:900px){.tour{margin-bottom:10px;padding:9px 12px}.tour .guide__text{font-size:13px;margin:3px 0 7px}.tour__wait{font-size:17px}.tour .btn{padding:6px 12px}}.inspector__head{display:flex;align-items:center;gap:12px}.inspector__head .inspector__title{margin-top:4px}.inspector__title{font-family:var(--font-display);font-size:20px;font-weight:600;margin:8px 0 2px}.inspector__sci{font-style:italic;color:var(--ink-3);font-size:13px;margin-bottom:10px}.inspector__desc{font-size:14px;color:var(--ink-2)}.inspector__help{margin-top:10px;font-family:var(--font-hand);font-size:19px;color:var(--ink-2);line-height:1.2}.note-box{margin-top:10px;padding:8px 10px;border-radius:6px;font-size:13px}.note-box--trap{background:#b4382b14;color:var(--error)}.link-list{display:flex;flex-direction:column;gap:4px;margin-top:6px;font-size:13.5px}.link-list span.verb{font-family:var(--font-hand);font-size:17px;color:var(--ink-3)}.hint-buttons{display:flex;flex-direction:column;gap:6px}.hint-btn{display:flex;justify-content:space-between;align-items:center;padding:7px 10px;border:1px dashed var(--rule);border-radius:6px;font-size:13.5px;text-align:left}.hint-btn:hover:not(:disabled){border-style:solid;background:var(--card)}.hint-btn:disabled{opacity:.5}.hint-text{margin-top:8px;padding:10px 12px;background:#f2cf4a40;border-radius:6px;font-size:13.5px}.sim{background:var(--card);border-top:1px solid var(--rule);padding:14px 18px 16px;flex-shrink:0}.sim__head{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-bottom:12px}.sim__steps{display:flex;gap:6px;overflow-x:auto;padding-bottom:4px;margin-bottom:12px}.sim__step{flex-shrink:0;padding:6px 10px;border-radius:6px;border:1px solid var(--rule);font-size:12.5px;color:var(--ink-3);transition:all .3s}.sim__step.is-active{color:var(--ink);background:#2f7d4f1a;border-color:#2f7d4f66}.sim__step.is-current{background:var(--highlight);border-color:#d9b52d}.sim__bars{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px}.sim__bar-label{display:flex;justify-content:space-between;font-size:12px;color:var(--ink-2);margin-bottom:4px;gap:6px}.sim__bar-label span:first-child{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}@media(max-width:900px){.sim__bars{grid-template-columns:repeat(2,minmax(0,1fr))}}.overlay{position:fixed;inset:0;z-index:100;display:flex;align-items:center;justify-content:center;padding:16px;background:#1e263359;overflow-y:auto}.overlay--paper{background:var(--paper)}.modal{width:100%;max-width:560px;padding:28px;max-height:calc(100vh - 32px);overflow-y:auto}.modal--wide{max-width:760px}.how-step{display:flex;gap:14px;padding:12px 0;border-top:1px dashed var(--rule)}.how-step:first-of-type{border-top:none}.how-step__num{font-family:var(--font-display);font-size:26px;font-weight:600;color:var(--ink-3);line-height:1;min-width:22px}.explore{max-width:560px;text-align:center;display:flex;flex-direction:column;align-items:center;gap:14px}.explore__scales{display:flex;gap:6px;flex-wrap:wrap;justify-content:center;margin-bottom:8px}.explore__scale{font-family:var(--font-mono);font-size:11px;letter-spacing:.06em;text-transform:uppercase;padding:4px 10px;border-radius:999px;border:1px solid var(--rule);color:var(--ink-3)}.explore__scale.is-current{border-color:var(--ink);color:var(--ink);background:var(--card)}.explore__scale.is-past{color:var(--ink-2)}.explore h2{font-size:clamp(26px,4vw,36px)}.explore p{font-size:16.5px;color:var(--ink-2);max-width:480px}.result__stats{display:grid;grid-template-columns:repeat(3,1fr);gap:10px;margin:18px 0}.result__stat{text-align:center;padding:12px 6px}.result__stat strong{display:block;font-family:var(--font-display);font-size:28px;font-weight:600}.result__block{padding:14px 0;border-top:1px dashed var(--rule)}.result__block p,.result__block li{font-size:14.5px;color:var(--ink-2)}.result__block ul{padding-left:18px;display:flex;flex-direction:column;gap:4px}.result__refs{font-size:13px;color:var(--ink-2);display:flex;flex-direction:column;gap:6px}.result__actions{display:flex;gap:10px;justify-content:flex-end;flex-wrap:wrap;margin-top:18px}.lang{flex-shrink:0;display:inline-flex;border:1px solid var(--rule);border-radius:6px;overflow:hidden;background:var(--card)}.lang button{padding:5px 10px;font-family:var(--font-mono);font-size:12px;color:var(--ink-3)}.lang button.is-active{background:var(--ink);color:var(--paper)}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;transition-duration:.01ms!important}}.avatar{display:block;flex:none;overflow:visible}.avatar.is-dim{opacity:.5;filter:saturate(.7);transition:opacity .2s}.avatar__glow{animation:watch-glow 2.4s ease-in-out infinite;transform-origin:84px 120px}@keyframes watch-glow{0%,to{opacity:.75}50%{opacity:1}}.story-entry{display:flex;align-items:center;gap:22px;padding:18px 22px;margin-bottom:36px;background:var(--card)}.story-entry__cast{display:flex;align-items:flex-end;flex:none}.story-entry__cast .avatar+.avatar{margin-left:-14px}.story-entry__text h2{font-size:26px;margin:2px 0 6px}.story-entry__text p{max-width:560px;font-size:14.5px}.story-entry__row{display:flex;align-items:center;gap:12px;flex-wrap:wrap;margin-top:12px}.story-map{height:100%;overflow-y:auto}.story-map__inner{max-width:820px;margin:0 auto;padding:32px 24px 64px}.story-map .menu__top{margin-bottom:20px}.story-map__hero{display:flex;align-items:center;gap:18px;margin-bottom:26px}.story-map__hero h1{font-size:clamp(26px,4.5vw,38px);margin-bottom:4px}.story-map__hero .muted{margin-bottom:8px}.story-map__cast{display:flex;align-items:flex-end;flex:none}.story-map__cast .avatar+.avatar{margin-left:-10px}.toolbox{display:flex;flex-wrap:wrap;gap:10px;margin-bottom:30px}.toolbox__tool{position:relative;display:flex;align-items:center;gap:8px;padding:6px 12px 6px 8px;background:var(--card);border:1px solid var(--rule);border-radius:var(--radius);box-shadow:var(--shadow)}.toolbox__name{font-size:13px;font-weight:600}.toolbox__tool.is-locked{opacity:.55;box-shadow:none;background:transparent;border-style:dashed}.toolbox__tool.is-locked svg:first-child{filter:grayscale(1)}.toolbox__lock{color:var(--ink-3)}.timeline{display:flex;flex-direction:column;gap:18px;position:relative}.chapter{padding:14px 16px 10px}.chapter__head{display:flex;align-items:center;gap:14px;margin-bottom:10px}.chapter__art{width:92px;height:74px;flex:none;border-radius:6px;overflow:hidden;border:1px solid var(--rule-soft)}.chapter__art svg{width:100%;height:100%}.chapter__title{font-size:21px;margin-top:2px}.chapter__scenes{display:flex;flex-direction:column;gap:4px}.scene-row{display:flex;align-items:center;gap:10px;width:100%;padding:9px 10px;border-radius:6px;text-align:left;border:1px solid transparent}.scene-row__state{display:inline-flex;align-items:center;justify-content:center;width:26px;height:26px;flex:none;border-radius:50%;background:var(--paper-2);color:var(--ink-3)}.scene-row__title{flex:1;font-weight:500;font-size:14.5px}.scene-row__tool{display:inline-flex;flex:none}.scene-row__hint{font-size:12px;color:var(--ink-3);flex:none}.scene-row.is-done .scene-row__state{background:#2f7d4f26;color:var(--success)}.scene-row.is-done:hover{background:#1e26330a}.scene-row.is-available{background:#f2cf4a47;border-color:var(--highlight)}.scene-row.is-available .scene-row__state{background:var(--ink);color:var(--paper)}.scene-row.is-available .scene-row__hint{color:var(--ink);font-weight:600}.scene-row.is-available:hover{background:#f2cf4a66}.scene-row.is-locked{opacity:.5;cursor:not-allowed}.story-scene{height:100%;display:flex;flex-direction:column;overflow:hidden}.story-scene__top{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:12px 16px;flex:none}.story-scene__where{display:flex;align-items:center;gap:10px;min-width:0}.story-scene__where .display{font-size:18px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.story-scene__stage{flex:1;min-height:0;display:flex;align-items:flex-end;justify-content:center;gap:clamp(20px,8vw,120px);padding:0 16px}.story-scene__stage .avatar{height:min(46vh,340px);width:auto}.story-scene__box{flex:none;width:min(760px,calc(100% - 32px));margin:0 auto 22px;padding:16px 20px 14px;cursor:pointer;animation:story-in .22s ease-out}@keyframes story-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:none}}.story-scene__text{font-size:18px;line-height:1.45;margin:6px 0 12px;min-height:3.9em}.story-scene__actions{display:flex;align-items:center;justify-content:space-between;gap:10px}.story-tool{display:flex;align-items:center;gap:16px;padding:4px 0 10px}.story-tool__name{font-size:24px;margin:2px 0 4px}@media(max-width:900px){.story-entry{flex-direction:column;align-items:flex-start;gap:6px;padding:14px}.story-entry__text h2{font-size:22px}.story-map__inner{padding:18px 16px 48px}.story-map__hero{flex-direction:column;align-items:flex-start;gap:10px}.toolbox{display:grid;grid-template-columns:1fr 1fr;gap:8px}.toolbox__tool{padding:5px 8px 5px 6px}.toolbox__name{font-size:12px}.chapter__art{width:72px;height:60px}.scene-row__hint{display:none}.story-scene__stage .avatar{height:min(30vh,220px)}.story-scene__text{font-size:16px;min-height:5em}.story-scene__box{margin-bottom:14px;padding:14px}}@media(prefers-reduced-motion:reduce){.avatar__glow,.story-scene__box{animation:none}}.pair__story{font-size:20px;color:var(--ink-2);margin:0 0 12px;line-height:1.2}.pair__legend{display:flex;justify-content:space-between;gap:12px;flex-wrap:wrap;margin-bottom:6px}.pair{display:flex;flex-wrap:wrap;gap:14px 5px;margin:4px 0 16px}.pair__col{display:flex;flex-direction:column;align-items:center;gap:3px}.pair__top{display:flex;gap:1px;padding:2px 3px;border-radius:6px}.pair__rung{width:2px;height:12px;background:var(--rule);border-radius:1px}.pair__slot{min-width:36px;height:40px;padding:0 6px;border-radius:6px;border:1.5px dashed var(--ink-3);background:var(--card);font-size:16px;font-weight:600}.pair__slot.is-filled{border-style:solid;border-color:var(--ink-2)}.pair__slot.is-active{outline:3px solid var(--highlight);outline-offset:1px}.pair__slot.is-wrong{background:#b4382b1f;border-color:var(--error);color:var(--error)}.pair__slot.is-done{background:#2f7d4f1f;border:1.5px solid var(--success)}.pair__tray{display:flex;flex-wrap:wrap;gap:10px}.pair__choice{min-width:54px;height:48px;padding:0 14px;border-radius:8px;border:1.5px solid var(--rule);background:var(--card);font-size:18px;font-weight:600;box-shadow:var(--shadow)}.pair__choice:hover{border-color:var(--ink-2)}.pair__choice:active{transform:translateY(1px)}.pair-rules{list-style:none;margin:6px 0 8px;padding:0;display:flex;flex-direction:column;gap:4px;font-size:14px}.code-table{display:flex;flex-direction:column;gap:2px;font-size:12.5px}.code-table__row{display:flex;gap:10px;padding:2px 0;border-bottom:1px dotted var(--rule-soft)}.code-table__amino{width:44px;flex:none;font-weight:600}@media(max-width:900px){.pair__story{font-size:18px}.pair{gap:12px 4px}.pair__slot{min-width:32px;height:38px;font-size:14.5px;padding:0 4px}.pair__choice{height:46px}}.cut__grid{display:grid;grid-template-columns:minmax(0,1fr) 232px;grid-template-areas:"map gel" "enz gel";gap:22px 28px;align-items:start}.cut__a{grid-area:map}.cut__b{grid-area:gel}.cut__c{grid-area:enz}.cut__map{position:relative;height:142px;margin:4px 6px 0;padding-top:70px}.cut__strip{position:relative;height:34px}.cut__piece{position:absolute;top:0;height:34px;background:var(--card);border:1.5px solid var(--ink-2);border-radius:4px;display:flex;align-items:center;justify-content:center;font-size:11.5px;color:var(--ink-2);overflow:hidden;transition:left .25s,width .25s}.cut__piece.is-gene{background:#2f5fa82e;border-color:#2f5fa8;color:#2f5fa8;font-weight:600}.cut__tick{position:absolute;top:54px;width:0;height:56px;border-left:2px dashed currentColor;opacity:.4}.cut__tick.is-on{border-left-style:solid;opacity:1}.cut__tick-label{position:absolute;left:0;transform:translate(-50%);font-size:11px;font-weight:600;white-space:nowrap}.cut__gene{position:absolute;top:110px;height:18px;border:1.5px solid #2f5fa8;border-top:none;border-radius:0 0 6px 6px;color:#2f5fa8;font-size:12px;font-weight:600;text-align:center;padding-top:2px;white-space:nowrap}.cut__enzymes{display:flex;flex-wrap:wrap;gap:10px}.enzyme{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;min-width:140px;padding:8px 12px 8px 10px;background:var(--card);border:1.5px solid var(--rule);border-left-width:5px;border-radius:8px;box-shadow:var(--shadow)}.enzyme__name{font-weight:700;font-size:15px}.enzyme.is-on{background:#f2cf4a47;border-color:var(--highlight)}.enzyme:disabled{opacity:.8}.gel{display:flex;gap:14px;justify-content:center;padding:10px 12px 8px;background:#1e2633;border-radius:8px}.gel__lane{display:flex;flex-direction:column;align-items:center;width:84px}.gel__well{width:56px;height:8px;background:#0f141c;border-radius:2px;margin-bottom:6px}.gel__run{position:relative;width:56px;height:230px}.gel__band{position:absolute;left:0;right:0;height:6px;border-radius:2px;transform:translateY(-3px);transition:top .3s,background .3s}.gel__size{position:absolute;left:60px;top:-7px;font-size:10.5px;color:#bfe9d6;white-space:nowrap}.gel__name{margin-top:6px;color:#9aa3b2}@media(max-width:900px){.cut__grid{grid-template-columns:1fr;grid-template-areas:"map" "gel" "enz";gap:14px}.cut__map{margin:4px 14px 0}.cut__tick-label{font-size:10px}.enzyme{min-width:120px}.gel{padding:8px 10px 6px}.gel__run{height:150px}}.asm{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:6px}.asm__item{display:flex;align-items:center;gap:12px;padding:8px 12px;background:var(--card);border:1.5px solid var(--ink-2);border-radius:8px;cursor:pointer}.asm__item.is-empty{border:1.5px dashed var(--ink-3);background:transparent;cursor:default}.asm__item.is-weak{border-color:var(--rule)}.asm__item.is-wrong{background:#b4382b1a;border-color:var(--error)}.asm__item.is-done{background:#2f7d4f1a;border-color:var(--success);cursor:default}.asm__num{display:inline-flex;align-items:center;justify-content:center;flex:none;width:24px;height:24px;border-radius:50%;background:var(--paper-2);font-size:12px;font-weight:600}.asm__text{font-size:16px;letter-spacing:.08em;word-break:break-all}.asm__overlap{background:#f2cf4a8c;border-radius:3px}.asm__preview{padding:10px 12px;background:var(--card);border:1.5px solid var(--rule);border-radius:8px;font-size:15px;letter-spacing:.1em;word-break:break-all;min-height:44px}.asm__preview.is-done{border-color:var(--success);background:#2f7d4f1a}.asm__tray{display:flex;flex-wrap:wrap;gap:10px}.asm__frag{padding:10px 14px;background:var(--card);border:1.5px solid var(--rule);border-radius:8px;font-size:15px;letter-spacing:.08em;box-shadow:var(--shadow)}.asm__frag:hover{border-color:var(--ink-2)}.crispr__genome{display:flex;flex-wrap:wrap;gap:10px 14px;padding:12px;background:var(--card);border:1.5px solid var(--rule);border-radius:8px}.crispr__block{display:inline-flex}.crispr__base{width:16px;height:26px;display:inline-flex;align-items:center;justify-content:center;font-size:15px;border-bottom:3px solid transparent}.crispr__base.is-gene{background:#2f5fa824;border-bottom-color:#2f5fa8}.crispr__base.is-site.is-cut{background:#2f7d4f47;font-weight:700}.crispr__base.is-site.is-nocut{background:#7c829147;font-weight:700}.crispr__base.is-mismatch{color:var(--error);text-decoration:underline}.crispr__base.is-pam{background:#8b3a7e4d;font-weight:700}.crispr__legend{display:flex;flex-wrap:wrap;gap:6px 16px;margin-top:6px;color:var(--ink-2)}.crispr__key{display:inline-block;width:14px;height:10px;border-radius:2px;vertical-align:middle;margin-right:4px}.crispr__key.is-gene{background:#2f5fa84d;border-bottom:3px solid #2f5fa8;height:12px}.crispr__key.is-site{background:#2f7d4f66}.crispr__key.is-pam{background:#8b3a7e66}.crispr__guides{display:flex;flex-wrap:wrap;gap:10px}.crispr__guide{display:flex;flex-direction:column;align-items:flex-start;gap:2px;text-align:left;min-width:150px;padding:8px 12px;background:var(--card);border:1.5px solid var(--rule);border-radius:8px;box-shadow:var(--shadow)}.crispr__guide.is-on{background:#f2cf4a47;border-color:var(--highlight)}.crispr__guide-id{font-weight:700;font-size:13px;color:var(--ink-3)}.crispr__guide-seq{font-size:16px;letter-spacing:.1em}@media(max-width:900px){.crispr__genome{gap:8px 10px;padding:8px}.crispr__base{width:13px;height:24px;font-size:13px}.asm__text{font-size:14.5px}}.mode-filter{display:flex;flex-wrap:wrap;gap:8px;margin-bottom:18px}.mode-chip{display:inline-flex;align-items:center;gap:6px;padding:5px 12px;border:1px solid var(--rule);border-radius:999px;background:var(--card);font-size:13px;color:var(--ink-2)}.mode-chip .mono{font-size:11px;color:var(--ink-3)}.mode-chip:hover{border-color:var(--ink-3);color:var(--ink)}.mode-chip.is-active{background:var(--ink);border-color:var(--ink);color:var(--paper)}.mode-chip.is-active .mono{color:#f4efe4b3}.help{max-width:640px}.help__section{margin-top:16px}.help__section p{margin-top:4px}.help__steps{margin:6px 0 0;padding-left:20px;display:flex;flex-direction:column;gap:8px;font-size:14.5px}.help__list{margin:6px 0 0;padding-left:18px;display:flex;flex-direction:column;gap:4px;font-size:14px;color:var(--ink-2)}.help__terms{margin:6px 0 0;display:grid;grid-template-columns:max-content 1fr;gap:6px 16px;font-size:14px}.help__terms dt{font-weight:600}.help__terms dd{margin:0;color:var(--ink-2)}.mode-info{margin:-6px 0 16px;font-size:14.5px;color:var(--ink-2)}.story-tip{padding:14px 16px;margin-bottom:20px;border-left:4px solid var(--highlight)}.story-tip p{margin:4px 0 10px;font-size:14px}@media(max-width:900px){.help__terms{grid-template-columns:1fr;gap:0}.help__terms dd{margin-bottom:8px}}
