@charset "UTF-8";:root{--bg: #0b0f0a;--bg-elev: #0e1410;--bg-sunken: #0a0e09;--fg: #6ee06e;--fg-bright: #c8ffc8;--fg-dim: rgba(110, 224, 110, .55);--fg-mute: rgba(110, 224, 110, .35);--accent: #ffe066;--border: #2c4a2c;--border-strong: #4a7a4a;--radius: 0;--radius-sm: 2px;--page-max: 1100px;--page-pad: 24px;--font-mono: ui-monospace, "SF Mono", SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;--fs-base: 14px;--fs-sm: 12px;--fs-xs: 10px;--fs-lg: 18px;--fs-xl: 28px;--fs-2xl: 44px}*,*:before,*:after{box-sizing:border-box}html,body{margin:0;padding:0;background:var(--bg);color:var(--fg);font-family:var(--font-mono);font-size:var(--fs-base);line-height:1.55;min-height:100vh;-webkit-font-smoothing:antialiased}a{color:var(--fg-bright);text-decoration:none;border-bottom:1px dashed var(--border)}a:hover{border-bottom-color:var(--border-strong)}button,input,textarea,select{font-family:inherit;font-size:inherit;color:inherit}:focus-visible{outline:2px solid var(--accent);outline-offset:2px}::selection{background:var(--border-strong);color:var(--fg-bright)}.cursor:after{content:"\258d";margin-left:2px;animation:cursor-blink 1s steps(2) infinite}@keyframes cursor-blink{50%{opacity:0}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}app-crypto .viz-soon{padding:8px 0}app-crypto .viz-controls{margin-bottom:10px}app-crypto .viz{display:flex;flex-direction:column;gap:10px}app-crypto .viz-caption{display:block;margin-bottom:4px}@keyframes cryptoChipFadeIn{0%{opacity:0;transform:translateY(2px)}to{opacity:1;transform:none}}app-crypto .chips{display:flex;flex-wrap:wrap;gap:6px}app-crypto .chip{display:inline-flex;align-items:center;gap:4px;border:1px solid var(--border);background:var(--bg-sunken);padding:2px 8px;font-size:var(--fs-sm);opacity:0;animation:cryptoChipFadeIn .2s ease forwards;animation-delay:calc(var(--i, 0) * 30ms)}app-crypto .chip .arrow{color:var(--fg-dim);font-size:var(--fs-xs)}app-crypto .chip .to{color:var(--accent)}app-crypto .chip.used{border-color:var(--border-strong);color:var(--fg-bright)}app-crypto .pair-align{font-family:var(--font-mono)}app-crypto .align-row{white-space:pre;font-family:var(--font-mono);font-size:var(--fs-sm);line-height:1.6}app-crypto .align-row.bot{color:var(--accent)}app-crypto .rails{display:flex;flex-direction:column;gap:2px}app-crypto .rail-row{white-space:pre;font-family:var(--font-mono);font-size:var(--fs-sm);opacity:0;animation:cryptoChipFadeIn .2s ease forwards;animation-delay:calc(var(--i, 0) * 30ms)}app-crypto .playfair-square{display:grid;grid-template-columns:repeat(5,1.6em);gap:2px}app-crypto .sq-cell{border:1px solid var(--border);background:var(--bg-sunken);text-align:center;font-size:var(--fs-sm);padding:2px 0;opacity:0;animation:cryptoChipFadeIn .2s ease forwards;animation-delay:calc(var(--i, 0) * 30ms)}app-crypto .bacon-groups{display:flex;flex-wrap:wrap;gap:8px}app-crypto .bacon-group{display:inline-flex;flex-direction:column;align-items:center;gap:2px;opacity:0;animation:cryptoChipFadeIn .2s ease forwards;animation-delay:calc(var(--i, 0) * 30ms)}app-crypto .bacon-group .letter{color:var(--fg-dim);font-size:var(--fs-xs)}app-crypto .bacon-group .bits{color:var(--accent);letter-spacing:.1em;font-size:var(--fs-sm)}app-crypto .viz.instant *{animation:none!important;opacity:1!important}app-crypto .autosolve-controls{display:flex;gap:8px;align-items:center;margin-bottom:10px}app-crypto .autosolve-progress{font-size:var(--fs-sm);margin-bottom:8px}app-crypto .candidates{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:4px}app-crypto .candidate{display:grid;grid-template-columns:7em 4em 1fr;gap:8px;align-items:baseline;width:100%;text-align:left;background:var(--bg-sunken);border:1px solid var(--border);color:var(--fg);font:inherit;font-size:var(--fs-sm);padding:4px 8px;cursor:pointer}app-crypto .candidate:hover{border-color:var(--border-strong);color:var(--fg-bright)}app-crypto .candidate:focus-visible{outline:2px solid var(--accent);outline-offset:2px}app-crypto .candidate.best{border-color:var(--border-strong);background:#4a7a4a2e}app-crypto .candidate .cand-cipher{color:var(--accent)}app-crypto .candidate .cand-text{color:var(--fg-bright);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0}app-life .ctl-group{display:flex;flex-wrap:wrap;gap:6px}app-life .btn{font:inherit;color:var(--fg);background:var(--bg-sunken);border:1px solid var(--border);padding:4px 10px;cursor:pointer}app-life .btn:hover{border-color:var(--border-strong);color:var(--fg-bright)}app-life .btn:disabled{opacity:.4;cursor:not-allowed}app-life .slider{display:flex;flex-direction:column;gap:4px;font-size:var(--fs-xs);color:var(--fg-dim)}app-life .slider .val{color:var(--fg-bright)}app-life .slider input[type=range]{width:100%;accent-color:var(--fg)}app-life .pills{display:flex;flex-wrap:wrap;gap:4px}app-life .pill{font:inherit;font-size:var(--fs-xs);color:var(--fg-dim);background:var(--bg-sunken);border:1px solid var(--border);padding:2px 8px;cursor:pointer}app-life .pill:hover{border-color:var(--border-strong)}app-life .pill.active{border-color:var(--border-strong);color:var(--fg-bright);background:#4a7a4a2e}app-life .rule-input,app-life .rle-in{width:100%;font:inherit;color:var(--fg);background:var(--bg-sunken);border:1px solid var(--border);padding:4px 6px}app-life .rule-input.err{border-color:#e06e6e;color:#ffb0b0}app-life .rle-in{min-height:80px;resize:vertical;font-size:var(--fs-xs)}app-life .hint{margin:0;font-size:var(--fs-xs);color:var(--fg-dim)}app-life .err-line{margin:0;font-size:var(--fs-xs);color:#ffb0b0}app-life .rail-label{font-size:var(--fs-xs);color:var(--accent)}app-life .pattern-tiles{display:flex;flex-direction:column;gap:4px}app-life .pattern-tile{font:inherit;font-size:var(--fs-xs);text-align:left;color:var(--fg-dim);background:var(--bg-sunken);border:1px solid var(--border);padding:4px 8px;cursor:pointer}app-life .pattern-tile:hover{border-color:var(--border-strong);color:var(--fg)}app-life .pattern-tile.active{border-color:var(--accent);color:var(--fg-bright)}
