@charset "utf-8";
/* =====================================================================
   kvkit 2026.12.0 — KVOTE 공용 디자인 시스템 (투표사이트 · 관리자사이트 공통)
   "Midnight & Gold" v3(LUXE) — 밝은/어두운 테마, 부드러운 모션, 접근성(포커스·대비·모션 감소) 기본 내장.
   1 폰트  2 토큰(라이트/다크)  3 기본  4 레이아웃  5 표면  6 버튼  7 폼  8 투표 UI  9 표  10 관리자 셸
   11 컴포넌트  12 모션  13 인쇄  14 유틸
   ===================================================================== */

/* ---------- 1. 폰트 (KS X 1001 서브셋) ---------- */
@font-face{font-family:"Pretendard KV";font-style:normal;font-weight:300 500;font-display:swap;src:url("../fonts/Pretendard-Regular.subset.woff2") format("woff2");}
@font-face{font-family:"Pretendard KV";font-style:normal;font-weight:600 900;font-display:swap;src:url("../fonts/Pretendard-SemiBold.subset.woff2") format("woff2");}

/* ---------- 2. 토큰 ---------- */
:root{
  color-scheme:light;
  /* 브랜드(테마와 무관) */
  --kv-night:#0A1024; --kv-night-2:#121B3A; --kv-night-3:#1B2754; --kv-indigo:#2B3F8F; --kv-indigo-l:#3561E6;
  --kv-gold:#C9A45C; --kv-gold-l:#E7CF97; --kv-gold-d:#9C7A36; --kv-gold-grad:linear-gradient(135deg,#F3E2B4,#D6B46E 55%,#B8924A);
  --kv-navy-grad:linear-gradient(135deg,#1C2858,#0A1024);
  /* 표면·글자 */
  --kv-bg:#F4F5FA; --kv-bg-2:#ECEEF6; --kv-card:#FFFFFF; --kv-card-2:#FAFBFE; --kv-row:#F8F9FD; --kv-hover:#F2F4FB;
  --kv-ink:#10142B; --kv-sub:#565D78; --kv-muted:#8F96AE; --kv-line:#E6E9F3; --kv-line-2:#D5DAEA;
  --kv-gold-soft:#F8F1E0; --kv-gold-text:#7C5F25;
  --kv-ok:#17855A; --kv-ok-soft:#E9F6EF; --kv-warn:#B86F00; --kv-warn-soft:#FFF2DC; --kv-danger:#D03A3A; --kv-danger-soft:#FDEDED; --kv-info:#2B53D6; --kv-info-soft:#ECF0FF;
  --kv-focus:#C9A45C;
  --kv-overlay:rgba(6,9,22,.58);
  --kv-shadow-xs:0 1px 2px rgba(16,20,43,.05);
  --kv-shadow-sm:0 1px 2px rgba(16,20,43,.04),0 6px 18px rgba(16,20,43,.05);
  --kv-shadow:0 12px 34px rgba(16,20,43,.10);
  --kv-shadow-lg:0 30px 80px rgba(3,7,25,.40);
  --kv-glass:rgba(255,255,255,.82);
  --kv-radius:18px; --kv-radius-sm:12px; --kv-radius-lg:26px;
  --kv-font:"Pretendard KV","Pretendard",-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo","Noto Sans KR","Malgun Gothic","맑은 고딕",sans-serif;
  --kv-mono:ui-monospace,"Cascadia Mono","D2Coding",Consolas,monospace;
  --kv-safe-b:env(safe-area-inset-bottom,0px);
  --kv-ease:cubic-bezier(.2,.8,.2,1);
}
/* 다크 테마: 시스템 설정을 따르되 data-theme 로 고정할 수 있다 */
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    color-scheme:dark;
    --kv-bg:#080C1B; --kv-bg-2:#0C1226; --kv-card:#111836; --kv-card-2:#151D40; --kv-row:#0F1630; --kv-hover:#18204A;
    --kv-ink:#EAEDF8; --kv-sub:#AEB6D3; --kv-muted:#7D86A8; --kv-line:rgba(255,255,255,.085); --kv-line-2:rgba(255,255,255,.16);
    --kv-gold-soft:rgba(201,164,92,.14); --kv-gold-text:#E7CF97;
    --kv-ok:#46C990; --kv-ok-soft:rgba(70,201,144,.13); --kv-warn:#F0AE45; --kv-warn-soft:rgba(240,174,69,.13); --kv-danger:#F26B6B; --kv-danger-soft:rgba(242,107,107,.13); --kv-info:#8BA6FF; --kv-info-soft:rgba(139,166,255,.13);
    --kv-overlay:rgba(2,4,14,.72); --kv-glass:rgba(17,24,54,.82);
    --kv-shadow-xs:0 1px 2px rgba(0,0,0,.4); --kv-shadow-sm:0 1px 2px rgba(0,0,0,.35),0 8px 22px rgba(0,0,0,.28); --kv-shadow:0 14px 40px rgba(0,0,0,.45);
    --kv-navy-grad:linear-gradient(135deg,#2A3A82,#141D4A); --kv-night-2:#27367F;
  }
}
:root[data-theme="dark"]{
  color-scheme:dark;
  --kv-bg:#080C1B; --kv-bg-2:#0C1226; --kv-card:#111836; --kv-card-2:#151D40; --kv-row:#0F1630; --kv-hover:#18204A;
  --kv-ink:#EAEDF8; --kv-sub:#AEB6D3; --kv-muted:#7D86A8; --kv-line:rgba(255,255,255,.085); --kv-line-2:rgba(255,255,255,.16);
  --kv-gold-soft:rgba(201,164,92,.14); --kv-gold-text:#E7CF97;
  --kv-ok:#46C990; --kv-ok-soft:rgba(70,201,144,.13); --kv-warn:#F0AE45; --kv-warn-soft:rgba(240,174,69,.13); --kv-danger:#F26B6B; --kv-danger-soft:rgba(242,107,107,.13); --kv-info:#8BA6FF; --kv-info-soft:rgba(139,166,255,.13);
  --kv-overlay:rgba(2,4,14,.72); --kv-glass:rgba(17,24,54,.82);
  --kv-shadow-xs:0 1px 2px rgba(0,0,0,.4); --kv-shadow-sm:0 1px 2px rgba(0,0,0,.35),0 8px 22px rgba(0,0,0,.28); --kv-shadow:0 14px 40px rgba(0,0,0,.45);
  --kv-navy-grad:linear-gradient(135deg,#2A3A82,#141D4A); --kv-night-2:#27367F;
}

/* ---------- 3. 기본 ---------- */
*,*::before,*::after{box-sizing:border-box}
html{-webkit-text-size-adjust:100%;text-size-adjust:100%;scroll-behavior:smooth}
body{margin:0;font-family:var(--kv-font);font-size:15.5px;line-height:1.6;color:var(--kv-ink);background:var(--kv-bg);
  letter-spacing:-.012em;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;word-break:keep-all;overflow-wrap:break-word;
  transition:background-color .25s ease,color .25s ease}
h1,h2,h3,h4{margin:0 0 .4em;font-weight:700;line-height:1.3;letter-spacing:-.032em}
h1{font-size:27px} h2{font-size:21px} h3{font-size:17.5px} h4{font-size:15.5px}
p{margin:0 0 .8em}
a{color:var(--kv-info);text-decoration:none} a:hover{text-decoration:underline}
img{max-width:100%;height:auto;vertical-align:middle}
hr{border:0;border-top:1px solid var(--kv-line);margin:20px 0}
small,.kv-small{font-size:12.5px} .kv-muted{color:var(--kv-muted)} .kv-sub{color:var(--kv-sub)}
.kv-mono{font-family:var(--kv-mono)} .kv-num{font-variant-numeric:tabular-nums}
.kv-sr{position:absolute!important;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.kv-skip{position:fixed;left:12px;top:-60px;z-index:5000;padding:10px 16px;border-radius:10px;background:var(--kv-night);color:#fff;font-weight:700;transition:top .15s} .kv-skip:focus{top:12px;text-decoration:none}
:focus-visible{outline:2.5px solid var(--kv-focus);outline-offset:2px;border-radius:6px}
::selection{background:rgba(201,164,92,.38)}
::-webkit-scrollbar{width:10px;height:10px} ::-webkit-scrollbar-thumb{background:var(--kv-line-2);border-radius:10px;border:2px solid transparent;background-clip:padding-box} ::-webkit-scrollbar-track{background:transparent}

/* ---------- 4. 레이아웃 ---------- */
.kv-container{width:100%;max-width:1120px;margin:0 auto;padding:0 20px}
.kv-stack>*+*{margin-top:var(--gap,14px)}
.kv-row{display:flex;gap:var(--gap,12px);align-items:center;flex-wrap:wrap}
.kv-row.nowrap{flex-wrap:nowrap} .kv-row.between{justify-content:space-between} .kv-row.end{justify-content:flex-end} .kv-row.center{justify-content:center}
.kv-grid{display:grid;gap:var(--gap,16px)}
.kv-grid.c2{grid-template-columns:repeat(2,minmax(0,1fr))} .kv-grid.c3{grid-template-columns:repeat(3,minmax(0,1fr))} .kv-grid.c4{grid-template-columns:repeat(4,minmax(0,1fr))}
.kv-grid.auto{grid-template-columns:repeat(auto-fill,minmax(220px,1fr))}
@media(max-width:900px){.kv-grid.c3,.kv-grid.c4{grid-template-columns:repeat(2,minmax(0,1fr))}}
@media(max-width:560px){.kv-grid.c2,.kv-grid.c3,.kv-grid.c4{grid-template-columns:minmax(0,1fr)} .kv-grid.keep2{grid-template-columns:repeat(2,minmax(0,1fr))}}

/* ---------- 5. 표면 ---------- */
.kv-card{position:relative;background:var(--kv-card);border:1px solid var(--kv-line);border-radius:var(--kv-radius);box-shadow:var(--kv-shadow-sm);padding:22px}
.kv-card.flat{box-shadow:none}
.kv-card.gold::before{content:"";position:absolute;left:28px;right:28px;top:-1px;height:2px;border-radius:0 0 3px 3px;background:linear-gradient(90deg,transparent,var(--kv-gold),var(--kv-gold-l),var(--kv-gold),transparent)}
.kv-card.glass{background:var(--kv-glass);backdrop-filter:blur(14px);-webkit-backdrop-filter:blur(14px)}
.kv-card-h{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:-2px 0 16px}
.kv-card-h h2,.kv-card-h h3{margin:0}
.kv-card-t{font-size:16px;font-weight:700}
.kv-hero{position:relative;overflow:hidden;color:#fff;text-align:center;padding:48px 20px 78px;isolation:isolate;
  background:radial-gradient(900px 520px at 88% -12%,rgba(201,164,92,.26),transparent 60%),radial-gradient(820px 620px at -12% 8%,rgba(64,92,210,.38),transparent 60%),linear-gradient(180deg,#0A1024 0%,#0D1430 100%)}
.kv-hero::before{content:"";position:absolute;inset:0;z-index:-1;opacity:.5;background-image:linear-gradient(rgba(255,255,255,.045) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.045) 1px,transparent 1px);background-size:44px 44px;-webkit-mask-image:radial-gradient(ellipse at 50% 20%,#000 20%,transparent 75%);mask-image:radial-gradient(ellipse at 50% 20%,#000 20%,transparent 75%)}
.kv-eyebrow{display:inline-block;font-size:11.5px;font-weight:700;letter-spacing:.34em;padding-left:.34em;color:var(--kv-gold-l);margin-bottom:10px}
.kv-title-grad{background:linear-gradient(180deg,#fff 30%,#CFD6EE 100%);-webkit-background-clip:text;background-clip:text;color:transparent}
.kv-rule{width:48px;height:1px;margin:16px auto;background:linear-gradient(90deg,transparent,var(--kv-gold),transparent)}
.kv-seal{position:relative;width:72px;height:72px;margin:0 auto 18px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 30% 25%,#1F2E66,#0A1130 70%);box-shadow:0 0 0 1px rgba(231,207,151,.65),0 0 0 8px rgba(201,164,92,.10),0 16px 38px rgba(0,0,0,.5)}
.kv-seal::after{content:"";position:absolute;inset:-10px;border-radius:50%;border:1px solid rgba(231,207,151,.35);animation:kv-pulse 3.6s ease-out infinite}
.kv-seal svg{width:32px;height:32px}

.kv-badge{display:inline-flex;align-items:center;gap:5px;font-size:12px;font-weight:700;padding:3px 10px;border-radius:999px;background:var(--kv-line);color:var(--kv-sub);white-space:nowrap;line-height:1.5}
.kv-badge.ok{background:var(--kv-ok-soft);color:var(--kv-ok)} .kv-badge.warn{background:var(--kv-warn-soft);color:var(--kv-warn)}
.kv-badge.danger{background:var(--kv-danger-soft);color:var(--kv-danger)} .kv-badge.info{background:var(--kv-info-soft);color:var(--kv-info)}
.kv-badge.gold{background:var(--kv-gold-soft);color:var(--kv-gold-text)} .kv-badge.dark{background:var(--kv-night-2);color:var(--kv-gold-l)}
.kv-badge.dot::before{content:"";width:6px;height:6px;border-radius:50%;background:currentColor;flex:none}
.kv-badge.live::before{content:"";width:7px;height:7px;border-radius:50%;background:currentColor;flex:none;animation:kv-blink 1.6s ease-in-out infinite}

.kv-alert{display:flex;gap:10px;align-items:flex-start;padding:13px 15px;border-radius:var(--kv-radius-sm);font-size:14px;line-height:1.55;background:var(--kv-info-soft);color:var(--kv-info);border:1px solid color-mix(in srgb,var(--kv-info) 22%,transparent)}
.kv-alert.ok{background:var(--kv-ok-soft);color:var(--kv-ok);border-color:color-mix(in srgb,var(--kv-ok) 24%,transparent)} .kv-alert.warn{background:var(--kv-warn-soft);color:var(--kv-warn);border-color:color-mix(in srgb,var(--kv-warn) 28%,transparent)}
.kv-alert.danger{background:var(--kv-danger-soft);color:var(--kv-danger);border-color:color-mix(in srgb,var(--kv-danger) 26%,transparent)} .kv-alert.gold{background:var(--kv-gold-soft);color:var(--kv-gold-text);border-color:color-mix(in srgb,var(--kv-gold) 35%,transparent)}
.kv-alert a{color:inherit;text-decoration:underline;font-weight:700}
.kv-empty{text-align:center;color:var(--kv-muted);padding:44px 16px}
.kv-empty b{display:block;color:var(--kv-sub);margin-bottom:4px;font-size:15.5px}
.kv-empty .ill{width:96px;height:96px;margin:0 auto 14px;opacity:.9}

/* ---------- 6. 버튼 ---------- */
.kv-btn{position:relative;display:inline-flex;align-items:center;justify-content:center;gap:8px;min-height:46px;padding:0 20px;border:1px solid transparent;border-radius:var(--kv-radius-sm);
  font:inherit;font-weight:700;font-size:15px;letter-spacing:-.01em;cursor:pointer;text-decoration:none!important;white-space:nowrap;overflow:hidden;
  transition:transform .14s var(--kv-ease),filter .15s ease,box-shadow .2s ease,background .15s ease,border-color .15s ease;-webkit-tap-highlight-color:transparent}
.kv-btn:hover{transform:translateY(-1px)} .kv-btn:active{transform:translateY(0) scale(.985)}
.kv-btn:disabled,.kv-btn.is-loading{opacity:.6;cursor:default;pointer-events:none}
.kv-btn svg{width:18px;height:18px;flex:none;fill:none;stroke:currentColor;stroke-width:2.1;stroke-linecap:round;stroke-linejoin:round}
.kv-btn.primary{color:#fff;background:var(--kv-navy-grad);box-shadow:0 0 0 1px rgba(201,164,92,.55) inset,0 8px 22px rgba(10,16,36,.26)}
.kv-btn.primary:hover{filter:brightness(1.14);box-shadow:0 0 0 1px rgba(231,207,151,.8) inset,0 12px 28px rgba(10,16,36,.32)}
.kv-btn.gold{color:#0A1024;background:var(--kv-gold-grad);box-shadow:0 0 0 1px rgba(255,255,255,.4) inset,0 10px 26px rgba(201,164,92,.32)}
.kv-btn.gold::after{content:"";position:absolute;inset:0;background:linear-gradient(110deg,transparent 30%,rgba(255,255,255,.55) 50%,transparent 70%);transform:translateX(-120%);transition:transform .6s var(--kv-ease)}
.kv-btn.gold:hover::after{transform:translateX(120%)}
.kv-btn.line{color:var(--kv-ink);background:var(--kv-card);border-color:var(--kv-line-2)} .kv-btn.line:hover{background:var(--kv-hover);border-color:var(--kv-muted)}
.kv-btn.soft{color:var(--kv-info);background:var(--kv-info-soft)} .kv-btn.soft:hover{filter:brightness(.97)}
.kv-btn.ghost{color:var(--kv-sub);background:transparent} .kv-btn.ghost:hover{background:var(--kv-hover);color:var(--kv-ink)}
.kv-btn.danger{color:#fff;background:linear-gradient(135deg,#E25A5A,#C23030);box-shadow:0 8px 20px rgba(194,48,48,.28)}
.kv-btn.sm{min-height:36px;padding:0 13px;font-size:13.5px;border-radius:10px} .kv-btn.lg{min-height:58px;font-size:17px;border-radius:16px} .kv-btn.block{display:flex;width:100%}
.kv-btn.icon{padding:0;width:44px} .kv-btn.icon.sm{width:36px}
.kv-btn.is-loading::before{content:"";width:16px;height:16px;border:2.5px solid currentColor;border-right-color:transparent;border-radius:50%;animation:kv-spin .7s linear infinite}

/* ---------- 7. 폼 ---------- */
.kv-field{margin-bottom:18px}
.kv-label{display:block;font-size:13px;font-weight:700;color:var(--kv-sub);margin:0 0 7px 2px}
.kv-label .req{color:var(--kv-danger);margin-left:3px}
.kv-input,.kv-select,.kv-textarea{display:block;width:100%;min-height:48px;padding:0 15px;border:1.5px solid var(--kv-line);border-radius:var(--kv-radius-sm);background:var(--kv-card);
  font:inherit;font-size:16px;color:var(--kv-ink);transition:border-color .15s ease,box-shadow .2s ease,background .15s;-webkit-appearance:none;appearance:none}
.kv-textarea{min-height:100px;padding:13px 15px;resize:vertical;line-height:1.6}
.kv-select{padding-right:40px;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='14' height='9' viewBox='0 0 14 9'%3E%3Cpath d='M1 1l6 6 6-6' stroke='%238F96AE' stroke-width='2' fill='none'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 15px center}
.kv-input::placeholder,.kv-textarea::placeholder{color:var(--kv-muted);opacity:.7}
.kv-input:hover,.kv-select:hover,.kv-textarea:hover{border-color:var(--kv-line-2)}
.kv-input:focus,.kv-select:focus,.kv-textarea:focus{outline:none;border-color:var(--kv-gold);box-shadow:0 0 0 4px rgba(201,164,92,.18)}
.kv-input[readonly],.kv-input:disabled,.kv-select:disabled,.kv-textarea:disabled{background:var(--kv-row);color:var(--kv-sub);cursor:not-allowed}
.kv-input.sm,.kv-select.sm{min-height:38px;font-size:14px;padding:0 11px;border-radius:10px}
.kv-input.is-invalid,.kv-select.is-invalid,.kv-textarea.is-invalid{border-color:var(--kv-danger);box-shadow:0 0 0 4px color-mix(in srgb,var(--kv-danger) 14%,transparent)}
.kv-help{font-size:12.5px;color:var(--kv-muted);margin:6px 2px 0} .kv-error{font-size:12.5px;color:var(--kv-danger);margin:6px 2px 0;font-weight:600}
.kv-inline{display:flex;gap:8px} .kv-inline>*{min-width:0} .kv-inline>.grow{flex:1 1 auto}
input[type=date],input[type=datetime-local]{color-scheme:inherit}

/* 라벨과 입력이 한 줄인 그룹형 입력(로그인 등) */
.kv-group{border:1px solid var(--kv-line);border-radius:20px;overflow:hidden;background:var(--kv-card);box-shadow:var(--kv-shadow-xs)}
.kv-line{position:relative;display:flex;align-items:center;min-height:62px;padding:0 12px 0 20px;background:var(--kv-card);transition:background .15s ease}
.kv-line+.kv-line{border-top:1px solid var(--kv-line)}
.kv-line::before{content:"";position:absolute;left:0;top:15px;bottom:15px;width:3px;border-radius:3px;background:var(--kv-gold);opacity:0;transform:scaleY(.4);transition:opacity .2s,transform .25s var(--kv-ease)}
.kv-line:focus-within{background:var(--kv-card-2)} .kv-line:focus-within::before{opacity:1;transform:none}
.kv-line>label{flex:0 0 86px;font-size:14px;font-weight:700;color:var(--kv-sub);margin:0;cursor:text}
.kv-line>input,.kv-line>.kv-lineinput{flex:1 1 auto;min-width:0;width:100%;height:60px;padding:0 6px;border:0;background:transparent;font:inherit;font-size:17.5px;font-weight:600;color:var(--kv-ink);-webkit-appearance:none;appearance:none}
.kv-line>input::placeholder{color:var(--kv-muted);opacity:.55;font-weight:500} .kv-line>input:focus{outline:none}
.kv-line.is-locked{background:var(--kv-row)}
.kv-line .kv-lock{display:none;color:var(--kv-gold-d);margin-right:6px} .kv-line.is-locked .kv-lock{display:block}

.kv-check{display:inline-flex;align-items:center;gap:9px;cursor:pointer;font-size:14.5px}
.kv-check input{width:19px;height:19px;accent-color:#2B3F8F;margin:0}

/* ---------- 8. 투표 UI ---------- */
.kv-q{background:var(--kv-card);border:1px solid var(--kv-line);border-radius:var(--kv-radius);box-shadow:var(--kv-shadow-sm);padding:20px 16px 16px;margin-bottom:14px;scroll-margin-top:80px}
.kv-q.is-bad{box-shadow:0 0 0 2px var(--kv-danger),var(--kv-shadow-sm);animation:kv-shake .4s}
.kv-q-h{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px}
.kv-q-no{flex:none;min-width:30px;height:30px;padding:0 9px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;background:var(--kv-night-2);color:var(--kv-gold-l);font-size:13px;font-weight:800}
.kv-q-t{font-size:18px;font-weight:700;line-height:1.45;margin:0}
.kv-q-d{font-size:13.5px;color:var(--kv-sub);margin:5px 0 0}
.kv-opts{display:flex;flex-direction:column;gap:10px}
.kv-opt{position:relative;display:flex;align-items:center;gap:13px;padding:15px;border:1.5px solid var(--kv-line);border-radius:16px;background:var(--kv-card);cursor:pointer;overflow:hidden;
  transition:border-color .18s,background .18s,box-shadow .2s,transform .14s var(--kv-ease);-webkit-tap-highlight-color:transparent}
.kv-opt:hover{border-color:var(--kv-line-2);background:var(--kv-card-2)} .kv-opt:active{transform:scale(.99)}
.kv-opt input{position:absolute;opacity:0;pointer-events:none}
.kv-opt .mark{flex:none;width:26px;height:26px;border-radius:50%;border:2px solid var(--kv-line-2);background:var(--kv-card);display:flex;align-items:center;justify-content:center;transition:all .2s var(--kv-ease)}
.kv-opt.multi .mark{border-radius:8px}
.kv-opt .mark svg{width:15px;height:15px;stroke:#fff;fill:none;stroke-width:3.2;stroke-linecap:round;stroke-linejoin:round;transform:scale(.3);opacity:0;transition:all .22s var(--kv-ease)}
.kv-opt .body{flex:1;min-width:0} .kv-opt .nm{display:block;font-size:16.5px;font-weight:700} .kv-opt .ds{display:block;font-size:13px;color:var(--kv-sub);margin-top:2px}
.kv-opt .photo{flex:none;width:56px;height:70px;border-radius:12px;object-fit:cover;background:var(--kv-line)}
.kv-opt .avatar{flex:none;width:56px;height:70px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:22px;font-weight:800;color:var(--kv-gold-l);background:var(--kv-navy-grad)}
.kv-opt:has(input:checked){border-color:var(--kv-gold);background:linear-gradient(90deg,var(--kv-gold-soft),var(--kv-card) 70%);box-shadow:0 0 0 3px rgba(201,164,92,.2),var(--kv-shadow-xs)}
.kv-opt:has(input:checked)::before{content:"";position:absolute;left:0;top:0;bottom:0;width:4px;background:var(--kv-gold-grad)}
.kv-opt:has(input:checked) .mark{background:var(--kv-navy-grad);border-color:var(--kv-night);box-shadow:0 0 0 3px rgba(201,164,92,.35)} .kv-opt:has(input:checked) .mark svg{opacity:1;transform:none}
.kv-opt:has(input:focus-visible){outline:2.5px solid var(--kv-focus);outline-offset:2px}
.kv-opt.is-off{opacity:.5;cursor:not-allowed;background:var(--kv-row)}
.kv-opt .sym{flex:none;font-size:12px;font-weight:800;color:var(--kv-gold-text);background:var(--kv-gold-soft);border-radius:9px;padding:4px 9px}
.kv-yn{display:grid;grid-template-columns:1fr 1fr;gap:10px}
.kv-yn.three{grid-template-columns:1fr 1fr 1fr}
.kv-yn label{position:relative;display:flex;align-items:center;justify-content:center;min-height:66px;border:1.5px solid var(--kv-line);border-radius:16px;font-size:18px;font-weight:800;color:var(--kv-sub);cursor:pointer;background:var(--kv-card);transition:all .18s var(--kv-ease)}
.kv-yn label:hover{border-color:var(--kv-line-2)}
.kv-yn input{position:absolute;opacity:0;pointer-events:none}
.kv-yn label:has(input:checked){color:#fff;border-color:transparent;background:var(--kv-navy-grad);box-shadow:0 0 0 1px rgba(201,164,92,.65) inset,0 10px 22px rgba(10,16,36,.28);transform:translateY(-1px)}
.kv-yn.no label:has(input:checked){background:linear-gradient(135deg,#7A8097,#4A5066)}
.kv-yn label:has(input:focus-visible){outline:2.5px solid var(--kv-focus);outline-offset:2px}
.kv-scale{display:flex;gap:7px} .kv-scale label{flex:1;min-width:0;position:relative;display:flex;align-items:center;justify-content:center;height:52px;border:1.5px solid var(--kv-line);border-radius:14px;font-weight:800;color:var(--kv-sub);cursor:pointer;background:var(--kv-card);transition:all .18s var(--kv-ease)}
.kv-scale input{position:absolute;opacity:0;pointer-events:none}
.kv-scale label:has(input:checked){background:var(--kv-navy-grad);color:#fff;border-color:transparent;transform:translateY(-2px);box-shadow:0 8px 16px rgba(10,16,36,.3)}
.kv-scale label:has(input:focus-visible){outline:2.5px solid var(--kv-focus);outline-offset:2px}
.kv-scale-ends{display:flex;justify-content:space-between;margin:8px 2px 0;font-size:12px;font-weight:600;color:var(--kv-muted)}
.kv-cand-detail{margin-top:10px;padding-top:10px;border-top:1px dashed var(--kv-line);font-size:13.5px;color:var(--kv-sub);white-space:pre-line}

/* 하단 고정 제출바 */
.kv-dock{position:fixed;left:0;right:0;bottom:0;z-index:50;background:var(--kv-glass);backdrop-filter:blur(14px) saturate(1.4);-webkit-backdrop-filter:blur(14px) saturate(1.4);
  border-top:1px solid var(--kv-line);padding:11px 14px calc(11px + var(--kv-safe-b))}
.kv-dock-in{max-width:520px;margin:0 auto;display:flex;align-items:center;gap:12px}
.kv-topbar-prog{position:fixed;left:0;right:0;top:0;height:4px;z-index:60;background:rgba(127,127,160,.15)}
.kv-topbar-prog>i{display:block;height:100%;width:0;background:var(--kv-gold-grad);transition:width .35s var(--kv-ease);border-radius:0 3px 3px 0}

/* ---------- 9. 표 ---------- */
.kv-table-wrap{overflow-x:auto;border:1px solid var(--kv-line);border-radius:var(--kv-radius-sm);background:var(--kv-card)}
.kv-table{width:100%;border-collapse:separate;border-spacing:0;font-size:14px}
.kv-table th{position:sticky;top:0;background:var(--kv-row);color:var(--kv-sub);font-weight:700;font-size:12.5px;text-align:left;padding:12px 14px;border-bottom:1px solid var(--kv-line);white-space:nowrap}
.kv-table td{padding:13px 14px;border-bottom:1px solid var(--kv-line);vertical-align:middle}
.kv-table tr:last-child td{border-bottom:0}
.kv-table tbody tr{transition:background .12s} .kv-table tbody tr:hover td{background:var(--kv-hover)}
.kv-table.dense td{padding:9px 12px} .kv-table.dense th{padding:9px 12px}
.kv-table .r{text-align:right} .kv-table .c{text-align:center} .kv-table .nowrap{white-space:nowrap}
.kv-table a.row-link{color:var(--kv-ink);font-weight:700} .kv-table a.row-link:hover{color:var(--kv-info);text-decoration:none}
.kv-table th[data-sort]{cursor:pointer;user-select:none} .kv-table th[data-sort]::after{content:" ↕";color:var(--kv-muted);font-weight:400}
.kv-table th[data-sort].asc::after{content:" ↑";color:var(--kv-gold-d)} .kv-table th[data-sort].desc::after{content:" ↓";color:var(--kv-gold-d)}
.kv-table th a.sortlink{color:inherit;text-decoration:none} .kv-table th a.sortlink:hover{color:var(--kv-ink)} .kv-table th a.sortlink.on{color:var(--kv-gold-text)}
.kv-pager{display:flex;gap:5px;justify-content:center;margin-top:18px;flex-wrap:wrap}
.kv-pager a,.kv-pager span{min-width:38px;height:38px;padding:0 11px;display:inline-flex;align-items:center;justify-content:center;border-radius:10px;border:1px solid var(--kv-line);background:var(--kv-card);color:var(--kv-sub);font-weight:700;font-size:14px;text-decoration:none;transition:all .15s}
.kv-pager a:hover{border-color:var(--kv-gold);color:var(--kv-ink)}
.kv-pager .cur{background:var(--kv-night-2);color:var(--kv-gold-l);border-color:var(--kv-night-2)} .kv-pager .dis{opacity:.4}

/* ---------- 10. 관리자 셸 ---------- */
.kv-shell{display:grid;grid-template-columns:264px minmax(0,1fr);min-height:100vh;transition:grid-template-columns .25s var(--kv-ease)}
:root[data-side="collapsed"] .kv-shell{grid-template-columns:76px minmax(0,1fr)}
.kv-side{position:sticky;top:0;height:100vh;overflow-y:auto;overflow-x:hidden;background:linear-gradient(185deg,#0B1229,#0D1431 55%,#0A1026);color:#C4CBE4;padding:18px 12px;display:flex;flex-direction:column;gap:3px;border-right:1px solid rgba(255,255,255,.05)}
.kv-side .brand{display:flex;align-items:center;gap:11px;padding:6px 10px 18px;color:#fff;font-weight:800;font-size:17px;letter-spacing:-.02em;white-space:nowrap}
.kv-side .brand .dot{flex:none;width:34px;height:34px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:radial-gradient(circle at 30% 25%,#1F2E66,#0A1130 70%);box-shadow:0 0 0 1px rgba(231,207,151,.6),0 6px 16px rgba(0,0,0,.4)}
.kv-side .brand small{display:block;font-size:10.5px;font-weight:700;letter-spacing:.22em;color:var(--kv-gold-l)}
.kv-nav-h{font-size:10.5px;font-weight:800;letter-spacing:.16em;color:#6C75A0;padding:16px 12px 6px;white-space:nowrap}
.kv-nav a{position:relative;display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:11px;color:#C4CBE4;font-weight:600;font-size:14.5px;text-decoration:none;white-space:nowrap;transition:background .15s,color .15s}
.kv-nav a svg{width:19px;height:19px;flex:none;fill:none;stroke:currentColor;stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;opacity:.8}
.kv-nav a:hover{background:rgba(255,255,255,.06);color:#fff;text-decoration:none}
.kv-nav a.active{background:linear-gradient(90deg,rgba(201,164,92,.24),rgba(201,164,92,.05));color:var(--kv-gold-l)} .kv-nav a.active svg{opacity:1}
.kv-nav a.active::before{content:"";position:absolute;left:-12px;top:9px;bottom:9px;width:3px;border-radius:0 3px 3px 0;background:var(--kv-gold)}
.kv-nav .cnt{margin-left:auto;font-size:11px;font-weight:800;padding:2px 8px;border-radius:99px;background:var(--kv-gold);color:#0A1024}
.kv-side .who{margin-top:auto;padding:14px 10px 4px;border-top:1px solid rgba(255,255,255,.08);font-size:13px}
.kv-side .who b{display:block;color:#fff;font-size:14px}
.kv-side .kv-btn.ghost{color:#C9CFE4} .kv-side .kv-btn.ghost:hover{background:rgba(255,255,255,.09);color:#fff}
:root[data-side="collapsed"] .kv-side .who .kv-row{display:none}
@media(max-width:980px){:root[data-side="collapsed"] .kv-side .who .kv-row{display:flex}}
:root[data-side="collapsed"] .kv-shell .kv-nav a span.t,:root[data-side="collapsed"] .kv-shell .brand span.t,:root[data-side="collapsed"] .kv-shell .kv-nav-h,:root[data-side="collapsed"] .kv-shell .who .meta,:root[data-side="collapsed"] .kv-shell .kv-nav .cnt{display:none}
:root[data-side="collapsed"] .kv-shell .kv-nav a{justify-content:center;padding:11px 0} :root[data-side="collapsed"] .kv-shell .brand{justify-content:center;padding-left:0;padding-right:0}
.kv-main{min-width:0;display:flex;flex-direction:column}
.kv-top{position:sticky;top:0;z-index:30;display:flex;align-items:center;gap:12px;min-height:64px;padding:0 26px;background:var(--kv-glass);backdrop-filter:blur(14px) saturate(1.3);-webkit-backdrop-filter:blur(14px) saturate(1.3);border-bottom:1px solid var(--kv-line)}
.kv-top h1{margin:0;font-size:18px}
.kv-top .burger{display:inline-flex}
.kv-content{padding:26px;max-width:1320px;width:100%;margin:0 auto}
.kv-page-h{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;margin-bottom:20px;flex-wrap:wrap}
.kv-page-h h1{font-size:26px;margin:0} .kv-page-h p{margin:5px 0 0;color:var(--kv-sub)}
@media(max-width:980px){
  .kv-shell,:root[data-side="collapsed"] .kv-shell{grid-template-columns:minmax(0,1fr)}
  .kv-side{position:fixed;left:0;top:0;bottom:0;width:272px;z-index:80;transform:translateX(-100%);transition:transform .28s var(--kv-ease)}
  .kv-side.open{transform:none;box-shadow:var(--kv-shadow-lg)}
  :root[data-side="collapsed"] .kv-shell .kv-nav a span.t,:root[data-side="collapsed"] .kv-shell .brand span.t,:root[data-side="collapsed"] .kv-shell .kv-nav-h,:root[data-side="collapsed"] .kv-shell .who .meta{display:revert}
  :root[data-side="collapsed"] .kv-shell .kv-nav a{justify-content:flex-start;padding:10px 12px}
  .kv-content{padding:16px} .kv-top{padding:0 14px}
}
.kv-scrim{position:fixed;inset:0;background:var(--kv-overlay);z-index:70;display:none;backdrop-filter:blur(2px)} .kv-scrim.on{display:block}

/* ---------- 11. 컴포넌트 ---------- */
/* 통계 타일 */
.kv-stat{position:relative;background:var(--kv-card);border:1px solid var(--kv-line);border-radius:var(--kv-radius);box-shadow:var(--kv-shadow-sm);padding:18px 20px;overflow:hidden}
.kv-stat .l{font-size:12.5px;font-weight:700;color:var(--kv-sub)} .kv-stat .v{font-size:30px;font-weight:800;letter-spacing:-.035em;font-variant-numeric:tabular-nums;margin-top:3px;line-height:1.15}
.kv-stat .s{font-size:12.5px;color:var(--kv-muted);margin-top:2px} .kv-stat.gold .v{color:var(--kv-gold-text)} .kv-stat.ok .v{color:var(--kv-ok)} .kv-stat.danger .v{color:var(--kv-danger)}
.kv-stat .spark{position:absolute;right:10px;bottom:8px;width:92px;height:34px;opacity:.9}
.kv-stat.flat{box-shadow:none}
/* 진행바 */
.kv-bar{height:9px;border-radius:99px;background:var(--kv-line);overflow:hidden} .kv-bar>i{display:block;height:100%;border-radius:99px;background:var(--kv-gold-grad);transition:width .8s var(--kv-ease)}
.kv-bar.navy>i{background:linear-gradient(90deg,#2B3F8F,#3561E6)} .kv-bar.sm{height:6px}
.kv-segs{display:flex;gap:5px} .kv-segs>i{flex:1;height:8px;border-radius:99px;background:var(--kv-line);transition:background .3s} .kv-segs>i.done{background:var(--kv-gold)} .kv-segs>i.cur{background:var(--kv-gold-l)}
/* 링 게이지 (--p: 0~100) */
.kv-ring{--p:0;--s:84px;--w:9px;position:relative;width:var(--s);height:var(--s);border-radius:50%;flex:none;
  background:conic-gradient(var(--kv-gold) calc(var(--p)*1%),var(--kv-line) 0);-webkit-mask:radial-gradient(farthest-side,transparent calc(100% - var(--w)),#000 calc(100% - var(--w) + .5px));mask:radial-gradient(farthest-side,transparent calc(100% - var(--w)),#000 calc(100% - var(--w) + .5px))}
.kv-ring-wrap{position:relative;display:inline-flex;align-items:center;justify-content:center;flex:none} .kv-ring-wrap .t{position:absolute;font-weight:800;font-size:15px;font-variant-numeric:tabular-nums;letter-spacing:-.03em}
/* 탭 */
.kv-tabs{display:flex;gap:4px;border-bottom:1px solid var(--kv-line);margin-bottom:20px;overflow-x:auto;overflow-y:hidden;scrollbar-width:none} .kv-tabs::-webkit-scrollbar{display:none}
.kv-tabs a{padding:12px 17px;font-weight:700;color:var(--kv-sub);text-decoration:none;border-bottom:2.5px solid transparent;white-space:nowrap;margin-bottom:-1px;transition:color .15s,border-color .15s}
.kv-tabs a:hover{color:var(--kv-ink);text-decoration:none} .kv-tabs a.active{color:var(--kv-ink);border-bottom-color:var(--kv-gold)}
/* 단계 */
.kv-steps{display:flex;margin:0 0 24px;padding:0;list-style:none;counter-reset:s}
.kv-steps li{flex:1;text-align:center;font-size:12.5px;font-weight:700;color:var(--kv-muted);position:relative}
.kv-steps li::before{counter-increment:s;content:counter(s);display:flex;align-items:center;justify-content:center;width:32px;height:32px;margin:0 auto 7px;border-radius:50%;background:var(--kv-card);border:1.5px solid var(--kv-line-2);color:var(--kv-muted);position:relative;z-index:1;transition:all .25s var(--kv-ease)}
.kv-steps li::after{content:"";position:absolute;top:16px;left:calc(50% + 20px);right:calc(-50% + 20px);height:2px;background:var(--kv-line);border-radius:2px}
.kv-steps li:last-child::after{display:none}
.kv-steps li.done{color:var(--kv-sub)} .kv-steps li.done::before{content:"✓";background:var(--kv-gold-soft);color:var(--kv-gold-text);border-color:var(--kv-gold)} .kv-steps li.done::after{background:var(--kv-gold)}
.kv-steps li.cur{color:var(--kv-ink)} .kv-steps li.cur::before{background:var(--kv-navy-grad);color:var(--kv-gold-l);border-color:transparent;box-shadow:0 6px 16px rgba(10,16,36,.3);transform:scale(1.08)}
/* 라이프사이클(타임라인) */
.kv-life{display:flex;gap:0;margin:0;padding:0;list-style:none;overflow-x:auto}
.kv-life li{flex:1;min-width:84px;text-align:center;position:relative;padding-top:2px;font-size:12px;font-weight:700;color:var(--kv-muted)}
.kv-life li::before{content:"";display:block;width:14px;height:14px;margin:0 auto 7px;border-radius:50%;background:var(--kv-card);border:2.5px solid var(--kv-line-2);position:relative;z-index:1}
.kv-life li::after{content:"";position:absolute;top:8px;left:calc(50% + 9px);right:calc(-50% + 9px);height:2.5px;background:var(--kv-line)} .kv-life li:last-child::after{display:none}
.kv-life li.done{color:var(--kv-sub)} .kv-life li.done::before{background:var(--kv-gold);border-color:var(--kv-gold)} .kv-life li.done::after{background:var(--kv-gold)}
.kv-life li.cur{color:var(--kv-ink)} .kv-life li.cur::before{background:var(--kv-night);border-color:var(--kv-gold);box-shadow:0 0 0 5px rgba(201,164,92,.25);animation:kv-pulse-ring 2s ease-out infinite}
.kv-life small{display:block;font-weight:500;color:var(--kv-muted);font-size:11px;margin-top:1px}
/* 모달 / 바텀시트 */
.kv-modal{position:fixed;inset:0;z-index:2000;display:flex;align-items:center;justify-content:center;padding:20px;background:var(--kv-overlay);backdrop-filter:blur(5px);-webkit-backdrop-filter:blur(5px);opacity:0;visibility:hidden;transition:opacity .22s,visibility .22s}
.kv-modal.open{opacity:1;visibility:visible}
.kv-modal-box{position:relative;width:100%;max-width:430px;max-height:90vh;overflow:auto;background:var(--kv-card);border:1px solid var(--kv-line);border-radius:24px;padding:28px 22px 18px;box-shadow:var(--kv-shadow-lg);transform:translateY(14px) scale(.97);transition:transform .28s var(--kv-ease)}
.kv-modal.open .kv-modal-box{transform:none}
.kv-modal-box::before{content:"";position:absolute;left:32px;right:32px;top:-1px;height:2px;background:linear-gradient(90deg,transparent,var(--kv-gold),transparent)}
.kv-modal-box.wide{max-width:720px}
.kv-modal-ic{width:56px;height:56px;margin:0 auto 13px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--kv-gold-soft);color:var(--kv-gold-text);box-shadow:0 0 0 1px rgba(201,164,92,.35)}
.kv-modal-ic.ok{background:var(--kv-ok-soft);color:var(--kv-ok);box-shadow:0 0 0 1px color-mix(in srgb,var(--kv-ok) 30%,transparent)} .kv-modal-ic.danger{background:var(--kv-danger-soft);color:var(--kv-danger);box-shadow:none}
.kv-modal-ic svg{width:27px;height:27px;fill:none;stroke:currentColor;stroke-width:2.4;stroke-linecap:round;stroke-linejoin:round}
.kv-modal-t{text-align:center;font-size:18.5px;font-weight:800;margin:0 0 7px} .kv-modal-m{text-align:center;color:var(--kv-sub);font-size:14.5px;line-height:1.65;white-space:pre-line;margin:0 0 20px}
.kv-modal-b{display:flex;gap:9px} .kv-modal-b>*{flex:1}
@media(max-width:560px){
  .kv-modal{align-items:flex-end;padding:0}
  .kv-modal-box,.kv-modal-box.wide{max-width:none;border-radius:26px 26px 0 0;padding-bottom:calc(18px + var(--kv-safe-b));transform:translateY(100%)}
  .kv-modal.open .kv-modal-box{transform:none}
  .kv-modal-box::after{content:"";display:block;position:absolute;top:8px;left:50%;width:42px;height:4px;margin-left:-21px;border-radius:4px;background:var(--kv-line-2)}
}
/* 토스트 */
.kv-toasts{position:fixed;left:50%;top:calc(14px + env(safe-area-inset-top,0px));transform:translateX(-50%);z-index:3000;display:flex;flex-direction:column;gap:9px;align-items:center;pointer-events:none;width:min(92vw,430px)}
.kv-toast{pointer-events:auto;width:100%;padding:13px 17px;border-radius:14px;background:#10173A;color:#fff;font-size:14px;font-weight:600;box-shadow:var(--kv-shadow-lg);border-left:3px solid var(--kv-gold);animation:kv-in-d .28s var(--kv-ease)}
.kv-toast.ok{border-left-color:#3DBE86} .kv-toast.danger{border-left-color:#E25A5A}
/* 키-값 목록 */
.kv-dl{display:grid;grid-template-columns:150px minmax(0,1fr);gap:0;font-size:14px;margin:0}
.kv-dl dt{padding:11px 0;color:var(--kv-sub);font-weight:700;border-bottom:1px solid var(--kv-line)} .kv-dl dd{margin:0;padding:11px 0;border-bottom:1px solid var(--kv-line);word-break:break-all}
@media(max-width:560px){.kv-dl{grid-template-columns:110px minmax(0,1fr)}}
.kv-copy{display:flex;gap:8px;align-items:center;background:var(--kv-row);border:1px solid var(--kv-line);border-radius:12px;padding:9px 11px;font-family:var(--kv-mono);font-size:13px;word-break:break-all}
/* 가로 막대 */
.kv-hbar{display:grid;grid-template-columns:minmax(80px,170px) minmax(0,1fr) 96px;gap:11px;align-items:center;margin:9px 0;font-size:14px}
.kv-hbar .t{height:24px;border-radius:8px;background:var(--kv-line);overflow:hidden} .kv-hbar .t>i{display:block;height:100%;background:linear-gradient(90deg,#2B3F8F,#3561E6);border-radius:8px;transition:width .9s var(--kv-ease)}
.kv-hbar.win .t>i{background:var(--kv-gold-grad)} .kv-hbar .n{text-align:right;font-variant-numeric:tabular-nums;font-weight:700}
.kv-chart svg{width:100%;height:auto;display:block}
/* 스켈레톤 */
.kv-skel{position:relative;overflow:hidden;background:var(--kv-line);border-radius:10px;min-height:14px} .kv-skel::after{content:"";position:absolute;inset:0;background:linear-gradient(90deg,transparent,rgba(255,255,255,.35),transparent);transform:translateX(-100%);animation:kv-shimmer 1.4s infinite}
/* 커맨드 팔레트 */
.kv-cmd{position:fixed;inset:0;z-index:2500;display:none;align-items:flex-start;justify-content:center;padding:12vh 16px 16px;background:var(--kv-overlay);backdrop-filter:blur(5px)} .kv-cmd.open{display:flex}
.kv-cmd-box{width:100%;max-width:620px;background:var(--kv-card);border:1px solid var(--kv-line);border-radius:20px;box-shadow:var(--kv-shadow-lg);overflow:hidden;animation:kv-in .22s var(--kv-ease)}
.kv-cmd-in{display:flex;align-items:center;gap:12px;padding:0 18px;border-bottom:1px solid var(--kv-line)} .kv-cmd-in svg{width:20px;height:20px;stroke:var(--kv-muted);fill:none;stroke-width:2;flex:none}
.kv-cmd-in input{flex:1;height:58px;border:0;background:transparent;font:inherit;font-size:17px;color:var(--kv-ink)} .kv-cmd-in input:focus{outline:none}
.kv-cmd-in kbd,.kv-kbd{font-family:var(--kv-mono);font-size:11px;padding:2px 7px;border-radius:6px;border:1px solid var(--kv-line-2);color:var(--kv-muted);background:var(--kv-row)}
.kv-cmd-list{max-height:52vh;overflow:auto;padding:8px}
.kv-cmd-grp{font-size:11px;font-weight:800;letter-spacing:.12em;color:var(--kv-muted);padding:10px 12px 5px}
.kv-cmd-item{display:flex;align-items:center;gap:12px;padding:10px 12px;border-radius:12px;color:var(--kv-ink);text-decoration:none!important;cursor:pointer} .kv-cmd-item .sub{margin-left:auto;font-size:12.5px;color:var(--kv-muted)}
.kv-cmd-item.sel,.kv-cmd-item:hover{background:var(--kv-hover)} .kv-cmd-item .ic{width:34px;height:34px;border-radius:10px;background:var(--kv-row);display:flex;align-items:center;justify-content:center;flex:none;color:var(--kv-sub)}
.kv-cmd-item .ic svg{width:17px;height:17px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
.kv-cmd-empty{padding:28px;text-align:center;color:var(--kv-muted)}

/* ---------- 12. 모션 ---------- */
@keyframes kv-spin{to{transform:rotate(360deg)}}
@keyframes kv-in{from{opacity:0;transform:translateY(10px)}to{opacity:1;transform:none}}
@keyframes kv-in-d{from{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:none}}
@keyframes kv-pulse{0%{transform:scale(.9);opacity:.8}100%{transform:scale(1.5);opacity:0}}
@keyframes kv-pulse-ring{0%{box-shadow:0 0 0 0 rgba(201,164,92,.5)}100%{box-shadow:0 0 0 12px rgba(201,164,92,0)}}
@keyframes kv-blink{0%,100%{opacity:1}50%{opacity:.25}}
@keyframes kv-shake{0%,100%{transform:none}25%{transform:translateX(-5px)}75%{transform:translateX(5px)}}
@keyframes kv-shimmer{to{transform:translateX(100%)}}
@keyframes kv-draw{to{stroke-dashoffset:0}}
@keyframes kv-grow{from{transform:scaleY(0)}to{transform:scaleY(1)}}
@keyframes kv-pop{0%{transform:scale(.4);opacity:0}60%{transform:scale(1.12)}100%{transform:scale(1);opacity:1}}
.kv-reveal{animation:kv-in .5s var(--kv-ease) both} .kv-reveal.d1{animation-delay:.06s} .kv-reveal.d2{animation-delay:.12s} .kv-reveal.d3{animation-delay:.18s} .kv-reveal.d4{animation-delay:.24s}
@view-transition{navigation:auto}
::view-transition-old(root),::view-transition-new(root){animation-duration:.22s}

/* ---------- 13. 인쇄 ---------- */
@media print{
  :root{--kv-bg:#fff;--kv-card:#fff;--kv-ink:#000;--kv-sub:#333;--kv-line:#ccc}
  body{background:#fff;font-size:11.5pt} .kv-side,.kv-top,.kv-dock,.kv-btn,.no-print,.kv-toasts,.kv-cmd,.kv-tabs{display:none!important}
  .kv-shell{display:block} .kv-content{padding:0;max-width:none} .kv-card,.kv-stat{box-shadow:none!important;border:1px solid #ccc;break-inside:avoid}
  .kv-table th{position:static} a{color:#000;text-decoration:none} .kv-hbar .t>i{-webkit-print-color-adjust:exact;print-color-adjust:exact}
}

/* ---------- 14. 유틸 ---------- */
.kv-hide{display:none!important} .kv-center{text-align:center} .kv-right{text-align:right} .kv-bold{font-weight:700}
.kv-mt0{margin-top:0!important} .kv-mt1{margin-top:8px!important} .kv-mt2{margin-top:16px!important} .kv-mt3{margin-top:24px!important}
.kv-mb0{margin-bottom:0!important} .kv-mb1{margin-bottom:8px!important} .kv-mb2{margin-bottom:16px!important}
.kv-w100{width:100%} .kv-trunc{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.kv-nowrap{white-space:nowrap} .kv-pre{white-space:pre-wrap}
@media(prefers-reduced-motion:reduce){*,*::before,*::after{animation-duration:.001ms!important;animation-iteration-count:1!important;transition-duration:.001ms!important;scroll-behavior:auto!important}}

/* =====================================================================
   15. LUXE — "Midnight Gold" 프리미엄 층 (2026.12)
   상아빛 지면 · 금박 그라디언트 · 오로라 배경 · 종이 질감 · 스포트라이트 · 금속 광택 · 인장 엠블럼
   앞 절의 구성 요소를 그대로 두고 표면·빛·질감만 덧입힌다. 모션은 prefers-reduced-motion 에서 꺼진다.
   ===================================================================== */
:root{
  --kv-bg:#F5F2EA; --kv-bg-2:#EDE7DA; --kv-card:#FFFEFB; --kv-card-2:#FBF8F1; --kv-row:#F8F4EC; --kv-hover:#F4EEE2;
  --kv-ink:#0D1230; --kv-sub:#4C5270; --kv-muted:#8A8DA2; --kv-line:rgba(13,18,48,.085); --kv-line-2:rgba(13,18,48,.15);
  --kv-gold-soft:#F7EED9; --kv-gold-text:#87661F;
  --kv-gold-grad:linear-gradient(135deg,#F8EBC4 0%,#E2C47F 22%,#BE9545 48%,#EBD08F 70%,#A9802F 100%);
  --kv-navy-grad:linear-gradient(140deg,#24346F 0%,#121B44 48%,#070C24 100%);
  --lx-edge:linear-gradient(150deg,rgba(201,164,92,.55),rgba(201,164,92,.10) 30%,rgba(13,18,48,.05) 62%,rgba(201,164,92,.32));
  --lx-glow:rgba(201,164,92,.16);
  --lx-aurora-a:rgba(201,164,92,.20); --lx-aurora-b:rgba(70,98,214,.13); --lx-aurora-c:rgba(184,141,62,.10);
  --lx-grain:.04;
  --kv-shadow-sm:0 1px 1px rgba(40,30,10,.03),0 6px 16px -4px rgba(40,30,10,.07),0 18px 40px -18px rgba(13,18,48,.10);
  --kv-shadow:0 2px 4px rgba(40,30,10,.04),0 18px 40px -12px rgba(13,18,48,.16);
  --lx-serif:"Cormorant Garamond","Playfair Display",Georgia,"Times New Roman",serif;
}
@media (prefers-color-scheme:dark){
  :root:not([data-theme="light"]){
    --kv-bg:#04071A; --kv-bg-2:#080D25; --kv-card:#0A1130; --kv-card-2:#0E1638; --kv-row:#0B1232; --kv-hover:#121B45;
    --kv-ink:#EEF0FA; --kv-sub:#B3BAD6; --kv-muted:#7E87AA; --kv-line:rgba(231,207,151,.085); --kv-line-2:rgba(231,207,151,.17);
    --kv-gold-soft:rgba(201,164,92,.13); --kv-gold-text:#ECD49C;
    --lx-edge:linear-gradient(150deg,rgba(231,207,151,.42),rgba(231,207,151,.06) 32%,rgba(255,255,255,.03) 64%,rgba(231,207,151,.24));
    --lx-glow:rgba(231,207,151,.12);
    --lx-aurora-a:rgba(201,164,92,.13); --lx-aurora-b:rgba(70,98,214,.22); --lx-aurora-c:rgba(123,92,214,.10);
    --lx-grain:.06;
    --kv-shadow-sm:0 1px 1px rgba(0,0,0,.4),0 10px 28px -10px rgba(0,0,0,.6); --kv-shadow:0 22px 50px -14px rgba(0,0,0,.7);
  }
}
:root[data-theme="dark"]{
  --kv-bg:#04071A; --kv-bg-2:#080D25; --kv-card:#0A1130; --kv-card-2:#0E1638; --kv-row:#0B1232; --kv-hover:#121B45;
  --kv-ink:#EEF0FA; --kv-sub:#B3BAD6; --kv-muted:#7E87AA; --kv-line:rgba(231,207,151,.085); --kv-line-2:rgba(231,207,151,.17);
  --kv-gold-soft:rgba(201,164,92,.13); --kv-gold-text:#ECD49C;
  --lx-edge:linear-gradient(150deg,rgba(231,207,151,.42),rgba(231,207,151,.06) 32%,rgba(255,255,255,.03) 64%,rgba(231,207,151,.24));
  --lx-glow:rgba(231,207,151,.12);
  --lx-aurora-a:rgba(201,164,92,.13); --lx-aurora-b:rgba(70,98,214,.22); --lx-aurora-c:rgba(123,92,214,.10);
  --lx-grain:.06;
  --kv-shadow-sm:0 1px 1px rgba(0,0,0,.4),0 10px 28px -10px rgba(0,0,0,.6); --kv-shadow:0 22px 50px -14px rgba(0,0,0,.7);
}

/* ---------- 지면: 오로라 + 종이 질감 ---------- */
body{isolation:isolate;position:relative}
body::before{content:"";position:fixed;inset:-25vmax;z-index:-2;pointer-events:none;
  background:radial-gradient(38vmax 30vmax at 18% 12%,var(--lx-aurora-a),transparent 62%),radial-gradient(42vmax 34vmax at 88% 22%,var(--lx-aurora-b),transparent 64%),radial-gradient(40vmax 36vmax at 55% 96%,var(--lx-aurora-c),transparent 66%);
  animation:lx-drift 46s ease-in-out infinite alternate;will-change:transform}
body::after{content:"";position:fixed;inset:0;z-index:-1;pointer-events:none;opacity:var(--lx-grain);mix-blend-mode:multiply;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='180' height='180'%3E%3Cfilter id='n'%3E%3CfeTurbulence type='fractalNoise' baseFrequency='.85' numOctaves='3' stitchTiles='stitch'/%3E%3CfeColorMatrix values='0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 .9 0'/%3E%3C/filter%3E%3Crect width='100%25' height='100%25' filter='url(%23n)'/%3E%3C/svg%3E")}
:root[data-theme="dark"] body::after{mix-blend-mode:screen}
@media (prefers-color-scheme:dark){:root:not([data-theme="light"]) body::after{mix-blend-mode:screen}}
@keyframes lx-drift{0%{transform:translate3d(0,0,0) rotate(0)}50%{transform:translate3d(3vmax,-2vmax,0) rotate(6deg)}100%{transform:translate3d(-2vmax,2vmax,0) rotate(-4deg)}}

/* ---------- 글꼴 · 머리말 ---------- */
h1{letter-spacing:-.045em;font-weight:800} h2,h3{letter-spacing:-.035em}
.lx-eyebrow{display:inline-flex;align-items:center;gap:10px;font-family:var(--lx-serif);font-style:italic;font-weight:600;font-size:13.5px;letter-spacing:.24em;color:var(--kv-gold-text);margin-bottom:6px;text-transform:uppercase}
.lx-eyebrow::before{content:"";width:28px;height:1px;background:linear-gradient(90deg,transparent,var(--kv-gold))}
.kv-eyebrow{font-family:var(--lx-serif);font-style:italic;letter-spacing:.3em;font-size:13px}
.lx-foil{background:linear-gradient(100deg,#F6E7BD 0%,#FFF8E2 18%,#D9B76E 34%,#F3DFA4 50%,#B78F43 66%,#F8EBC4 82%,#D2AE62 100%);background-size:220% 100%;-webkit-background-clip:text;background-clip:text;color:transparent;animation:lx-foil 9s ease-in-out infinite}
@keyframes lx-foil{0%,100%{background-position:0% 50%}50%{background-position:100% 50%}}
.kv-page-h h1{font-size:30px;line-height:1.15}
.kv-page-h p{max-width:62ch}

/* ---------- 표면: 금빛 그라디언트 테두리 + 스포트라이트 ---------- */
.kv-card,.kv-stat,.lx-card,.vt-item,.ad-vcard,.sm-camp,.sm-tpl,.kv-q{
  isolation:isolate;border:1px solid transparent;
  background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,var(--lx-edge) border-box;
  box-shadow:var(--kv-shadow-sm)}
.kv-card.flat{box-shadow:0 1px 0 rgba(255,255,255,.6) inset}
.kv-card::after,.kv-stat::after,.lx-card::after,.vt-item::after,.ad-vcard::after,.sm-camp::after,.sm-tpl::after{
  content:"";position:absolute;inset:0;z-index:-1;border-radius:inherit;pointer-events:none;opacity:0;transition:opacity .35s ease;
  background:radial-gradient(420px circle at var(--mx,50%) var(--my,0%),var(--lx-glow),transparent 46%)}
.kv-card:hover::after,.kv-stat:hover::after,.lx-card:hover::after,.vt-item:hover::after,.ad-vcard:hover::after,.sm-camp:hover::after,.sm-tpl:hover::after{opacity:1}
.kv-card-h h3,.kv-card>h3{font-size:16.5px}
.kv-card-h h3::before{content:"";display:inline-block;width:5px;height:5px;border-radius:50%;background:var(--kv-gold);margin-right:9px;vertical-align:middle;box-shadow:0 0 0 3px var(--lx-glow)}

/* 지표 타일 */
.kv-stat{padding:20px 22px}
.kv-stat .l{font-size:12px;letter-spacing:.02em;text-transform:none;display:flex;align-items:center;gap:7px}
.kv-stat .l::before{content:"";width:14px;height:1.5px;border-radius:2px;background:var(--kv-gold)}
.kv-stat .v{font-size:34px;font-weight:800;letter-spacing:-.05em}
.kv-stat.gold .v{background:var(--kv-gold-grad);-webkit-background-clip:text;background-clip:text;color:transparent}
.kv-stat.ok .v{color:var(--kv-ok)} .kv-stat.danger .v{color:var(--kv-danger)}

/* ---------- 버튼: 금속 광택 · 물결 ---------- */
.kv-btn{letter-spacing:-.005em}
.kv-btn.gold{color:#140F04;background:var(--kv-gold-grad);background-size:180% 180%;background-position:0% 50%;
  box-shadow:0 1px 0 rgba(255,255,255,.7) inset,0 -1px 0 rgba(120,85,20,.35) inset,0 10px 24px -6px rgba(184,141,62,.55),0 2px 4px rgba(120,85,20,.2);
  text-shadow:0 1px 0 rgba(255,255,255,.35);transition:background-position .6s var(--kv-ease),transform .14s var(--kv-ease),box-shadow .25s}
.kv-btn.gold:hover{background-position:100% 50%;box-shadow:0 1px 0 rgba(255,255,255,.7) inset,0 -1px 0 rgba(120,85,20,.35) inset,0 14px 32px -6px rgba(184,141,62,.65),0 0 0 4px rgba(201,164,92,.16)}
.kv-btn.primary{background:var(--kv-navy-grad);box-shadow:0 0 0 1px rgba(231,207,151,.45) inset,0 1px 0 rgba(255,255,255,.12) inset,0 10px 24px -8px rgba(7,12,36,.55)}
.kv-btn.primary:hover{filter:none;box-shadow:0 0 0 1px rgba(231,207,151,.85) inset,0 1px 0 rgba(255,255,255,.15) inset,0 14px 30px -8px rgba(7,12,36,.6),0 0 0 4px rgba(201,164,92,.12)}
.kv-btn.line{background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,linear-gradient(140deg,rgba(201,164,92,.55),var(--kv-line-2) 45%,rgba(201,164,92,.35)) border-box;border-color:transparent}
.kv-btn.line:hover{background:linear-gradient(var(--kv-card-2),var(--kv-card-2)) padding-box,linear-gradient(140deg,var(--kv-gold),rgba(201,164,92,.5)) border-box}
.lx-ripple{position:absolute;border-radius:50%;pointer-events:none;transform:scale(0);background:radial-gradient(circle,rgba(255,255,255,.55),rgba(255,255,255,0) 70%);animation:lx-ripple .7s var(--kv-ease) forwards}
.kv-btn.line .lx-ripple,.kv-btn.ghost .lx-ripple{background:radial-gradient(circle,rgba(201,164,92,.35),rgba(201,164,92,0) 70%)}
@keyframes lx-ripple{to{transform:scale(1);opacity:0}}

/* ---------- 입력 ---------- */
.kv-input,.kv-select,.kv-textarea{background-color:var(--kv-card);border-color:var(--kv-line-2)}
.kv-input:focus,.kv-select:focus,.kv-textarea:focus{border-color:var(--kv-gold);box-shadow:0 0 0 4px rgba(201,164,92,.16),0 8px 20px -10px rgba(184,141,62,.45)}
.kv-group{border:1px solid transparent;background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,var(--lx-edge) border-box}

/* ---------- 배지 · 표 ---------- */
.kv-badge{box-shadow:0 0 0 1px rgba(13,18,48,.04) inset;letter-spacing:-.005em}
.kv-badge.gold{background:linear-gradient(135deg,var(--kv-gold-soft),rgba(201,164,92,.22));box-shadow:0 0 0 1px rgba(201,164,92,.35) inset}
.kv-badge.dark{background:var(--kv-navy-grad);color:var(--kv-gold-l);box-shadow:0 0 0 1px rgba(231,207,151,.3) inset}
.kv-table-wrap{border:1px solid transparent;background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,var(--lx-edge) border-box;box-shadow:var(--kv-shadow-sm)}
.kv-table th{background:linear-gradient(180deg,var(--kv-card-2),var(--kv-row));font-size:12px;letter-spacing:.02em;border-bottom-color:rgba(201,164,92,.28)}
.kv-table tbody tr:hover td{background:linear-gradient(90deg,var(--kv-gold-soft),var(--kv-hover) 40%)}
.kv-table td{border-bottom-color:var(--kv-line)}

/* ---------- 탭 · 칩 · 페이지 ---------- */
.kv-tabs a.active,.ad-tabs a.active{border-bottom-color:transparent;background:linear-gradient(var(--kv-gold),var(--kv-gold)) bottom/100% 2.5px no-repeat}
.ad-chip.on{background:var(--kv-navy-grad);box-shadow:0 0 0 1px rgba(231,207,151,.45) inset,0 6px 16px -8px rgba(7,12,36,.6)}
.kv-pager .cur{background:var(--kv-navy-grad);box-shadow:0 0 0 1px rgba(231,207,151,.5) inset}

/* ---------- 관리자 셸 ---------- */
.kv-side{background:radial-gradient(120% 38% at 0% 0%,rgba(201,164,92,.16),transparent 60%),radial-gradient(90% 40% at 100% 100%,rgba(70,98,214,.18),transparent 60%),linear-gradient(185deg,#0A1130 0%,#070C24 60%,#050819 100%);
  box-shadow:inset -1px 0 0 rgba(231,207,151,.14)}
.kv-side::after{content:"";position:absolute;top:0;right:0;bottom:0;width:1px;background:linear-gradient(180deg,transparent,rgba(231,207,151,.55) 30%,rgba(231,207,151,.15) 70%,transparent);pointer-events:none}
.kv-side .brand{font-family:var(--kv-font);letter-spacing:.02em}
.kv-side .brand small{font-family:var(--lx-serif);font-style:italic;letter-spacing:.32em;font-size:11px}
.kv-side .brand .dot{background:radial-gradient(circle at 30% 25%,#2A3B7E,#0A1130 70%);box-shadow:0 0 0 1px rgba(231,207,151,.75),0 0 0 4px rgba(201,164,92,.10),0 0 18px rgba(201,164,92,.35);animation:lx-breathe 5s ease-in-out infinite}
.kv-nav-h{font-size:11px;font-weight:800;letter-spacing:.2em;color:#8C93BC;display:flex;align-items:center;gap:8px}
.kv-nav-h::after{content:"";flex:1;height:1px;background:linear-gradient(90deg,rgba(231,207,151,.22),transparent)}
.kv-nav a{transition:background .2s,color .2s,transform .2s var(--kv-ease)}
.kv-nav a:hover{transform:translateX(2px)}
.kv-nav a.active{background:linear-gradient(90deg,rgba(201,164,92,.28),rgba(201,164,92,.04) 85%);color:#F4E2B5;box-shadow:0 0 0 1px rgba(231,207,151,.14) inset}
.kv-nav a.active::before{background:var(--kv-gold-grad);box-shadow:0 0 12px rgba(231,207,151,.75);width:3px}
.kv-top{border-bottom:0;box-shadow:0 1px 0 var(--kv-line)}
.kv-top::after{content:"";position:absolute;left:0;right:0;bottom:-1px;height:1px;background:linear-gradient(90deg,transparent,rgba(201,164,92,.55),transparent);pointer-events:none}
.kv-main{background:transparent}
@keyframes lx-breathe{0%,100%{box-shadow:0 0 0 1px rgba(231,207,151,.75),0 0 0 4px rgba(201,164,92,.10),0 0 14px rgba(201,164,92,.25)}50%{box-shadow:0 0 0 1px rgba(231,207,151,.9),0 0 0 6px rgba(201,164,92,.14),0 0 26px rgba(201,164,92,.5)}}

/* ---------- 인장 엠블럼(회전하는 문자 고리) ---------- */
.lx-seal{position:relative;width:118px;height:118px;margin:0 auto 18px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:none;box-shadow:none}
.lx-seal::after{display:none}
.lx-seal .lx-seal-ring{position:absolute;inset:0;width:100%;height:100%;animation:lx-spin 48s linear infinite;overflow:visible}
.lx-seal-ring text{font-family:var(--lx-serif);font-size:9.6px;letter-spacing:3.1px;fill:#E7CF97;font-weight:600}
.lx-seal-core{position:relative;width:72px;height:72px;border-radius:50%;display:flex;align-items:center;justify-content:center;
  background:radial-gradient(circle at 32% 26%,#2E4290 0%,#121B4A 46%,#060A22 100%);
  box-shadow:0 0 0 1px rgba(231,207,151,.85),0 0 0 7px rgba(201,164,92,.10),0 0 0 8px rgba(231,207,151,.35),0 18px 40px rgba(0,0,0,.55),0 0 46px rgba(201,164,92,.28)}
.lx-seal-core::before{content:"";position:absolute;inset:-14px;border-radius:50%;border:1px solid rgba(231,207,151,.32);animation:kv-pulse 3.8s ease-out infinite}
.lx-seal .lx-seal-core svg{width:34px;height:34px;filter:drop-shadow(0 0 6px rgba(231,207,151,.45))}
@keyframes lx-spin{to{transform:rotate(360deg)}}

/* ---------- 히어로(투표 사이트): 밤하늘 · 별빛 ---------- */
.kv-hero{background:radial-gradient(80% 60% at 50% -10%,rgba(201,164,92,.24),transparent 62%),radial-gradient(70% 70% at -10% 20%,rgba(64,92,210,.40),transparent 60%),radial-gradient(60% 60% at 110% 40%,rgba(123,92,214,.22),transparent 60%),linear-gradient(180deg,#050819 0%,#0B1236 70%,#0E1640 100%)}
.lx-stars,.lx-stars::before,.lx-stars::after{position:absolute;inset:0;pointer-events:none;z-index:-1}
.lx-stars{background-image:radial-gradient(1.2px 1.2px at 12% 18%,rgba(255,255,255,.85),transparent 60%),radial-gradient(1px 1px at 28% 72%,rgba(255,255,255,.7),transparent 60%),radial-gradient(1.4px 1.4px at 44% 30%,rgba(231,207,151,.9),transparent 60%),radial-gradient(1px 1px at 63% 12%,rgba(255,255,255,.7),transparent 60%),radial-gradient(1.2px 1.2px at 78% 58%,rgba(255,255,255,.8),transparent 60%),radial-gradient(1px 1px at 90% 26%,rgba(231,207,151,.8),transparent 60%),radial-gradient(1px 1px at 8% 86%,rgba(255,255,255,.6),transparent 60%),radial-gradient(1.3px 1.3px at 55% 88%,rgba(255,255,255,.7),transparent 60%);animation:lx-twinkle 6s ease-in-out infinite}
.lx-stars::before{content:"";background-image:radial-gradient(1px 1px at 20% 40%,rgba(255,255,255,.75),transparent 60%),radial-gradient(1.2px 1.2px at 36% 10%,rgba(231,207,151,.85),transparent 60%),radial-gradient(1px 1px at 70% 80%,rgba(255,255,255,.7),transparent 60%),radial-gradient(1px 1px at 84% 8%,rgba(255,255,255,.7),transparent 60%),radial-gradient(1.2px 1.2px at 95% 66%,rgba(231,207,151,.8),transparent 60%),radial-gradient(1px 1px at 4% 52%,rgba(255,255,255,.65),transparent 60%);animation:lx-twinkle 8s ease-in-out -3s infinite}
.lx-stars::after{content:"";background:radial-gradient(60% 30% at 50% 100%,rgba(231,207,151,.18),transparent 70%)}
@keyframes lx-twinkle{0%,100%{opacity:.55}50%{opacity:1}}
.kv-hero h1{font-size:30px;letter-spacing:-.05em}
.kv-hero::after{content:"";position:absolute;left:0;right:0;bottom:0;height:1px;background:linear-gradient(90deg,transparent,rgba(231,207,151,.5),transparent)}

/* ---------- 투표 화면: 선택지 · 기호 메달 ---------- */
.kv-opt{border:1.5px solid transparent;background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,linear-gradient(150deg,var(--kv-line-2),var(--kv-line) 50%,var(--kv-line-2)) border-box}
.kv-opt:hover{background:linear-gradient(var(--kv-card-2),var(--kv-card-2)) padding-box,linear-gradient(150deg,rgba(201,164,92,.6),var(--kv-line-2) 60%) border-box}
.kv-opt:has(input:checked){background:linear-gradient(100deg,var(--kv-gold-soft),var(--kv-card) 65%) padding-box,var(--kv-gold-grad) border-box;box-shadow:0 0 0 4px rgba(201,164,92,.16),0 14px 30px -14px rgba(184,141,62,.6);transform:translateY(-1px)}
.kv-opt .sym{width:38px;height:38px;padding:0;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex-direction:column;line-height:1;font-size:15px;font-weight:800;color:#140F04;
  background:var(--kv-gold-grad);box-shadow:0 1px 0 rgba(255,255,255,.7) inset,0 -1px 0 rgba(120,85,20,.35) inset,0 4px 10px -2px rgba(184,141,62,.55)}
.kv-opt .sym::before{content:"기호";font-size:8.5px;font-weight:700;letter-spacing:.06em;opacity:.75;margin-bottom:1px}
.kv-opt .mark{box-shadow:0 0 0 1px var(--kv-line) inset}
.kv-yn label,.kv-scale label{border:1.5px solid transparent;background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,linear-gradient(150deg,var(--kv-line-2),var(--kv-line)) border-box}
.kv-yn label:has(input:checked),.kv-scale label:has(input:checked){background:var(--kv-navy-grad) padding-box,var(--kv-gold-grad) border-box;box-shadow:0 0 0 4px rgba(201,164,92,.15),0 12px 26px -10px rgba(7,12,36,.6)}
.kv-q-no{background:var(--kv-navy-grad);box-shadow:0 0 0 1px rgba(231,207,151,.55) inset}
.kv-dock{border-top:0;box-shadow:0 -1px 0 var(--kv-line),0 -18px 40px -24px rgba(13,18,48,.35)}
.kv-dock::before{content:"";position:absolute;left:0;right:0;top:0;height:1px;background:linear-gradient(90deg,transparent,rgba(201,164,92,.6),transparent)}
.kv-topbar-prog>i{box-shadow:0 0 12px rgba(231,207,151,.8)}
.kv-segs>i.done{background:var(--kv-gold-grad)} .kv-segs>i.cur{background:var(--kv-gold-l);box-shadow:0 0 10px rgba(231,207,151,.7)}

/* ---------- 링 게이지 · 진행바 광택 ---------- */
.kv-ring{background:conic-gradient(from -90deg,#F3DFA4,#C9A45C calc(var(--p)*.5%),#9C7A36 calc(var(--p)*1%),var(--kv-line) 0)}
.kv-ring-wrap{filter:drop-shadow(0 6px 14px rgba(184,141,62,.25))}
.kv-bar>i{background:var(--kv-gold-grad);box-shadow:0 0 10px rgba(231,207,151,.45)}
.kv-bar.navy>i{background:linear-gradient(90deg,#24346F,#3D5BD9)}

/* ---------- 모달 · 토스트 · 팔레트 ---------- */
.kv-modal-box{border:1px solid transparent;background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,var(--lx-edge) border-box}
.kv-toast{background:linear-gradient(135deg,rgba(18,27,68,.96),rgba(7,12,36,.96));backdrop-filter:blur(10px);border-left:0;box-shadow:0 0 0 1px rgba(231,207,151,.3) inset,0 18px 40px rgba(0,0,0,.45)}
.kv-toast::before{content:"";display:inline-block;width:7px;height:7px;border-radius:50%;background:var(--kv-gold);margin-right:10px;vertical-align:middle;box-shadow:0 0 8px rgba(231,207,151,.9)}
.kv-toast.ok::before{background:#3DBE86;box-shadow:0 0 8px rgba(61,190,134,.9)} .kv-toast.danger::before{background:#E25A5A;box-shadow:0 0 8px rgba(226,90,90,.9)}
.kv-cmd-box{border:1px solid transparent;background:linear-gradient(var(--kv-card),var(--kv-card)) padding-box,var(--lx-edge) border-box}

/* ---------- 등장 효과(스크롤) ---------- */
.lx-pre{opacity:0;transform:translateY(16px) scale(.985);transition:opacity .7s var(--kv-ease),transform .8s var(--kv-ease);transition-delay:var(--lx-d,0ms)}
.lx-pre.lx-in{opacity:1;transform:none}

/* ---------- 완료 축하(금빛 입자) ---------- */
.lx-burst{position:fixed;inset:0;pointer-events:none;z-index:2600}

/* ---------- 빈 상태 ---------- */
.kv-empty b{font-size:16px}
.kv-empty::before{content:"";display:block;width:44px;height:44px;margin:0 auto 12px;border-radius:50%;background:radial-gradient(circle at 35% 30%,var(--kv-gold-soft),transparent 70%);box-shadow:0 0 0 1px rgba(201,164,92,.3) inset}

/* ---------- 모션 감소 ---------- */
@media(prefers-reduced-motion:reduce){body::before,.lx-foil,.lx-seal-ring,.lx-stars,.lx-stars::before,.kv-side .brand .dot{animation:none!important}.lx-pre{opacity:1;transform:none}}
@media print{body::before,body::after{display:none}}
