/* OTOMASYON (iş akışları): liste + sürükle-bırak akış editörü + canlı koşu izleme */
.wf-list{display:grid;grid-template-columns:repeat(auto-fill,minmax(320px,1fr));gap:14px}
.wf-card{background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:12px;padding:14px 16px;cursor:pointer;display:flex;flex-direction:column;gap:8px;transition:border-color .12s,box-shadow .12s;position:relative}
.wf-card:hover{border-color:hsl(var(--primary)/.6);box-shadow:0 4px 18px rgba(0,0,0,.08)}
.wf-card.off{opacity:.65}
.wf-card .hd{display:flex;align-items:center;gap:8px}
.wf-card .hd b{font-size:14px;flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wf-card .desc{font-size:12px;color:hsl(var(--muted-foreground));min-height:16px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wf-card .trg{display:flex;gap:6px;flex-wrap:wrap}
.wf-card .ft{display:flex;align-items:center;gap:8px;font-size:11.5px;color:hsl(var(--muted-foreground));margin-top:2px}
.wf-card .ft .sp{flex:1}
.wf-badge{display:inline-flex;align-items:center;gap:4px;font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:999px;background:hsl(var(--muted));color:hsl(var(--muted-foreground))}
.wf-badge.ok{background:hsl(var(--success)/.14);color:hsl(var(--success))}
.wf-badge.failed,.wf-badge.timeout{background:hsl(var(--destructive)/.12);color:hsl(var(--destructive))}
.wf-badge.running{background:#0ea5e91f;color:#0284c7}
.wf-badge.skipped{background:#f59e0b22;color:#b45309}
.wf-sw{position:relative;width:36px;height:20px;border-radius:999px;background:hsl(var(--border));cursor:pointer;flex-shrink:0;transition:background .15s}
.wf-sw::after{content:"";position:absolute;top:2px;left:2px;width:16px;height:16px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,.3);transition:left .15s}
.wf-sw.on{background:hsl(var(--success))}
.wf-sw.on::after{left:18px}
/* editör */
.wf-editor{display:grid;grid-template-columns:230px 1fr 320px;grid-template-rows:48px 1fr 200px;height:100%;min-height:0;border:1px solid hsl(var(--border));border-radius:12px;overflow:hidden;background:hsl(var(--background))}
.wf-editor.nolog{grid-template-rows:48px 1fr 0}
.wf-editor.nolog .wf-log{display:none}
.wf-tb{grid-column:1/4;display:flex;align-items:center;gap:8px;padding:0 12px;border-bottom:1px solid hsl(var(--border));background:hsl(var(--card))}
.wf-tb .name{font-weight:650;font-size:14px;border:1px solid transparent;border-radius:6px;padding:4px 8px;background:transparent;color:inherit;min-width:180px}
.wf-tb .name:focus{border-color:hsl(var(--primary));outline:none;background:hsl(var(--background))}
.wf-tb .sp{flex:1}
.wf-tb .dirty{font-size:11px;color:#b45309;display:none}
.wf-tb.dirty .dirty{display:inline}
.wf-pal{border-right:1px solid hsl(var(--border));background:hsl(var(--card));overflow:auto;padding:8px}
.wf-pal .grp{font-size:10px;font-weight:700;letter-spacing:.7px;text-transform:uppercase;color:hsl(var(--muted-foreground));padding:10px 6px 4px}
.wf-pal .it{display:flex;align-items:center;gap:9px;padding:7px 8px;border-radius:8px;cursor:grab;font-size:12.5px;border:1px solid transparent;user-select:none}
.wf-pal .it:hover{background:hsl(var(--muted));border-color:hsl(var(--border))}
.wf-pal .it:active{cursor:grabbing}
.wf-pal .it .ic{width:26px;height:26px;border-radius:7px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:14px;flex-shrink:0}
.wf-pal .search{display:flex;align-items:center;gap:6px;border:1px solid hsl(var(--input));border-radius:8px;padding:5px 8px;background:hsl(var(--background));margin:2px 0 6px}
.wf-pal .search input{border:0;background:transparent;color:inherit;font:inherit;font-size:12px;outline:none;flex:1;min-width:0}
/* TUVAL GÖRÜNÜM KUTUSU.
   touch-action:none + user-select:none KRİTİKTİR: bunlar olmadan tarayıcı, pan sürüklemesinin ilk birkaç pikselini
   kendi jesti (dokunmatik kaydırma / metin seçme / sürükle-bırak) sanıp pointer'ı kapıyor ve pointercancel
   gönderiyordu; tuval birkaç piksel gidip duruyordu ("milim milim taşınıyor" şikâyeti).
   Nokta ızgarasının background-size/position'ını workflows.js applyTransform() zoom/pan ile birlikte GÜNCELLER —
   buradaki 20px yalnızca %100 zoom'daki başlangıç değeridir. */
.wf-vp{position:relative;overflow:hidden;background:hsl(var(--background));background-image:radial-gradient(hsl(var(--border)) 1px,transparent 1px);background-size:20px 20px;cursor:grab;
  touch-action:none;user-select:none;-webkit-user-select:none;overscroll-behavior:contain}
.wf-vp.panning{cursor:grabbing}
.wf-vp.spacepan,.wf-vp.spacepan .wf-node,.wf-vp.spacepan .wf-node .nh{cursor:grab}
.wf-vp.connecting{cursor:crosshair}
.wf-vp.dropping{box-shadow:inset 0 0 0 3px hsl(var(--primary)/.45)}
.wf-ghost{position:fixed;z-index:1300;pointer-events:none;display:flex;align-items:center;gap:8px;padding:6px 10px;border-radius:9px;background:hsl(var(--card));border:1px solid hsl(var(--primary));box-shadow:0 8px 24px rgba(0,0,0,.2);font-size:12.5px}
.wf-ghost .ic{width:24px;height:24px;border-radius:6px;display:inline-flex;align-items:center;justify-content:center;color:#fff;font-size:13px}
.wf-canvas{position:absolute;left:0;top:0;transform-origin:0 0;width:0;height:0}
.wf-edges{position:absolute;left:0;top:0;overflow:visible;pointer-events:none}
/* vector-effect: kenar kalınlığı zoom ile ölçeklenmesin — 0,2x'te saç teli, 4x'te halat gibi görünüyordu. */
.wf-edges path{fill:none;stroke-width:2.2;vector-effect:non-scaling-stroke;stroke:hsl(var(--muted-foreground)/.7);pointer-events:stroke;cursor:pointer}
.wf-edges path.true{stroke:hsl(var(--success))}
.wf-edges path.false{stroke:hsl(var(--destructive))}
.wf-edges path.sel{stroke:hsl(var(--primary));stroke-width:3}
.wf-edges path.draft{stroke:hsl(var(--primary));stroke-dasharray:6 5;pointer-events:none}
.wf-edges path.flow{stroke-dasharray:8 6;animation:wf-dash 1s linear infinite;stroke:hsl(var(--primary))}
@keyframes wf-dash{to{stroke-dashoffset:-28}}
.wf-node{position:absolute;width:220px;background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:12px;box-shadow:0 2px 8px rgba(0,0,0,.08);user-select:none;cursor:default;font-size:12.5px}
.wf-node.sel{border-color:hsl(var(--primary));box-shadow:0 0 0 3px hsl(var(--primary)/.18)}
.wf-node .nh{display:flex;align-items:center;gap:8px;padding:8px 10px;border-radius:12px 12px 0 0;cursor:move;color:#fff}
.wf-node .nh .ic{font-size:15px}
.wf-node .nh b{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12.5px;font-weight:650}
.wf-node .nh .st{font-size:11px;opacity:.9}
.wf-node .nb{padding:8px 10px;color:hsl(var(--muted-foreground));font-size:11.5px;line-height:1.4;min-height:28px;word-break:break-word}
.wf-node .nb code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;color:hsl(var(--foreground))}
.wf-node.note{width:200px;background:#fef9c3;border-color:#fde68a;color:#713f12}
.wf-node.note .nh{background:#fde68a;color:#713f12}
.wf-node.note .nb{color:#713f12}
.wf-port{position:absolute;width:14px;height:14px;border-radius:50%;background:hsl(var(--card));border:2px solid hsl(var(--muted-foreground));cursor:crosshair;z-index:2}
.wf-port:hover,.wf-port.hot{border-color:hsl(var(--primary));background:hsl(var(--primary)/.2);transform:scale(1.15)}
.wf-port.in{left:-8px;top:50%;margin-top:-7px}
.wf-port.out{right:-8px}
.wf-port .lb{position:absolute;left:18px;top:-3px;font-size:10px;color:hsl(var(--muted-foreground));white-space:nowrap;pointer-events:none}
.wf-port.out .lb{left:auto;right:18px}
.wf-port.true{border-color:hsl(var(--success))}
.wf-port.false{border-color:hsl(var(--destructive))}
.wf-node.run-ok{box-shadow:0 0 0 3px hsl(var(--success)/.35)}
.wf-node.run-failed{box-shadow:0 0 0 3px hsl(var(--destructive)/.4)}
.wf-node.run-active{box-shadow:0 0 0 4px hsl(var(--primary)/.45);animation:wf-pulse 1s ease-in-out infinite}
.wf-node.run-waiting{box-shadow:0 0 0 3px #f59e0b88}
@keyframes wf-pulse{50%{box-shadow:0 0 0 8px hsl(var(--primary)/.15)}}
.wf-node .rs{position:absolute;right:8px;bottom:6px;font-size:10px;color:hsl(var(--muted-foreground))}
.wf-props{border-left:1px solid hsl(var(--border));background:hsl(var(--card));overflow:auto;padding:12px;display:flex;flex-direction:column;gap:10px}
.wf-props .phd{display:flex;align-items:center;gap:8px;padding-bottom:8px;border-bottom:1px solid hsl(var(--border))}
.wf-props .phd .ic{width:28px;height:28px;border-radius:8px;display:inline-flex;align-items:center;justify-content:center;color:#fff}
.wf-props .phd b{flex:1;font-size:13px}
.wf-props .desc{font-size:11.5px;color:hsl(var(--muted-foreground));line-height:1.4}
.wf-props .kg-field label{font-size:11.5px}
.wf-props .kg-field .h{display:block;font-size:10.5px;color:hsl(var(--muted-foreground));margin-top:3px;line-height:1.35}
.wf-props textarea{width:100%;background:hsl(var(--background));color:hsl(var(--foreground));border:1px solid hsl(var(--input));padding:7px 10px;border-radius:8px;font-size:12.5px;font-family:inherit;min-height:70px;resize:vertical}
.wf-props .mono{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px}
.wf-props .empty{padding:30px 10px}
.wf-log{grid-column:1/4;border-top:1px solid hsl(var(--border));background:hsl(var(--card));display:flex;min-height:0}
.wf-log .runs{width:280px;border-right:1px solid hsl(var(--border));overflow:auto}
.wf-log .runs .hd,.wf-log .steps .hd{display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:10.5px;font-weight:700;letter-spacing:.6px;text-transform:uppercase;color:hsl(var(--muted-foreground));border-bottom:1px solid hsl(var(--border));position:sticky;top:0;background:hsl(var(--card))}
.wf-log .runs .hd .sp,.wf-log .steps .hd .sp{flex:1}
.wf-run{display:flex;align-items:center;gap:8px;padding:6px 10px;font-size:12px;cursor:pointer;border-bottom:1px solid hsl(var(--border)/.6)}
.wf-run:hover{background:hsl(var(--muted)/.6)}
.wf-run.sel{background:hsl(var(--primary)/.1)}
.wf-run .t{flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.wf-log .steps{flex:1;overflow:auto}
.wf-step{display:grid;grid-template-columns:22px 150px 60px 1fr;gap:8px;align-items:start;padding:5px 10px;font-size:12px;border-bottom:1px solid hsl(var(--border)/.6)}
.wf-step .out{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11px;color:hsl(var(--muted-foreground));white-space:pre-wrap;word-break:break-word;max-height:80px;overflow:auto}
.wf-step .err{color:hsl(var(--destructive))}
.wf-empty-canvas{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;pointer-events:none;color:hsl(var(--muted-foreground));font-size:13px;text-align:center;line-height:1.6}
.wf-zoom{position:absolute;right:12px;bottom:12px;display:flex;gap:4px;background:hsl(var(--card));border:1px solid hsl(var(--border));border-radius:8px;padding:3px}
.wf-zoom .kg-btn{padding:4px 8px;font-size:12px}
/* İpucu şeridi dar tuvalde zoom kutusunun ALTINA giriyordu (iki satıra sarıp üstüne biniyordu):
   tek satır + taşarsa kısalt, sağda zoom kutusuna yer bırak. */
.wf-minihint{position:absolute;left:12px;bottom:12px;font-size:11px;color:hsl(var(--muted-foreground));background:hsl(var(--card)/.85);padding:4px 8px;border-radius:6px;pointer-events:none;max-width:calc(100% - 220px);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.wf-tagpick{position:fixed;z-index:1200;width:360px;max-height:320px;overflow:auto;background:hsl(var(--popover,var(--card)));border:1px solid hsl(var(--border));border-radius:10px;box-shadow:0 12px 32px rgba(0,0,0,.2)}
.wf-tagpick .it{padding:6px 10px;cursor:pointer;font-size:12px;font-family:ui-monospace,Menlo,Consolas,monospace}
.wf-tagpick .it:hover{background:hsl(var(--muted))}
@media (max-width:1100px){ .wf-editor{grid-template-columns:200px 1fr 280px} }
/* formül görünümü (düğüm gövdesi) */
.wf-x{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:11.5px;line-height:1.6;color:hsl(var(--foreground));word-break:break-word}
.wf-x-ref{display:inline-block;padding:0 6px;border-radius:6px;background:hsl(var(--primary)/.12);color:hsl(var(--primary));font-weight:600;margin:1px 0}
.wf-x-var{color:#7c3aed;font-weight:600}
.wf-x-op{color:hsl(var(--muted-foreground));font-weight:700;padding:0 2px}
.wf-x-kw{display:inline-block;padding:0 5px;border-radius:5px;background:#8b5cf622;color:#6d28d9;font-weight:700;font-size:10.5px;letter-spacing:.3px}
.wf-node .nb .wf-x{color:hsl(var(--foreground))}
/* formül editörü (özellik paneli) */
.wf-fx-wrap{display:flex;flex-direction:column;gap:6px}
.wf-props textarea.wf-fx{min-height:40px;font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12.5px;line-height:1.5;resize:none;overflow:hidden;transition:border-color .12s}
.wf-props textarea.wf-fx.ok{border-color:hsl(var(--success)/.6)}
.wf-props textarea.wf-fx.bad{border-color:hsl(var(--destructive));box-shadow:0 0 0 3px hsl(var(--destructive)/.12)}
.wf-fx-bar{display:flex;flex-direction:column;gap:4px;padding:8px;border:1px solid hsl(var(--border));border-radius:9px;background:hsl(var(--muted)/.35)}
.wf-fx-grp{display:flex;align-items:center;gap:4px;flex-wrap:wrap}
.wf-fx-gl{font-size:10px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:hsl(var(--muted-foreground));width:64px;flex:none}
.wf-fx-chip{border:1px solid hsl(var(--border));background:hsl(var(--card));color:hsl(var(--foreground));border-radius:6px;padding:2px 7px;font-size:12px;font-family:ui-monospace,Menlo,Consolas,monospace;cursor:pointer;line-height:1.5;min-width:26px}
.wf-fx-chip:hover{border-color:hsl(var(--primary));color:hsl(var(--primary))}
.wf-fx-chip.kw{color:#6d28d9;background:#8b5cf614;border-color:#8b5cf644;font-family:inherit;font-weight:600}
.wf-fx-chip.var{color:#7c3aed}
.wf-fx-chip.sys{color:#0369a1}
.wf-fx-chip.ref{color:hsl(var(--primary));font-family:inherit;font-weight:600}
.wf-fx-st{font-size:11.5px;line-height:1.5;min-height:16px}
.wf-fx-st .okv{color:hsl(var(--success))}
.wf-fx-st .err{color:hsl(var(--destructive))}
.wf-fx-st .warn{color:#b45309}
.wf-fx-refs{display:flex;flex-wrap:wrap;gap:4px;margin-top:4px}
.wf-fx-ref{display:inline-flex;gap:4px;align-items:center;padding:1px 7px;border-radius:999px;background:hsl(var(--primary)/.1);color:hsl(var(--primary));font-size:11px;font-family:ui-monospace,Menlo,Consolas,monospace}
.wf-fx-ref.missing{background:hsl(var(--destructive)/.1);color:hsl(var(--destructive))}
/* canlı koşu notları (düğüm gövdesi) + adım listesi */
.wf-ln{margin-top:6px;padding:4px 7px;border-radius:7px;font-size:11px;display:flex;gap:5px;align-items:flex-start;line-height:1.4}
.wf-ln.failed{background:hsl(var(--destructive)/.1);color:hsl(var(--destructive));font-weight:600}
.wf-ln.waiting{background:#f59e0b1f;color:#b45309}
.wf-ln.active{background:hsl(var(--primary)/.1);color:hsl(var(--primary))}
.wf-ln.active i{animation:spin 1s linear infinite}
.wf-ln.ok{background:hsl(var(--success)/.1);color:hsl(var(--success))}
.wf-stephead{padding:8px 10px;font-size:12.5px;display:flex;flex-direction:column;gap:2px;border-bottom:1px solid hsl(var(--border))}
.wf-stephead.failed{background:hsl(var(--destructive)/.08);color:hsl(var(--destructive))}
.wf-stephead.running{color:hsl(var(--primary))}
.wf-stephead.running i{animation:spin 1s linear infinite}
.wf-stephead.skipped{color:#b45309}
.wf-step{grid-template-columns:22px 22px 150px 60px 1fr;cursor:pointer}
.wf-step:hover{background:hsl(var(--muted)/.5)}
.wf-step.failed{background:hsl(var(--destructive)/.06)}
.wf-step-no{font-size:10.5px;color:hsl(var(--muted-foreground));font-variant-numeric:tabular-nums}
.wf-failbadge{margin-left:auto;background:hsl(var(--destructive));color:#fff;font-size:10px;font-weight:700;padding:1px 6px;border-radius:999px}
.wf-card .wf-lasterr{font-size:11.5px;color:hsl(var(--destructive));display:flex;gap:5px;align-items:flex-start;line-height:1.35;max-height:34px;overflow:hidden}

/* ── ZAMANLAMA SİHİRBAZI (Zamanlayıcı tetikleyicisi) ──────────────────────
   Sol sütun hazır kalıplar, sağda o kalıbın alanları + "bu ne demek" özeti ve sonraki çalışma zamanları. */
.wf-cw{display:grid;grid-template-columns:220px 1fr;gap:14px;min-height:280px}
.wf-cw-tabs{display:flex;flex-direction:column;gap:3px;border-right:1px solid hsl(var(--border));padding-right:10px}
.wf-cw-tab{display:flex;align-items:center;gap:8px;text-align:left;padding:8px 10px;border-radius:8px;border:1px solid transparent;background:transparent;color:inherit;font:inherit;font-size:12.5px;cursor:pointer}
.wf-cw-tab:hover{background:hsl(var(--muted))}
.wf-cw-tab.on{background:hsl(var(--primary)/.12);border-color:hsl(var(--primary)/.45);color:hsl(var(--primary));font-weight:600}
.wf-cw-tab i{font-size:15px;flex:none}
.wf-cw-main{display:flex;flex-direction:column;gap:12px;min-width:0}
.wf-cw-days{display:flex;flex-wrap:wrap;gap:5px}
.wf-cw-day{min-width:44px;padding:6px 9px;border-radius:8px;border:1px solid hsl(var(--border));background:hsl(var(--card));color:inherit;font:inherit;font-size:12px;cursor:pointer}
.wf-cw-day:hover{border-color:hsl(var(--primary)/.6)}
.wf-cw-day.on{background:hsl(var(--primary));border-color:hsl(var(--primary));color:#fff;font-weight:600}
.wf-cw-prev{border-top:1px solid hsl(var(--border));padding-top:10px;display:flex;flex-direction:column;gap:8px;font-size:12.5px}
.wf-cw-sum{background:hsl(var(--primary)/.08);border-left:3px solid hsl(var(--primary));border-radius:0 8px 8px 0;padding:8px 10px;line-height:1.5}
.wf-cw-expr{display:flex;align-items:center;gap:8px;font-size:11.5px;color:hsl(var(--muted-foreground))}
.wf-cw-expr code{font-family:ui-monospace,Menlo,Consolas,monospace;font-size:12px;background:hsl(var(--muted));padding:2px 8px;border-radius:6px;color:hsl(var(--foreground))}
.wf-cw-next .hd{font-size:10.5px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;color:hsl(var(--muted-foreground));margin-bottom:4px}
.wf-cw-next div{font-variant-numeric:tabular-nums;font-size:12.5px;display:flex;gap:5px;align-items:center}
.wf-cw-next .hd span{text-transform:none;letter-spacing:0;font-weight:500}
.wf-cw-bad{color:hsl(var(--destructive));display:flex;gap:6px;align-items:center}
/* özellik panelindeki zamanlama kartı */
.wf-sched{display:flex;flex-direction:column;gap:8px;border:1px solid hsl(var(--border));border-radius:9px;padding:9px 10px;background:hsl(var(--muted)/.4)}
.wf-sched-sum{font-size:12.5px;line-height:1.45}
