/* extracted-ux.css — CSP 마이그레이션
 * 런타임 <style> 주입(style-src-elem 위반)을 정적 CSS 로 이전한 파일.
 * 원본 주입 위치:
 *   - pc-ux-memory.js  (컨텍스트 메뉴 .ux-ctx-*)
 *   - pc-ux-ticker.js  (상단 납기 티커 .tm-ticker)
 *   - features-ext.js  (프로그레스바 .prog-*)
 *   - ux-advanced.js   (테이블 정렬 헤더 .dt thead, 사이드패널 .ux-sp-*/.ux-side-panel)
 * 각 JS 는 link[data-ux-ext-css] 존재 시 주입을 건너뛰며, 링크가 없으면 폴백으로 주입한다.
 * 내용은 원본 주입 문자열과 동일 — 시각적 변화 없음. */

/* ===== pc-ux-memory.js: 컨텍스트 메뉴 ===== */
.ux-ctx-menu{position:fixed;z-index:9999;background:#fff;border:1px solid #E5E7EB;border-radius:10px;box-shadow:0 12px 32px rgba(15,23,42,.18);min-width:180px;padding:4px;font-size:13px}
.ux-ctx-menu.hidden{display:none}
.ux-ctx-item{display:block;width:100%;padding:8px 12px;background:transparent;border:none;text-align:left;cursor:pointer;border-radius:6px;color:#1F2937;font-size:13px;font-weight:500}
.ux-ctx-item:hover{background:#F1F5F9}
.ux-ctx-item.danger{color:#DC2626}
.ux-ctx-item.danger:hover{background:#FEE2E2}
.ux-ctx-sep{height:1px;background:#E5E7EB;margin:4px 0}

/* ===== pc-ux-ticker.js: 상단 납기 티커 ===== */
.tm-ticker{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;margin:0 4px;background:transparent;border:1px solid rgba(255,255,255,.1);border-radius:999px;color:#CBD5E1;cursor:pointer;font-size:11px;font-weight:700;transition:all .12s;height:28px}
.tm-ticker:hover{background:rgba(255,255,255,.06);color:#fff;border-color:rgba(255,255,255,.18)}
.tm-ticker .tk-dot{width:7px;height:7px;border-radius:50%;display:inline-block;flex-shrink:0}
.tm-ticker .dot-danger{background:#EF4444;box-shadow:0 0 0 3px rgba(239,68,68,.18);animation:tkPulse 1.8s ease infinite}
.tm-ticker .dot-warn{background:#F59E0B;box-shadow:0 0 0 3px rgba(245,158,11,.18)}
.tm-ticker .dot-info{background:#3B82F6;box-shadow:0 0 0 3px rgba(59,130,246,.18)}
.tm-ticker .tk-lbl{letter-spacing:-.01em}
@keyframes tkPulse{0%,100%{box-shadow:0 0 0 3px rgba(239,68,68,.18)}50%{box-shadow:0 0 0 5px rgba(239,68,68,.28)}}

/* ===== features-ext.js: 프로그레스바 ===== */
.prog-bar{width:100%;height:8px;background:var(--bg3,#E5E7EB);border-radius:4px;overflow:hidden}
.prog-fill{height:100%;background:var(--pri,#1E3A5F);border-radius:4px;transition:width .3s}

/* ===== ux-advanced.js: 테이블 정렬 헤더 ===== */
.dt thead th:not(.no-sort){cursor:pointer;user-select:none;position:relative;padding-right:18px!important}
.dt thead th:not(.no-sort):hover{background:rgba(30,58,95,0.08)}
.dt thead th.sort-asc::after{content:'▲';position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:9px;color:var(--pri)}
.dt thead th.sort-desc::after{content:'▼';position:absolute;right:6px;top:50%;transform:translateY(-50%);font-size:9px;color:var(--pri)}

/* ===== mes-wo.js: 외주가공 '가공 종류 = 기타' 수기 입력칸 ===== */
.wo-proc-mt-etc{margin-left:6px}

/* ===== ux-advanced.js: 사이드 패널 상세 뷰 ===== */
.ux-side-panel{position:fixed;top:0;right:0;bottom:0;width:min(480px, 90vw);background:#fff;box-shadow:-10px 0 30px rgba(0,0,0,.1);z-index:90;transform:translateX(100%);transition:transform .3s cubic-bezier(.22,.61,.36,1);display:flex;flex-direction:column;overflow:hidden}
.ux-side-panel.open{transform:translateX(0)}
.ux-sp-hdr{display:flex;justify-content:space-between;align-items:center;padding:16px 20px;border-bottom:1px solid #E5E7EB;background:#F9FAFB}
.ux-sp-body{flex:1;overflow-y:auto;padding:20px}
.ux-sp-field{margin-bottom:14px}
.ux-sp-field-l{font-size:11px;color:#94A3B8;font-weight:600;text-transform:uppercase;letter-spacing:.5px;margin-bottom:4px}
.ux-sp-field-v{font-size:14px;color:#111827;font-weight:500}
.ux-sp-section{border-top:1px solid #E5E7EB;padding-top:14px;margin-top:14px}
.ux-sp-section-t{font-size:13px;font-weight:700;color:#1E3A5F;margin-bottom:10px}
