:root{--bg:#f4f0e8;--ink:#1c1917;--muted:#78716c;--panel:#fffdf8;--line:#e7e0d5;--accent:#0f766e;--accent-ink:#ecfdf5;--danger:#b91c1c;--mono:"IBM Plex Mono",ui-monospace,monospace;--sans:"Source Sans 3","Segoe UI",sans-serif;--display:"Fraunces",Georgia,serif}*{box-sizing:border-box}body,html{margin:0;padding:0;background:radial-gradient(circle at top left,rgba(15,118,110,.08),transparent 40%),linear-gradient(180deg,#f7f3ec 0,var(--bg) 100%);color:var(--ink);font-family:var(--sans);min-height:100%}body:has(.table-page),html:has(.table-page){height:100%;overflow:hidden}body:has(.table-page) .shell{height:100dvh;max-height:100dvh;overflow:hidden}body:has(.table-page) .nav{margin-bottom:10px}a{color:inherit;text-decoration:none}button,input,select,textarea{font:inherit}.shell{width:100%;max-width:none;margin:0;padding:clamp(12px,1.25vw,28px) clamp(12px,2vw,40px);display:flex;flex-direction:column;box-sizing:border-box;min-height:100dvh}.shell>.stack:not(.table-page){width:100%;max-width:min(100%,1680px);margin-inline:auto}.table-page{flex:1 1;min-height:0;width:100%;max-width:none;display:flex;flex-direction:column;gap:12px}.table-page-header{flex:0 0 auto}.table-page-header h1{margin:0 0 4px;font-size:clamp(1.45rem,2vw,1.85rem)}.workspace{display:grid;grid-template-columns:minmax(280px,340px) minmax(0,1fr);grid-gap:clamp(12px,1.5vw,24px);gap:clamp(12px,1.5vw,24px);align-items:stretch;flex:1 1;min-height:0;width:100%;overflow:hidden}@media (min-width:1280px){.workspace{grid-template-columns:minmax(320px,360px) minmax(0,1fr)}}@media (min-width:1600px){.workspace{grid-template-columns:minmax(360px,400px) minmax(0,1fr)}}@media (min-width:1920px){.workspace{grid-template-columns:minmax(400px,440px) minmax(0,1fr)}}.workspace>.sidebar{grid-column:1;grid-row:1}.workspace>.workspace-main,.workspace>:not(.sidebar){grid-column:2;grid-row:1;min-width:0}.workspace>.sidebar,.workspace>.workspace-main{min-height:0;max-height:100%;overflow-x:hidden;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.workspace>.workspace-main{align-content:start;gap:10px}.table-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:8px 10px}.table-toolbar .toolbar-sep{width:1px;height:22px;background:var(--line);margin:0 2px;flex:0 0 auto}.table-toolbar .toolbar-meta{color:var(--muted);font-size:.85rem;margin-left:auto}.table-empty{padding:28px 20px;text-align:center}.table-empty p{margin:0;color:var(--muted);font-size:.95rem}.table-empty .table-empty-actions{display:flex;flex-wrap:wrap;justify-content:center;gap:8px;margin-top:14px}@media (max-width:960px){.workspace{grid-template-columns:1fr;overflow:auto;overscroll-behavior:contain}.workspace>.sidebar,.workspace>.workspace-main,.workspace>:not(.sidebar){grid-column:1;grid-row:auto;max-height:none;overflow:visible}}.sidebar{display:grid;grid-gap:12px;gap:12px;align-content:start}.sidebar h2{font-size:1rem;margin:0 0 8px}.task-list{display:grid;grid-gap:8px;gap:8px}.task-item{border:1px solid var(--line);border-radius:12px;padding:10px 12px;background:white;display:grid;grid-gap:6px;gap:6px}.task-item.active{border-color:var(--accent);box-shadow:0 0 0 1px rgba(15,118,110,.2)}.task-item .task-title{font-weight:600;font-size:.95rem}.task-item .task-meta{font-size:.8rem;color:var(--muted)}.progress-track{height:8px;border-radius:999px;background:var(--line);overflow:hidden}.progress-fill{height:100%;border-radius:999px;transition:width .4s ease;background:#0f766e}.progress-fill.warn{background:#b45309}.progress-fill.danger{background:var(--danger)}.progress-fill.done{background:#15803d}.badge.not_started{background:#e7e5e4}.badge.partial{background:#fef3c7}.badge.done{background:#d1fae5}.badge.idle{background:#e2e8f0}.nav{display:flex;gap:12px 16px;align-items:center;flex-wrap:wrap;margin-bottom:clamp(16px,2vw,28px);flex:0 0 auto;width:100%}.brand{font-family:var(--display);font-size:1.6rem;font-weight:600;letter-spacing:-.02em}.nav a{color:var(--muted)}.nav a:hover{color:var(--ink)}.panel{background:var(--panel);border:1px solid var(--line);border-radius:16px;padding:20px;box-shadow:0 10px 30px rgba(28,25,23,.04)}.panel h2{font-size:1.15rem}h1,h2{font-family:var(--display);letter-spacing:-.02em;margin:0 0 12px}.muted{color:var(--muted)}.stack{display:grid;grid-gap:16px;gap:16px}.table-page.stack{display:flex;flex-direction:column;gap:12px}.row{display:flex;gap:12px;flex-wrap:wrap;align-items:center}.button,button{background:var(--accent);color:var(--accent-ink);border:0;border-radius:999px;padding:10px 16px;cursor:pointer}button.secondary{background:transparent;color:var(--ink);border:1px solid var(--line)}input,select,textarea{width:100%;border:1px solid var(--line);border-radius:10px;padding:10px 12px;background:white}table.grid{width:100%;border-collapse:collapse;font-size:.92rem}table.grid td,table.grid th{border-bottom:1px solid var(--line);padding:10px 8px;text-align:left;vertical-align:top;max-width:clamp(120px,14vw,360px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}table.grid th{color:var(--muted);font-weight:600}tr.grid-filter-row th{padding:4px 6px 10px;font-weight:400;vertical-align:middle;background:rgba(15,23,42,.02)}input.grid-filter-input{width:100%;min-width:72px;padding:6px 8px;font-size:.78rem;font-weight:400;border-radius:8px}.workspace-main .panel{width:100%;overflow-x:auto}.workspace-main table.grid{min-width:100%;width:max-content}.workspace-main table.grid td,.workspace-main table.grid th{max-width:clamp(160px,16vw,520px);padding:10px 12px}.workspace-main table.grid td.cell-td{vertical-align:middle}button.cell-preview{display:block;width:100%;max-width:100%;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:inherit;font:inherit;text-align:left;cursor:pointer;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}button.cell-preview:hover{color:var(--accent);text-decoration:underline;text-underline-offset:2px}.cell-viewer-backdrop{position:fixed;inset:0;z-index:50;background:rgba(28,25,23,.35);display:flex;align-items:center;justify-content:center;padding:clamp(16px,4vw,40px)}.cell-viewer{width:min(720px,100%);max-height:min(80dvh,900px);display:flex;flex-direction:column;gap:12px;box-shadow:0 16px 48px rgba(28,25,23,.18)}.cell-viewer-body{margin:0;flex:1 1;min-height:0;overflow:auto;white-space:pre-wrap;word-break:break-word;background:white;border:1px solid var(--line);border-radius:10px;padding:14px 16px;font-size:.92rem;line-height:1.45}table.tables-list td,table.tables-list th{max-width:none;white-space:normal;vertical-align:middle}table.tables-list td:nth-child(2){max-width:320px;color:var(--muted);font-size:.88rem;white-space:normal}table.tables-list-edit td{background:rgba(15,118,110,.04)}a.tables-list-link{font-size:.8rem;font-weight:600;color:var(--accent);margin-right:6px}.mono{font-family:var(--mono);font-size:.85rem}.nowrap{white-space:nowrap}table.activity-grid td,table.activity-grid th{vertical-align:top}table.activity-grid td.details-cell{max-width:28rem;font-size:.85rem;line-height:1.35}.badge{display:inline-block;border-radius:999px;padding:2px 8px;font-size:.75rem;background:#e7e5e4}.badge.ok{background:#d1fae5}.badge.error{background:#fee2e2}.badge.running{background:#fef3c7}.badge.skipped{background:#e2e8f0}.campaign-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:14px;gap:14px}.campaign-card{display:block;text-decoration:none;color:inherit;transition:box-shadow .15s ease,transform .15s ease}.campaign-card:hover{box-shadow:0 6px 20px rgba(28,25,23,.08);transform:translateY(-1px)}.campaign-card-unassigned{border-style:dashed}.campaign-status{display:inline-block;border-radius:999px;padding:2px 8px;font-size:.72rem;font-weight:600;text-transform:lowercase;letter-spacing:.02em;background:#e7e5e4;color:#44403c}.campaign-status-draft{background:#e7e5e4;color:#57534e}.campaign-status-active{background:#d1fae5;color:#065f46}.campaign-status-paused{background:#fef3c7;color:#92400e}.campaign-status-completed{background:#dbeafe;color:#1e40af}.campaign-status-archived{background:#f5f5f4;color:#78716c}.campaign-overview{display:grid;grid-template-columns:repeat(auto-fit,minmax(220px,1fr));grid-gap:12px;gap:12px}.campaign-progress-track{height:6px;border-radius:999px;background:#e7e5e4;overflow:hidden}.campaign-progress-fill{height:100%;border-radius:999px;background:#166534;transition:width .2s ease}.campaign-stat-grid{display:grid;grid-template-columns:1fr 1fr;grid-gap:10px 12px;gap:10px 12px}.campaign-stat-value{font-size:1.25rem;font-weight:600;line-height:1.2}.breadcrumb{display:flex;flex-wrap:wrap;align-items:center;gap:6px;font-size:.85rem;margin-bottom:4px}.breadcrumb a{color:inherit;text-decoration:none}.breadcrumb a:hover{text-decoration:underline}.breadcrumb-sep{color:var(--muted,#78716c)}.error{color:var(--danger)}.integration-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));grid-gap:14px;gap:14px}.integration-tile{background:var(--panel);border:1px solid var(--line);border-radius:16px;overflow:hidden;box-shadow:0 10px 30px rgba(28,25,23,.04)}.integration-tile.is-ready{border-color:rgba(15,118,110,.35)}.integration-tile.is-missing{border-color:rgba(185,28,28,.28)}.integration-tile-head{width:100%;display:flex;justify-content:space-between;gap:12px;align-items:flex-start;text-align:left;background:transparent;color:inherit;border-radius:0;padding:16px 18px}.integration-tile-head:hover{background:rgba(15,118,110,.04)}.integration-title{font-family:var(--display);font-size:1.2rem;font-weight:600}.integration-badge{flex:0 0 auto;font-size:.75rem;font-weight:600;padding:4px 10px;border-radius:999px;white-space:nowrap}.integration-badge.ok{background:rgba(15,118,110,.12);color:var(--accent)}.integration-badge.warn{background:rgba(185,28,28,.1);color:var(--danger)}.integration-tile-body{border-top:1px solid var(--line);padding:14px 18px 18px}.integration-dot{display:inline-block;width:8px;height:8px;border-radius:50%;margin-left:8px;vertical-align:middle}.integration-dot.ok{background:var(--accent)}.modal-backdrop{position:fixed;inset:0;z-index:80;background:rgba(28,25,23,.45);display:grid;place-items:center;padding:20px}.modal-card{width:min(440px,100%);max-height:min(90dvh,640px);overflow:auto}.secret-mask{-webkit-text-security:disc}