|
| 1 | +/* simulations/simulation.css — shared styles for simulator pages */ |
| 2 | + |
| 3 | +* { box-sizing: border-box; } |
| 4 | +body.mneme-sim { |
| 5 | + margin: 0; |
| 6 | + background: var(--paper); |
| 7 | + color: var(--ink); |
| 8 | + font-family: var(--font-sans); |
| 9 | +} |
| 10 | + |
| 11 | +.sim-top { |
| 12 | + display: flex; justify-content: space-between; align-items: center; |
| 13 | + padding: 14px 28px; border-bottom: 1px solid var(--dust); |
| 14 | + background: rgba(245,243,236,0.9); backdrop-filter: blur(10px); |
| 15 | + position: sticky; top: 0; z-index: 20; |
| 16 | +} |
| 17 | +.sim-top .brand { display:flex; align-items:center; gap: 10px;} |
| 18 | +.sim-top .brand img { height: 26px;} |
| 19 | +.sim-top .breadcrumb { font-family: var(--font-mono); font-size: 11px; color: var(--slate); letter-spacing: 0.12em; text-transform: uppercase;} |
| 20 | +.sim-top .breadcrumb a { color: var(--slate); text-decoration: none; border-bottom: 1px solid transparent;} |
| 21 | +.sim-top .breadcrumb a:hover { color: var(--signal); border-color: var(--signal);} |
| 22 | +.sim-top .chip { |
| 23 | + display: inline-flex; align-items: center; gap: 6px; |
| 24 | + padding: 4px 10px; border-radius: 999px; background: var(--bone); border: 1px solid var(--dust); |
| 25 | + font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.12em; text-transform: uppercase; |
| 26 | +} |
| 27 | +.sim-top .chip .dot { width: 6px; height: 6px; border-radius: 50%; background: var(--signal); box-shadow: 0 0 0 3px rgba(233,79,29,0.15);} |
| 28 | + |
| 29 | +.sim-wrap { padding: 28px; max-width: 1440px; margin: 0 auto;} |
| 30 | +.sim-header { margin-bottom: 22px; display:flex; align-items: flex-end; justify-content: space-between; gap: 24px;} |
| 31 | +.sim-header .eye { font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.18em; color: var(--slate); text-transform: uppercase;} |
| 32 | +.sim-header h1 { font-family: var(--font-display); font-weight: 400; font-size: 36px; letter-spacing: -0.02em; margin: 4px 0 0;} |
| 33 | +.sim-header .desc { font-size: 13px; color: var(--slate); max-width: 60ch; line-height: 1.5;} |
| 34 | + |
| 35 | +/* layout grid for rw simulator */ |
| 36 | +.rw-grid { |
| 37 | + display: grid; grid-template-columns: 280px 1fr 320px; gap: 14px; |
| 38 | + min-height: calc(100vh - 200px); |
| 39 | +} |
| 40 | +.panel { |
| 41 | + background: #fff; border: 1px solid var(--dust); border-radius: 4px; |
| 42 | + padding: 20px; overflow: hidden; |
| 43 | +} |
| 44 | +.panel h3 { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--slate); margin: 0 0 14px; font-weight: 500;} |
| 45 | +.panel h4 { font-family: var(--font-display); font-size: 18px; font-weight: 500; margin: 0 0 8px; letter-spacing: -0.01em;} |
| 46 | + |
| 47 | +/* step rail */ |
| 48 | +.steprail { display: flex; flex-direction: column; gap: 4px;} |
| 49 | +.step { |
| 50 | + padding: 12px 14px; border: 1px solid var(--dust); border-radius: 3px; |
| 51 | + cursor: pointer; background: #fff; transition: all 180ms var(--ease); |
| 52 | + position: relative; |
| 53 | +} |
| 54 | +.step:hover { border-color: var(--ink);} |
| 55 | +.step.active { border-color: var(--ink); background: var(--ink); color: var(--paper);} |
| 56 | +.step.active .s-sub { color: #a5a9b5;} |
| 57 | +.step .s-n { font-family: var(--font-mono); font-size: 9px; letter-spacing: 0.16em; color: var(--slate); display:block; margin-bottom: 4px;} |
| 58 | +.step.active .s-n { color: var(--signal);} |
| 59 | +.step .s-t { font-family: var(--font-sans); font-size: 13px; font-weight: 500;} |
| 60 | +.step .s-sub { font-family: var(--font-mono); font-size: 10px; color: var(--slate); margin-top: 2px;} |
| 61 | +.step.done::after { |
| 62 | + content: "✓"; position: absolute; right: 14px; top: 50%; transform: translateY(-50%); |
| 63 | + color: var(--ok); font-family: var(--font-mono); font-size: 11px; |
| 64 | +} |
| 65 | + |
| 66 | +/* stage (canvas) */ |
| 67 | +.stage { |
| 68 | + position: relative; min-height: 540px; |
| 69 | + background-color: var(--paper); |
| 70 | + background-image: radial-gradient(circle, rgba(11,14,20,0.1) 1px, transparent 1.4px); |
| 71 | + background-size: 18px 18px; |
| 72 | + border: 1px solid var(--dust); border-radius: 4px; |
| 73 | + padding: 24px; overflow: hidden; |
| 74 | +} |
| 75 | +.stage-title { font-family: var(--font-display); font-size: 20px; letter-spacing: -0.01em; margin-bottom: 14px;} |
| 76 | +.stage-desc { font-family: var(--font-sans); font-size: 12px; color: var(--slate); line-height: 1.5; max-width: 60ch; margin-bottom: 20px;} |
| 77 | + |
| 78 | +/* control bar */ |
| 79 | +.controls { display:flex; gap: 8px; align-items: center; padding: 12px 0;} |
| 80 | +.ctrl-btn { |
| 81 | + height: 34px; padding: 0 14px; border-radius: 2px; border: 1px solid var(--ink); |
| 82 | + font-family: var(--font-mono); font-size: 11px; letter-spacing: 0.08em; text-transform: uppercase; |
| 83 | + background: transparent; color: var(--ink); cursor: pointer; transition: all 180ms var(--ease); |
| 84 | +} |
| 85 | +.ctrl-btn:hover { background: var(--ink); color: var(--paper);} |
| 86 | +.ctrl-btn.primary { background: var(--signal); border-color: var(--signal); color: var(--paper);} |
| 87 | +.ctrl-btn.primary:hover { background: var(--signal-deep); border-color: var(--signal-deep);} |
| 88 | +.ctrl-btn:disabled { opacity: 0.4; pointer-events: none;} |
| 89 | + |
| 90 | +/* readouts (right panel) */ |
| 91 | +.readout { margin-bottom: 20px; padding-bottom: 18px; border-bottom: 1px solid var(--dust);} |
| 92 | +.readout:last-child { border-bottom: 0;} |
| 93 | +.readout .r-k { font-family: var(--font-mono); font-size: 10px; letter-spacing: 0.1em; color: var(--slate); text-transform: uppercase; margin-bottom: 4px;} |
| 94 | +.readout .r-v { font-family: var(--font-mono); font-variant-numeric: tabular-nums; font-size: 22px; font-weight: 500; color: var(--ink);} |
| 95 | +.readout .r-u { font-family: var(--font-mono); font-size: 11px; color: var(--slate); margin-left: 3px;} |
| 96 | + |
| 97 | +/* log */ |
| 98 | +.log { font-family: var(--font-mono); font-size: 11px; max-height: 160px; overflow-y: auto; color: var(--slate); line-height: 1.55;} |
| 99 | +.log .ts { color: var(--signal);} |
| 100 | +.log div { padding: 2px 0;} |
| 101 | + |
| 102 | +/* svg styles */ |
| 103 | +.node-ring { stroke: #0B0E14; stroke-width: 1.2; fill: #fff;} |
| 104 | +.node-active { stroke: #E94F1D; stroke-width: 2; fill: #FBE1D4;} |
| 105 | +.node-label { font-family: "IBM Plex Mono", monospace; font-size: 9px; fill: #6E7382; letter-spacing: 0.08em; text-transform: uppercase;} |
| 106 | +.node-title { font-family: "IBM Plex Sans", sans-serif; font-size: 11px; fill: #0B0E14; font-weight: 500;} |
| 107 | +.edge { stroke: #6E7382; stroke-width: 1; fill: none; stroke-dasharray: 3 3;} |
| 108 | +.edge-active { stroke: #E94F1D; stroke-width: 2; fill: none;} |
| 109 | +.spike { stroke: #0B0E14; stroke-width: 1;} |
| 110 | +.spike.live { stroke: #E94F1D; stroke-width: 1.5;} |
| 111 | + |
| 112 | +/* voxel grid */ |
| 113 | +.voxel-grid { display: grid; gap: 2px;} |
| 114 | +.voxel { width: 100%; aspect-ratio: 1; background: var(--dust); transition: background 180ms var(--ease);} |
| 115 | + |
| 116 | +/* stim input picker */ |
| 117 | +.stim-tiles { display: grid; grid-template-columns: repeat(2, 1fr); gap: 8px; margin-top: 12px;} |
| 118 | +.stim-tile { |
| 119 | + padding: 12px; border: 1px solid var(--dust); border-radius: 3px; cursor: pointer; |
| 120 | + font-family: var(--font-sans); font-size: 12px; text-align: left; |
| 121 | + background: #fff; transition: all 180ms; |
| 122 | +} |
| 123 | +.stim-tile:hover { border-color: var(--ink);} |
| 124 | +.stim-tile.selected { border-color: var(--signal); background: var(--signal-soft);} |
| 125 | +.stim-tile .ico { font-family: var(--font-mono); color: var(--signal); font-size: 11px; margin-bottom: 4px;} |
0 commit comments