/* Flow Studio */
.fs{display:grid;grid-template-columns:190px minmax(0,1fr) 340px;gap:18px;align-items:start}
@media (max-width:1120px){.fs{grid-template-columns:1fr}.fs-flows,.fs-side{position:static}}

/* kolomkoppen 1 · 2 · 3 — gelijke hoogte + gelijke ondermarge = uitlijnen over de drie kolommen */
.fs-colhead{display:flex;align-items:center;gap:8px;min-height:24px;font-size:11.5px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);margin:0 0 10px}
.fs-colnum{width:22px;height:22px;flex:0 0 22px;border-radius:7px;background:var(--ink);color:#fff;display:grid;place-items:center;font-size:11px;font-weight:800}

/* kolom 1 — gebeurtenissen (flows) */
.fs-flows{display:flex;flex-direction:column;gap:6px;position:sticky;top:90px}
.fs-flow{display:flex;flex-direction:column;gap:2px;border:1px solid var(--stone-200);background:var(--surface);border-radius:12px;padding:11px 13px;cursor:pointer;transition:all .18s var(--ease)}
.fs-flow:hover{border-color:var(--ink)}
.fs-flow.active{background:var(--ink);color:#fff;border-color:var(--ink);box-shadow:var(--shadow-sm)}
.fs-flow.active .muted{color:#B9B5AC}
.fs-flow b{font-size:13.5px}
.fs-flow small{font-size:11px}

/* kolom 2 — stappen */
.fs-main{min-width:0}
.fs-flowbar{align-items:flex-start;margin:2px 0 10px}
.fs-flowbar h2{line-height:1.15}
.fs-flowdesc{margin:3px 0 0;font-size:12.5px;line-height:1.4}
.fs-legend{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin:2px 0 14px;font-size:11px}

.fs-steps{display:flex;flex-direction:column;gap:12px}
.step{background:var(--surface);border:1px solid var(--stone-200);border-radius:14px;padding:14px;box-shadow:var(--shadow-sm);transition:box-shadow .2s var(--ease),opacity .2s var(--ease),border-color .2s var(--ease)}
.step:hover{box-shadow:var(--shadow)}
.step.off{background:var(--stone-100);border-color:var(--stone-300);border-style:dashed;box-shadow:none}
.step.off .step-ic{opacity:.45}
.step.off .step-title{color:var(--ink-faint)}
.step-off-note{font-size:12px;margin-top:10px}
.step-head{display:flex;align-items:center;gap:11px}
.step-ic{width:32px;height:32px;flex:0 0 32px;border-radius:9px;background:var(--accent-soft);color:var(--accent-ink);display:grid;place-items:center}
.step-ic svg{width:17px;height:17px}
.step-titlewrap{flex:1;min-width:0;display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.step-title{font-weight:700;font-size:14px}
.step-body{margin-top:12px;display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px}
.step-actions{display:flex;align-items:center;gap:2px;flex:0 0 auto}
.stepnum{width:22px;height:22px;flex:0 0 22px;border-radius:7px;background:var(--stone-100);color:var(--ink-soft);display:grid;place-items:center;font-size:11px;font-weight:800}

/* stap aan/uit — label + schakelaar, netjes rechts uitgelijnd achter een scheidingslijntje */
.step-toggle{display:inline-flex;align-items:center;gap:7px;margin-left:6px;padding-left:10px;border-left:1px solid var(--stone-200)}
.toggle-cap{font-size:10px;font-weight:800;letter-spacing:.04em;text-transform:uppercase;color:var(--ink-soft);min-width:20px;text-align:right}
.off-badge{background:var(--danger-soft);color:var(--danger);font-size:10px;font-weight:800;letter-spacing:.06em;padding:2px 8px;border-radius:999px;flex:0 0 auto;line-height:1.6}

.add-step{border:1.5px dashed var(--stone-300);background:transparent;border-radius:14px;padding:13px;color:var(--ink-soft);font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:8px;transition:all .18s var(--ease);margin-top:12px}
.add-step:hover{border-color:var(--accent);color:var(--accent-ink);background:var(--accent-soft)}

/* lege staat (flow zonder stappen) */
.fs-empty{display:flex;flex-direction:column;align-items:center;text-align:center;padding:30px 18px;border:1.5px dashed var(--stone-300);border-radius:14px;background:var(--stone-100)}
.fs-empty-ic{width:46px;height:46px;border-radius:12px;background:var(--surface);border:1px solid var(--stone-200);color:var(--ink-soft);display:grid;place-items:center;margin-bottom:10px}
.fs-empty-ic svg{width:22px;height:22px}
.fs-empty-t{font-weight:800;font-size:14px}

/* catalogus-picker — 27 stappen gegroepeerd per laag (matrix/patch/config/live/meta) */
.picker-group+.picker-group{margin-top:16px}
.picker-grouphead{display:flex;align-items:center;gap:8px;margin:0 0 8px;flex-wrap:wrap}
.picker-grouphead b{font-size:12.5px}
.picker-grouphead .faint{font-size:11px}
.picker-groupic{width:22px;height:22px;flex:0 0 22px;border-radius:7px;background:var(--stone-100);color:var(--ink-soft);display:grid;place-items:center}
.picker-groupic svg{width:13px;height:13px;stroke-width:2.2}
.picker{display:grid;grid-template-columns:1fr 1fr;gap:8px}
@media (max-width:560px){.picker{grid-template-columns:1fr}}
.pick{display:flex;gap:10px;align-items:flex-start;border:1px solid var(--stone-200);border-radius:11px;padding:10px;cursor:pointer;background:var(--surface);transition:all .16s var(--ease)}
.pick:hover{border-color:var(--ink);box-shadow:var(--shadow-sm)}
.pick .step-ic{width:28px;height:28px;flex-basis:28px}
.pick b{font-size:12.5px}
.pick .pill{font-size:9.5px;padding:2px 7px}
/* omschrijving geknipt op 2 regels — volledige tekst staat in de title-tooltip (hover) */
.pick p{margin:2px 0 0;font-size:11px;color:var(--ink-soft);line-height:1.35;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:2;line-clamp:2;overflow:hidden}

/* kolom 3 — resultaat (preview + plan) */
.fs-side{position:sticky;top:90px;display:flex;flex-direction:column;gap:16px}
.matrix-wrap{background:var(--ink);border-radius:16px;padding:18px;display:flex;flex-direction:column;align-items:center;gap:9px}
.matrix-wrap canvas{border-radius:10px;background:#050505;image-rendering:pixelated;box-shadow:inset 0 0 0 1px #1c1c1c,0 0 40px rgba(123,196,122,.10)}
.matrix-cap{color:#8C877E;font-size:11.5px;letter-spacing:.04em;text-transform:uppercase;font-weight:700;min-height:15px;text-align:center}
.matrix-cap b{color:#7BC47A}
/* De live-caption (stap-titel) wordt nu als platte tekst gezet (textContent) i.p.v. <b>-HTML;
   deze regel houdt de accent-kleur die voorheen van .matrix-cap b kwam. */
#previewCap{color:#7BC47A}
.fs-matrixnote{color:#6f6a62;font-size:10.5px;letter-spacing:.02em;text-align:center}

/* mini matrix-editor in een stap */
.medit{grid-column:1/-1;display:flex;gap:14px;flex-wrap:wrap;align-items:center}
.medit canvas{background:#0b0b0b;border-radius:8px;cursor:crosshair;image-rendering:pixelated;box-shadow:inset 0 0 0 1px #1e1e1e}
.medit .tools{display:flex;flex-direction:column;gap:6px}

/* plan "in gewone taal" */
.fs-plan-intro{margin:-4px 0 10px;font-weight:600}
.fs-plan-list{display:flex;flex-direction:column;gap:9px}
.fs-plan-op{display:flex;gap:10px;align-items:flex-start}
.fs-plan-op .stepnum{flex:0 0 22px;margin-top:1px}
.fs-plan-sum{font-size:13px;font-weight:600;line-height:1.35}
.fs-plan-where{font-size:11px;color:var(--ink-faint)}
.unresolved{background:var(--warn-soft);border:1px solid #EAD9B4;border-radius:11px;padding:11px;font-size:12px;color:#7A5312;margin-top:12px}
.unresolved b{color:var(--warn)}
.fs-compile-btn{margin-top:10px;width:100%;justify-content:center}

/* opslaan-status in de topbar (inline naast de knop) */
.fs-savestate{display:inline-flex;align-items:center;gap:6px;font-size:12px;font-weight:700;padding:5px 11px;border-radius:999px;background:var(--stone-100);color:var(--ink-soft)}
.fs-savestate svg{width:14px;height:14px;stroke-width:2.2}
.fs-savestate.warn{background:var(--warn-soft);color:var(--warn)}
.fs-savestate.ok{background:var(--accent-soft);color:var(--accent-ink)}
.fs-savestate.err{background:var(--danger-soft);color:var(--danger)}
.fs-savestate.busy svg{animation:fs-spin .9s linear infinite}

/* inline feedback bij compileren (succes/fout/bezig) */
.fs-banner{display:flex;align-items:flex-start;gap:8px;margin-top:10px;padding:10px 12px;border-radius:11px;font-size:12.5px;font-weight:600;line-height:1.4;border:1px solid transparent}
.fs-banner svg{width:15px;height:15px;flex:0 0 15px;margin-top:1px;stroke-width:2.2}
.fs-banner.ok{background:var(--accent-soft);color:var(--accent-ink);border-color:#CDE8CC}
.fs-banner.err{background:var(--danger-soft);color:var(--danger);border-color:#EBCFC7}
.fs-banner.busy{background:var(--stone-100);color:var(--ink-soft)}
.fs-banner.busy svg{animation:fs-spin .9s linear infinite}
.fs-banner.warn{background:var(--warn-soft);color:#7A5312;border-color:#EAD9B4}

/* foutkaart (kon niet laden) */
.fs-errcard{display:flex;gap:14px;align-items:flex-start}
.fs-err-ic{width:40px;height:40px;flex:0 0 40px;border-radius:11px;background:var(--danger-soft);color:var(--danger);display:grid;place-items:center}
.fs-err-ic svg{width:20px;height:20px}

/* laad-skeleton (terwijl catalogus + flows laden) */
.fs-loading{pointer-events:none}
.fs-skel{border-radius:12px;background:linear-gradient(100deg,var(--stone-100) 30%,var(--stone-200) 50%,var(--stone-100) 70%);background-size:200% 100%;animation:fs-shimmer 1.3s var(--ease) infinite}
.fs-skel-flow{height:52px;margin-bottom:6px}
.fs-skel-line{height:16px;width:70%;margin-bottom:12px}
.fs-skel-step{height:88px;margin-bottom:12px;border-radius:14px}
.fs-skel-matrix{height:150px;border-radius:16px}
.fs-skel-plan{height:220px;border-radius:14px;margin-top:16px}

@keyframes fs-shimmer{to{background-position:-200% 0}}
@keyframes fs-spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion:reduce){.fs-skel,.fs-savestate.busy svg,.fs-banner.busy svg{animation:none}}
