:root{--bg:#0a0c10;--surface:#11151b;--surface2:#171c24;--line:#252c36;--text:#f3f6f8;--muted:#8893a2;--accent:#d7ff58;--cyan:#66d9ff;--red:#ff707a;--orange:#ffb45c;--green:#74e0a4;--surface-sunken:#0f1318;--radius:18px}*{box-sizing:border-box}body{margin:0;background:radial-gradient(circle at 80% 0,#17201d 0,transparent 30%),var(--bg);color:var(--text);font-family:system-ui,"Apple SD Gothic Neo","Malgun Gothic","Noto Sans KR",sans-serif}.app-shell{min-height:100vh;display:grid;grid-template-columns:250px 1fr}.sidebar{position:sticky;top:0;height:100vh;padding:28px 18px;border-right:1px solid var(--line);background:rgba(8,10,13,.88);backdrop-filter:blur(24px);display:flex;flex-direction:column}.brand{display:flex;gap:12px;align-items:center;padding:0 8px 28px}.brand-mark{width:38px;height:38px;border-radius:11px;background:var(--accent);color:#0b0d0d;display:grid;place-items:center;font-weight:900}.brand strong{display:block;font-size:14px}.brand small{display:block;color:var(--muted);font-size:10px;margin-top:2px}nav{display:grid;gap:5px}.nav-item{border:0;background:transparent;color:#9aa5b4;padding:11px 12px;border-radius:11px;text-align:left;font:inherit;display:flex;gap:10px;cursor:pointer}.nav-item:hover,.nav-item.active{background:#171d22;color:#fff}.nav-item.active{box-shadow:inset 3px 0 var(--accent)}.sidebar-footer{margin-top:auto;padding:12px;color:var(--muted);font-size:11px}.live-dot{width:7px;height:7px;background:var(--green);border-radius:50%;display:inline-block;margin-right:6px;box-shadow:0 0 12px var(--green)}main{padding:34px 42px 60px;min-width:0}.topbar{display:flex;justify-content:space-between;gap:24px;align-items:flex-end;margin-bottom:30px}.eyebrow,.overline{font-size:10px;letter-spacing:.18em;color:var(--accent);font-weight:800;margin:0 0 7px}.topbar h1{font-size:31px;margin:0;letter-spacing:-.04em}.toolbar{display:flex;gap:9px}select,.button{background:var(--surface2);border:1px solid var(--line);color:#e9eef2;border-radius:10px;padding:10px 12px}.button{cursor:pointer}.button:hover{border-color:#596574}.kpi-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px;margin-bottom:15px}.kpi{background:linear-gradient(145deg,#141920,#0f1318);border:1px solid var(--line);border-radius:var(--radius);padding:19px}.kpi .label{color:var(--muted);font-size:11px}.kpi .value{font-size:30px;font-weight:800;margin-top:8px;letter-spacing:-.04em}.kpi .hint{font-size:10px;color:#66717f;margin-top:7px}.grid.two{display:grid;grid-template-columns:1.15fr .85fr;gap:15px;margin-bottom:15px}.panel{background:rgba(17,21,27,.88);border:1px solid var(--line);border-radius:var(--radius);padding:21px}.panel.full{min-height:500px}.panel-head{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:17px}.panel h2{font-size:16px;margin:0}.panel p{font-size:11px;color:var(--muted);margin:7px 0 0}.text-button{border:0;background:transparent;color:var(--accent);cursor:pointer}.bars{display:grid;gap:13px}.bar-row{display:grid;grid-template-columns:92px 1fr 38px;gap:9px;align-items:center;font-size:11px}.bar-track{height:7px;background:#202731;border-radius:99px;overflow:hidden}.bar-fill{height:100%;background:linear-gradient(90deg,var(--accent),var(--cyan));border-radius:99px}.table{width:100%;border-collapse:collapse}.table th{color:#66727f;font-size:9px;letter-spacing:.1em;text-align:left;padding:9px 7px;border-bottom:1px solid var(--line)}.table td{font-size:11px;padding:11px 7px;border-bottom:1px solid #1c222a;vertical-align:middle}.table tr:last-child td{border-bottom:0}.badge{display:inline-flex;align-items:center;padding:4px 8px;border-radius:99px;font-size:9px;font-weight:750;background:#222a33;color:#bdc7d2}.badge.good{color:var(--green);background:#163022}.badge.warn{color:var(--orange);background:#332817}.badge.bad{color:var(--red);background:#321b20}.badge.info{color:var(--cyan);background:#162a31}.queue{display:grid;gap:9px}.queue-item{display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:12px;align-items:center;padding:12px 0;border-bottom:1px solid #1d232b}.queue-item:last-child{border-bottom:0}.severity{width:7px;height:34px;border-radius:10px;background:#4a5360}.severity.HIGH{background:var(--red)}.severity.MEDIUM{background:var(--orange)}.severity.LOW{background:var(--cyan)}.severity.OK{background:var(--green)}.queue-title{font-size:12px;font-weight:700}.queue-sub{font-size:10px;color:var(--muted);margin-top:4px}.muted{color:var(--muted)}.mono{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px}.empty{padding:30px;text-align:center;color:var(--muted);font-size:12px}.pulse{display:grid;grid-template-columns:repeat(3,1fr);gap:9px}.pulse-card{border:1px solid var(--line);border-radius:13px;padding:14px;background:#10151a}.pulse-card strong{display:block;font-size:22px}.pulse-card span{font-size:9px;color:var(--muted)}.loading,.error{padding:34px;border:1px dashed var(--line);border-radius:14px;color:var(--muted)}.error{color:var(--red)}.hidden{display:none!important}.toast{position:fixed;right:24px;bottom:24px;background:#eafac0;color:#10130c;border-radius:12px;padding:13px 16px;font-size:12px;box-shadow:0 14px 50px #0008}.trend-headlines{margin:6px 0 0;padding-left:16px;list-style:disc}.trend-headlines li{font-size:10px;color:var(--muted);margin:2px 0;line-height:1.45}.asset-row{display:grid;grid-template-columns:64px minmax(0,1fr);gap:11px;align-items:start;padding:10px 0;border-bottom:1px solid #1d232b}.asset-row:last-child{border-bottom:0}.asset-row-title{font-size:12px;font-weight:700;margin-bottom:3px}.asset-thumb{width:64px;height:64px;object-fit:cover;border-radius:9px;background:#12171d;border:1px solid var(--line)}.asset-thumb-empty{display:grid;place-items:center;color:var(--muted);font-size:11px}.event-chip.is-published{border-left:3px solid var(--green)}.calendar-event-row.is-published{box-shadow:inset 2px 0 var(--green)}@media(max-width:1000px){.app-shell{grid-template-columns:76px 1fr}.brand div,.nav-item span,.sidebar-footer{display:none}.brand{padding-left:0}.nav-item{justify-content:center}.grid.two{grid-template-columns:1fr}.kpi-grid{grid-template-columns:repeat(2,1fr)}main{padding:28px 20px}}@media(max-width:650px){.app-shell{display:block}.sidebar{position:static;height:auto;flex-direction:row;align-items:center;padding:10px;overflow:auto}.brand{padding:0 10px 0 0}.brand div{display:none}nav{display:flex}.nav-item{white-space:nowrap}.topbar{align-items:flex-start;flex-direction:column}.kpi-grid{grid-template-columns:1fr 1fr}.toolbar{width:100%}select{flex:1}main{padding:20px 14px}.table{min-width:720px}.panel{overflow:auto}}

.mini-action{margin-top:7px;margin-right:5px;border:1px solid #39434f;background:#171d24;color:#dce3e9;border-radius:7px;padding:5px 8px;font-size:9px;cursor:pointer}.mini-action:hover{border-color:var(--accent);color:var(--accent)}

/* Actor-first scheduling */
.week-nav{display:flex;gap:7px}.schedule-scroll{overflow:auto;border:1px solid var(--line);border-radius:14px}.schedule-table{width:100%;min-width:1120px;border-collapse:separate;border-spacing:0}.schedule-table th{position:sticky;top:0;background:#12171d;z-index:2;color:#8d98a5;font-size:10px;padding:11px;border-bottom:1px solid var(--line);min-width:122px}.schedule-table td{border-right:1px solid #1c232b;border-bottom:1px solid #1c232b;padding:8px;vertical-align:top;height:98px}.schedule-table .sticky-col,.schedule-table .actor-col,.actor-name-cell{position:sticky;left:0;z-index:3;background:#11161c;min-width:190px;max-width:190px}.schedule-table .actor-name-cell,.schedule-table tbody .actor-col{z-index:1}.actor-link{border:0;background:transparent;color:#f5f7f8;font:inherit;font-weight:800;padding:0;cursor:pointer;text-align:left}.actor-link:hover{color:var(--accent)}.pressure{font-size:9px;color:#617080;margin-top:7px}.schedule-cell{background:#0e1318}.event-chip{padding:6px;border-radius:7px;background:var(--surface2);border:1px solid var(--line);font-size:10px;margin-top:4px;line-height:1.35}.event-chip strong{color:var(--accent);font-size:9px}.event-chip span{color:var(--muted)}.cell-state{font-size:8px;font-weight:900;letter-spacing:.08em;margin-bottom:6px;color:#76828f}.state-CONFLICT{background:#291519}.state-CONFLICT .cell-state,.state-UNAVAILABLE .cell-state{color:var(--red)}.state-SCHEDULED{background:#12241c}.state-SCHEDULED .cell-state,.state-AVAILABLE .cell-state,.state-PREFERRED .cell-state,.state-AVAILABLE_BY_BLACKOUT .cell-state{color:var(--green)}.state-HOLD,.state-TENTATIVE,.state-UNKNOWN{background:#201b12}.state-HOLD .cell-state,.state-TENTATIVE .cell-state,.state-UNKNOWN .cell-state{color:var(--orange)}.shoot-chip{padding:6px;border-radius:7px;background:#1d252d;font-size:9px;margin-top:4px;line-height:1.3}.shoot-chip strong{color:var(--accent);font-size:8px}.shoot-chip small{display:block;color:#7c8793;margin-top:2px}.conflict-count{margin-top:5px;color:var(--red);font-size:9px;font-weight:800}.schedule-bottom{margin-top:15px}.actor-checks{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;max-height:185px;overflow:auto}.actor-checks label{font-size:11px;color:#c8d0d8;padding:7px;background:#131920;border-radius:8px}.slot-controls{display:flex;gap:8px;margin-top:12px}.slot-results{display:grid;gap:7px;margin-top:10px}.slot-card{display:flex;justify-content:space-between;gap:10px;padding:9px 11px;border:1px solid var(--line);border-radius:9px;font-size:10px}.slot-card span{color:var(--accent)}.impact-head{display:flex;align-items:center;justify-content:space-between;gap:10px}.impact-stats{display:grid;grid-template-columns:repeat(3,1fr);gap:8px;margin:14px 0}.impact-stats div{background:#10161c;border:1px solid var(--line);padding:11px;border-radius:10px}.impact-stats b{display:block;font-size:20px}.impact-stats span{font-size:9px;color:var(--muted)}.impact-section{margin-top:13px}.scene-tag{display:inline-flex;padding:5px 7px;border:1px solid #303944;border-radius:8px;margin:3px;font-size:9px}.issue-line{font-size:10px;padding:6px 0;border-bottom:1px solid #1b2229}
.availability-chip{padding:5px 6px;border:1px solid #303941;border-radius:7px;font-size:8px;margin-top:4px}.availability-chip strong{color:var(--cyan);display:block}.availability-chip small{color:#7c8793}.state-PARTIAL_AVAILABLE,.state-PARTIAL_BLOCKED{background:#201b12}.state-PARTIAL_AVAILABLE .cell-state,.state-PARTIAL_BLOCKED .cell-state{color:var(--orange)}

/* Production planning */
.plan-grid{display:grid;gap:9px}.plan-card{display:grid;grid-template-columns:34px minmax(0,1fr) auto;gap:11px;align-items:start;padding:12px;border:1px solid var(--line);border-radius:12px;background:#10161c}.plan-code{width:30px;height:30px;border-radius:9px;background:var(--accent);color:#111;font-weight:900;display:grid;place-items:center}.plan-score{color:var(--accent)}.plan-metrics{font-size:9px;color:#7f8a96;margin:6px 0}.plan-warning{display:inline-flex;font-size:8px;color:var(--orange);border:1px solid #4a3822;border-radius:6px;padding:3px 5px;margin:2px 3px 2px 0}
.composer-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:12px}.composer-grid label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted)}.composer-grid input,.composer-grid select,.composer-grid textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;background:var(--surface2);color:inherit;padding:9px}.composer-grid .wide{grid-column:span 2}.composer-grid .full{grid-column:1/-1}.composer-actions{display:flex;gap:8px;flex-wrap:wrap;margin-top:12px}.composer-hint{margin-top:10px;padding:10px;border:1px solid var(--line);border-radius:8px;font-size:12px}.composer-assets{min-height:96px}@media(max-width:900px){.composer-grid{grid-template-columns:1fr 1fr}.composer-grid .wide{grid-column:span 2}}@media(max-width:620px){.composer-grid{grid-template-columns:1fr}.composer-grid .wide,.composer-grid .full{grid-column:span 1}}

/* Composer aspect guide */
.aspect-guide-box{width:64px;margin-top:8px;border:1px dashed var(--cyan);border-radius:6px;background:#10161c;display:grid;place-items:center;color:var(--cyan);font-size:9px;font-weight:800}

/* Operator credential panel (in-memory only) */
.operator-panel{position:fixed;inset:0;background:#000a;display:grid;place-items:center;z-index:60;backdrop-filter:blur(4px)}.operator-card{background:var(--surface);border:1px solid var(--line);border-radius:14px;padding:22px;width:min(380px,92vw);display:grid;gap:11px;box-shadow:0 24px 80px #000c}.operator-card strong{font-size:14px}.operator-card label{display:flex;flex-direction:column;gap:6px;font-size:12px;color:var(--muted)}.operator-card input,.operator-card select{border:1px solid var(--line);border-radius:8px;background:var(--surface2);color:inherit;padding:9px;font:inherit}

/* 로그인 화면 — 본문과 동일한 브랜드 토큰 계열을 사용한다. */
.login-screen{--nu-bg:#101010;--nu-surface:#171717;--nu-text:#fff;--nu-text-muted:#b8b8b8;--nu-brand-border:rgb(255 255 255/.14);--nu-accent:#f5ff6a;--nu-on-accent:#101010;--nu-error:#ff6b6b;position:fixed;inset:0;z-index:900;display:grid;place-items:center;padding:24px;background:var(--nu-bg);color:var(--nu-text)}
.login-card{width:min(92vw,400px);padding:32px;text-align:center;background:var(--nu-surface);border:1px solid var(--nu-brand-border);border-radius:16px;box-shadow:0 18px 60px rgb(0 0 0/.45)}
.login-logo{display:inline-flex;align-items:center;justify-content:center;padding:6px 12px;background:#fff;border-radius:10px}
.login-logo img{display:block;height:28px;width:auto}
.login-title{margin:16px 0 0;font-size:26px;font-weight:700;letter-spacing:-.02em;color:var(--nu-text)}
.login-subtitle{margin:8px 0 0;font-size:13px;color:var(--nu-text-muted)}
.login-button{width:100%;margin-top:24px;padding:14px;border:0;border-radius:12px;background:var(--nu-accent);color:var(--nu-on-accent);font-size:15px;font-weight:700;cursor:pointer;transition:opacity .14s ease}
.login-button:hover:not(:disabled){opacity:.88}
.login-button:disabled{opacity:.6;cursor:progress}
.login-button:focus-visible{outline:none;box-shadow:0 0 0 3px rgb(245 255 106/.42)}
.login-hint{margin:12px 0 0;font-size:12px;line-height:1.6;color:var(--nu-text-muted);word-break:keep-all}
.login-error{margin:12px 0 0;min-height:16px;font-size:12px;line-height:1.6;color:var(--nu-error);word-break:keep-all}

/* Calendar operations and authenticated media preview */
.calendar-toolbar{display:flex;flex-wrap:wrap;gap:9px;margin:0 0 10px;padding:10px 0;border-top:1px solid var(--line)}
.calendar-toolbar label{display:flex;align-items:center;gap:7px;color:var(--muted);font-size:10px}.calendar-toolbar select{padding:7px 9px;font-size:11px}
.calendar-legend{display:flex;flex-wrap:wrap;gap:13px;margin-bottom:12px;color:var(--muted);font-size:9px}.calendar-legend span:nth-child(1){color:var(--orange)}.calendar-legend span:nth-child(2){color:var(--cyan)}.calendar-legend span:nth-child(3),.calendar-legend span:nth-child(4){color:var(--green)}.calendar-legend span:nth-child(5){color:var(--red)}.calendar-legend span:nth-child(6){color:#b39cff}
.event-chip-button{display:grid;width:100%;gap:4px;text-align:left;color:var(--text);cursor:pointer;transition:border-color .2s ease,transform .2s ease,background .2s ease}.event-chip-button:hover{border-color:#596574;background:#1c232c;transform:translateY(-1px)}.event-chip-button:active{transform:translateY(0) scale(.99)}.event-chip-button:focus-visible,.detail-close:focus-visible{outline:2px solid var(--accent);outline-offset:2px}.event-chip-button>strong{color:var(--text);font-size:11px}.event-chip-button>span{display:block}.event-platform{color:var(--accent)!important;font-size:9px;font-weight:800;letter-spacing:.06em}.event-chip-button.status-BLOCKED{border-color:#66313a}.event-chip-button.status-PUBLISHED{border-color:#28563c}
.production-layer-event{display:grid;gap:3px;margin-top:4px;padding:7px;border:1px solid #54447a;border-left:3px solid #9d7bea;border-radius:7px;background:#1b1725;font-size:9px;line-height:1.35}.production-layer-event strong{color:#e5dcff;font-size:10px}.production-layer-event span{color:#9b91aa}.production-layer-event .event-platform{color:#bfa8ff!important}.event-chip-button.has-production-conflict{border-color:#9d4960;background:#25171c}.production-conflict-label{color:#ff8092!important;font-weight:800}
.calendar-agenda-view{display:grid;gap:12px}.agenda-mobile-only{display:none}.agenda-day{display:grid;gap:7px;padding:13px;background:#0e1318;border:1px solid var(--line);border-radius:12px}.agenda-day>header{display:flex;justify-content:space-between;color:var(--muted);font-size:10px}.agenda-day>header strong{color:var(--text);font-size:12px}.agenda-day .event-chip-button{max-width:680px}.agenda-empty{padding:12px 0;color:#5f6a76;font-size:10px}
.calendar-three-week{display:grid;gap:14px}.calendar-window-summary{display:flex;align-items:center;justify-content:space-between;gap:16px;padding:13px 15px;border:1px solid var(--line);border-radius:12px;background:var(--surface2);font-size:10px;color:var(--muted)}.calendar-window-summary>div{display:grid;gap:3px}.calendar-window-summary .overline{margin:0}.calendar-window-summary strong{color:var(--text);font-size:14px}.calendar-week-band{display:grid;gap:7px}.calendar-week-heading{display:flex;align-items:end;justify-content:space-between;gap:12px;padding:0 3px}.calendar-week-heading>div{display:flex;align-items:baseline;gap:9px}.calendar-week-heading span,.agenda-week-heading span{color:var(--accent);font-size:10px;font-weight:800}.calendar-week-heading strong,.agenda-week-heading strong{font-size:12px}.calendar-week-heading small{color:var(--muted);font-size:9px}.social-schedule-table{min-width:880px;table-layout:fixed}.social-schedule-table th{min-width:0}.social-schedule-table .actor-col{width:132px;min-width:132px;max-width:132px}.calendar-week-band .schedule-table td{height:72px;padding:6px}.calendar-agenda-view{grid-template-columns:repeat(3,minmax(0,1fr));align-items:start}.calendar-agenda-view>.calendar-window-summary{grid-column:1/-1}.agenda-week{display:grid;gap:8px}.agenda-week-heading{display:flex;align-items:baseline;justify-content:space-between;gap:10px;padding:3px}.agenda-day{min-width:0}.agenda-day .event-chip-button{max-width:none}
.calendar-source-list{display:grid;gap:8px;margin:8px 0}.calendar-source-card{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:12px;background:#0e1318;border:1px solid var(--line);border-radius:11px}.calendar-source-card strong{margin-right:7px}.calendar-source-card p{margin:5px 0 0;color:var(--muted);font-size:9px}.calendar-source-actions{display:flex;flex-wrap:wrap;justify-content:flex-end}.mini-action.danger{border-color:#63323a;color:var(--red)}.calendar-error{color:var(--red)!important}.empty.compact{padding:14px}
.detail-drawer{position:fixed;z-index:70;inset:0 0 0 auto;width:min(520px,100vw);padding:24px;overflow:auto;background:rgba(13,17,22,.98);border-left:1px solid var(--line);box-shadow:-24px 0 80px #0009;backdrop-filter:blur(18px)}.detail-head{display:flex;align-items:flex-start;justify-content:space-between;gap:18px}.detail-head h2{margin:5px 0;font-size:24px;letter-spacing:-.035em}.detail-head p{margin:0;color:var(--muted);font-size:11px}.detail-close{border:0;background:transparent;color:var(--text);font-size:30px;cursor:pointer}.detail-status{margin:18px 0}.detail-media{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.detail-section{margin-top:22px;padding-top:18px;border-top:1px solid var(--line)}.detail-section>strong{display:block}.detail-section>p{color:#b9c2cc;line-height:1.65;white-space:pre-wrap}.detail-loading{padding:40px;color:var(--muted)}
.detail-conflict{margin:0 0 16px;padding:12px;border:1px solid #663447;border-radius:10px;background:#21151a}.detail-conflict .production-layer-event{margin-top:8px}
.preview-result-head{display:flex;justify-content:space-between;gap:14px;align-items:flex-start}.preview-result-head strong{display:block;font-size:15px}.preview-result-head span{display:block;margin-top:5px;color:var(--muted);font-size:10px}.platform-preview-grid{display:flex;gap:12px;align-items:flex-start;overflow:auto;margin:14px 0;padding-bottom:5px}.platform-preview-media{position:relative;flex:0 0 min(240px,70vw);margin:0;overflow:hidden;background:#080a0d;border:1px solid #353e49;border-radius:13px}.platform-preview-media img,.platform-preview-media video{display:block;width:100%;height:100%;object-fit:contain;background:#050608}.platform-preview-media figcaption{position:absolute;inset:auto 6px 6px;padding:6px 8px;border-radius:7px;background:#080b0ee6;color:#d9e0e6;font-size:9px;backdrop-filter:blur(7px)}.preview-safe-zone{position:absolute;inset:7%;border:1px dashed rgb(215 255 88/.45);pointer-events:none}.preview-issues{display:grid;gap:6px;margin:12px 0;padding:0;list-style:none}.preview-issues li{display:flex;align-items:center;gap:7px;color:#c8d0d8;font-size:10px}.preview-disclaimer{color:var(--muted);font-size:9px;line-height:1.5}.calendar-connect-card small{color:#66717f;font-size:9px}.button.primary{background:var(--accent);color:#111;border-color:var(--accent);font-weight:750}

/* Character-first overview */
.character-filters{display:flex;gap:8px;align-items:center}.character-filters input,.character-filters select{min-width:170px;border:1px solid var(--line);border-radius:8px;background:var(--surface2);color:inherit;padding:9px;font:inherit}.character-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}.character-card{display:grid;gap:15px;padding:18px;border:1px solid var(--line);border-radius:14px;background:linear-gradient(145deg,#111820,#0e1318)}.character-hero{position:relative;height:230px;margin:-18px -18px 0;overflow:hidden;border-radius:14px 14px 0 0;background:#080b0e}.character-hero img{display:block;width:100%;height:100%;object-fit:cover;object-position:center top}.character-hero:after{content:"";position:absolute;inset:45% 0 0;background:linear-gradient(transparent,#080c11e8)}.character-hero figcaption{position:absolute;z-index:1;inset:auto 14px 12px;display:flex;align-items:flex-end;justify-content:space-between;gap:12px}.character-hero figcaption strong{font-size:11px}.character-hero figcaption span{color:#c3cbd3;font-size:9px}.character-card-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:start}.character-mark{width:42px;height:42px;border-radius:12px;display:grid;place-items:center;background:var(--accent);color:#111;font-size:17px;font-weight:900}.character-card h3{margin:1px 0 5px;font-size:17px;letter-spacing:-.025em}.character-id{color:var(--muted);font-size:9px}.character-badges{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px}.character-cast{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:11px 0;border-top:1px solid #202832;border-bottom:1px solid #202832}.character-cast strong{display:block;font-size:12px}.character-cast span{display:block;margin-top:3px;color:var(--muted);font-size:9px}.character-identity{padding:12px 0;border-top:1px solid #202832;border-bottom:1px solid #202832}.character-identity strong{font-size:12px;line-height:1.5}.character-identity p{margin:6px 0 0;font-size:10px;line-height:1.55;color:var(--muted)}.character-persona{display:flex;flex-wrap:wrap;gap:4px}.character-stats{display:grid;grid-template-columns:repeat(4,1fr);gap:6px}.character-stat{padding:9px 7px;border-radius:9px;background:#0b1015;text-align:center}.character-stat b{display:block;font-size:17px}.character-stat span{display:block;margin-top:2px;color:var(--muted);font-size:8px}.character-progress{height:6px;overflow:hidden;border-radius:99px;background:#222b35}.character-progress-fill{height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--accent),var(--cyan))}.character-progress-label{display:flex;justify-content:space-between;margin-bottom:6px;color:var(--muted);font-size:9px}.character-checks{display:flex;flex-wrap:wrap;gap:3px;margin-top:7px}.character-card .scene-tag.ready{border-color:#28563c;color:var(--green)}.character-card .scene-tag.pending{border-color:#554224;color:var(--orange)}.character-detail-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.character-detail{min-width:0}.character-detail .overline{display:block;margin-bottom:6px}.character-next{display:grid;gap:3px;color:#cdd5dc;font-size:10px}.character-next strong{font-size:11px}.character-next span{color:var(--muted)}.character-work-list{display:grid;gap:6px}.character-work-list>div{display:grid;gap:2px}.character-work-list strong{font-size:11px}.character-work-list span{color:var(--muted);font-size:9px}.character-card-actions{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-top:7px}.character-card .scene-tag{margin-left:0}.character-no-result{grid-column:1/-1}
@media(max-width:900px){.character-grid{grid-template-columns:1fr}}

@media(max-width:650px){.panel.full{min-height:auto}.panel-head{display:grid}.week-nav{width:100%;display:grid;grid-template-columns:repeat(3,1fr)}.week-nav .button{padding:9px 5px;font-size:10px}.calendar-toolbar{display:grid;grid-template-columns:1fr 1fr}.calendar-toolbar label{display:grid;gap:4px}.calendar-toolbar select{width:100%}.calendar-week-view{display:none}.calendar-agenda-view,.calendar-agenda-view.agenda-mobile-only{display:grid;grid-template-columns:1fr}.calendar-window-summary{align-items:flex-start;flex-direction:column;gap:6px}.agenda-week{gap:7px}.agenda-day{padding:11px}.detail-media{grid-template-columns:1fr}.detail-drawer{padding:18px}.detail-head h2{font-size:20px}.calendar-source-card{display:grid}.calendar-source-actions{justify-content:flex-start}.platform-preview-media{flex-basis:min(260px,80vw)}.character-filters{display:grid;grid-template-columns:1fr;width:100%}.character-filters input,.character-filters select{min-width:0;width:100%;box-sizing:border-box}.character-hero{height:210px}.character-hero figcaption{align-items:flex-start;flex-direction:column;gap:3px}.character-card-head{grid-template-columns:auto minmax(0,1fr)}.character-badges{grid-column:1/-1;justify-content:flex-start}.character-stats{grid-template-columns:1fr 1fr}.character-detail-grid{grid-template-columns:1fr}}

/* Text-only navigation: compact layouts keep readable Korean labels without icons. */
.nav-item{align-items:center;gap:0}
@media(max-width:1000px){.app-shell{grid-template-columns:92px 1fr}.nav-item{font-size:10px;font-weight:750;letter-spacing:-.02em}.nav-item::after{content:attr(data-short-label)}}
@media(max-width:650px){.nav-item{padding:10px 12px;font-size:11px}.nav-item::after{white-space:nowrap}}

/* White interface theme */
:root{
  --bg:#f4f6f2;
  --surface:#fff;
  --surface2:#f7f9f6;
  /* A panel that sits below the page rather than above it. */
  --surface-sunken:#eef2ed;
  --line:#dfe5de;
  --text:#18221b;
  --muted:#68736b;
  --accent:#2f684d;
  --accent-soft:#e8f1eb;
  --cyan:#356f78;
  --red:#b44f59;
  --orange:#9b6728;
  --green:#2f7651;
  --radius:18px;
  --shadow:0 12px 34px rgb(39 67 50/.07);
}
.management-opportunity.is-lifestyle{border-left-color:#7466a8;background:#f8f6fc}
html{color-scheme:light;scroll-behavior:smooth;background:var(--bg)}
body{background:radial-gradient(circle at 78% -8%,#e1eee5 0,transparent 30%),radial-gradient(circle at 12% 34%,#fbfcf9 0,transparent 28%),var(--bg);color:var(--text);font-family:"Pretendard Variable",Pretendard,"Noto Sans KR","Apple SD Gothic Neo","Malgun Gothic",system-ui,sans-serif;text-rendering:optimizeLegibility}
::selection{background:#cfe2d5;color:#173426}
.app-shell{min-height:100dvh}
.sidebar{border-color:var(--line);background:rgb(255 255 255/.9);box-shadow:8px 0 30px rgb(39 67 50/.035)}
.brand-mark{background:#234f3a;color:#fff;box-shadow:0 8px 20px rgb(35 79 58/.2)}
.brand strong{color:#17231b}.brand small,.sidebar-footer{color:var(--muted)}
.nav-item{color:#5f6b62;transition:background-color .2s ease,color .2s ease,transform .2s ease,box-shadow .2s ease}
.nav-item:hover{background:#f0f5f1;color:#234f3a;transform:translateX(1px)}
.nav-item.active{background:var(--accent-soft);color:#214c37;box-shadow:inset 3px 0 var(--accent)}
.nav-item:active{transform:translateY(1px)}
.live-dot{background:var(--green);box-shadow:0 0 0 4px rgb(47 118 81/.11)}
main{width:100%;max-width:1600px;margin:0 auto}
.topbar h1{color:#142019;text-wrap:balance}.eyebrow,.overline,.text-button{color:var(--accent)}
.kpi .value,.pulse-card strong,.impact-stats b,.character-stat b{font-variant-numeric:tabular-nums}
select,.button,.composer-grid input,.composer-grid select,.composer-grid textarea,.operator-card input,.operator-card select,.character-filters input,.character-filters select{border-color:var(--line);background:#fff;color:var(--text);box-shadow:0 1px 0 rgb(24 34 27/.02);transition:border-color .2s ease,box-shadow .2s ease,background-color .2s ease,transform .2s ease}
select:hover,.button:hover,.mini-action:hover,input:hover,textarea:hover{border-color:#b8c7bc}
.button:hover,.mini-action:hover{background:#f4f8f5;transform:translateY(-1px)}
.button:active,.mini-action:active,.login-button:active{transform:translateY(1px) scale(.99)}
button:focus-visible,select:focus-visible,input:focus-visible,textarea:focus-visible,summary:focus-visible{outline:3px solid rgb(47 104 77/.22);outline-offset:2px}
.button.primary{background:var(--accent);border-color:var(--accent);color:#fff;box-shadow:0 7px 18px rgb(47 104 77/.16)}
.button.primary:hover{background:#285d44;border-color:#285d44}
.kpi{background:#fff;border-color:var(--line);box-shadow:var(--shadow)}
.kpi .hint,.table th{color:#748078}
.panel{background:rgb(255 255 255/.96);border-color:var(--line);box-shadow:var(--shadow)}
.panel p,.muted,.queue-sub,.empty,.pulse-card span{color:var(--muted)}
.bar-track,.character-progress{background:#e8ede8}.bar-fill,.character-progress-fill{background:var(--accent)}
.table th{background:#fafbf9}.table td{border-bottom-color:#e9ede8}
.badge{background:#edf1ed;color:#566259;border:1px solid #e2e7e2}
.badge.good{background:#e8f4ec;color:#286b49;border-color:#d6eadd}
.badge.warn{background:#fbf1df;color:#8a5a20;border-color:#f0dfbf}
.badge.bad{background:#fbeaec;color:#a6444e;border-color:#f2d7da}
.badge.info{background:#e8f1f2;color:#32666e;border-color:#d5e5e7}
.queue-item,.asset-row{border-bottom-color:#e8ece7}.severity{background:#aeb8b0}.asset-thumb{background:#eef1ee}
.pulse-card,.impact-stats div{background:#f8faf7;border-color:#e3e8e2}
.loading,.error{background:#fafbf9}.toast{background:#234f3a;color:#fff;box-shadow:0 16px 44px rgb(35 79 58/.24)}
.mini-action{border-color:#d6ddd7;background:#fff;color:#435047}
.mini-action:hover{border-color:#94ad9b;color:#234f3a}
.mini-action.danger{border-color:#e8c9cd;color:var(--red);background:#fff8f8}
.schedule-scroll{background:#fff;border-color:var(--line);box-shadow:inset 0 1px 0 #fff}
.schedule-table th{background:#f5f8f5;color:#68746b;border-bottom-color:var(--line)}
.schedule-table td{border-right-color:#e7ece7;border-bottom-color:#e7ece7}
.schedule-table .sticky-col,.schedule-table .actor-col,.actor-name-cell{background:#fbfcfa}
.actor-link{color:#1c2a20}.actor-link:hover,.event-chip strong,.shoot-chip strong,.slot-card span,.plan-score{color:var(--accent)}
.pressure,.shoot-chip small,.availability-chip small,.plan-metrics{color:#738077}
.schedule-cell{background:#fff}
.event-chip{background:#f7f9f7;border-color:#dde4de;box-shadow:0 2px 7px rgb(40 68 51/.035)}
.event-chip:hover{background:#f1f6f2;border-color:#b5c8ba}
.cell-state{color:#748078}
.state-CONFLICT{background:#fff2f3}.state-SCHEDULED{background:#edf7f0}.state-HOLD,.state-TENTATIVE,.state-UNKNOWN,.state-PARTIAL_AVAILABLE,.state-PARTIAL_BLOCKED{background:#fff7e9}
.shoot-chip{background:#eef3ef}.actor-checks label{background:#f5f8f5;color:#435047}
.slot-card,.scene-tag,.availability-chip{border-color:#dce3dd;background:#fff}
.issue-line{border-bottom-color:#e7ece7}
.availability-chip strong{color:var(--accent)}
.plan-card{background:#f8faf7;border-color:var(--line)}
.plan-code,.character-mark{background:var(--accent);color:#fff}
.plan-warning{background:#fff7e9;border-color:#e5cda8;color:#8f5f24}
.composer-hint{background:#f8faf7;border-color:var(--line);color:#4f5b52}
.aspect-guide-box{background:#f4f8f5;border-color:var(--accent);color:var(--accent)}
.operator-panel{background:rgb(25 36 29/.28)}
.operator-card{background:#fff;border-color:#dbe2dc;box-shadow:0 28px 80px rgb(34 58 43/.2)}
.tiktok-reconfirmation-card{width:min(620px,92vw);max-height:min(86vh,760px);overflow-y:auto;overscroll-behavior:contain}
.tiktok-reconfirmation-card .checksum-value{overflow-wrap:anywhere;font-family:ui-monospace,SFMono-Regular,Consolas,monospace;font-size:10px}
.login-screen{--nu-bg:#f4f6f2;--nu-surface:#fff;--nu-text:#17221a;--nu-text-muted:#69736b;--nu-brand-border:#dfe5de;--nu-accent:#234f3a;--nu-on-accent:#fff;--nu-error:#b44f59;background:radial-gradient(circle at 50% 0,#e0ece3 0,transparent 34%),var(--nu-bg)}
.login-card{background:var(--nu-surface);border-color:var(--nu-brand-border);box-shadow:0 24px 70px rgb(39 67 50/.14)}
.login-logo{border:1px solid #e4e9e4;box-shadow:0 4px 14px rgb(39 67 50/.06)}
.login-button{box-shadow:0 10px 24px rgb(35 79 58/.2);transition:background-color .2s ease,transform .2s ease,box-shadow .2s ease}
.login-button:hover:not(:disabled){background:#1c432f;opacity:1;transform:translateY(-1px)}
.login-button:focus-visible{outline:none;box-shadow:0 0 0 4px rgb(47 104 77/.2)}
.calendar-toolbar{border-top-color:var(--line)}
.calendar-legend span:nth-child(6){color:#6d5c9b}
.event-chip-button:hover{border-color:#aebfb2;background:#f1f6f2}
.event-chip-button:focus-visible,.detail-close:focus-visible{outline-color:var(--accent)}
.event-platform{color:var(--accent)!important}
.event-chip-button.status-BLOCKED{border-color:#e0aeb4;background:#fff6f7}
.event-chip-button.status-PUBLISHED{border-color:#a8cfb6;background:#f1faf4}
.production-layer-event{border-color:#d8cfea;border-left-color:#806db3;background:#f6f2fb}
.production-layer-event strong{color:#59477e}.production-layer-event span{color:#766b83}.production-layer-event .event-platform{color:#6d5c9b!important}
.event-chip-button.has-production-conflict{border-color:#dfaab2;background:#fff5f6}.production-conflict-label{color:#a54350!important}
.agenda-day,.calendar-source-card{background:#f8faf7;border-color:var(--line)}
.agenda-empty{color:#7a857d}
.detail-drawer{background:rgb(255 255 255/.98);border-left-color:var(--line);box-shadow:-24px 0 70px rgb(33 56 42/.16)}
.detail-section>p{color:#465249}.detail-conflict{border-color:#e6bbc1;background:#fff5f6}
.platform-preview-media{background:#eef2ee;border-color:#d6ddd7;box-shadow:0 8px 22px rgb(39 67 50/.08)}
.platform-preview-media img,.platform-preview-media video{background:#edf1ed}
.platform-preview-media figcaption{background:rgb(255 255 255/.88);color:#27342b;border:1px solid rgb(217 225 218/.9);box-shadow:0 3px 12px rgb(39 67 50/.09)}
.preview-safe-zone{border-color:rgb(47 104 77/.45)}
.event-chip.is-functional-review{border-style:dashed;background:#f8f5ec}.functional-review-label{color:#8a5a13;font-weight:750}
.preview-issues li{color:#455148}.calendar-connect-card small{color:#748078}
.character-card{background:#fff;border-color:var(--line);box-shadow:0 10px 28px rgb(39 67 50/.06)}
.character-hero{background:#edf1ed}
.character-hero figcaption strong{color:#fff}.character-hero figcaption span{color:#e5ebe7}
.character-cast,.character-identity{border-color:#e5eae5}
.character-stat{background:#f4f7f4}.character-next{color:#435047}
.character-card .scene-tag.ready{background:#f0f8f3;border-color:#b9dac5;color:#286b49}
.character-card .scene-tag.pending{background:#fff8eb;border-color:#e8d1ad;color:#8f5f24}
@media(max-width:650px){.sidebar{background:rgb(255 255 255/.96);border-bottom:1px solid var(--line);box-shadow:0 8px 24px rgb(39 67 50/.05)}.nav-item:hover{transform:none}.panel{box-shadow:0 8px 22px rgb(39 67 50/.055)}}

/* Platform composer and real-asset expected preview */
.composer-workspace{display:grid;grid-template-columns:minmax(0,1.18fr) minmax(320px,.82fr);gap:24px;align-items:start}
.composer-editor{min-width:0}
.composer-preview-column{min-width:0}
.composer-shared-source,.composer-mode-section{min-width:0;border:1px solid var(--line);border-radius:14px;background:#fff}
.composer-shared-source{padding:16px;margin-bottom:14px;background:#fbfcfa}
.composer-section-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:18px;margin-bottom:14px}
.composer-section-heading>div{min-width:0}
.composer-section-heading h3{margin:3px 0 0;color:var(--text);font-size:15px;letter-spacing:-.02em}
.composer-section-heading p{max-width:330px;margin:0;color:var(--muted);font-size:10px;line-height:1.55;text-align:right}
.composer-section-kicker{display:block;color:var(--accent);font-size:9px;font-weight:800;letter-spacing:.12em}
.composer-actor-field{display:grid;gap:6px;margin-bottom:14px;color:var(--muted);font-size:11px;font-weight:700}
.composer-actor-field select{width:100%;min-width:0;background:#fff;color:var(--text)}
.composer-shared-source .composer-media-field{margin-bottom:0}
.composer-mode-picker{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px;margin:0 0 14px}
.composer-mode-choice{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:11px;min-width:0;padding:14px;border:1px solid var(--line);border-radius:12px;background:#f7f9f6;color:var(--text);font:inherit;text-align:left;cursor:pointer;transition:border-color .16s ease,background-color .16s ease,box-shadow .16s ease,transform .16s ease}
.composer-mode-choice:hover{border-color:#a8b9ad;background:#fff;transform:translateY(-1px)}
.composer-mode-choice.is-active{border-color:#6f9d80;background:#edf6f0;box-shadow:inset 0 0 0 1px rgb(47 104 77/.12),0 8px 18px rgb(39 67 50/.07)}
.composer-mode-choice strong,.composer-mode-choice small{display:block;overflow-wrap:anywhere}
.composer-mode-choice strong{font-size:12px}
.composer-mode-choice small{margin-top:4px;color:var(--muted);font-size:9px;line-height:1.5}
.composer-mode-number{display:grid;place-items:center;width:25px;height:25px;border-radius:7px;background:#e5ebe6;color:#536158;font-size:8px;font-weight:850}
.composer-mode-choice.is-active .composer-mode-number{background:var(--accent);color:#fff}
.composer-mode-section{padding:17px}
.composer-mode-section-multi{border-top:3px solid #6b987c}
.composer-mode-section-single{border-top:3px solid #83918a}
.composer-preview-sticky{position:sticky;top:20px;padding:16px;border:1px solid var(--line);border-radius:14px;background:#f7f9f6}
.composer-preview-heading{display:flex;align-items:flex-start;justify-content:space-between;gap:16px;margin-bottom:12px}
.composer-preview-heading strong{font-size:13px;color:var(--text)}
.composer-preview-heading span{max-width:180px;color:var(--muted);font-size:9px;line-height:1.45;text-align:right}
.composer-target-grid,.composer-copy-grid,.composer-platform-controls,.composer-packaging-controls{margin-bottom:16px}
.composer-copy-grid{padding-top:16px;border-top:1px solid var(--line)}
.composer-platform-controls{padding:16px;border:1px solid var(--line);border-radius:12px;background:#fbfcfa}
.composer-platform-controls.is-tiktok-consent-fold{padding:0;border:0;background:transparent}
.composer-tiktok-consent-fold>summary{display:flex;align-items:center;justify-content:space-between;gap:12px;cursor:pointer;list-style:none;padding:10px 12px;border:1px solid var(--line);border-radius:12px;background:#fbfcfa}
.composer-tiktok-consent-fold>summary::-webkit-details-marker{display:none}
.composer-tiktok-consent-fold>summary::before{content:"▸ ";color:var(--muted);font-size:10px}
.composer-tiktok-consent-fold[open]>summary::before{content:"▾ "}
.composer-tiktok-consent-summary-copy{display:grid;gap:2px;min-width:0}
.composer-tiktok-consent-summary-copy strong{font-size:12px}
.composer-tiktok-consent-summary-copy span{color:var(--muted);font-size:9px}
.composer-tiktok-consent-fold[open]>summary{margin-bottom:8px}
.composer-tiktok-consent-body{display:grid;gap:12px;padding:16px;border:1px solid var(--line);border-radius:12px;background:#fbfcfa}
.composer-tiktok-consent-body .creator-account{padding-top:0}
.composer-media-field{display:grid;gap:7px;margin-bottom:16px}
.composer-media-field>label{color:var(--text);font-size:12px;font-weight:750}
.composer-media-field>small,.composer-grid label small{color:var(--muted);font-size:9px;line-height:1.45}
.composer-media-field input,.composer-media-field select{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);padding:9px;font:inherit}
.composer-notice{align-self:end;min-height:38px;box-sizing:border-box;padding:9px 11px;border-left:3px solid #a9bcae;background:#f3f7f4;color:#536158;font-size:10px;line-height:1.55}
.composer-grid .is-disabled{opacity:.55}
.nested-grid{grid-column:1/-1;padding:12px;border:1px solid #e4e9e4;border-radius:10px;background:#fff}
.creator-account{display:grid;grid-template-columns:auto minmax(0,1fr) auto;align-items:center;gap:10px;padding:10px 0 14px;border-bottom:1px solid var(--line)}
.creator-avatar,.expected-avatar{display:grid;place-items:center;overflow:hidden;width:36px;height:36px;border-radius:50%;background:#e4ebe5;color:#2a5d43;font-size:13px;font-weight:800}
.creator-avatar img{width:100%;height:100%;object-fit:cover}
.creator-account strong,.creator-account span{display:block}
.creator-account>div:nth-child(2) span{margin-top:3px;color:var(--muted);font-size:9px}
.composer-order-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:7px 0;border-bottom:1px solid #e6ebe6}
.composer-order-row:last-child{border-bottom:0}
.composer-order-row strong{overflow:hidden;font-size:10px;text-overflow:ellipsis;white-space:nowrap}
.composer-order-row>span{display:flex;gap:5px;flex:0 0 auto}
.composer-order-row .mini-action{padding:4px 7px;font-size:9px}
.composer-order-row button:disabled{opacity:.35;cursor:not-allowed;transform:none}
.composer-advanced{margin:12px 0;border:1px solid var(--line);border-radius:10px;background:#fbfcfa}
.composer-advanced summary{padding:11px 13px;color:#465249;font-size:11px;font-weight:750;cursor:pointer}
.composer-advanced>label{display:grid;gap:7px;padding:0 13px 13px;color:var(--muted);font-size:10px}
.composer-advanced textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);padding:9px;font:inherit}
.expected-post{overflow:hidden;border:1px solid #dbe2dc;border-radius:12px;background:#fff;box-shadow:0 10px 28px rgb(39 67 50/.08)}
.expected-post>header{display:flex;align-items:center;gap:9px;padding:11px 12px}
.expected-post>header strong,.expected-post>header small{display:block}
.expected-post>header strong{font-size:11px}
.expected-post>header small{margin-top:2px;color:var(--muted);font-size:8px}
.expected-media{position:relative;overflow:hidden;background:#e9eeea}
.expected-media img,.expected-media video{display:block;width:100%;height:100%;object-fit:cover;background:#e9eeea}
.expected-media-empty{display:grid;place-items:center;min-height:250px;padding:20px;background:#edf1ed;color:#7a867d;font-size:10px;text-align:center}
.expected-copy{display:grid;gap:8px;padding:12px}
.expected-copy p,.expected-copy h3{margin:0;color:#263229;line-height:1.55;white-space:pre-wrap;word-break:break-word}
.expected-copy p{font-size:10px}
.expected-copy h3{font-size:14px;line-height:1.4}
.expected-copy>small{color:var(--muted);font-size:8px}
.expected-count{display:block;padding:7px 12px 0;color:var(--muted);font-size:8px;text-align:right}
.expected-carousel{position:relative}
.expected-carousel .expected-media{margin:0}
.expected-carousel-nav{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:8px 12px 4px}
.expected-carousel-arrow{display:grid;place-items:center;width:28px;height:28px;border:1px solid #d5ddd6;border-radius:50%;background:#fff;color:#2f3d34;font-size:16px;line-height:1;cursor:pointer}
.expected-carousel-arrow:disabled{opacity:.35;cursor:not-allowed}
.expected-carousel-counter{flex:1;color:var(--muted);font-size:9px;font-weight:700;text-align:center}
.expected-carousel-dots{display:flex;justify-content:center;gap:5px;padding:0 12px 10px}
.expected-carousel-dot{width:6px;height:6px;border-radius:50%;background:#c8d2ca}
.expected-carousel-dot.is-active{background:#2f6b4a;transform:scale(1.15)}
.expected-disclosures{display:flex;flex-wrap:wrap;gap:5px}
.expected-disclosures span{padding:4px 6px;border:1px solid #dce4dd;border-radius:5px;background:#f5f8f5;color:#4e5c52;font-size:8px;font-weight:700}
.expected-tiktok{max-width:330px;margin:0 auto}
.expected-tiktok .expected-media{aspect-ratio:9/16!important}
.expected-tiktok .expected-copy>strong{font-size:11px}
.expected-description{display:-webkit-box;overflow:hidden;color:#68736b!important;-webkit-box-orient:vertical;-webkit-line-clamp:3}
.expected-unsent{padding:7px 8px;border:1px dashed #c9b48a;border-radius:6px;background:#fdf8ee;color:#7a6437!important;font-size:9px!important}
.expected-keywords{color:var(--muted);font-size:8px;line-height:1.5;word-break:break-word}
.expected-channel{display:flex;align-items:center;gap:9px}
.expected-channel strong,.expected-channel small{display:block}
.expected-channel strong{font-size:10px}.expected-channel small{margin-top:2px;color:var(--muted);font-size:8px}
.expected-youtube .expected-avatar{width:30px;height:30px;font-size:11px}
@media(max-width:1100px){.composer-workspace{grid-template-columns:1fr}.composer-preview-sticky{position:static}.expected-post{max-width:520px;margin:0 auto}.expected-tiktok{max-width:300px}.desk-studio-3pane{grid-template-columns:1fr}.desk-studio-composer-host .desk-studio-grid{display:grid;grid-template-columns:1fr}}
.desk-studio-3pane{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(0,1.35fr) minmax(260px,.78fr);gap:16px;align-items:start}
.desk-studio-trend-pane{min-width:0;padding:14px;border:1px solid var(--line);border-radius:14px;background:#fbfcfa}
.desk-studio-composer-host{min-width:0}
.desk-studio-composer-host .desk-studio-grid{display:contents}
.desk-studio-composer-host .composer-editor{grid-column:2;min-width:0}
.desk-studio-composer-host .composer-preview-column{grid-column:3;min-width:0}
.desk-studio-trend-item{padding:10px 0;border-bottom:1px solid var(--line)}
.desk-studio-trend-item:last-child{border-bottom:0}
.marketing-desk-row.is-openable{cursor:pointer;transition:background .12s ease}
.marketing-desk-row.is-openable:hover td,.marketing-desk-row.is-openable:focus-visible td{background:rgb(47 104 77/.06)}
.marketing-desk-row.is-openable:focus-visible{outline:2px solid rgb(47 104 77/.35);outline-offset:-2px}
.marketing-desk-table .desk-open{display:inline-flex;align-items:center;gap:8px;border:0;background:transparent;color:inherit;font:inherit;padding:0;cursor:pointer;text-align:left}
.marketing-desk-table .desk-open:hover strong,.marketing-desk-table .desk-open:focus-visible strong{color:var(--accent)}
.marketing-desk-table .desk-open-chevron{color:var(--muted);font-size:11px;transition:transform .12s ease,color .12s ease}
.marketing-desk-row.is-openable:hover .desk-open-chevron,.marketing-desk-row.is-openable:focus-visible .desk-open-chevron{color:var(--accent);transform:translateX(2px)}
.desk-row-actions{margin-top:8px}
.marketing-desk-blocker-panel{margin-bottom:16px}
.nav-section-label{margin:14px 8px 6px;font-size:9px;font-weight:800;letter-spacing:.14em;text-transform:uppercase;color:var(--muted)}
.nav-section-label:first-child{margin-top:0}
.sidebar nav{flex:1 1 auto;min-height:0;overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin}
/* 허용 목록 밖 Google/proxy 계정은 SNS·캐릭터 두 갈래만 본다. nav에 flex-grow를
   주면 항목은 두 개인데 열 전체 높이를 비워 두는 빈 사이드바가 된다. */
.app-shell.is-limited-operator-nav{
  grid-template-columns:max-content minmax(0,1fr);
  align-items:start;
}
.sidebar.is-limited-operator-nav{
  width:max-content;
  min-width:128px;
  max-width:168px;
  height:auto;
  min-height:0;
  max-height:100dvh;
  align-self:start;
  padding:14px 10px 12px;
}
.sidebar.is-limited-operator-nav .brand{
  gap:8px;
  padding:0 4px 10px;
}
.sidebar.is-limited-operator-nav .brand-mark{
  width:32px;
  height:32px;
  font-size:12px;
}
.sidebar.is-limited-operator-nav .brand strong{
  font-size:12px;
  line-height:1.25;
}
.sidebar.is-limited-operator-nav .brand small{display:none}
.sidebar.is-limited-operator-nav nav{
  flex:0 0 auto;
  overflow:visible;
  align-content:start;
  width:100%;
}
.sidebar.is-limited-operator-nav .sidebar-footer{
  margin-top:10px;
  padding:8px 4px 0;
  border-top:1px solid var(--line);
  font-size:10px;
  line-height:1.35;
}
.sidebar.is-limited-operator-nav .nav-section-label{display:none}
.sidebar.is-limited-operator-nav .nav-item{
  padding:8px 9px;
  font-size:12px;
}
.sidebar.is-limited-operator-nav .nav-disclosure{
  width:28px;
  min-width:28px;
  padding:6px 0;
}
.sidebar.is-limited-operator-nav .nav-sublist{
  margin-top:2px;
  padding-left:8px;
}
.sidebar.is-limited-operator-nav .nav-subitem{
  padding:6px 8px;
  font-size:11px;
}
.work-context-badge{margin:6px 0 0;font-size:12px;color:var(--muted)}
.work-context-badge:not(.hidden):before{content:"작품 · ";color:var(--accent);font-weight:700}
.mobile-actor-picker{display:none;min-width:0}
.mobile-actor-picker select{max-width:132px}
@media(max-width:1000px){.nav-section-label{display:none}.mobile-actor-picker{display:block}.app-shell.is-limited-operator-nav{grid-template-columns:76px minmax(0,1fr)}}
@media(max-width:650px){.composer-workspace{gap:16px}.composer-preview-sticky{padding:12px}.composer-preview-heading{display:grid}.composer-preview-heading span{max-width:none;text-align:left}.composer-target-grid,.composer-copy-grid,.composer-platform-controls,.composer-packaging-controls,.nested-grid{grid-template-columns:1fr}.composer-target-grid .wide,.composer-copy-grid .wide,.composer-platform-controls .wide,.composer-packaging-controls .wide,.nested-grid .wide{grid-column:span 1}.creator-account{grid-template-columns:auto minmax(0,1fr)}.creator-account>.badge{grid-column:1/-1;justify-self:start}.composer-order-row{align-items:flex-start}.composer-order-row strong{white-space:normal}.expected-media-empty{min-height:210px}}

/* Operations-readiness and accessibility layer */
[hidden]{display:none!important}
.sr-only{position:absolute!important;width:1px!important;height:1px!important;padding:0!important;margin:-1px!important;overflow:hidden!important;clip:rect(0,0,0,0)!important;white-space:nowrap!important;border:0!important}
.skip-link{position:fixed;z-index:100;top:10px;left:10px;padding:10px 14px;border-radius:8px;background:#173426;color:#fff;font-size:13px;font-weight:800;text-decoration:none;transform:translateY(-160%);transition:transform .18s ease}
.skip-link:focus{transform:translateY(0)}
main:focus{outline:none}
a:focus-visible,.actor-link:focus-visible,.text-button:focus-visible,.login-legal-links a:focus-visible{outline:3px solid rgb(47 104 77/.22);outline-offset:3px;border-radius:4px}
.login-legal-links{display:flex;flex-wrap:wrap;justify-content:center;gap:7px 12px;margin-top:12px;font-size:10px}
.login-legal-links a{color:#536158;text-underline-offset:3px}
.degraded-panel{display:grid;grid-template-columns:minmax(0,1fr) auto;align-items:center;gap:14px;padding:14px 16px;border:1px solid #e6c5a2;border-left:4px solid var(--orange);border-radius:10px;background:#fff9ef;color:#704a1e}
.degraded-panel>div{min-width:0}.degraded-panel strong,.degraded-panel p,.degraded-panel small{display:block}.degraded-panel p{margin:4px 0;color:#765b3d}.degraded-panel small{overflow-wrap:anywhere;color:#8b6c4b}
.degraded-panel.compact{grid-template-columns:1fr;margin-top:14px}
.kpi-grid>.degraded-panel{grid-column:1/-1}
.permission-note{display:block;padding:10px 12px;border-radius:8px;background:#f0f3f0;color:var(--muted);font-size:10px}
.table-scroll{max-width:100%;overflow:auto}.table-scroll:focus-visible{outline:3px solid rgb(47 104 77/.18);outline-offset:3px;border-radius:8px}
.agenda-days-full{display:grid;gap:7px}.agenda-days-compact{display:none}
.character-account-list{display:grid;gap:7px}
.character-account-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;align-items:center;gap:8px;padding:9px 10px;border:1px solid #e1e7e1;border-radius:9px;background:#f8faf7}
.character-account-row>div:first-child{min-width:0}.character-account-row strong,.character-account-row span{display:block}.character-account-row strong{font-size:11px}.character-account-row>div:first-child span{margin-top:2px;overflow:hidden;color:var(--muted);font-size:9px;text-overflow:ellipsis;white-space:nowrap}
.character-account-row .account-health{display:flex;flex-wrap:wrap;align-items:center;gap:5px;margin-top:6px}.character-account-row>div:first-child .account-health span{display:inline-flex;margin:0;overflow:visible;white-space:normal;text-overflow:clip}.character-account-row .account-health .queue-sub{flex:1 1 180px;line-height:1.45}.character-account-row .account-health details{flex-basis:100%;font-size:9px;color:var(--muted)}.character-account-row .account-health summary{cursor:pointer}
.content-intelligence-toolbar{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:12px}.content-intelligence-toolbar .composer-hint{flex:1;margin:0}.content-intelligence-toolbar>.button{flex:none}
.character-account-actions{display:flex;align-items:center;gap:5px}.character-account-actions .mini-action{white-space:nowrap}
.account-degraded{display:grid;gap:3px;padding:10px;border-radius:8px;background:#fff7ea;color:#775024}.account-degraded strong{font-size:10px}.account-degraded span{font-size:9px}
.mini-action.primary-soft{border-color:#a9c3b0;background:#edf5ef;color:#24573d}
.button.danger{border-color:#dfb7bc;background:#fff7f8;color:var(--red)}
.approval-drawer{width:min(620px,92vw)}
.approval-warning{display:grid;gap:4px;margin:16px 0;padding:14px 16px;border-left:4px solid var(--orange);border-radius:8px;background:#fff7e9;color:#6f4a1d}
.approval-warning strong{font-size:12px}.approval-warning span{font-size:10px}
/* A completed publish is not a warning. The chip already uses --green for
   this state; the panel it opens should not contradict it in orange. */
.approval-warning.is-published{border-left-color:var(--green);background:#eef8f0;color:#1f5130}
.approval-summary{display:grid;grid-template-columns:1fr 1fr;gap:1px;margin:0 0 16px;overflow:hidden;border:1px solid var(--line);border-radius:10px;background:var(--line)}
.approval-summary>div{min-width:0;padding:11px 12px;background:#fff}.approval-summary dt{color:var(--muted);font-size:9px;font-weight:700}.approval-summary dd{margin:4px 0 0;color:var(--text);font-size:11px;font-weight:700;overflow-wrap:anywhere}
.approval-checklist{display:grid;gap:10px;margin:16px 0;padding:15px;border:1px solid var(--line);border-radius:10px;background:#f8faf7}.approval-checklist legend{padding:0 6px;color:var(--text);font-size:11px;font-weight:800}.approval-checklist label{display:flex;align-items:flex-start;gap:8px;color:#3f4d43;font-size:10px;line-height:1.45}.approval-checklist input{margin-top:2px;accent-color:var(--accent)}
.approval-comment{display:grid;gap:7px;color:var(--text);font-size:11px;font-weight:750}.approval-comment textarea{box-sizing:border-box;width:100%;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);padding:10px;font:inherit;font-weight:400;resize:vertical}
.approval-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:16px}.approval-actions .button{min-height:38px}
.detail-loading{padding:28px;color:var(--muted)}

@media(max-width:650px){
  .agenda-days-full{display:none}.agenda-days-compact{display:grid;gap:7px}
  .agenda-empty-range{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 11px;border:1px dashed #ccd6cd;border-radius:9px;background:#fafbf9;color:#68756b}
  .agenda-empty-range strong{font-size:10px}.agenda-empty-range span{font-size:9px}
  .character-account-row{grid-template-columns:minmax(0,1fr) auto}.character-account-actions{grid-column:1/-1;justify-content:flex-start}
  .content-intelligence-toolbar{align-items:stretch;flex-direction:column}
  .character-account-actions .mini-action{min-height:34px}
  .approval-summary{grid-template-columns:1fr}.approval-actions{display:grid;grid-template-columns:1fr}.approval-actions .button{width:100%}
  .login-legal-links{display:grid;gap:8px}
}

/* Grounded actor-management plan: evidence, capacity and action in one surface. */
.management-panel{min-height:0}.management-empty{padding:26px;border:1px dashed var(--line);border-radius:14px;background:var(--surface-sunken)}.management-empty strong{font-size:14px}.management-empty p{max-width:720px;line-height:1.65}.management-summary{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:18px;align-items:center;padding:16px;border:1px solid var(--line);border-radius:15px;background:linear-gradient(135deg,#f8faf7,#eef4ef)}.management-score{width:86px;height:86px;border:1px solid #bfd3c5;border-radius:50%;display:grid;place-content:center;text-align:center;background:radial-gradient(circle,#f8fbf7,#e3eee6 72%)}.management-score strong{font-size:28px;line-height:1;color:var(--accent)}.management-score span{font-size:9px;color:var(--muted);margin-top:5px}.management-summary-copy p{line-height:1.5;margin-top:9px}.management-summary-copy small{display:block;color:var(--muted);line-height:1.55}.management-summary-actions{align-self:stretch;display:flex;align-items:center}.management-signals{margin:12px 0}.management-plan-issues{display:flex;gap:12px;align-items:flex-start;padding:12px 14px;border-left:3px solid var(--orange);background:#fff8ec;border-radius:10px}.management-plan-issues>div{display:flex;flex-wrap:wrap;gap:6px}.management-opportunities{display:grid;gap:8px;margin-top:13px}.management-opportunity{display:grid;grid-template-columns:145px minmax(0,1fr) auto;gap:14px;align-items:start;padding:14px;border:1px solid var(--line);border-left:3px solid var(--cyan);border-radius:12px;background:#fbfcfa}.management-opportunity.is-quiet{border-left-color:#87938b;background:#f4f6f3}.management-opportunity.is-capture{border-left-color:var(--accent)}.management-opportunity.is-realtime{border-left-color:var(--orange)}.management-opportunity-time{display:grid;gap:5px}.management-opportunity-time time{font-size:11px;font-weight:800}.management-opportunity-time span{font-size:9px;color:var(--muted)}.management-opportunity-title{display:flex;flex-wrap:wrap;gap:6px;align-items:center}.management-opportunity-title strong{font-size:12px;margin-right:3px}.management-opportunity-copy p{line-height:1.45;margin:6px 0}.management-opportunity-copy small{color:var(--muted)}.management-issues{display:flex;flex-wrap:wrap;gap:5px;margin-top:9px}.management-opportunity-actions{display:flex;gap:6px;align-self:center}.management-settings-card{max-width:760px}.management-settings-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px;margin:18px 0}.management-settings-grid label{display:grid;gap:6px;color:var(--muted);font-size:10px}.management-settings-grid input,.management-settings-grid select{width:100%;background:var(--surface2);border:1px solid var(--line);border-radius:10px;color:var(--text);padding:10px}.management-settings-grid .full{grid-column:1/-1}@media(max-width:800px){.management-summary{grid-template-columns:auto 1fr}.management-summary-actions{grid-column:1/-1}.management-opportunity{grid-template-columns:1fr}.management-opportunity-actions{justify-self:start}.management-settings-grid{grid-template-columns:1fr}.management-settings-grid .full{grid-column:auto}}@media(max-width:520px){.management-summary{grid-template-columns:1fr}.management-score{width:74px;height:74px}.management-opportunity-time{display:flex;justify-content:space-between}}

@media(prefers-reduced-motion:reduce){
  html{scroll-behavior:auto}
  *,*::before,*::after{scroll-behavior:auto!important;animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}
}

/* NU 3-week social operations calendar */
#socialActorsView{
  --calendar-accent:var(--accent);
  --calendar-accent-soft:var(--accent-soft);
  --calendar-grid:var(--line);
  --calendar-copy:var(--text);
  --calendar-muted:var(--muted);
  --calendar-weekend:#f7f9f6;
  --calendar-hover:#f0f5f1;
}
#socialActorsView>.calendar-panel{overflow:visible;border-color:var(--calendar-grid);box-shadow:0 1px 2px rgb(39 67 50/.08),0 2px 6px rgb(39 67 50/.05)}
#socialActorsView>.calendar-panel>.panel-head{align-items:center;margin-bottom:0;padding-bottom:16px;border-bottom:1px solid var(--calendar-grid)}
#socialActorsView>.calendar-panel>.panel-head h2{font-size:20px;font-weight:500;letter-spacing:-.025em;color:var(--calendar-copy)}
#socialActorsView>.calendar-panel>.panel-head p{max-width:72ch;color:var(--calendar-muted);line-height:1.55}
#socialActorsView>.calendar-panel>.panel-head .overline{color:var(--calendar-accent);letter-spacing:.08em}

#socialActorsView .week-nav,.calendar-nav-group{display:flex;align-items:center;gap:4px;flex:0 0 auto}
#socialActorsView .week-nav .button,.calendar-nav-group .button{min-height:36px;border-color:var(--calendar-grid);border-radius:4px;background:#fff;color:var(--calendar-copy);box-shadow:none;font-size:11px;font-weight:650;transition:background-color .16s ease,border-color .16s ease,box-shadow .16s ease,transform .16s ease}
#socialActorsView .week-nav .button:hover,.calendar-nav-group .button:hover{border-color:#b8c7bc;background:var(--calendar-hover);transform:none}
#socialActorsView .week-nav .button:active,.calendar-nav-group .button:active{background:#e7ece8;transform:none}
#socialActorsView #socialTodayWeek{order:-1;margin-right:4px;padding-inline:14px}
#socialActorsView #socialPrevWeek,#socialActorsView #socialNextWeek{width:36px;padding:0;font-size:0;border-color:transparent;border-radius:50%}
#socialActorsView .calendar-nav-button svg{display:block;margin:auto}

#socialActorsView>.calendar-panel>.calendar-toolbar,.google-calendar-toolbar{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0;padding:12px 0;border:0;border-bottom:1px solid var(--calendar-grid)}
.calendar-toolbar-main{display:flex;align-items:center;gap:12px;min-width:0}
.calendar-title-group{display:grid;min-width:0;gap:2px}
.calendar-title-group .overline{margin:0;color:var(--calendar-accent);letter-spacing:.08em}
.calendar-range-title{overflow:hidden;margin:0;color:var(--calendar-copy);font-size:18px;font-weight:500;letter-spacing:-.025em;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
.calendar-description{margin:10px 0 0!important;color:var(--calendar-muted)!important;line-height:1.55}
.calendar-view-control select{min-height:36px;padding:7px 30px 7px 10px;border-color:var(--calendar-grid);border-radius:4px;background:#fff;color:var(--calendar-copy);box-shadow:none;font-size:10px;font-weight:650}
#socialActorsView .calendar-toolbar label,.calendar-toolbar-filters label{display:flex;align-items:center;gap:6px;color:var(--calendar-muted);font-size:10px;font-weight:600;white-space:nowrap}
#socialActorsView .calendar-toolbar select,.calendar-toolbar-filters select{min-height:34px;padding:6px 28px 6px 9px;border-color:var(--calendar-grid);border-radius:4px;background-color:#fff;color:var(--calendar-copy);box-shadow:none;font-size:10px}
#socialActorsView .calendar-toolbar select:hover,.calendar-toolbar-filters select:hover{border-color:#94ad9b;background-color:#f8faf7}
.calendar-toolbar-filters{display:flex;align-items:center;justify-content:flex-end;gap:8px;min-width:0}
#socialActorsView>.calendar-panel>.calendar-toolbar.calendar-toolbar-filters{justify-content:flex-end}
#socialActorsView .calendar-legend{align-items:center;gap:6px 14px;margin:0;padding:9px 1px;color:var(--calendar-muted);font-size:9px;border-bottom:0}
#socialActorsView .calendar-legend span{display:inline-flex;align-items:center;gap:5px;color:var(--calendar-muted)}
.calendar-legend-mark{display:inline-block;width:8px;height:8px;border-radius:2px;background:#7d8980}
.calendar-legend-mark.status-REVIEW{background:#9b6728}.calendar-legend-mark.status-SCHEDULED{background:#2f684d}.calendar-legend-mark.status-PUBLISHED{background:#2f7651}.calendar-legend-mark.status-BLOCKED{background:#b44f59}.calendar-legend-mark.is-character-event{background:#176b67;border-radius:50%}.calendar-legend-mark.is-production{background:#806db3;transform:rotate(45deg)}

.google-calendar-shell{max-width:100%;overflow:auto;border:1px solid var(--calendar-grid);border-radius:8px;background:#fff;color:var(--calendar-copy);box-shadow:0 1px 2px rgb(39 67 50/.08);overscroll-behavior-inline:contain;scrollbar-color:#b8c3ba #eef2ee;scrollbar-width:thin}
.google-calendar-shell:focus-within{border-color:#a9c3b0;box-shadow:0 0 0 2px rgb(47 104 77/.11)}
.google-calendar-shell .google-calendar-toolbar{padding:10px 12px;background:#fff}
.calendar-grid-summary{display:flex;align-items:center;justify-content:flex-end;min-height:30px;padding:6px 10px;border-bottom:1px solid var(--calendar-grid);background:#fbfcfa;color:var(--calendar-muted);font-size:9px;font-weight:650;font-variant-numeric:tabular-nums}
.google-calendar-shell::-webkit-scrollbar{width:8px;height:8px}
.google-calendar-shell::-webkit-scrollbar-track{background:#eef2ee}
.google-calendar-shell::-webkit-scrollbar-thumb{border:2px solid #eef2ee;border-radius:8px;background:#b8c3ba}

.gcal-date-grid{display:grid;min-width:812px;gap:1px;background:var(--calendar-grid)}
.calendar-weekday-grid,.calendar-date-grid{display:grid;grid-template-columns:repeat(7,minmax(116px,1fr));min-width:0}
.calendar-weekday-grid{position:sticky;z-index:4;top:0;border-bottom:1px solid var(--calendar-grid);background:#fff}
.calendar-weekday{display:flex;align-items:center;justify-content:center;min-height:38px;padding:8px;border-right:1px solid var(--calendar-grid);color:var(--calendar-muted);font-size:10px;font-weight:650;letter-spacing:.04em;text-align:center}
.calendar-weekday:nth-child(7n){border-right:0}
.calendar-weekday.is-weekend{background:var(--calendar-weekend);color:#5e6a61}

.calendar-date-grid{background:var(--calendar-grid);gap:1px}
.calendar-date-cell{position:relative;display:flex;flex-direction:column;min-width:0;min-height:172px;padding:0 5px 5px;background:#fff;transition:background-color .14s ease,box-shadow .14s ease}
.calendar-date-cell:nth-child(7n){border-right:0}
.calendar-date-cell.is-weekend{background:var(--calendar-weekend)}
.calendar-date-cell.is-today{background:#fbfdfb;box-shadow:inset 0 0 0 1px rgb(47 104 77/.22)}
.calendar-date-cell:hover{background:#fafcfa}
.calendar-date-cell.is-weekend:hover{background:#f2f6f3}
.calendar-date-cell:focus-within{z-index:2;box-shadow:inset 0 0 0 2px rgb(47 104 77/.28)}
.calendar-date-head{display:flex;align-items:center;justify-content:center;min-height:34px;padding:4px 2px;color:var(--calendar-muted);font-size:10px;font-variant-numeric:tabular-nums}
.calendar-date-number{display:grid;place-items:center;width:auto;min-width:26px;height:26px;padding:0 5px;border-radius:13px;color:var(--calendar-copy);font-size:11px;font-weight:500;line-height:1}
.calendar-date-cell.is-today .calendar-date-number{width:26px;padding:0;border-radius:50%;background:var(--calendar-accent);color:#fff;font-weight:700}
.calendar-date-cell.is-today .calendar-date-head::after{content:"오늘";position:absolute;top:10px;right:7px;color:var(--calendar-accent);font-size:8px;font-weight:700}
.calendar-date-count{position:absolute;top:11px;left:7px;color:#8a938c;font-size:9px;font-weight:650}
.calendar-day-events{display:grid;align-content:start;gap:3px;min-height:0;overflow:visible;padding:0 1px 2px}
.calendar-day-empty{display:grid;place-items:center;min-height:34px;color:#8b958d;font-size:10px}

.calendar-event-row{--event-color:#6b756e;display:grid;grid-template-columns:auto minmax(0,1fr) auto;grid-template-rows:auto auto;align-items:center;column-gap:5px;row-gap:1px;width:100%;min-height:36px;margin:0;padding:4px 6px;border:0;border-left:3px solid var(--event-color);border-radius:3px;background:#f0f3f0;color:var(--calendar-copy);box-shadow:none;font:inherit;text-align:left;cursor:pointer;transition:background-color .14s ease,box-shadow .14s ease,transform .14s ease}
.calendar-event-row:hover{background:#e7ece8;box-shadow:0 1px 2px rgb(39 67 50/.14);transform:translateY(-1px)}
.calendar-event-row:active{box-shadow:none;transform:translateY(0)}
.calendar-event-row:focus-visible{position:relative;z-index:2;outline:2px solid var(--calendar-accent);outline-offset:1px}
.calendar-event-time{color:#5e6a61;font-size:9px;font-weight:650;font-variant-numeric:tabular-nums;white-space:nowrap}
.calendar-event-main{display:grid;gap:1px;min-width:0;overflow:hidden;color:inherit;font-size:11px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}
.calendar-event-main strong{overflow:hidden;color:inherit;font-size:11px;text-overflow:ellipsis;white-space:nowrap}
.calendar-event-meta,.calendar-event-main .calendar-event-meta{grid-column:2/-1;min-width:0;overflow:hidden;color:var(--calendar-muted);font-size:9px;font-weight:500;text-overflow:ellipsis;white-space:nowrap}
/* chip 자체가 button 이라 원문은 그 옆에 둔다 -- button 안에 a 를 넣으면
   중첩 상호작용이 되고 키보드 순서가 무너진다. */
.calendar-event-permalink{display:inline-block;margin-left:4px;font-size:9px;color:var(--muted);text-decoration:underline;white-space:nowrap}
.calendar-event-permalink:focus-visible{outline:2px solid var(--accent);outline-offset:1px}
.calendar-event-state{grid-column:3;grid-row:1;justify-self:end;max-width:48px;overflow:hidden;color:inherit;font-size:8px;font-weight:700;letter-spacing:.01em;text-overflow:ellipsis;white-space:nowrap}
.calendar-event-row.is-social.status-DRAFT{--event-color:#7d8980;background:#f0f3f0}
.calendar-event-row.is-social.status-REVIEW{--event-color:#9b6728;background:#fbf1df;color:#7a511f}
.calendar-event-row.is-social.status-SCHEDULED{--event-color:#2f684d;background:#e8f1eb;color:#214c37}
.calendar-event-row.is-social.status-PUBLISHING{--event-color:#7b61c9;background:#f0ebfa;color:#55418d}
.calendar-event-row.is-social.status-PUBLISHED{--event-color:#2f7651;background:#e8f4ec;color:#286b49}
.calendar-event-row.is-social.status-BLOCKED,.calendar-event-row.is-social.status-FAILED{--event-color:#b44f59;background:#fbeaec;color:#943b45}
.calendar-event-row.is-production{--event-color:#806db3;background:#f6f2fb;color:#59477e}
.calendar-event-row.is-character-event,.event-chip.is-character-event{--event-color:#176b67;background:#eaf6f3;color:#12534f;border-color:#9bcac3}
.calendar-event-row.is-character-event.readiness-AT_RISK,.event-chip.is-character-event.readiness-AT_RISK{--event-color:#a36518;background:#fff6e7;color:#7b4a0e;border-color:#e6c58f}
.calendar-event-row.is-character-event.readiness-BLOCKED,.event-chip.is-character-event.readiness-BLOCKED{--event-color:#a33d48;background:#fff0f1;color:#802f38;border-color:#e3a5ac}
.event-portfolio{display:grid;gap:10px}.event-portfolio-row{display:grid;grid-template-columns:minmax(180px,1.4fr) minmax(140px,.8fr) auto;gap:12px;align-items:center;padding:13px;border:1px solid var(--line);border-radius:10px;background:var(--surface)}
.event-portfolio-row .event-copy{display:grid;gap:4px}.event-portfolio-row .event-copy small{color:var(--muted)}.event-task-list{display:grid;gap:8px;margin-top:12px}.event-task-row{display:grid;grid-template-columns:1fr auto;gap:12px;align-items:center;padding:10px 0;border-top:1px solid var(--line)}
.event-results-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(150px,1fr));gap:10px;margin-top:12px}.event-result-cell{padding:12px;border:1px solid var(--line);border-radius:9px;background:var(--surface2)}.event-result-cell span{display:block;color:var(--muted);font-size:12px}.event-result-cell strong{font-size:20px}.event-form-grid{display:grid;grid-template-columns:1fr 1fr;gap:12px}.event-form-grid .full{grid-column:1/-1}
@media(max-width:760px){.event-portfolio-row{grid-template-columns:1fr}.event-form-grid{grid-template-columns:1fr}.event-form-grid .full{grid-column:auto}}
.calendar-event-row.production-layer-event{cursor:default}.calendar-event-row.production-layer-event:hover{box-shadow:none;transform:none}
.calendar-event-row.production-layer-event .calendar-event-main{color:inherit;font-size:11px}.calendar-event-row.production-layer-event .calendar-event-time,.calendar-event-row.production-layer-event .calendar-event-meta,.calendar-event-row.production-layer-event .calendar-event-state{color:inherit}
.calendar-event-row.is-functional-review{border-top:1px dashed #c58b27;border-right:1px dashed #c58b27;border-bottom:1px dashed #c58b27;border-left-style:solid;background:#fff8e8;color:#7c4f00}
.calendar-event-row>.functional-review-label,.calendar-event-row>.production-conflict-label{display:none}
.calendar-more-events{width:100%;min-height:25px;padding:3px 6px;border:0;border-radius:3px;background:transparent;color:var(--calendar-accent);font:inherit;font-size:10px;font-weight:750;text-align:left;cursor:pointer;transition:background-color .14s ease,color .14s ease}
.calendar-more-events:hover{background:var(--calendar-accent-soft);color:#214c37}.calendar-more-events:focus-visible{outline:2px solid var(--calendar-accent);outline-offset:1px}

/* Legacy calendar output remains readable until all cached clients receive the grid markup. */
#socialActorsView .calendar-three-week{gap:0;overflow:auto;border:1px solid var(--calendar-grid);border-radius:8px;background:#fff}
#socialActorsView .calendar-window-summary{margin:0;padding:11px 13px;border:0;border-bottom:1px solid var(--calendar-grid);border-radius:0;background:#fff;color:var(--calendar-muted);box-shadow:none}
#socialActorsView .calendar-window-summary .overline{color:var(--calendar-accent);letter-spacing:.06em}
#socialActorsView .calendar-window-summary strong{color:var(--calendar-copy);font-size:15px;font-weight:500;font-variant-numeric:tabular-nums}
#socialActorsView .calendar-week-band{gap:0}
#socialActorsView .calendar-week-heading{padding:8px 11px;border-bottom:1px solid var(--calendar-grid);background:#f8faf7}
#socialActorsView .calendar-week-heading span,#socialActorsView .agenda-week-heading span{color:var(--calendar-accent)}
#socialActorsView .calendar-week-band .schedule-scroll{border:0;border-radius:0;box-shadow:none}
#socialActorsView .calendar-week-band+.calendar-week-band{border-top:1px solid var(--calendar-grid)}
#socialActorsView .social-schedule-table th{background:#fff;color:var(--calendar-muted);border-color:var(--calendar-grid)}
#socialActorsView .social-schedule-table td{height:76px;border-color:var(--calendar-grid);background:#fff}
#socialActorsView .social-schedule-table thead th:nth-child(7),#socialActorsView .social-schedule-table thead th:nth-child(8),#socialActorsView .social-schedule-table tbody td:nth-child(7),#socialActorsView .social-schedule-table tbody td:nth-child(8){background:var(--calendar-weekend)}

#socialActorsView .calendar-agenda-view{gap:0;overflow:hidden;border:1px solid var(--calendar-grid);border-radius:8px;background:#fff}
#socialActorsView .calendar-agenda-view>.calendar-window-summary{grid-column:1/-1}
#socialActorsView .agenda-week{gap:0;border-right:1px solid var(--calendar-grid)}
#socialActorsView .agenda-week:last-child{border-right:0}
#socialActorsView .agenda-week-heading{min-height:38px;padding:9px 11px;border-bottom:1px solid var(--calendar-grid);background:#f8faf7}
#socialActorsView .agenda-day{gap:5px;padding:10px;border:0;border-bottom:1px solid var(--calendar-grid);border-radius:0;background:#fff}
#socialActorsView .agenda-day:last-child{border-bottom:0}
#socialActorsView .agenda-day.is-empty{background:#fafafa}
#socialActorsView .agenda-day>header strong{color:var(--calendar-copy);font-weight:600}
#socialActorsView .agenda-day>header span,#socialActorsView .agenda-empty{color:var(--calendar-muted)}
#socialActorsView .agenda-day:focus-visible{outline:3px solid rgb(47 104 77/.24);outline-offset:-3px}

@media(max-width:1100px){
  .calendar-toolbar-filters{flex-wrap:wrap}
}

@media(max-width:650px){
  #socialActorsView>.calendar-panel{padding:16px 14px;overflow:hidden}
  #socialActorsView>.calendar-panel>.panel-head{display:grid;gap:12px;padding-bottom:13px}
  #socialActorsView>.calendar-panel>.panel-head h2{font-size:18px}
  #socialActorsView .week-nav{display:grid;grid-template-columns:auto 36px 36px;justify-content:start;width:auto}
  #socialActorsView #socialTodayWeek{min-width:84px;margin-right:2px}
  #socialActorsView>.calendar-panel>.calendar-toolbar,.google-calendar-toolbar{align-items:stretch;flex-direction:column;padding:11px 0}
  .calendar-toolbar-main{justify-content:space-between}
  .calendar-range-title{overflow:visible;font-size:14px;line-height:1.3;text-overflow:clip;white-space:normal}
  #socialActorsView .calendar-toolbar,.calendar-toolbar-filters{display:grid;grid-template-columns:1fr 1fr;gap:8px}
  #socialActorsView .calendar-toolbar label,.calendar-toolbar-filters label{display:grid;gap:4px}
  #socialActorsView .calendar-toolbar select,.calendar-toolbar-filters select{width:100%}
  #socialActorsView .calendar-legend{overflow:auto;flex-wrap:nowrap;padding:9px 1px;white-space:nowrap;scrollbar-width:none}
  #socialActorsView .calendar-legend::-webkit-scrollbar{display:none}
  .google-calendar-shell{display:none}
  #socialActorsView .calendar-week-view{display:none}
  #socialActorsView .calendar-agenda-view,#socialActorsView .calendar-agenda-view.agenda-mobile-only{display:grid;grid-template-columns:1fr;border-radius:6px}
  #socialActorsView .calendar-agenda-view>.calendar-window-summary{align-items:flex-start;flex-direction:column;gap:5px}
  #socialActorsView .agenda-week{border-right:0;border-bottom:1px solid var(--calendar-grid)}
  #socialActorsView .agenda-week:last-child{border-bottom:0}
  #socialActorsView .agenda-week-heading{position:sticky;z-index:2;top:0;background:rgb(248 250 247/.96);backdrop-filter:blur(8px)}
  #socialActorsView .agenda-day{padding:10px 9px}
  #socialActorsView .agenda-empty-range{border:0;border-bottom:1px solid var(--calendar-grid);border-radius:0;background:#fafafa}
}

.detail-actions{margin:16px 0 4px;display:flex;gap:10px;flex-wrap:wrap;align-items:center}
.curve-row{margin-top:16px}
.curve-head{display:flex;align-items:baseline;justify-content:space-between;gap:10px}
.curve-head strong{font-variant-numeric:tabular-nums;font-size:18px}
.curve-bars{margin-top:8px;display:flex;align-items:flex-end;gap:6px;height:84px}
.curve-bar{flex:1 1 0;display:flex;flex-direction:column;justify-content:flex-end;align-items:center;gap:4px;height:100%;min-width:0}
.curve-bar>span{width:100%;border-radius:2px 2px 0 0;background:linear-gradient(180deg,var(--accent,#6ea8fe),rgba(110,168,254,.35))}
.curve-bar>small{font-size:9px;color:var(--muted);font-variant-numeric:tabular-nums}

.draft-form-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px}
.draft-counts{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:18px 0 4px}
.draft-count{border:1px solid var(--line);border-radius:10px;padding:11px;text-align:center;background:var(--surface2)}
.draft-count strong{display:block;font-size:21px;font-variant-numeric:tabular-nums}
.draft-count span{font-size:9px;color:var(--muted);letter-spacing:.06em}
.draft-section{border:1px solid var(--line);border-radius:8px;margin-top:8px;background:var(--surface2)}
.draft-section>summary{cursor:pointer;padding:9px 12px;font-size:12px;font-weight:600;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.draft-section[open]>summary{border-bottom:1px solid var(--line)}
.draft-json{margin:0;padding:12px;overflow-x:auto;font-size:10.5px;line-height:1.55;color:#c4cdd6;white-space:pre;max-height:340px}
@media(max-width:650px){.draft-form-row{grid-template-columns:1fr}.draft-counts{grid-template-columns:1fr 1fr}}

.draft-edit{width:100%;box-sizing:border-box;border:0;border-radius:0 0 7px 7px;background:#0e1319;color:#c4cdd6;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10.5px;line-height:1.55;padding:12px;resize:vertical}
.draft-edit:focus{outline:2px solid var(--accent);outline-offset:-2px}
.upload-button{display:inline-flex;align-items:center;gap:6px;background:var(--surface2);border:1px solid var(--line);color:#e9eef2;border-radius:10px;padding:10px 12px;cursor:pointer;font-size:11px}
.upload-button:hover{border-color:var(--accent);color:var(--accent)}
/* 주 동작은 주 동작처럼 보여야 한다. 11px 회색 칩은 필터로 읽힌다. */
.upload-button.is-primary{background:var(--accent);border-color:var(--accent);color:#111;font-size:12px;font-weight:700;padding:11px 16px;white-space:nowrap}
.upload-button.is-primary span{font-size:15px;line-height:1}
.upload-button.is-primary:hover{filter:brightness(1.08);color:#111}
.panel-head-actions{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
/* 목록 행의 작업 버튼이 9px 이면 있는 줄도 모른다. */
.asset-row-actions{white-space:nowrap}
.asset-row-actions .mini-action{margin-top:0;font-size:11px;padding:7px 10px}
@media(max-width:650px){.panel-head-actions{display:grid;width:100%}.upload-button.is-primary{justify-content:center}}

/* 이동과 펼침은 다른 동작이라 나란히 두되, 하나의 항목처럼 보이게 묶는다. */
.nav-group{display:flex;align-items:stretch;gap:0;border-radius:11px}
.nav-group:hover{background:#141a1f}
.nav-group .nav-item{flex:1 1 auto;min-width:0}
.nav-group:hover .nav-item,.nav-group:hover .nav-disclosure{background:transparent}
.nav-disclosure{flex:0 0 auto;display:grid;place-items:center;width:30px;border:0;background:transparent;color:#6f7b89;cursor:pointer;border-radius:11px;font-size:10px;line-height:1;transition:color .12s ease}
.nav-disclosure:hover{color:var(--accent)}
.nav-disclosure:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.nav-disclosure span{display:block;transition:transform .16s ease}
.nav-disclosure[aria-expanded="false"] span{transform:rotate(-90deg)}

/* 하위 목록은 부모에 매달린 것으로 읽혀야 한다 — 들여쓰기와 세로선이 그 역할을
   하고, 목록 자체는 배경 없이 두어 사이드바가 두 겹으로 보이지 않게 한다. */
.nav-sublist{list-style:none;margin:1px 0 6px;padding:2px 0 2px 11px;display:grid;gap:1px;
  margin-left:13px;border-left:1px solid #232a33}
.nav-sublist[hidden]{display:none}
.nav-subitem{width:100%;border:0;background:transparent;color:#7c8795;padding:6px 9px;border-radius:8px;
  text-align:left;font:inherit;font-size:11px;display:flex;align-items:center;gap:8px;cursor:pointer;min-width:0}
.nav-subitem:hover{background:#171d22;color:#dfe6ec}
.nav-subitem:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.nav-subitem.active{color:#fff;background:#181f26}
.nav-subitem.active .nav-subitem-name{font-weight:600}
.nav-subitem-name{flex:1 1 auto;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.nav-subitem-meta{flex:0 0 auto;font-size:9px;color:#5d6774;letter-spacing:.02em}
.nav-subitem.active .nav-subitem-meta{color:#8fa0b0}
/* 게시 가능 여부만 점으로. 배지는 좁은 폭에서 무너지고, 자세한 상태는
   카드와 상세 페이지가 이미 말한다. */
.nav-subitem-dot{flex:0 0 auto;width:5px;height:5px;border-radius:50%;background:#39424d}
.nav-subitem-dot.on{background:var(--green);box-shadow:0 0 6px rgba(116,224,164,.55)}
.nav-subitem-more{color:#6f7b89;font-size:10px}
.nav-subitem-more:hover{color:var(--accent)}
.nav-subitem-empty{padding:6px 9px;color:#5d6774;font-size:10px}
@media(prefers-reduced-motion:reduce){.nav-disclosure span{transition:none}}
/* 76px 아이콘 레일과 모바일 가로 행에는 이름을 넣을 자리가 없다. */
@media(max-width:1000px){.nav-sublist,.nav-disclosure{display:none}}

/* Multi-destination brief — counters for every target at once, so the
   destination the copy overruns is visible while writing rather than after
   switching to its tab. */
.brief-panel{min-width:0}
.brief-destinations{display:flex;flex-wrap:wrap;gap:8px;margin:12px 0}
.brief-destination{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border:1px solid var(--line);border-radius:99px;font-size:11px;cursor:pointer}
.brief-destination:has(input:checked){border-color:var(--accent);color:var(--accent)}
.brief-destination:has(input:focus-visible){outline:2px solid var(--accent);outline-offset:2px}
.brief-platform-tags{display:flex;flex-direction:column;gap:8px}
.brief-platform-tag{display:grid;grid-template-columns:minmax(120px,auto) 1fr;gap:6px 10px;align-items:center}
.brief-platform-tag>small{grid-column:2;color:var(--muted);font-size:11px}
.brief-platform-tag-toggle{display:inline-flex;align-items:center;gap:6px;font-size:11px;cursor:pointer}
.brief-platform-tag input[type="text"],.brief-platform-tag>input:not([type]){min-width:0}
.brief-platform-tag>input:disabled{opacity:.5}
@media (max-width:640px){.brief-platform-tag{grid-template-columns:1fr}.brief-platform-tag>small{grid-column:1}}
.brief-counters{display:grid;gap:6px;margin-top:12px}
.brief-target-row{display:flex;flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;padding:7px 9px;border:1px solid var(--line);border-radius:9px}
.brief-target-row strong{min-width:170px;font-size:11px}
.brief-counter{padding:3px 7px;border-radius:99px;background:#222a33;color:#bdc7d2;font-size:9px;font-variant-numeric:tabular-nums}
/* Over the limit is a warning, never a truncation: the operator decides what
   to cut, so the number stays visible and the copy stays whole. */
.brief-counter.is-over{color:var(--red);background:#321b20;font-weight:800}
.brief-failed{margin-top:8px;color:var(--red);font-size:11px}

/* TikTok consent, as the four ordered steps the platform requires. Showing
   which one is outstanding is what turns "재확인 필요" into something actionable. */
.tiktok-consent-steps{list-style:none;counter-reset:step;display:flex;flex-wrap:wrap;gap:8px;margin:9px 0 0;padding:0}
.tiktok-consent-steps li{counter-increment:step;display:inline-flex;align-items:center;gap:6px;padding:4px 9px;border:1px solid var(--line);border-radius:99px;font-size:10px;color:var(--muted)}
.tiktok-consent-steps li::before{content:counter(step);width:14px;height:14px;border-radius:50%;background:#222a33;color:#bdc7d2;display:grid;place-items:center;font-size:8px;font-weight:800}
.tiktok-consent-steps li.is-done{color:var(--green);border-color:#2a4736}
.tiktok-consent-steps li.is-done::before{background:#163022;color:var(--green)}
/* A constraint the platform imposes reads differently from advice about it. */
.composer-notice.is-constraint{border-left-color:var(--orange);background:#241d12;color:#e0cba8}

/* Advanced settings: generated controls first, raw JSON tucked behind its own
   disclosure. The JSON box is the escape hatch, not the interface. */
.composer-raw-json{margin-top:14px;border-top:1px solid var(--line);padding-top:12px}
.composer-raw-json>summary{cursor:pointer;font-size:10px;color:var(--muted)}
.composer-raw-json>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
.composer-raw-json textarea{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;background:var(--surface2);color:inherit;padding:9px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px;margin-top:8px}

/* Remaining posting headroom. Advisory: it counts only what this system sent,
   so it is a floor, and the caption says so rather than implying authority. */
.composer-quota{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:9px 11px;margin-bottom:14px;border:1px solid var(--line);border-radius:10px;font-size:11px}
.composer-quota strong{font-size:11px}
.composer-quota small{width:100%;color:var(--muted);font-size:9px}
.quota-chip{padding:3px 8px;border-radius:99px;background:#222a33;color:#bdc7d2;font-size:9px;font-variant-numeric:tabular-nums}
.quota-chip.is-current{background:#162a31;color:var(--cyan)}
.quota-chip.is-tight{background:#332817;color:var(--orange);font-weight:800}

/* A control that cannot act on the current screen says so by looking inert,
   rather than accepting a choice that changes nothing. */
#refreshBtn:disabled,.button:disabled{opacity:.55;cursor:wait}

/* 2026-08 character intelligence IA: content height follows the task.  The
   calendar keeps the spacious canvas; queues and empty tables no longer draw
   a 500px blank card. */
.panel.full{min-height:auto}
.calendar-panel{min-height:500px}
.content-height{min-height:auto!important}
main{width:100%;max-width:1680px;margin-inline:auto}
.panel p,.queue-sub{font-size:12px;line-height:1.55}
.table td{font-size:12px;line-height:1.45}
.badge{font-size:10px}
.panel-head>div>p{max-width:72ch;text-wrap:pretty}

.character-portfolio{display:grid;gap:14px}
.character-card-compact{padding:0;gap:0;overflow:hidden;background:var(--surface);box-shadow:0 10px 28px rgb(39 67 50/.055)}
.character-portfolio-head{display:grid;grid-template-columns:76px minmax(0,1fr) auto;gap:16px;align-items:center;padding:18px 20px 15px}
.character-portrait{width:76px;height:92px;object-fit:cover;object-position:center top;border-radius:12px;background:var(--surface-sunken)}
.character-portfolio-head h3{margin:5px 0 4px;font-size:20px;letter-spacing:-.035em}
.character-portfolio-head p{margin:0;color:var(--muted);font-size:12px}
.character-portfolio-head .character-badges{justify-content:flex-start}
.character-account-count{align-self:start;padding:6px 9px;border-radius:8px;background:var(--surface2);color:var(--muted);font-size:11px;font-variant-numeric:tabular-nums}
.character-state-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));border-block:1px solid var(--line)}
.character-state-lane{display:grid;gap:4px;min-width:0;padding:14px 16px;border-right:1px solid var(--line)}
.character-state-lane:last-child{border-right:0}
.character-state-lane>span{color:var(--muted);font-size:10px;font-weight:650}
.character-state-lane strong{font-size:13px}
.character-state-lane strong.is-ready{color:#286b49}.character-state-lane strong.is-waiting{color:#9a621f}
.character-state-lane small{overflow:hidden;color:var(--muted);font-size:10px;text-overflow:ellipsis;white-space:nowrap}
.character-signal-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:1px;background:var(--line)}
.character-signal-grid>div{display:grid;gap:4px;padding:15px 17px;background:var(--surface2)}
.character-signal-grid span,.character-signal-grid small{color:var(--muted);font-size:10px}
.character-signal-grid strong{font-size:19px;font-variant-numeric:tabular-nums}
.character-primary-action{position:relative;display:grid;grid-template-columns:minmax(90px,.22fr) minmax(0,1fr) auto;gap:7px 16px;align-items:center;margin:15px 18px;padding:14px 16px;border-left:3px solid var(--green);border-radius:10px;background:#f3f7f3}
.character-primary-action.is-bad{border-left-color:var(--red);background:#fff4f4}.character-primary-action.is-warn{border-left-color:var(--orange);background:#fff8ed}
.character-primary-action>span{grid-row:1/3;color:var(--muted);font-size:10px;font-weight:700}.character-primary-action strong{font-size:13px}.character-primary-action small{grid-column:2;color:var(--muted);font-size:11px}.character-primary-action button{grid-column:3;grid-row:1/3}
.character-evidence{margin:0 18px 18px;border-top:1px solid var(--line)}
.character-evidence>summary{display:flex;justify-content:space-between;padding:14px 2px 4px;cursor:pointer;color:#405148;font-size:12px;font-weight:650}
.character-evidence[open]>summary{margin-bottom:14px}
.character-evidence>.character-detail{margin-top:14px}
.character-evidence .character-account-list{margin-top:8px}

.actor-overview-layout{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px}
.actor-overview-actions{grid-column:1/-1}
.character-state-grid.is-detail{border:1px solid var(--line);border-radius:12px;overflow:hidden}
.signal-strip{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;margin:12px 0;background:var(--line);border:1px solid var(--line);border-radius:12px;overflow:hidden}
.signal-strip>div{display:grid;gap:5px;padding:13px 15px;background:var(--surface2)}
.signal-strip span{color:var(--muted);font-size:10px}.signal-strip strong{font-size:19px;font-variant-numeric:tabular-nums}
.actor-library-panel{padding:0;overflow:hidden}
.actor-library-panel>summary{display:flex;align-items:center;justify-content:space-between;padding:18px 21px;cursor:pointer;list-style:none}
.actor-library-panel>summary::-webkit-details-marker{display:none}
.actor-library-panel>summary strong{display:block;font-size:14px}.actor-library-panel>summary .overline{display:block;margin-bottom:4px}
.actor-library-panel[open]>summary{border-bottom:1px solid var(--line)}
.actor-library-head,.actor-library-panel>#actorDetailResources{margin:18px 21px}
.queue-context{margin-bottom:4px;color:var(--accent);font-size:10px;font-weight:700}
.action-queue-row{align-items:start}
.metric-contract{min-width:min(660px,100%);padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface2)}
.metric-contract>summary{cursor:pointer;color:var(--text);font-size:11px;font-weight:750}.metric-contract>div{display:flex;flex-wrap:wrap;gap:5px;margin-top:10px}.metric-contract>p{margin:9px 0 0}
.production-section-nav{position:sticky;z-index:7;top:0;display:flex;gap:7px;margin:-8px 0 14px;padding:9px;border:1px solid var(--line);border-radius:12px;background:rgb(255 255 255/.92);box-shadow:0 8px 24px rgb(39 67 50/.07);backdrop-filter:blur(12px)}
.production-section-nav .button{padding:8px 11px;font-size:10px}
#productionWeek,#productionAvailability,#productionPlans,#productionAgency{scroll-margin-top:76px}
.calendar-legend-mark.status-DRAFT{background:#7d8980}.calendar-legend-mark.status-AWAITING_APPROVAL,.calendar-legend-mark.status-REVIEW{background:#9b6728}.calendar-legend-mark.status-APPROVED{background:#356f78}.calendar-legend-mark.status-SCHEDULED{background:#2f684d}.calendar-legend-mark.status-PUBLISHED{background:#2f7651}.calendar-legend-mark.status-BLOCKED,.calendar-legend-mark.status-FAILED{background:#b44f59}

@media(max-width:900px){
  .character-state-grid{grid-template-columns:1fr 1fr}.character-state-lane:nth-child(2){border-right:0}.character-state-lane:nth-child(-n+2){border-bottom:1px solid var(--line)}
  .actor-overview-layout{grid-template-columns:1fr}.actor-overview-actions{grid-column:auto}
  .signal-strip{grid-template-columns:1fr 1fr}
}
@media(max-width:650px){
  .sidebar nav{position:relative;padding-right:25px}
  .sidebar nav::after{content:'→';position:sticky;right:0;display:grid;place-items:center;min-width:24px;background:linear-gradient(90deg,transparent,var(--surface) 38%);color:var(--accent);font-weight:800;pointer-events:none}
  .character-filters{grid-template-columns:1fr 1fr}.character-filters input{grid-column:1/-1}
  .character-portfolio-head{grid-template-columns:58px minmax(0,1fr);padding:15px}.character-portrait{width:58px;height:72px}.character-account-count{grid-column:1/-1;justify-self:start}.character-portfolio-head h3{font-size:18px}
  .character-state-grid{grid-template-columns:1fr 1fr}.character-state-lane{padding:12px}.character-state-lane small{white-space:normal}
  .character-signal-grid{grid-template-columns:1fr}.character-signal-grid>div{grid-template-columns:1fr auto;align-items:center}.character-signal-grid small{grid-column:1/-1}
  .character-primary-action{grid-template-columns:1fr;margin:12px;padding:13px}.character-primary-action>span,.character-primary-action strong,.character-primary-action small,.character-primary-action button{grid-column:1;grid-row:auto}.character-primary-action button{justify-self:start}
  .character-evidence{margin:0 12px 14px}.character-detail-grid{grid-template-columns:1fr}
  .signal-strip{grid-template-columns:1fr 1fr}
  .actor-tabs{overflow-x:auto}.actor-tab{min-width:78px}
  .production-section-nav{overflow-x:auto;white-space:nowrap}.production-section-nav .button{flex:0 0 auto}
}

/* A KPI that leads somewhere is a button, so it reports itself as one and
   takes keyboard focus. The card that leads nowhere stays a plain div. */
.kpi.is-link{width:100%;text-align:left;font:inherit;color:inherit;cursor:pointer;border:1px solid var(--line)}
.kpi.is-link:hover{border-color:var(--accent)}
.kpi.is-link:focus-visible{outline:2px solid var(--accent);outline-offset:3px}

/* Media for a post is almost always new footage, so upload is the path and the
   library is the exception. The drop zone leads; picking an existing asset sits
   behind a disclosure. */
.composer-media-label{font-size:12px;color:var(--muted)}
.media-dropzone{display:grid;justify-items:center;gap:6px;padding:22px 16px;margin-top:6px;border:1.5px dashed var(--line);border-radius:12px;background:var(--surface2);cursor:pointer;text-align:center;transition:border-color .12s ease,background .12s ease}
.media-dropzone:hover{border-color:var(--accent)}
.media-dropzone:focus-within{outline:2px solid var(--accent);outline-offset:3px}
.media-dropzone.is-over{border-color:var(--accent);background:#17201a}
.media-dropzone.is-full{cursor:not-allowed;opacity:.6;border-style:solid}
.media-dropzone-mark{width:26px;height:26px;border-radius:50%;display:grid;place-items:center;background:#222a33;color:var(--accent);font-weight:800}
.media-dropzone strong{font-size:12px}
.media-dropzone small{font-size:10px;color:var(--muted)}

.composer-selected{display:grid;gap:6px;margin-top:10px;font-size:11px;color:var(--muted)}
/* The selected row carries the frame, not just the filename. A filename says
   nothing about what is about to be published. */
.composer-order-row{display:flex;align-items:center;gap:9px;padding:8px 9px;border:1px solid var(--line);border-radius:9px;background:var(--surface2)}
.order-thumb{width:52px;height:52px;flex:none;object-fit:cover;border-radius:8px;background:#12171d;border:1px solid var(--line)}
.order-thumb-empty{display:grid;place-items:center;color:var(--muted);font-size:11px}
.order-body{flex:1;min-width:0}
.order-title{font-size:11px;font-weight:700;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.order-specs{font-size:9px;color:var(--muted);margin-top:3px;font-variant-numeric:tabular-nums}
.order-index{width:18px;height:18px;border-radius:50%;background:#222a33;color:#bdc7d2;display:grid;place-items:center;font-size:9px;font-weight:800;flex:none}
.order-actions{display:flex;gap:4px;flex:none}
.order-actions .mini-action{margin:0}
.mini-action.danger:hover{border-color:var(--red);color:var(--red)}
/* Two axes, two answers: spec fit and content review are different questions. */
.eligibility-chip{padding:3px 7px;border-radius:99px;font-size:9px;background:#222a33;color:#bdc7d2;flex:none}
.eligibility-chip.is-eligible{color:var(--green);background:#163022}
.eligibility-chip.is-unknown{color:var(--orange);background:#332817}
.eligibility-chip.is-ineligible{color:var(--red);background:#321b20}

.composer-library{margin-top:12px;border-top:1px solid var(--line);padding-top:10px}
.composer-library>summary{cursor:pointer;font-size:11px;color:var(--muted)}
.composer-library>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
.composer-library #cmpLibrarySearch{width:100%;box-sizing:border-box;margin-top:8px;border:1px solid var(--line);border-radius:8px;background:var(--surface2);color:inherit;padding:9px}

/* One preflight, three different decisions. Technical fit must not read as
   permission to publish, and platform visibility must not hide in advanced
   controls. The rules stay in the writing flow without another nested card. */
.publish-guide{margin:2px 0 18px;padding:14px 0;border-top:1px solid var(--line);border-bottom:1px solid var(--line)}
.publish-guide-head{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:12px}
.publish-guide-head>div{display:grid;gap:4px}.publish-guide-head .overline{margin:0;color:var(--accent)}
.publish-guide-head strong{font-size:14px;letter-spacing:-.02em}
.publish-guide-target{padding:4px 8px;border-radius:99px;background:var(--accent-soft);color:var(--accent);font-size:9px;font-weight:800}
.publish-guide-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr))}
.publish-guide-step{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:8px;padding:2px 16px 2px 0;min-width:0}
.publish-guide-step+.publish-guide-step{padding-left:16px;border-left:1px solid var(--line)}
.publish-guide-number{display:grid;place-items:center;width:20px;height:20px;border-radius:50%;background:var(--surface-sunken);color:var(--muted);font-size:9px;font-weight:850}
.publish-guide-step strong{display:block;padding-right:64px;font-size:11px;line-height:1.45}
.publish-guide-step p{margin:5px 0 0;color:var(--muted);font-size:9px;line-height:1.55;word-break:keep-all}
.publish-guide-step ul{display:grid;gap:2px;margin:5px 0 0;padding:0;list-style:none;color:#4f5b52;font-size:9px;line-height:1.45}
.publish-guide-step li::before{content:"· ";color:var(--accent)}
.publish-guide-state{position:absolute;top:1px;right:16px;color:var(--muted);font-size:8px;font-weight:800;white-space:nowrap}
.publish-guide-step:last-child .publish-guide-state{right:0}
.publish-guide-step.is-risk .publish-guide-number{background:#f7e7e8;color:var(--red)}
.publish-guide-step.is-risk .publish-guide-state{color:var(--red)}
.publish-guide-step.is-limited .publish-guide-number{background:#f7eedf;color:var(--orange)}
.publish-guide-step.is-limited .publish-guide-state{color:var(--orange)}
.publish-guide-step.is-ready .publish-guide-number{background:#e4f1e8;color:var(--green)}
.publish-guide-step.is-ready .publish-guide-state{color:var(--green)}
.publish-guide-step.is-human .publish-guide-number{background:#e6eff1;color:var(--cyan)}
.publish-guide-step.is-human .publish-guide-state{color:var(--cyan)}
@media(max-width:780px){.publish-guide-grid{grid-template-columns:1fr}.publish-guide-step{padding:10px 0}.publish-guide-step+.publish-guide-step{padding-left:0;border-left:0;border-top:1px solid var(--line)}.publish-guide-state,.publish-guide-step:last-child .publish-guide-state{right:0;top:11px}}

/* Actor detail tabs. Seven stacked panels meant scrolling past the composer to
   choose media and back again; the groups are what the operator is doing, not
   what the data is. */
.actor-tabs{display:flex;gap:4px;margin:0 0 16px;border-bottom:1px solid var(--line)}
.actor-tab{border:0;background:transparent;color:var(--muted);font:inherit;font-size:12px;padding:11px 16px;cursor:pointer;border-bottom:2px solid transparent;margin-bottom:-1px;border-radius:8px 8px 0 0}
.actor-tab:hover{color:var(--text);background:#171d22}
.actor-tab.is-active{color:var(--accent);border-bottom-color:var(--accent);font-weight:750}
.actor-tab:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}
.actor-tabpanel{display:grid;gap:15px}
/* [hidden] loses to display:grid, so the shared .hidden rule is what hides a
   panel — and it carries !important for exactly this reason. */

/* The character card is the way into an actor, so the whole card takes the
   click. The delegated dispatcher resolves to the nearest [data-action], so
   the buttons inside it keep working without any stopPropagation. */
.character-card.is-openable{cursor:pointer;transition:border-color .12s ease,transform .12s ease}
.character-card.is-openable:hover{border-color:var(--accent)}
.character-card.is-openable:has(.character-open:focus-visible){outline:2px solid var(--accent);outline-offset:3px}
/* The name is the keyboard path: a card that only responds to a mouse click is
   unreachable by anyone tabbing through the page. */
.character-open{border:0;background:transparent;color:inherit;font:inherit;padding:0;cursor:pointer;text-align:left}
.character-open:hover{color:var(--accent)}
.character-open:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}
/* Controls inside the card must not look like part of the card-wide target. */
.character-card.is-openable .mini-action,
.character-card.is-openable .character-account-row{cursor:auto}
.character-card.is-openable .mini-action{cursor:pointer}

/* 숫자가 없는 이유는 숫자 자리에서 읽혀야 한다. 곡선 위에 붙는다. */
.collection-notice{display:flex;flex-direction:column;gap:8px;margin-bottom:12px}
.collection-note{display:flex;align-items:baseline;gap:8px;flex-wrap:wrap;
  padding:9px 11px;border-radius:8px;background:var(--surface-sunken,#f4f6f2);
  font-size:13px;line-height:1.5}
.collection-note>span:nth-child(2){flex:1;min-width:200px}

/* A trend row has to answer "what is this" before "how big is it". A video
   gets its frame; everything else gets a way through to the source. */
.trend-preview{display:flex;gap:10px;align-items:flex-start;margin-top:5px}
.trend-thumb{width:80px;height:45px;flex:none;object-fit:cover;border-radius:6px;background:#12171d;border:1px solid var(--line)}
.trend-preview .queue-sub{margin-top:0}
.trend-preview-apify{align-items:stretch}
.trend-hashtag-preview{width:80px;min-height:68px;flex:none;display:grid;place-content:center;gap:1px;text-align:center;text-decoration:none;color:#fff;border-radius:10px;border:1px solid #ffffff26;background:radial-gradient(circle at 28% 106%,#ffd36a 0 18%,transparent 38%),linear-gradient(145deg,#833ab4,#fd1d1d 56%,#fcb045);box-shadow:inset 0 1px #ffffff2e}
.trend-hashtag-preview:hover{border-color:#ffffff70;transform:translateY(-1px)}
.trend-hashtag-preview.is-disabled{filter:grayscale(.7);opacity:.62}
.trend-hashtag-preview span{font-size:30px;font-weight:850;line-height:1}
.trend-hashtag-preview small{font-size:8px;letter-spacing:.08em;text-transform:uppercase}
.trend-media-preview{width:80px;height:88px;position:relative;flex:none;display:grid;place-items:center;overflow:hidden;border-radius:10px;border:1px solid #ffffff26;background:linear-gradient(145deg,#833ab4,#fd1d1d 56%,#fcb045);color:#fff;text-decoration:none}
.trend-media-preview img{width:100%;height:100%;display:block;object-fit:cover}
.trend-media-preview span{display:none;font-size:30px;font-weight:850}
.trend-media-preview.is-broken span{display:block}
.trend-media-preview:hover{border-color:#ffffff70;transform:translateY(-1px)}
.trend-preview-apify .queue-sub>strong{display:block;color:var(--text);font-size:11px;margin-bottom:4px;overflow-wrap:anywhere}
.trend-preview-note{display:block;max-width:360px;margin-top:5px;color:#75808e;line-height:1.4}
.trend-headlines li::marker{color:var(--muted)}

/* One trend is one row now, so which platforms it was tagged for has to be
   said in the row — the three separate rows used to be the explanation. */
.trend-tags{display:flex;flex-wrap:wrap;align-items:center;gap:5px}
.trend-platform{padding:2px 7px;border-radius:99px;background:#222a33;color:#bdc7d2;font-size:9px;font-weight:700}

/* The browser is a decision surface, not a raw database table. Keep its
   controls and collection readiness visible while only the dense evidence
   table scrolls on a narrow screen. */
.trend-browser-toolbar{display:grid;grid-template-columns:repeat(5,minmax(120px,1fr));align-items:end;gap:9px;margin:14px 0}
.trend-browser-toolbar label{display:grid;gap:5px;min-width:0;color:var(--muted);font-size:10px;font-weight:700}
.trend-browser-toolbar select{width:100%;min-width:0}
.trend-readiness-strip{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-top:10px;padding:9px 11px;border:1px solid var(--line);border-radius:10px;background:var(--surface-sunken)}
.trend-readiness-title{margin-right:3px;color:var(--text);font-size:10px;font-weight:800}
.trend-readiness-summary{margin-right:3px;color:var(--muted);font-size:9px}
.trend-readiness-item{display:inline-flex;align-items:center;gap:5px;padding:4px 7px;border-radius:7px;background:var(--surface);color:var(--muted);font-size:9px}
.trend-readiness-item i{width:6px;height:6px;border-radius:50%;background:var(--red)}
.trend-readiness-item.is-ready i{background:var(--green)}
.trend-readiness-item strong{color:var(--text);font-size:9px}
.trend-readiness-empty{color:var(--muted);font-size:9px}
.trend-entertainment{display:flex;align-items:flex-start;gap:5px;flex-direction:column;margin-top:6px}.trend-entertainment small{color:var(--muted);font-size:9px;line-height:1.35}
.trend-sort-context{display:flex;align-items:baseline;gap:7px;flex-wrap:wrap;margin:3px 0 8px;color:var(--muted);font-size:9px}
.trend-sort-context strong{color:var(--text);font-size:10px}
.trend-table-scroll{max-width:100%;overflow-x:auto;border:1px solid var(--line);border-radius:11px;background:var(--surface);overscroll-behavior-inline:contain}
.trend-table-scroll:focus-visible{outline:3px solid rgb(47 104 77/.2);outline-offset:2px}
.trend-table{min-width:1020px;table-layout:fixed}
.trend-table td{vertical-align:top;overflow-wrap:anywhere}
.trend-col-main{width:35%}.trend-col-evidence{width:23%}.trend-col-category{width:8%}.trend-col-score{width:14%}.trend-col-rights{width:12%}.trend-col-action{width:8%}
.trend-source-name,.trend-source-code{display:block}
.trend-source-name{font-size:11px;font-weight:750}.trend-source-code{margin:2px 0 4px;color:var(--muted);font-size:8px;letter-spacing:.05em}
.trend-evidence{display:grid;justify-items:start;gap:3px;margin-top:8px}.trend-evidence strong{font-size:10px}.trend-evidence small{color:var(--muted);font-size:9px;line-height:1.45}
.trend-evidence-tier{display:inline-flex;padding:3px 6px;border-radius:6px;background:#eef1ed;color:var(--muted);font-size:8px;font-weight:800}
.trend-evidence-tier.platform_observed{background:#e6f1f3;color:#28667a}.trend-evidence-tier.cross_source_confirmed{background:#e7f2e8;color:#2f6846}
.trend-rights{display:grid;justify-items:start;gap:5px}.trend-rights small{color:var(--muted);font-size:9px;line-height:1.45}
.trend-queue-action{white-space:nowrap}.trend-candidate-pager{margin-top:14px}
.trend-queue-review.operator-card{width:min(560px,92vw)}
.trend-queue-review .approval-summary{grid-template-columns:repeat(2,minmax(0,1fr))}
.trend-queue-review>.approval-checklist{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:8px;color:#3f4d43;line-height:1.55}
.trend-queue-review>.approval-checklist input{margin-top:3px}

@media(max-width:1000px){.trend-browser-toolbar{grid-template-columns:repeat(3,minmax(0,1fr))}}
@media(max-width:650px){
  #trendsView>.panel{overflow:visible}
  .trend-browser-toolbar{grid-template-columns:repeat(2,minmax(0,1fr));width:100%}
  .trend-browser-toolbar label:last-child{grid-column:1/-1}
  .trend-readiness-strip{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start}
  .trend-readiness-title,.trend-readiness-summary,.trend-readiness-empty{grid-column:1/-1}
  .trend-readiness-item{min-width:0}.trend-readiness-item span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .trend-table-scroll{width:100%;max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .trend-table{min-width:820px}
  .trend-queue-review .approval-summary{grid-template-columns:1fr}
}

/* 판단하려면 봐야 한다. 썸네일과 사유를 나란히 둔다. */
.review-row{grid-template-columns:104px minmax(0,1fr);align-items:start}
.review-row .asset-thumb{width:104px;height:104px}
.review-reason{margin-top:6px;line-height:1.55;color:var(--text)}
.review-actions{display:flex;gap:8px;flex-wrap:wrap;align-items:center;margin-top:10px}
.review-note{flex:1;min-width:200px;background:var(--surface2);border:1px solid var(--line);
  color:inherit;border-radius:10px;padding:9px 11px;font:inherit}

/* Disconnecting is not destructive on Google's side, but it is still the
   button nobody should press by accident. */
.button.danger{border-color:#4a2a2f;color:var(--red)}
.button.danger:hover{border-color:var(--red)}

/* Profile editor. Eleven raw JSON boxes became fields shaped like their values:
   behavior_rules is twenty-five objects, and finding one rule in that blob
   without breaking a comma was the whole job. */
.pf-search{display:block;margin-bottom:12px}
.pf-search input{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:9px;background:var(--surface2);color:inherit;padding:10px 12px;font:inherit}
.pf-section{border:1px solid var(--line);border-radius:10px;margin-bottom:8px;background:var(--surface2)}
.pf-section>summary{cursor:pointer;padding:11px 13px;display:flex;align-items:center;gap:9px;font-size:12px}
.pf-section>summary:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:9px}
.pf-name{font-weight:750;font-family:ui-monospace,SFMono-Regular,Menlo,monospace}
.pf-meta{color:var(--muted);font-size:10px;font-variant-numeric:tabular-nums}
/* Marked on the summary so a touched section is visible while collapsed. */
.pf-changed{margin-left:auto;color:var(--accent);font-size:9px;font-weight:800}
.pf-body{padding:0 13px 13px}
.pf-fields{display:grid;grid-template-columns:repeat(auto-fit,minmax(240px,1fr));gap:10px}
.pf-field{display:flex;flex-direction:column;gap:5px;font-size:11px;color:var(--muted);min-width:0}
.pf-field>span{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:10px}
.pf-input{width:100%;box-sizing:border-box;border:1px solid var(--line);border-radius:8px;background:var(--surface);color:inherit;padding:8px 10px;font:inherit;font-size:12px}
.pf-input:focus-visible{outline:2px solid var(--accent);outline-offset:-1px}
.pf-input:disabled{opacity:.6;cursor:not-allowed}
.pf-lines,.pf-json{font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-size:11px;line-height:1.55}
.pf-hint{display:block;margin-top:4px;color:var(--muted);font-size:9px}
.pf-records{display:grid;gap:9px;margin-bottom:9px}
.pf-record{border:1px solid var(--line);border-radius:9px;padding:10px;display:grid;gap:8px;background:var(--surface)}
.pf-record-head{display:flex;align-items:center;gap:8px}
.pf-record-index{width:19px;height:19px;border-radius:50%;background:#222a33;color:#bdc7d2;display:grid;place-items:center;font-size:9px;font-weight:800}
.pf-record-head .mini-action{margin:0 0 0 auto}
.pf-group{display:grid;gap:12px}
.pf-subsection h4{margin:0 0 6px;font-size:11px;font-family:ui-monospace,SFMono-Regular,Menlo,monospace;color:var(--muted)}
/* The escape hatch stays available and stays out of the way. */
.pf-raw{margin:0 13px 13px;border-top:1px solid var(--line);padding-top:9px}
.pf-raw>summary{cursor:pointer;font-size:10px;color:var(--muted)}
.pf-raw>summary:focus-visible{outline:2px solid var(--accent);outline-offset:3px;border-radius:6px}

/* The profile follows the order an operator makes decisions in: public card,
   deeper identity, behaviour, visual direction, then immutable safety. */
.profile-editor-shell{display:grid;gap:0}
.profile-priority{display:grid;grid-template-columns:minmax(210px,280px) minmax(0,1fr);gap:clamp(22px,4vw,48px);padding:clamp(20px,3vw,34px);border-radius:16px;background:linear-gradient(135deg,#edf4ee 0,#f8faf7 52%,#f1f5ef 100%);box-shadow:inset 0 0 0 1px #dce6dd}
.profile-portrait-column{min-width:0}
.profile-portrait{position:relative;aspect-ratio:4/5;margin:0;overflow:hidden;border-radius:14px 14px 8px 8px;background:#dfe8df;box-shadow:0 18px 38px rgb(39 67 50/.13)}
.profile-portrait img{display:block;width:100%;height:100%;object-fit:cover;object-position:center top}
.profile-portrait figcaption{position:absolute;inset:auto 0 0;padding:34px 14px 12px;background:linear-gradient(transparent,rgb(17 31 22/.78));color:#fff;font-size:9px;font-weight:700;letter-spacing:.06em}
.profile-portrait-empty{display:grid;height:100%;place-content:center;gap:8px;text-align:center;color:var(--muted)}
.profile-portrait-empty span{font-size:52px;font-weight:800;color:var(--accent)}
.profile-portrait-actions{display:grid;gap:8px;margin-top:13px}
.profile-representative-select{display:grid;gap:5px;color:var(--muted);font-size:10px}
.profile-representative-select select{width:100%;min-width:0}
.profile-portrait-actions .button{width:100%}
.profile-priority-main{min-width:0}
.profile-stage-head{display:grid;grid-template-columns:auto minmax(0,1fr) auto;gap:12px;align-items:start}
.profile-stage-number{display:grid;width:28px;height:28px;place-items:center;border-radius:8px;background:var(--accent);color:#fff;font-size:9px;font-weight:850;font-variant-numeric:tabular-nums}
.profile-stage-head h3{margin:1px 0 4px;font-size:18px;letter-spacing:-.03em;color:#17241b}
.profile-stage-head p{max-width:68ch;margin:0;color:var(--muted);font-size:11px;line-height:1.6;text-wrap:pretty}
.profile-stage-head .overline{margin:0 0 5px}
.profile-stage-head>.pf-changed{align-self:center}
.profile-status-line{display:flex;flex-wrap:wrap;gap:6px;margin:18px 0 8px}
.profile-system-line{display:flex;flex-wrap:wrap;gap:7px 18px;padding-bottom:17px;border-bottom:1px solid #d9e3da;color:var(--muted);font-size:9px}
.profile-system-line b{color:var(--text);font-family:ui-monospace,SFMono-Regular,Menlo,monospace;font-weight:650}
.profile-system-line .text-button{padding:0;font-size:inherit}
.profile-priority-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:15px 13px;margin-top:20px}
.profile-priority-field{display:grid;align-content:start;gap:6px;min-width:0}
.profile-priority-field>span{font-size:11px;font-weight:750;color:#2e3a32}
.profile-priority-field>small{color:var(--muted);font-size:9px;line-height:1.45}
.profile-priority-field.is-wide,.profile-priority-field.is-full{grid-column:1/-1}
.profile-priority-field textarea{resize:vertical;line-height:1.6}
.profile-operation-block{display:grid;grid-template-columns:minmax(140px,.34fr) minmax(0,1fr);gap:22px;margin-top:22px;padding-top:18px;border-top:1px solid #d9e3da}
.profile-operation-block>div:first-child strong{font-size:12px}
.profile-operation-block>div:first-child p{margin:5px 0 0;color:var(--muted);font-size:9px;line-height:1.55}
.profile-operation-fields{display:grid;grid-template-columns:1.4fr .8fr .8fr;gap:10px}
.profile-edit-cost{display:grid;grid-template-columns:auto minmax(0,1fr);gap:12px;margin:24px 0 0;padding:16px 0;border-bottom:1px solid var(--line)}
.profile-edit-cost .profile-stage-number{background:#805e2f}
.profile-edit-cost strong{font-size:12px}.profile-edit-cost p{margin:4px 0 0;color:var(--muted);font-size:10px;line-height:1.6}
.profile-editor-shell>.pf-search{display:grid;grid-template-columns:auto minmax(220px,380px);align-items:center;justify-content:space-between;gap:14px;margin:0;padding:18px 0;border-bottom:1px solid var(--line)}
.profile-editor-shell>.pf-search>span{font-size:11px;font-weight:750}
.profile-stage{padding:30px 0 4px;border-bottom:1px solid var(--line)}
.profile-stage-sections{margin:17px 0 22px;padding-left:40px}
.profile-stage .pf-section{background:#fafbf9;border-color:#e1e7e1}
.profile-stage .pf-section[open]{background:#f7f9f6}
.profile-stage .pf-section>summary{min-height:44px;padding:11px 14px}
.profile-stage .pf-name{font-family:inherit;font-size:12px;color:#27352c}
.pf-source-key{color:#849087;font-size:9px;font-weight:500}
.pf-description{margin:-2px 13px 10px;color:var(--muted);font-size:9px;line-height:1.5}
.profile-stage .pf-body{padding-top:3px}
.profile-locked{border-bottom:0}
.profile-locked .profile-stage-number{background:#7c8880}
.profile-savebar{position:sticky;z-index:8;bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:18px;margin:24px -8px 0;padding:13px 16px;border:1px solid #cad8cd;border-radius:12px;background:rgb(255 255 255/.94);box-shadow:0 14px 34px rgb(39 67 50/.14);backdrop-filter:blur(14px);color:var(--muted);font-size:10px}
.profile-savebar>div{display:flex;gap:8px}
.profile-source-summary{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:1px;overflow:hidden;border:1px solid var(--line);border-radius:12px;background:var(--line)}
.profile-source-summary>div{padding:15px;background:#f8faf7;text-align:center}
.profile-source-summary strong{display:block;font-size:22px;font-variant-numeric:tabular-nums}
.profile-source-summary span{display:block;margin-top:2px;color:var(--muted);font-size:9px}
.profile-source-grid{display:grid;grid-template-columns:minmax(0,.8fr) minmax(0,1.2fr);gap:0 28px;margin-top:22px}
.profile-source-grid>section{padding:18px 0;border-top:1px solid var(--line)}
.profile-source-grid>section>p{margin:10px 0 0;color:var(--muted);font-size:9px;line-height:1.55}
.profile-source-grid .profile-source-accounts{grid-column:1/-1}
.profile-source-facts{display:flex;flex-wrap:wrap;gap:12px;margin-bottom:9px;color:var(--muted);font-size:10px}
.profile-source-accounts .character-account-list{margin-top:8px}
.actor-tab:hover{color:var(--text);background:#edf3ee}
@media(max-width:900px){.profile-priority{grid-template-columns:190px minmax(0,1fr)}.profile-operation-block{grid-template-columns:1fr}.profile-operation-fields{grid-template-columns:1fr 1fr}.profile-operation-fields .profile-priority-field:first-child{grid-column:1/-1}}
@media(max-width:650px){.profile-priority{grid-template-columns:1fr;padding:16px}.profile-portrait-column{display:grid;grid-template-columns:110px minmax(0,1fr);gap:13px;align-items:start}.profile-portrait{width:110px}.profile-portrait-actions{margin-top:0}.profile-stage-head h3{font-size:16px}.profile-priority-fields,.profile-operation-fields{grid-template-columns:1fr}.profile-priority-field.is-wide,.profile-priority-field.is-full,.profile-operation-fields .profile-priority-field:first-child{grid-column:auto}.profile-editor-shell>.pf-search{grid-template-columns:1fr}.profile-stage-sections{padding-left:0}.profile-savebar{position:static;align-items:stretch;flex-direction:column;margin-inline:0}.profile-savebar>div{display:grid;grid-template-columns:1fr 1fr}.profile-source-summary{grid-template-columns:1fr 1fr}.profile-source-grid{grid-template-columns:1fr}.profile-source-grid .profile-source-accounts{grid-column:auto}}

/* 썸네일은 크게 볼 수 있어야 판단에 쓸 수 있다. */
.asset-preview-button{border:0;background:transparent;padding:0;cursor:pointer;display:block;
  border-radius:9px;line-height:0}
.asset-preview-button:focus-visible{outline:2px solid var(--accent);outline-offset:2px}
.asset-preview-button:hover .asset-thumb{border-color:var(--accent)}
video.asset-thumb{width:64px;height:64px;object-fit:cover;border-radius:9px;
  background:#12171d;border:1px solid var(--line)}
.asset-preview-large{max-height:64vh}
.asset-preview-large video,.asset-preview-large img{width:100%;height:100%;object-fit:contain}

/* Publishing readiness contains exactly the two operator-facing publishing gates. */
.readiness-lane.is-primary .readiness-pulse{grid-template-columns:repeat(2,minmax(0,1fr))}

/* A counter says how long the text is; it does not say what the text is. Each
   destination opens to the copy it will actually carry. */
.brief-target{border:1px solid var(--line);border-radius:9px;background:var(--surface2)}
.brief-target+.brief-target{margin-top:6px}
.brief-target>summary{cursor:pointer;display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:8px 10px;font-size:11px}
.brief-target>summary:focus-visible{outline:2px solid var(--accent);outline-offset:-2px;border-radius:8px}
.brief-target>summary strong{min-width:150px;font-size:11px}
.brief-target-body{padding:0 10px 10px;display:grid;gap:8px}
.brief-field{display:grid;gap:3px}
.brief-field>span{font-size:9px;color:var(--muted);font-weight:700}
.brief-field>p{margin:0;font-size:11px;line-height:1.55;white-space:pre-wrap;padding:7px 9px;border:1px solid var(--line);border-radius:7px;background:var(--surface)}
.brief-counter.is-ok{color:var(--green);background:#163022}
.brief-issues{margin:0;padding-left:16px;color:var(--red);font-size:10px;line-height:1.6}

/* 요약 숫자는 그 목록으로 가는 입구다. */
.pulse-card.is-link{border:1px solid var(--line);cursor:pointer;text-align:left;font:inherit;color:inherit}
.pulse-card.is-link:hover{border-color:var(--accent)}
.pulse-card.is-active{border-color:var(--accent);box-shadow:inset 2px 0 var(--accent)}
.pulse-card.is-link:focus-visible{outline:2px solid var(--accent);outline-offset:2px}

/* The same clip fills a Reel and is cropped in a Feed. Numbers do not show
   that; the frame does. */
.brief-frames{display:flex;gap:8px;flex-wrap:wrap}
.brief-frame{margin:0;position:relative;width:84px;border:1px solid var(--line);border-radius:8px;overflow:hidden;background:#12171d}
.brief-frame img,.brief-frame video{width:100%;height:100%;object-fit:cover;display:block}
.brief-frame figcaption{position:absolute;left:4px;bottom:4px;padding:1px 5px;border-radius:99px;background:#000a;color:#fff;font-size:8px;font-variant-numeric:tabular-nums}
.brief-issues.is-warn{color:var(--orange)}
/* A step the brief cannot take for you. Saying it here beats meeting five
   BLOCK issues at submit. */
.brief-step{padding:7px 9px;border-left:3px solid var(--orange);background:#241d12;border-radius:0 7px 7px 0;font-size:10px;line-height:1.55;color:#e0cba8}
.brief-counter.is-step{color:var(--orange);background:#332817}

/* Each destination previews inside its own platform frame. The composer's
   single-target preview uses the same shapes; sharing them is what keeps a
   Reel looking like a Reel in both places. */
.brief-preview{max-width:280px}
.brief-preview .expected-post{margin:0}
.brief-preview .expected-media-empty{display:grid;place-items:center;border:1px dashed var(--line);border-radius:8px;color:var(--muted);font-size:10px;text-align:center;padding:8px}
.brief-preview .expected-media video,.brief-preview .expected-media img{width:100%;height:100%;object-fit:cover;display:block}

/* The brief borrows the preview column while its panel is open, so every
   selected destination is read in one place instead of inside its own fold. */
.brief-preview-card+.brief-preview-card{margin-top:14px;padding-top:14px;border-top:1px solid var(--line)}
.brief-preview-label{font-size:10px;font-weight:750;color:var(--muted);margin-bottom:7px}
.brief-preview-card .expected-post{margin:0}
.brief-preview-card .expected-media-empty{display:grid;place-items:center;border:1px dashed var(--line);border-radius:8px;color:var(--muted);font-size:10px;text-align:center;padding:8px}
.brief-preview-card .expected-media video,.brief-preview-card .expected-media img{width:100%;height:100%;object-fit:cover;display:block}

/* 캐릭터 추가 폼 — 칸이 열 개로 늘어 한 줄짜리 나열로는 읽히지 않는다 */
.operator-card.wide{width:min(44rem,94vw)}
/* 폼이 화면보다 길어지면 카드 안에서 스크롤한다. 이걸 빼면 노트북 화면에서
   "생성 시작" 버튼이 뷰포트 밖으로 나가 누를 수가 없다. */
.operator-card{max-height:92vh;overflow-y:auto}
.operator-card textarea{width:100%;resize:vertical;border:1px solid var(--line);border-radius:8px;background:#fff;color:var(--text);padding:9px;font:inherit}.outbound-evidence{border:1px solid var(--line);border-radius:10px;padding:12px;background:#f7f9f7}.outbound-body{white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0 0;color:var(--text);font-size:12px;line-height:1.55}.outbound-history{margin-top:6px}
.brief-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(13rem,1fr));gap:.75rem 1rem;margin:.75rem 0}
.brief-grid .brief-field[data-for="concept"],
.brief-grid .brief-field[data-for="interests"],
.brief-grid .brief-field[data-for="additional_prohibitions"]{grid-column:1/-1}
.brief-label{font-weight:600;font-size:.82rem;letter-spacing:.01em}
.brief-field .req{color:var(--red);margin-left:.15rem}
.field-error{display:block;margin-top:.25rem;font-size:.78rem;color:var(--red)}
.brief-field input.invalid,.brief-field textarea.invalid{border-color:var(--red)}
.brief-images{margin:.5rem 0 .75rem}
.draft-image-list{display:flex;flex-wrap:wrap;gap:.5rem;margin-top:.5rem}
.draft-image{margin:0;width:8.5rem}
.draft-image img{width:100%;height:8.5rem;object-fit:cover;border-radius:.4rem;display:block}
.draft-image figcaption{display:flex;flex-direction:column;gap:.15rem;font-size:.72rem;margin-top:.25rem;word-break:break-all}
.import-steps ol{margin:.4rem 0 0;padding-left:1.1rem;display:flex;flex-direction:column;gap:.45rem}
.import-steps li strong{display:block}
.import-next{margin-top:.75rem}
.import-next code{display:block;white-space:pre-wrap;word-break:break-all;font-size:.76rem;margin-top:.25rem}
.draft-blocked{color:var(--orange);white-space:normal}
.will-create{list-style:none;margin:.5rem 0 0;padding:0;display:grid;gap:.4rem}
.will-create li{display:grid;grid-template-columns:1fr auto auto;gap:.5rem;align-items:center;padding:.5rem .6rem;background:var(--surface-sunken);border:1px solid var(--line);border-radius:.5rem}
.will-create strong{display:block;font-size:.82rem}
/* 개발용 배우. 같은 화면의 라이브 배우와 한눈에 갈라져야 한다. */
.badge.purpose-dev{letter-spacing:.02em;font-weight:800}
.character-card:has(.purpose-dev){border-style:dashed}

/* 등록 승인과 운영 증거를 같은 숫자로 접지 않는다. 네 가지 핵심 지표는
   데스크톱에서 한 행으로 읽고, 좁은 화면에서만 두 열로 접는다. */
#characterKpis{grid-template-columns:repeat(4,minmax(0,1fr));gap:11px;margin-bottom:18px}
#characterKpis .character-kpi{position:relative;display:flex;min-height:122px;flex-direction:column;overflow:hidden}
#characterKpis .character-kpi .label{font-weight:700;letter-spacing:.01em}
#characterKpis .character-kpi .value{line-height:1}
#characterKpis .character-kpi .hint{margin-top:auto;padding-top:12px;line-height:1.45}
#characterKpis .character-kpi.is-attention{border-color:#e5c18d;background:linear-gradient(145deg,#fff8ed,#fff)}
#characterKpis .character-kpi.is-attention::before{position:absolute;inset:0 auto 0 0;width:3px;background:var(--orange);content:""}
#characterKpis .character-kpi.is-clear::before{position:absolute;inset:0 auto 0 0;width:3px;background:var(--green);content:""}
@media(max-width:1000px){#characterKpis{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:650px){#characterKpis{gap:9px}#characterKpis .character-kpi{min-height:116px;padding:15px}}

.empty-action{display:grid;justify-items:center;gap:8px;text-align:center;padding:28px 18px}
.empty-action strong{font-size:13px;color:#e9eef2}
.empty-action p{margin:0;font-size:11px;color:var(--muted)}
.empty-action .button{margin-top:4px;font-size:12px;font-weight:700}

/* 반응 인박스는 댓글 원문, 분류, 답변 상태가 한 덩어리로 읽혀야 한다. */
.engagement-notice,.engagement-send-boundary{padding:13px 15px;border:1px solid #b9d7d0;border-left:4px solid var(--accent);border-radius:10px;background:#f2faf7;margin-bottom:16px}
.engagement-notice strong,.engagement-send-boundary strong{font-size:12px}.engagement-notice p,.engagement-send-boundary p{margin:4px 0 0;color:var(--muted);font-size:11px;line-height:1.55}
.engagement-filters{display:flex;gap:10px;align-items:end;flex-wrap:wrap;margin-bottom:16px}.engagement-filters label{display:grid;gap:5px;min-width:150px;font-size:10px;font-weight:700;color:var(--muted)}
.engagement-list{display:grid;gap:11px}.engagement-card{border:1px solid var(--line);border-radius:13px;background:var(--surface);padding:15px;display:grid;gap:11px}.engagement-card>header{display:flex;justify-content:space-between;gap:12px;align-items:start}.engagement-card>header>div:first-child{display:grid;grid-template-columns:auto 1fr;gap:2px 8px;align-items:baseline}.engagement-card>header strong{font-size:13px}.engagement-card>header span:last-child{grid-column:2;color:var(--muted);font-size:10px}.engagement-platform{font-size:9px;font-weight:800;letter-spacing:.08em;text-transform:uppercase;color:var(--accent)}.engagement-state{display:flex;gap:5px;flex-wrap:wrap;justify-content:end}.engagement-context{display:flex;justify-content:space-between;gap:10px;color:var(--muted);font-size:10px}.engagement-card blockquote{margin:0;padding:12px 14px;border-radius:10px;background:var(--surface2);border-left:3px solid var(--line)}.engagement-card blockquote strong{font-size:10px;color:var(--muted)}.engagement-card blockquote p{margin:5px 0 0;white-space:pre-wrap;overflow-wrap:anywhere;font-size:13px;line-height:1.55}.engagement-analysis{display:flex;align-items:center;gap:6px;flex-wrap:wrap}.engagement-card footer{display:flex;align-items:center;gap:7px;flex-wrap:wrap}.engagement-card footer .queue-sub{margin-left:auto}.engagement-pager{display:flex;align-items:center;justify-content:center;gap:12px;margin-top:16px}.engagement-pager span{font-size:10px;color:var(--muted)}
.engagement-findings{margin:7px 0 0;padding-left:18px;font-size:10px;line-height:1.8}.engagement-revisions{display:grid;gap:8px;padding:0 14px 14px}.engagement-revisions>div{padding:9px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface)}.engagement-revisions strong,.engagement-revisions span{display:block;font-size:10px}.engagement-revisions span{color:var(--muted);margin-top:2px}.engagement-revisions p{white-space:pre-wrap;margin:6px 0 0;font-size:11px;line-height:1.5}
.approval-checklist.engagement-review-check{display:flex;align-items:flex-start}.engagement-review-check span{font-size:10px;line-height:1.5;color:#3f4d43}.engagement-review-check input{flex:none}
@media(max-width:650px){.engagement-card>header,.engagement-context{display:grid}.engagement-state{justify-content:start}.engagement-card footer .queue-sub{margin-left:0;width:100%}.engagement-filters label{min-width:100%;}}

/* Character portfolio: restore the image-led two-column cards. The dashboard
   signals stay in each card, but they support the character instead of turning
   the entire portfolio into a full-width status report. */
.character-portfolio-panel-head{display:grid;gap:18px}
.character-portfolio-panel-head>.character-filters{display:grid;grid-template-columns:minmax(240px,1.6fr) repeat(4,minmax(118px,1fr));width:100%}
.character-portfolio-panel-head>.character-filters input,.character-portfolio-panel-head>.character-filters select{min-width:0;width:100%}
.character-dashboard-grid{align-items:start;gap:16px}
.character-card-dashboard{overflow:hidden;box-shadow:0 13px 34px rgb(39 67 50/.075);transition:border-color .18s ease,box-shadow .18s ease,transform .18s ease}
.character-card-dashboard.is-openable:hover{transform:translateY(-2px);box-shadow:0 18px 42px rgb(39 67 50/.11)}
.character-card-dashboard .character-hero{height:220px}
.character-card-dashboard .character-card-head{align-items:center}
.character-card-dashboard .character-badges{align-self:start}
.character-card-dashboard .character-identity{padding-block:12px}
.character-card-dashboard .character-identity strong{font-size:13px;text-wrap:pretty}
.character-card-dashboard .character-identity p{font-size:11px;text-wrap:pretty}
.character-card-dashboard .character-state-grid{grid-template-columns:repeat(2,minmax(0,1fr));overflow:hidden;border:1px solid var(--line);border-radius:10px}
.character-card-dashboard .character-state-lane:nth-child(2){border-right:0}
.character-card-dashboard .character-state-lane:nth-child(-n+2){border-bottom:1px solid var(--line)}
.character-card-dashboard .character-signal-grid{overflow:hidden;border:1px solid var(--line);border-radius:10px}
.character-card-dashboard .character-signal-grid>div{padding:12px 13px}
.character-card-dashboard .character-signal-grid strong{font-size:17px}
.character-card-dashboard .character-primary-action{grid-template-columns:minmax(72px,.22fr) minmax(0,1fr);margin:0;padding:12px 13px}
.character-card-dashboard .character-primary-action>span{grid-row:1/3}
.character-card-dashboard .character-primary-action button{grid-column:2;grid-row:auto;justify-self:start;padding:0}
.character-card-dashboard .character-evidence{margin:0;border-top:1px solid var(--line)}
.character-card-dashboard .character-evidence>summary{padding:13px 2px 0}
.character-card-dashboard .character-evidence[open]>summary{margin-bottom:15px;padding-bottom:10px}

@media(max-width:1250px){
  .character-portfolio-panel-head>.character-filters{grid-template-columns:repeat(4,minmax(0,1fr))}
  .character-portfolio-panel-head>.character-filters input{grid-column:1/-1}
  .character-dashboard-grid{grid-template-columns:1fr}
}
@media(max-width:650px){
  .character-portfolio-panel-head>.character-filters{grid-template-columns:1fr 1fr}
  .character-portfolio-panel-head>.character-filters input{grid-column:1/-1}
  .character-card-dashboard .character-hero{height:200px}
  .character-card-dashboard .character-signal-grid{grid-template-columns:1fr 1fr}
  .character-card-dashboard .character-signal-grid>div{display:grid;grid-template-columns:1fr auto}
  .character-card-dashboard .character-signal-grid>div:last-child{grid-column:1/-1}
  .character-card-dashboard .character-signal-grid small{grid-column:1/-1}
  .character-card-dashboard .character-primary-action{grid-template-columns:1fr}
  .character-card-dashboard .character-primary-action>span,.character-card-dashboard .character-primary-action strong,.character-card-dashboard .character-primary-action small,.character-card-dashboard .character-primary-action button{grid-column:1;grid-row:auto}
}

/* Results are only actionable when coverage quality is visible before the
   performance numbers. Keep the evidence ledger and each post's observation
   timestamps in the same reading path as its metrics. */
.performance-coverage-ledger{display:grid;grid-template-columns:minmax(220px,.72fr) minmax(340px,1.28fr);overflow:hidden;margin:0 0 16px;border:1px solid var(--line);border-radius:14px;background:var(--surface2)}
.coverage-score{display:flex;flex-direction:column;padding:20px;border-right:1px solid var(--line);background:linear-gradient(145deg,#eff6ef,#fff)}
.coverage-score>.overline{color:var(--green)}
.coverage-score>strong{display:flex;align-items:baseline;margin-top:4px;font-variant-numeric:tabular-nums;letter-spacing:-.05em}
.coverage-score>strong b{font-size:38px}.coverage-score>strong span{color:var(--muted);font-size:20px;font-weight:700}
.coverage-score p{max-width:290px;margin:6px 0 15px;line-height:1.5}
.coverage-score small{margin-top:8px;color:var(--muted);font-size:9px;font-weight:650}
.coverage-meter{height:6px;overflow:hidden;border-radius:99px;background:#dfe8e0}
.coverage-meter>span{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--green),var(--accent))}
.coverage-ledger-states{display:grid;align-content:center;padding:11px 17px}
.coverage-ledger-row{display:grid;grid-template-columns:8px minmax(0,1fr) auto;gap:10px;align-items:center;padding:9px 0;border-bottom:1px solid var(--line)}
.coverage-ledger-row:last-child{border-bottom:0}.coverage-ledger-dot{width:7px;height:26px;border-radius:99px;background:var(--red)}
.coverage-ledger-row.is-good .coverage-ledger-dot{background:var(--green)}.coverage-ledger-row.is-warn .coverage-ledger-dot{background:var(--orange)}
.coverage-ledger-row strong,.coverage-ledger-row small{display:block}.coverage-ledger-row strong{font-size:11px}.coverage-ledger-row small{margin-top:2px;color:var(--muted);font-size:9px;line-height:1.4}.coverage-ledger-row>b{font-size:18px;font-variant-numeric:tabular-nums}
.coverage-ledger-foot{grid-column:1/-1;display:grid;grid-template-columns:minmax(0,1fr) auto;gap:5px 20px;padding:11px 18px;border-top:1px solid var(--line);background:var(--surface);color:var(--muted);font-size:9px}
.coverage-ledger-foot strong{color:var(--text)}.coverage-ledger-foot p{grid-column:1/-1;margin:0;line-height:1.5}
.performance-coverage-ledger.is-compact{grid-template-columns:minmax(250px,1fr) minmax(240px,.8fr);background:var(--surface)}
.performance-coverage-ledger.is-compact .coverage-score{padding:18px 20px;background:var(--surface2)}
.performance-coverage-ledger.is-compact .coverage-score>strong{margin:3px 0 13px;letter-spacing:-.035em}
.performance-coverage-ledger.is-compact .coverage-score>strong b{font-size:30px}.performance-coverage-ledger.is-compact .coverage-score>strong span{font-size:15px}
.performance-coverage-ledger.is-compact .coverage-score small{margin-top:7px}
.coverage-compact-status{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:stretch}
.coverage-compact-status>div{display:flex;flex-direction:column;justify-content:center;gap:6px;padding:18px;border-left:3px solid var(--line)}
.coverage-compact-status>div+div{border-left-width:1px}.coverage-compact-status span{color:var(--muted);font-size:10px;font-weight:700}.coverage-compact-status strong{font-size:20px;font-variant-numeric:tabular-nums}
.coverage-compact-status .is-warn{border-left-color:var(--orange);background:#fffaf3}.coverage-compact-status .is-bad{background:#fff6f4}.coverage-compact-status .is-bad:first-child{border-left-color:var(--red)}.coverage-compact-status .is-good{background:#f4faf5}
.performance-segment{margin-top:19px;padding-top:18px;border-top:1px solid var(--line)}
.performance-segment-head{display:flex;align-items:end;justify-content:space-between;gap:14px;margin-bottom:10px}
.performance-segment-head .overline{display:block;margin-bottom:3px}.performance-segment-head h3{margin:0;font-size:14px;letter-spacing:-.02em}
.performance-segment-facets{display:flex;flex-wrap:wrap;justify-content:flex-end;gap:5px}
.performance-segment-facets span,.performance-segment-facets b{padding:4px 7px;border:1px solid var(--line);border-radius:7px;background:var(--surface2);color:var(--muted);font-size:9px;font-weight:700}
.performance-segment-facets b{color:var(--text);font-variant-numeric:tabular-nums}
.performance-table-scroll{max-width:100%;overflow:auto;border:1px solid var(--line);border-radius:11px;background:var(--surface)}
.performance-table-scroll:focus-visible{outline:3px solid rgb(47 104 77/.2);outline-offset:2px}
.performance-table{min-width:900px}.performance-table th:first-child{width:520px}.performance-table td{vertical-align:top;padding-block:12px}.performance-table td:first-child{padding-left:11px}
.performance-content-cell{display:grid;grid-template-columns:78px minmax(320px,1fr);gap:12px;align-items:start}
.performance-preview-button{position:relative;display:block;width:78px;aspect-ratio:4/5;overflow:hidden;padding:0;border:1px solid var(--line);border-radius:9px;background:var(--surface-sunken);cursor:pointer}
.performance-preview-button.is-compact{width:72px;border-radius:10px}
.performance-preview-button.is-detail{width:120px;border-radius:12px}
.performance-preview-button:hover{border-color:var(--accent)}.performance-preview-button:focus-visible{outline:3px solid rgb(47 104 77/.24);outline-offset:2px}
.performance-preview-link{text-decoration:none;color:inherit}
.performance-preview-button img,.performance-preview-button video,.performance-preview-empty{width:100%;height:100%;object-fit:cover}
.performance-preview-button img,.performance-preview-button video{display:block;background:#10151a}.performance-preview-empty{display:grid;place-items:center;color:var(--muted);font-size:12px;font-weight:850}
.performance-preview-empty.is-link{background:linear-gradient(145deg,rgb(47 104 77/.18),rgb(16 21 26/.92))}
.performance-preview-button>span:last-child{position:absolute;right:4px;bottom:4px;padding:2px 5px;border-radius:99px;background:rgb(0 0 0/.72);color:#fff;font-size:8px;font-weight:750}
.performance-preview-stale{position:absolute;left:4px;top:4px;padding:2px 6px;border-radius:99px;background:rgb(180 83 9/.92);color:#fff;font-size:8px;font-weight:800;letter-spacing:-.01em}
.performance-format-note{margin:6px 0 0;padding:7px 9px;border:1px solid rgb(180 83 9/.22);border-radius:8px;background:rgb(180 83 9/.08);color:var(--text);font-size:11px;line-height:1.45}
.performance-collection-hint{display:flex;flex-wrap:wrap;align-items:center;gap:6px;margin-top:6px;font-size:11px;line-height:1.4}
.performance-collection-hint .badge{flex-shrink:0}
.performance-collection-actions{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.performance-content-excerpt{margin:5px 0 0;color:var(--muted);font-size:10px;line-height:1.45}
.performance-content-facets.is-compact{display:flex;flex-wrap:wrap;gap:4px;margin:5px 0 2px}
.performance-content-facets.is-compact>span{padding:1px 6px;border:1px solid var(--line);border-radius:99px;color:var(--muted);font-size:8px;font-weight:700}
.performance-detail-preview-body{display:grid;grid-template-columns:120px minmax(0,1fr);gap:14px;align-items:start}
.performance-detail-preview .detail-actions.compact{margin-top:8px}
.metric-unavailable{color:var(--muted);font-size:11px;font-weight:650;line-height:1.35}
.performance-content-copy{min-width:0}.performance-content-flags{display:flex;flex-wrap:wrap;gap:4px;margin-bottom:6px}.performance-content-copy>.content-post-link{display:block;max-width:100%;padding:0;text-align:left;line-height:1.4}.performance-content-copy>.content-post-link strong{display:block;overflow-wrap:anywhere;font-size:12px}
.performance-observation-meta{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px 12px;margin:10px 0 0}
.performance-observation-meta>div{min-width:0}.performance-observation-meta dt{color:var(--muted);font-size:8px;font-weight:750}.performance-observation-meta dd{margin:2px 0 0;overflow-wrap:anywhere;color:var(--text);font-size:9px;line-height:1.4}
.content-intelligence-toolbar.is-simple{justify-content:flex-end;margin-top:-4px}
.performance-segment.is-compact{margin-top:16px;padding-top:15px}.performance-segment.is-compact .performance-segment-head{align-items:center;margin-bottom:8px}
.performance-result-list{overflow:hidden;border:1px solid var(--line);border-radius:11px;background:var(--surface)}
.performance-result-row{display:grid;grid-template-columns:minmax(300px,1.45fr) minmax(260px,1fr);gap:18px;align-items:center;padding:11px;border-bottom:1px solid var(--line)}.performance-result-row:last-child{border-bottom:0}
.performance-result-row .performance-content-cell{grid-template-columns:72px minmax(0,1fr);gap:12px;align-items:start}.performance-result-row .performance-preview-button{width:72px}.performance-result-row .performance-content-copy>.badge{margin-bottom:5px}
.performance-result-times{display:flex;flex-wrap:wrap;gap:4px 12px;margin-top:7px;color:var(--muted);font-size:9px}
.performance-result-metrics{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:8px;margin:0}
.performance-result-metrics>div{min-width:0}.performance-result-metrics dt{overflow:hidden;color:var(--muted);font-size:9px;font-weight:700;text-overflow:ellipsis;white-space:nowrap}.performance-result-metrics dd{margin:3px 0 0;font-size:14px;font-weight:800;font-variant-numeric:tabular-nums}.performance-result-metrics dd.is-empty{color:var(--muted);font-weight:600}

@media(max-width:900px){
  .performance-coverage-ledger{grid-template-columns:1fr}.coverage-score{border-right:0;border-bottom:1px solid var(--line)}
  .performance-coverage-ledger.is-compact{grid-template-columns:1fr}.performance-coverage-ledger.is-compact .coverage-score{border-bottom:1px solid var(--line)}
  .coverage-compact-status>div:first-child{border-left:0}.performance-result-row{grid-template-columns:1fr}.performance-result-metrics{padding-left:68px}
}
@media(max-width:650px){
  .performance-coverage-ledger{min-width:0}.coverage-score{padding:17px}.coverage-score>strong b{font-size:32px}.coverage-ledger-states{padding:8px 14px}.coverage-ledger-foot{grid-template-columns:1fr}.coverage-ledger-foot p{grid-column:auto}
  .performance-segment-head{display:grid;align-items:start}.performance-segment-facets{justify-content:flex-start}.performance-table{min-width:820px}.performance-table th:first-child{width:450px}.performance-content-cell{grid-template-columns:66px minmax(300px,1fr)}.performance-preview-button{width:66px}.performance-observation-meta{gap:5px 9px}
  .performance-coverage-ledger.is-compact .coverage-score{padding:16px}.performance-coverage-ledger.is-compact .coverage-score>strong b{font-size:28px}.coverage-compact-status>div{padding:14px}.coverage-compact-status strong{font-size:18px}
  .performance-segment.is-compact .performance-segment-head{display:flex}.performance-result-row{gap:11px;padding:10px}.performance-result-row .performance-content-cell{grid-template-columns:64px minmax(0,1fr)}.performance-result-row .performance-preview-button{width:64px}.performance-result-metrics{grid-template-columns:repeat(2,minmax(0,1fr));padding-left:76px}.performance-result-metrics dt{white-space:normal}
}

/* Character calendar dashboard — one actor's life rhythm, content and real
   production evidence share a timeline but never share the same semantics. */
.actor-calendar-panel{min-height:0;overflow:hidden;padding:0;background:#fff}
.actor-calendar-head{display:flex;align-items:flex-start;justify-content:space-between;gap:24px;padding:22px 23px 18px;border-bottom:1px solid var(--line);background:linear-gradient(120deg,#f8fbf7 0,#fff 62%)}
.actor-calendar-head h2{margin:0;font-size:21px;font-weight:680;letter-spacing:-.035em;text-wrap:balance}
.actor-calendar-head p{max-width:65ch;margin-top:6px;line-height:1.55;text-wrap:pretty}
.actor-calendar-actions{display:flex;align-items:center;justify-content:flex-end;gap:7px;flex-wrap:wrap}
.actor-calendar-actions .calendar-nav-group{gap:2px}.actor-calendar-actions .calendar-nav-button{display:grid;place-items:center;width:38px;height:38px;padding:0;border-radius:50%}
.actor-calendar-layer-bar{display:flex;align-items:center;gap:9px 20px;overflow:auto;padding:11px 23px;border-bottom:1px solid var(--line);background:#fff;scrollbar-width:thin}
.actor-calendar-layer-bar label{display:inline-flex;align-items:center;gap:7px;flex:0 0 auto;color:#536158;font-size:10px;font-weight:700;cursor:pointer}
.actor-calendar-layer-bar input{width:15px;height:15px;margin:0;accent-color:var(--accent)}
.actor-layer-dot{width:8px;height:8px;border-radius:2px;background:#176b67}.actor-layer-dot.is-social{background:#2f684d}.actor-layer-dot.is-production{background:#806db3;transform:rotate(45deg)}.actor-layer-dot.is-proposal{border:1px dashed #9b6728;background:#fff6e7}
#actorCalendarDashboard{display:grid;gap:0;min-width:0}
.actor-calendar-metrics{display:grid;grid-template-columns:minmax(280px,1.45fr) repeat(3,minmax(130px,.55fr));border-bottom:1px solid var(--line)}
.actor-calendar-metrics>div{display:flex;flex-direction:column;justify-content:center;min-width:0;padding:17px 19px;border-right:1px solid var(--line);background:#fff}
.actor-calendar-metrics>div:last-child{border-right:0}.actor-calendar-metrics>div.is-next{background:linear-gradient(145deg,#edf6ef,#fbfdfb)}.actor-calendar-metrics>div.is-risk{background:#fff7f5}
.actor-calendar-metrics span,.actor-calendar-rhythm span{color:var(--muted);font-size:9px;font-weight:720;letter-spacing:.03em}
.actor-calendar-metrics strong{display:block;overflow:hidden;margin-top:5px;font-size:24px;font-weight:760;line-height:1.1;letter-spacing:-.04em;text-overflow:ellipsis;white-space:nowrap;font-variant-numeric:tabular-nums}
.actor-calendar-metrics .is-next strong{font-size:17px;letter-spacing:-.025em}.actor-calendar-metrics .is-risk strong{color:var(--red)}
.actor-calendar-metrics small{margin-top:5px;overflow:hidden;color:var(--muted);font-size:9px;text-overflow:ellipsis;white-space:nowrap}
.actor-calendar-sources{display:grid;grid-template-columns:auto auto minmax(220px,1fr);gap:8px;align-items:center;padding:10px 19px;border-bottom:1px solid var(--line);background:#fafbf9}
.actor-calendar-sources>:is(span,button){position:relative;padding:6px 8px 6px 22px;border:1px solid #e1e6e0;border-radius:7px;background:#fff;color:#637068;font-family:inherit;font-size:9px;font-weight:700;line-height:1.4;text-align:left}
.actor-calendar-sources>button{cursor:pointer}.actor-calendar-sources>button:hover,.actor-calendar-sources>button:focus-visible{border-color:#91aa99;color:#244d36;outline:2px solid rgb(47 118 81/.15);outline-offset:1px}
.actor-calendar-sources>:is(span,button)::before{position:absolute;top:50%;left:9px;width:6px;height:6px;border-radius:50%;background:#aab3ac;content:"";transform:translateY(-50%)}
.actor-calendar-sources>:is(span,button).is-connected::before{background:var(--green);box-shadow:0 0 0 3px rgb(47 118 81/.1)}.actor-calendar-sources>:is(span,button).is-warning::before{background:var(--orange)}
.actor-calendar-sources small{justify-self:end;color:var(--muted);font-size:9px;text-align:right}
.actor-calendar-rhythm{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));border-bottom:1px solid var(--line);background:#fff}
.actor-calendar-rhythm>div{display:flex;align-items:baseline;justify-content:space-between;gap:7px;padding:11px 15px;border-right:1px solid var(--line)}.actor-calendar-rhythm>div:last-child{border-right:0}
.actor-calendar-rhythm strong{font-size:15px;font-weight:760;font-variant-numeric:tabular-nums}
.actor-calendar-notices{display:grid;grid-template-columns:minmax(260px,.9fr) minmax(360px,1.1fr);border-bottom:1px solid var(--line);background:#fff}
.actor-calendar-fiction-note{display:grid;gap:3px;padding:12px 18px;border-left:3px solid #7466a8;background:#f8f6fc}
.actor-calendar-fiction-note strong{color:#554987;font-size:10px}.actor-calendar-fiction-note span{color:#706b7e;font-size:9px;line-height:1.55}
.actor-calendar-attention{display:grid;align-content:center;gap:4px;margin:0;padding:10px 18px 10px 33px;background:#fffaf3;color:#7e5627;font-size:9px;line-height:1.45}.actor-calendar-clear{display:flex;align-items:center;padding:12px 18px;background:#f5faf6;color:#397052;font-size:9px;font-weight:650}
.actor-calendar-surface{max-width:100%;overflow:auto;padding:18px 19px 21px;background:#f4f7f3;overscroll-behavior-inline:contain;scrollbar-color:#b8c3ba #eef2ee;scrollbar-width:thin}
.actor-calendar-month{min-width:760px;overflow:hidden;border:1px solid #d9e0d8;border-radius:11px;background:#fff;box-shadow:0 4px 18px rgb(39 67 50/.045)}
.actor-calendar-month-title{display:flex;align-items:baseline;justify-content:space-between;gap:12px;padding:12px 14px;border-bottom:1px solid var(--line);background:#fbfcfa}.actor-calendar-month-title strong{font-size:14px;letter-spacing:-.02em}.actor-calendar-month-title span{color:var(--muted);font-size:9px;font-variant-numeric:tabular-nums}
.actor-calendar-grid{min-width:0}.actor-calendar-weekdays,.actor-calendar-week{display:grid;grid-template-columns:repeat(7,minmax(0,1fr))}.actor-calendar-weekdays{border-bottom:1px solid var(--line);background:#fafbf9}.actor-calendar-weekdays span{padding:7px 9px;color:#68756c;font-size:9px;font-weight:750;text-align:right}.actor-calendar-weekdays span.is-weekend{background:#f7f5f0}
.actor-calendar-day{min-width:0;min-height:112px;padding:7px;border-right:1px solid var(--line);border-bottom:1px solid var(--line);background:#fff}.actor-calendar-day:last-child{border-right:0}.actor-calendar-week:last-child .actor-calendar-day{border-bottom:0}.actor-calendar-day.is-outside{background:#fafbf9}.actor-calendar-day.is-outside>*{opacity:.48}.actor-calendar-day.is-today{box-shadow:inset 0 0 0 2px rgb(47 104 77/.38)}
.actor-calendar-day>header{display:flex;align-items:center;justify-content:space-between;min-height:22px;margin-bottom:4px}.actor-calendar-day>header time{display:grid;place-items:center;width:22px;height:22px;color:#56635a;font-size:10px;font-weight:720;font-variant-numeric:tabular-nums}.actor-calendar-day.is-today>header time{border-radius:50%;background:var(--accent);color:#fff}.actor-calendar-day>header span{color:#7a867e;font-size:8px;font-variant-numeric:tabular-nums}
.actor-calendar-day>div{display:grid;gap:3px}.actor-calendar-empty-day{display:block;height:1px}
.actor-calendar-event{position:relative;display:grid;grid-template-columns:auto minmax(0,1fr);gap:1px 5px;align-items:center;width:100%;min-width:0;padding:5px 6px;border:1px solid #c8ddd0;border-left:3px solid var(--accent);border-radius:5px;background:#eef7f1;color:#234d38;text-align:left;cursor:pointer;transition:background-color .18s ease,border-color .18s ease,transform .18s ease,box-shadow .18s ease}
.actor-calendar-event:hover{z-index:1;border-color:#8fb59b;background:#e7f3ea;box-shadow:0 5px 13px rgb(39 67 50/.11);transform:translateY(-1px)}.actor-calendar-event:active{transform:translateY(0) scale(.99)}.actor-calendar-event:focus-visible{z-index:2;outline:3px solid rgb(47 104 77/.24);outline-offset:1px}
.actor-calendar-event time{color:#526b5a;font-size:8px;font-weight:760;font-variant-numeric:tabular-nums}.actor-calendar-event strong{overflow:hidden;font-size:9px;font-weight:720;text-overflow:ellipsis;white-space:nowrap}.actor-calendar-event span{grid-column:1/-1;overflow:hidden;color:#617269;font-size:8px;text-overflow:ellipsis;white-space:nowrap}
.actor-calendar-event.is-fictional{border-color:#d6cfea;border-left-color:#7466a8;background:#f7f5fc;color:#554987}.actor-calendar-event.is-social{border-color:#cbded2;border-left-color:#2f684d;background:#f0f7f2}.actor-calendar-event.is-production{border-color:#d8d0ec;border-left-color:#806db3;background:#f5f2fb;color:#594b82}.actor-calendar-event.is-proposal{border-style:dashed;border-color:#d8b878;border-left-color:#a36518;background:#fff8eb;color:#75501c}.actor-calendar-event.is-conflict{border-color:#d48d95;border-left-color:var(--red);background:#fff2f3;color:#8c3741}
.actor-calendar-more{justify-self:start;padding:2px 4px;border:0;background:transparent;color:var(--accent);font-size:8px;font-weight:750;cursor:pointer}.actor-calendar-more:hover{text-decoration:underline}
.actor-calendar-month.is-week .actor-calendar-day{min-height:180px}.actor-calendar-month.is-week .actor-calendar-event{padding-block:7px}
.actor-calendar-quarter{display:grid;grid-template-columns:repeat(3,minmax(300px,1fr));gap:13px;min-width:970px}.actor-calendar-month.is-quarter-month{min-width:0}.is-quarter-month .actor-calendar-day{min-height:75px;padding:4px}.is-quarter-month .actor-calendar-day>header{min-height:18px;margin-bottom:2px}.is-quarter-month .actor-calendar-day>header time{width:18px;height:18px;font-size:8px}.is-quarter-month .actor-calendar-event{display:block;padding:3px 4px}.is-quarter-month .actor-calendar-event time{display:none}.is-quarter-month .actor-calendar-event strong{display:block;font-size:7px}
.actor-calendar-agenda{display:grid;gap:1px;overflow:hidden;border:1px solid var(--line);border-radius:11px;background:var(--line)}.actor-calendar-agenda>section{display:grid;grid-template-columns:150px minmax(0,1fr);gap:14px;padding:12px 14px;background:#fff}.actor-calendar-agenda>section>header{display:flex;flex-direction:column;gap:4px}.actor-calendar-agenda>section>header time{font-size:11px;font-weight:760}.actor-calendar-agenda>section>header span{color:var(--muted);font-size:9px}.actor-calendar-agenda>section>div{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:5px}.actor-calendar-agenda .actor-calendar-event{padding:7px 8px}
.actor-calendar-day-agenda{display:grid;gap:7px;margin-top:20px}.actor-calendar-day-agenda .actor-calendar-event{padding:9px 10px}.actor-calendar-day-agenda .actor-calendar-event strong{font-size:11px}.actor-calendar-day-agenda .actor-calendar-event span{font-size:9px}
.actor-calendar-empty{padding:42px;text-align:center}.actor-calendar-empty strong{display:block;font-size:14px}.actor-calendar-empty p{color:var(--muted);font-size:10px}
.actor-calendar-footnote{margin:0!important;padding:0 20px 16px;color:var(--muted);font-size:9px!important;line-height:1.5}
.actor-calendar-skeleton{display:grid;grid-template-columns:1.5fr repeat(3,1fr);gap:1px;background:var(--line)}.actor-calendar-skeleton span{height:94px;background:linear-gradient(100deg,#f4f6f3 20%,#fff 36%,#f4f6f3 52%);background-size:220% 100%;animation:actor-calendar-shimmer 1.4s ease-in-out infinite}@keyframes actor-calendar-shimmer{to{background-position:-220% 0}}
@media(prefers-reduced-motion:reduce){.actor-calendar-skeleton span{animation:none}.actor-calendar-event{transition:none}}

/* Popup ergonomics — shared chrome keeps close and primary actions reachable
   without duplicating controls across every operational dialog template. */
html.dialog-open,html.dialog-open body{overflow:hidden}
.operator-panel{z-index:80;padding:clamp(16px,3vw,40px);background:rgb(25 36 29/.36);backdrop-filter:blur(10px) saturate(.82)}
.operator-card{position:relative;width:min(430px,calc(100vw - 40px));max-height:min(88dvh,820px);padding:26px;gap:14px;overflow-y:auto;overscroll-behavior:contain;scrollbar-gutter:stable;border-radius:18px;box-shadow:0 30px 90px rgb(26 46 33/.24);animation:operator-dialog-in .2s ease-out}
.operator-card.wide{width:min(720px,calc(100vw - 40px))}
.management-settings-card{width:min(720px,calc(100vw - 40px))}
.tiktok-reconfirmation-card,.operator-card:has(#characterEventFormTitle){width:min(620px,calc(100vw - 40px))}
.operator-card>.overline{padding-right:48px}
.operator-card>strong{padding-right:48px;font-size:20px;line-height:1.32;letter-spacing:-.03em;text-wrap:balance}
.operator-card>p{margin:0 0 2px;font-size:12px;line-height:1.65;text-wrap:pretty}
.operator-card>label,.operator-card :is(.event-form-grid,.management-settings-grid)>label{gap:7px;font-size:11px;font-weight:700;line-height:1.45}
.operator-card :is(input:not([type="checkbox"]):not([type="radio"]),select,textarea){min-height:42px;border-radius:10px;padding:10px 11px}
.operator-card input:is([type="checkbox"],[type="radio"]){width:auto;min-height:0;padding:0}
.operator-card label.approval-checklist{display:grid;grid-template-columns:auto minmax(0,1fr);align-items:start;gap:10px;color:#3f4d43;font-size:10px;font-weight:600;line-height:1.55}
.operator-card label.approval-checklist>input{margin:2px 0 0;accent-color:var(--accent)}
.operator-card label.approval-checklist>span{grid-column:2}
.operator-card label small{font-weight:450;line-height:1.5}
.operator-dialog-close{position:sticky;z-index:6;top:0;justify-self:end;width:38px;height:38px;margin:-5px -5px -47px 0;padding:0;border:1px solid #d8e0d9;border-radius:50%;background:rgb(255 255 255/.94);color:#38463c;box-shadow:0 5px 16px rgb(35 62 44/.1);font:400 25px/1 system-ui,sans-serif;cursor:pointer;backdrop-filter:blur(8px)}
.operator-dialog-close:hover{border-color:#aebfb2;background:#f1f6f2;color:#234f3a}
.operator-dialog-close:focus-visible{outline:3px solid rgb(47 104 77/.24);outline-offset:2px}
.operator-card>.approval-actions,.operator-card>.composer-actions{position:sticky;z-index:5;bottom:-26px;margin:8px -26px -26px;padding:14px 26px 16px;border-top:1px solid rgb(219 226 220/.92);background:linear-gradient(to bottom,rgb(255 255 255/.94),#fff 34%);box-shadow:0 -12px 24px rgb(34 58 43/.06);backdrop-filter:blur(10px)}
.operator-card>.approval-actions .button,.operator-card>.composer-actions .button{min-height:42px}
.detail-drawer{overscroll-behavior:contain;scrollbar-gutter:stable}
.detail-drawer>.detail-head{position:sticky;z-index:8;top:-24px;margin:-24px -24px 18px;padding:24px;border-bottom:1px solid rgb(223 229 222/.9);background:rgb(255 255 255/.94);backdrop-filter:blur(12px)}
.approval-drawer>.approval-actions{position:sticky;z-index:7;bottom:-24px;margin:20px -24px -24px;padding:14px 24px 18px;border-top:1px solid rgb(219 226 220/.92);background:rgb(255 255 255/.96);box-shadow:0 -12px 24px rgb(34 58 43/.07);backdrop-filter:blur(10px)}
@keyframes operator-dialog-in{from{opacity:0;transform:translateY(10px) scale(.985)}to{opacity:1;transform:none}}
@media(max-width:650px){
  .operator-panel{place-items:end center;padding:max(12px,env(safe-area-inset-top)) 0 0}
  .operator-card,.operator-card.wide,.operator-card:has(#characterEventFormTitle),.trend-queue-review.operator-card,.tiktok-reconfirmation-card{width:100%;max-width:none;max-height:min(94dvh,900px);padding:22px 18px max(20px,env(safe-area-inset-bottom));border-radius:22px 22px 0 0;animation-name:operator-sheet-in}
  .approval-drawer{width:100vw}
  .operator-card>strong{font-size:19px}.operator-dialog-close{top:0;margin:-3px 0 -49px 0}
  .operator-card>.approval-actions,.operator-card>.composer-actions{bottom:calc(-1 * max(20px,env(safe-area-inset-bottom)));margin:8px -18px calc(-1 * max(20px,env(safe-area-inset-bottom)));padding:12px 18px max(12px,env(safe-area-inset-bottom))}
  .detail-drawer>.detail-head{top:-18px;margin:-18px -18px 16px;padding:18px}
  .approval-drawer>.approval-actions{bottom:-18px;margin:18px -18px -18px;padding:12px 18px max(12px,env(safe-area-inset-bottom))}
}
@keyframes operator-sheet-in{from{opacity:0;transform:translateY(24px)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.operator-card{animation:none}}
@media(max-width:1050px){.actor-calendar-head{display:grid}.actor-calendar-actions{justify-content:flex-start}.actor-calendar-metrics{grid-template-columns:repeat(2,minmax(0,1fr))}.actor-calendar-metrics>div:nth-child(2){border-right:0}.actor-calendar-metrics>div:nth-child(-n+2){border-bottom:1px solid var(--line)}.actor-calendar-sources{grid-template-columns:1fr 1fr}.actor-calendar-sources small{grid-column:1/-1;justify-self:start;text-align:left}.actor-calendar-rhythm{grid-template-columns:repeat(3,minmax(0,1fr))}.actor-calendar-rhythm>div:nth-child(3){border-right:0}.actor-calendar-rhythm>div:nth-child(-n+3){border-bottom:1px solid var(--line)}.actor-calendar-notices{grid-template-columns:1fr}}
@media(max-width:650px){.actor-calendar-head{padding:18px 15px 14px}.actor-calendar-head h2{font-size:18px}.actor-calendar-actions{display:grid;grid-template-columns:auto auto minmax(120px,1fr)}.actor-calendar-actions>.button.primary{grid-column:1/-1}.actor-calendar-actions .calendar-view-control select{width:100%}.actor-calendar-layer-bar{padding-inline:15px}.actor-calendar-metrics{grid-template-columns:1fr 1fr}.actor-calendar-metrics>div{padding:14px}.actor-calendar-metrics>div.is-next{grid-column:1/-1;border-right:0;border-bottom:1px solid var(--line)}.actor-calendar-metrics>div:nth-child(2){border-right:1px solid var(--line)}.actor-calendar-metrics strong{font-size:21px}.actor-calendar-sources{grid-template-columns:1fr;padding-inline:14px}.actor-calendar-sources small{grid-column:auto}.actor-calendar-rhythm{grid-template-columns:1fr 1fr}.actor-calendar-rhythm>div{padding:10px 12px}.actor-calendar-rhythm>div:nth-child(odd){border-right:1px solid var(--line)}.actor-calendar-rhythm>div:nth-child(even){border-right:0}.actor-calendar-rhythm>div:nth-child(-n+4){border-bottom:1px solid var(--line)}.actor-calendar-notices{min-width:0}.actor-calendar-surface{padding:12px 10px 15px}.actor-calendar-month{min-width:690px}.actor-calendar-quarter{min-width:900px}.actor-calendar-agenda{min-width:0}.actor-calendar-agenda>section{grid-template-columns:1fr;gap:8px;padding:11px}.actor-calendar-agenda>section>header{flex-direction:row;justify-content:space-between}.actor-calendar-agenda>section>div{grid-template-columns:1fr}.actor-calendar-footnote{padding-inline:14px}}

/* Foundation · Journey — evidence readiness and lifecycle observation. */
.lifecycle-boundary{display:flex;align-items:center;justify-content:space-between;gap:24px;margin-bottom:15px;padding:18px 21px;border:1px solid #dfc993;border-left:4px solid var(--orange);border-radius:14px;background:#fffaf0}.lifecycle-boundary strong{display:block;font-size:14px}.lifecycle-boundary p{max-width:760px;margin:5px 0 0;color:var(--muted);font-size:10px;line-height:1.55}
.foundation-summary{display:grid;grid-template-columns:repeat(4,auto) minmax(240px,1fr);gap:8px;align-items:center;margin-bottom:12px}.foundation-summary span{padding:8px 10px;border:1px solid var(--line);border-radius:8px;background:var(--surface2);font-size:10px;font-weight:750}.foundation-summary strong{justify-self:end;color:#5e685f;font-size:10px}
.foundation-list{display:grid;gap:1px;overflow:hidden;border:1px solid var(--line);border-radius:12px;background:var(--line)}.foundation-row{display:grid;grid-template-columns:132px minmax(0,1fr) auto;gap:16px;align-items:center;padding:14px 15px;background:#fff}.foundation-row.is-blocking{box-shadow:inset 3px 0 #d99b42}.foundation-row.is-ready{box-shadow:inset 3px 0 var(--green)}.foundation-level{display:grid;gap:3px}.foundation-level span{font-size:10px;font-weight:800}.foundation-level small,.foundation-evidence{color:var(--muted);font-size:9px}.foundation-row strong{font-size:11px}.foundation-row p{margin:3px 0;color:var(--muted);font-size:9px}
.lifecycle-list{display:grid;gap:9px}.lifecycle-card{padding:14px;border:1px solid var(--line);border-radius:11px;background:var(--surface2)}.lifecycle-card header{display:flex;align-items:center;justify-content:space-between;gap:10px}.lifecycle-card header strong{font-size:11px}.lifecycle-card p{margin:7px 0 9px}.lifecycle-card small{display:block;margin-top:8px;color:var(--muted);font-size:9px}.lifecycle-message-table{min-width:820px}.lifecycle-message-table td:nth-child(4){max-width:360px;white-space:normal}.lifecycle-capability-form{width:min(650px,calc(100vw - 40px))}
.lifecycle-health-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}.lifecycle-health-grid>div{display:grid;gap:5px;min-height:76px;padding:12px;border:1px solid var(--line);border-radius:10px;background:var(--surface2)}.lifecycle-health-grid span,.lifecycle-receipt-grid span{color:var(--muted);font-size:9px}.lifecycle-health-grid strong{font-size:18px}.lifecycle-health-grid small{color:var(--muted);font-size:9px}.lifecycle-health-grid .measurement-missing{align-self:center;color:var(--orange);font-size:11px;font-weight:700}.lifecycle-receipt-grid{display:grid;grid-template-columns:repeat(2,1fr);gap:7px}.lifecycle-receipt-grid>div{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:9px 11px;border-bottom:1px solid var(--line)}.lifecycle-receipt-grid strong{font-size:13px}.lifecycle-lineage-table{min-width:900px}.lifecycle-lineage-table td:last-child{max-width:310px;white-space:normal}
.lifecycle-tabs{display:flex;gap:6px;margin:0 0 15px;padding:5px;border:1px solid var(--line);border-radius:12px;background:var(--surface2);overflow-x:auto}.lifecycle-tabs button{min-height:40px;padding:8px 14px;border:0;border-radius:8px;background:transparent;color:var(--muted);font:inherit;font-size:10px;font-weight:700;white-space:nowrap;cursor:pointer}.lifecycle-tabs button.is-active{background:var(--surface);color:var(--text);box-shadow:0 1px 4px rgba(24,26,31,.08)}.lifecycle-tabs button:focus-visible{outline:2px solid var(--orange);outline-offset:2px}.lifecycle-tier-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:10px;margin-bottom:12px}.lifecycle-tier-card{padding:14px;border:1px solid var(--line);border-radius:11px;background:var(--surface2)}.lifecycle-tier-card header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.lifecycle-tier-card dl{display:grid;gap:7px;margin:0}.lifecycle-tier-card dl>div{display:flex;justify-content:space-between;gap:10px}.lifecycle-tier-card dt{color:var(--muted);font-size:9px}.lifecycle-tier-card dd{margin:0;font-size:10px;font-weight:700;text-align:right}.desk-evidence-grid{display:grid;gap:8px}.desk-evidence-row{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:10px 12px;border:1px solid var(--line);border-radius:10px;background:var(--surface2)}.lifecycle-bridge-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:10px}.lifecycle-bridge-grid article{padding:14px;border:1px solid var(--line);border-radius:11px;background:var(--surface2)}.lifecycle-bridge-grid header{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:10px}.lifecycle-bridge-grid dl{display:grid;gap:7px;margin:0}.lifecycle-bridge-grid dl>div{display:flex;justify-content:space-between;gap:12px;border-top:1px solid var(--line);padding-top:7px}.lifecycle-bridge-grid dt{color:var(--muted);font-size:9px}.lifecycle-bridge-grid dd{margin:0;text-align:right;font-size:10px;font-weight:700}.lifecycle-receipt-grid .measurement-missing{color:var(--orange);font-size:10px}
@media(max-width:820px){.foundation-summary{grid-template-columns:repeat(4,1fr)}.foundation-summary strong{grid-column:1/-1;justify-self:start}.foundation-row{grid-template-columns:1fr auto}.foundation-level{grid-column:1/-1}.lifecycle-boundary{align-items:flex-start;flex-direction:column}.lifecycle-health-grid,.lifecycle-bridge-grid,.lifecycle-tier-grid{grid-template-columns:repeat(2,1fr)}}
@media(max-width:520px){.lifecycle-bridge-grid,.lifecycle-tier-grid{grid-template-columns:1fr}}

/* Marketing automation — a desktop operations sequence, not a dashboard pile. */
.marketing-automation-panel{min-height:520px}.marketing-operations{margin-bottom:16px;overflow:hidden;border:1px solid var(--line);border-left:4px solid var(--green);border-radius:12px;background:#fbfdfb}.marketing-operations.is-blocked{border-left-color:var(--orange);background:#fffcf6}.marketing-operations-head{display:flex;align-items:flex-start;justify-content:space-between;gap:20px;padding:16px 18px}.marketing-operations-head strong{display:block;margin-top:3px;font-size:15px}.marketing-operations-head p{margin:5px 0 0;color:var(--muted);font-size:10px}.marketing-operations details{border-top:1px solid var(--line);background:#fff}.marketing-operations summary{padding:11px 18px;font-size:10px;font-weight:750;cursor:pointer}.marketing-workflow-list{display:grid;gap:1px;background:var(--line)}.marketing-workflow-row{display:grid;grid-template-columns:minmax(0,1fr) auto auto;gap:12px;align-items:center;padding:10px 18px;background:#fff}.marketing-workflow-row>div{display:grid;gap:3px}.marketing-workflow-row strong{font-size:10px}.marketing-workflow-row span{color:var(--muted);font-size:9px}.marketing-operations details>p{padding:0 18px 12px}.marketing-section-head{display:flex;align-items:center;justify-content:space-between;gap:20px;margin:18px 0 10px}.marketing-section-head>div{display:grid;gap:3px}.marketing-section-head strong{font-size:15px}.marketing-section-head span{color:var(--muted);font-size:10px}.marketing-empty{padding:54px 24px}.marketing-empty .button{margin-top:10px}.marketing-choice-grid{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:7px}.event-form-grid fieldset{min-width:0;margin:0;padding:10px 12px;border:1px solid var(--line);border-radius:10px}.event-form-grid fieldset legend{padding:0 5px;font-size:10px;font-weight:750}.marketing-preflight-list{display:grid;gap:10px}.marketing-preflight-card{padding:14px;border:1px solid var(--line);border-radius:11px;background:var(--surface2)}.marketing-preflight-card header{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;margin-bottom:10px}.marketing-preflight-card header>div{display:grid;gap:3px}.marketing-preflight-card header strong{font-size:12px}.marketing-preflight-card header span{color:var(--muted);font-size:9px}.marketing-caption{margin:0 0 12px!important;padding:10px 12px;border-left:3px solid #b8c7bc;background:#fff;font-size:10px!important;line-height:1.6}.marketing-preflight-card .approval-summary{grid-template-columns:repeat(2,minmax(0,1fr));margin-bottom:10px}.marketing-preflight-card .detail-actions{margin-top:10px}.marketing-attempt-history{display:grid;gap:1px;overflow:hidden;border:1px solid var(--line);border-radius:9px;background:var(--line)}.marketing-attempt-history>div{display:grid;grid-template-columns:minmax(0,1fr) auto 130px;gap:10px;align-items:center;padding:8px 10px;background:#fff}.marketing-attempt-history span,.marketing-attempt-history small{font-size:9px}.marketing-attempt-history small{color:var(--muted);text-align:right}.queue-meta{display:block;margin:5px 0 7px;color:#6a756d;font-size:9px}.operator-card textarea.mono{font-size:10px;line-height:1.5}

/* The screener's reason under a REVIEW badge. Secondary to the issue label at
   the list's own 10px scale, but it is the whole basis on which the operator
   decides whether an unscreened asset may go out, so it stays legible rather
   than being truncated. The row switches to top alignment when a note is
   present; centring a one-line badge against a wrapped sentence misaligns it. */
.issue-note{display:block;margin-top:3px;color:var(--muted);font-size:9px;line-height:1.5;white-space:normal}
.preview-issues li:has(.issue-note){align-items:flex-start}
