*{box-sizing:border-box;margin:0;padding:0}
:root{
  --c:#4A7A6A;--bg:#FDFAF5;--sb:#F7F3EB;--card:#fff;
  --dark:#1c1b1b;--muted:#6B7470;--out:#9AA09C;
  --err:#BA1A1A;--gold:#C9A84C;--brn:#8B7355;
  --pad:24px;
}
html,body{height:100%}
body{background:var(--bg);font-family:'Libre Franklin',sans-serif;color:var(--dark);font-size:18px;line-height:1.6;letter-spacing:.01em}
.shell{display:flex;width:100vw;height:100vh;height:100dvh;background:var(--bg);overflow:hidden;color:var(--dark)}

/* SIDEBAR */
.sb{width:160px;min-width:160px;background:var(--sb);display:flex;flex-direction:column;border-right:1px solid #E8E0CF}
.sb-logo{padding:18px 16px 14px;display:flex;align-items:center;gap:10px}
.logo-box{width:42px;height:42px;flex-shrink:0;border:3px solid var(--c);border-radius:10px;background:#fff;display:flex;flex-direction:column;align-items:center;justify-content:center}
.logo-box.lg{width:64px;height:64px;border-width:4px;border-radius:14px;margin:0 auto 14px}
.logo-box.lg .ann{font-size:22px}
.logo-box.lg .vfy{font-size:16px}
.logo-box .ann{font-family:'Source Serif 4',serif;font-weight:700;font-size:16px;color:var(--c);line-height:1;letter-spacing:-.5px}
.logo-box .vfy{font-family:'Source Serif 4',serif;font-weight:400;font-style:italic;font-size:12px;color:var(--c);line-height:1.2}
.logo-sub{font-size:10px;letter-spacing:.1em;color:var(--out);text-transform:uppercase}
.sb-btn{margin:4px 12px 10px;padding:8px 12px;background:var(--c);color:#fff;border:none;font-family:'Libre Franklin',sans-serif;font-size:15px;font-weight:700;cursor:pointer;display:flex;align-items:center;gap:6px}
.sb-btn:hover{background:#3D6B5C}
.sec{padding:10px 14px 3px;font-size:10px;letter-spacing:.12em;color:var(--brn);text-transform:uppercase;font-weight:700}
.ni{display:flex;align-items:center;gap:8px;padding:7px 14px;font-size:15px;color:var(--muted);cursor:pointer;border-left:3px solid transparent}
.ni:hover{background:rgba(74,122,106,.04)}
.ni.on{border-left-color:var(--c);background:rgba(74,122,106,.06);color:var(--c);font-weight:700}
.ni.disabled{cursor:default;opacity:.55}
.ni.disabled:hover{background:transparent}
.nb{margin-left:auto;font-size:10px;padding:1px 6px;background:var(--err);color:#fff;border-radius:9999px}
.nb.g{background:var(--gold);color:#3A2900}
.hsc{padding:13px 14px 3px;font-size:10px;letter-spacing:.12em;color:var(--brn);text-transform:uppercase;font-weight:700}
.history-list{flex:1;overflow-y:auto;min-height:0}
.hdt{font-size:11px;color:var(--out);padding:4px 14px 1px}
.hist-empty{padding:4px 14px 8px}
.hi{padding:4px 14px 4px 20px;font-size:12px;color:var(--out);cursor:pointer;white-space:nowrap;overflow:hidden;text-overflow:ellipsis;display:flex;align-items:center;gap:4px}
.hi:hover{color:var(--dark)}
.hi.active{color:var(--dark);font-weight:700}
.dot{width:4px;height:4px;border-radius:50%;flex-shrink:0}
.sbot{margin-top:auto;padding:10px 12px;border-top:1px solid #E8E0CF}
.urow{display:flex;align-items:center;gap:7px}
.av{width:26px;height:26px;background:var(--c);color:#fff;font-size:11px;font-weight:700;display:flex;align-items:center;justify-content:center;border-radius:9999px;flex-shrink:0;overflow:hidden}
.av img{width:100%;height:100%;object-fit:cover}
.un{font-size:13px;font-weight:700;color:var(--dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:120px}
.up{font-size:10px;color:var(--gold);margin-top:1px;cursor:pointer}
.signin-btn{width:100%;padding:8px 10px;background:var(--c);color:#fff;border:none;font-family:'Libre Franklin',sans-serif;font-size:12px;font-weight:700;cursor:pointer;display:flex;align-items:center;justify-content:center;gap:6px}
.signin-btn:hover{background:#3D6B5C}

/* MAIN */
.main{flex:1;display:flex;flex-direction:column;overflow:hidden}
.topbar{padding:10px var(--pad);background:#fff;border-bottom:1px solid #E8E0CF;display:flex;align-items:center;justify-content:space-between;flex-shrink:0}
.topbar h2{font-family:'Source Serif 4',serif;font-size:18px;font-weight:500;color:var(--dark)}
.topbar p{font-size:11px;color:var(--muted);margin-top:1px}
.tr{display:flex;align-items:center;gap:5px}
.ld{width:5px;height:5px;border-radius:50%;background:var(--err);animation:pu 1.5s infinite}
@keyframes pu{0%,100%{opacity:1}50%{opacity:.35}}
.ll{font-size:10px;letter-spacing:.08em;color:var(--err);text-transform:uppercase}
.ts{width:1px;height:11px;background:#E8E0CF;margin:0 5px}
.ct{font-size:11px;color:var(--muted)}

.body{flex:1;display:flex;overflow:hidden}

/* LEFT */
.left{width:280px;min-width:280px;display:flex;flex-direction:column;border-right:1px solid #E8E0CF;background:var(--bg)}
.chat{flex:1;overflow-y:auto;padding:16px var(--pad);display:flex;flex-direction:column;gap:12px}
.chat::-webkit-scrollbar{width:3px}
.chat::-webkit-scrollbar-thumb{background:#E0D8CC}
.chat-empty{margin:auto;text-align:center;padding:0 12px}
.chat-empty p{font-size:16px;color:var(--out);font-style:italic}
.um{align-self:flex-end;color:#fff;padding:8px 12px;border-radius:12px 12px 3px 12px;font-size:16px;max-width:85%;background:var(--c)}
.mini-card{background:var(--card);padding:10px 12px;display:flex;align-items:flex-start;gap:8px;cursor:pointer;border-left:3px solid transparent;transition:background .15s}
.mini-card:hover{background:#F5F1EA}
.mini-card.active{border-left-color:var(--c);background:#EDF6F1}
.mini-card.active.err{border-left-color:var(--err);background:#FEF4F4}
.mv{font-size:10px;font-weight:700;letter-spacing:.06em;padding:2px 7px;flex-shrink:0;margin-top:1px;white-space:nowrap}
.mvv{background:#EAF4EF;color:var(--c)}
.mvf{background:#FDEAEA;color:var(--err)}
.mc{font-size:16px;color:var(--dark);font-family:'Source Serif 4',serif}
.ms{font-size:11px;color:var(--out);margin-top:2px}
.pd{display:flex;align-items:center;gap:8px;padding:10px 12px}
.sp{width:13px;height:13px;border:2px solid #E0D8CC;border-top-color:var(--c);border-radius:50%;animation:spin .8s linear infinite;flex-shrink:0}
@keyframes spin{to{transform:rotate(360deg)}}
.pt{font-size:16px;color:var(--muted)}
.ps{font-size:10px;color:var(--c);margin-top:1px;text-transform:uppercase;letter-spacing:.04em}
.pd.err .pt{color:var(--err)}
.ia{padding:10px var(--pad) 12px;background:#fff;border-top:1px solid #E8E0CF;flex-shrink:0}
.iw{display:flex;align-items:center;gap:7px;background:var(--bg);padding:8px 10px}
.iw:focus-within{background:#F5F1EA}
.iw input{flex:1;border:none;background:transparent;font-size:16px;color:var(--dark);outline:none;font-family:'Libre Franklin',sans-serif;font-style:italic}
.iw input::placeholder{color:var(--out)}
.sb2{width:28px;height:28px;background:var(--c);border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;flex-shrink:0}
.sb2:disabled{background:var(--out);cursor:default}
.if2{display:flex;align-items:center;gap:6px;margin-top:5px}
.it{font-size:10px;color:var(--out);letter-spacing:.04em;text-transform:uppercase;white-space:nowrap}

/* RIGHT — result panel */
.right{flex:1;display:flex;flex-direction:column;background:var(--card);overflow:hidden}
.rp-empty{flex:1;display:flex;align-items:center;justify-content:center}
.rp-empty-inner{text-align:center;opacity:.6}
.rp-empty-inner p{font-size:16px;color:var(--out);font-style:italic;margin-top:4px}
.rp-top{padding:11px var(--pad);border-bottom:1px solid #E8E0CF;display:flex;align-items:center;justify-content:space-between;flex-shrink:0;background:#FAFAF8}
.rp-title{font-family:'Source Serif 4',serif;font-size:14px;font-weight:500;color:var(--dark);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:300px}
.rp-actions{display:flex;align-items:center;gap:6px;flex-shrink:0}
.rp-btn{display:flex;align-items:center;gap:4px;padding:5px 11px;font-size:12px;font-weight:700;font-family:'Libre Franklin',sans-serif;cursor:pointer;border:none}
.rp-dl{background:var(--c);color:#fff}
.rp-dl:hover{background:#3D6B5C}
.rp-sh{background:#EAF4EF;color:var(--c)}
.rp-sh:hover{background:#DDF0E8}
.rp-close{width:26px;height:26px;background:transparent;border:none;cursor:pointer;display:flex;align-items:center;justify-content:center;color:var(--muted)}
.rp-close:hover{background:#F5F1EA}
.rp-body{flex:1;overflow-y:auto;position:relative}
.rp-body::-webkit-scrollbar{width:3px}
.rp-body::-webkit-scrollbar-thumb{background:#E0D8CC}
/* 결과 내용이 넓은 화면에서 끝까지 늘어나지 않도록 제한 — 스크롤 컨테이너(.rp-body)는
   패널 전체 너비를 유지하되(스크롤바가 우측 끝에 붙도록), 실제 콘텐츠만 가운데 정렬 */
.rp-content{max-width:860px;margin:0 auto;padding:40px 48px;display:flex;flex-direction:column;gap:20px;position:relative}
.rp-section{background:var(--bg);border:1px solid #E8E0CF;border-radius:12px;padding:20px 24px}
.rp-vbadge{padding:4px 14px;font-size:12px;font-weight:700;letter-spacing:.08em;text-transform:uppercase;background:#EAF4EF;color:var(--c);display:inline-block;margin-bottom:8px}
.rp-vbadge.err{background:#FDEAEA;color:var(--err)}
.rp-claim{font-family:'Source Serif 4',serif;font-size:22px;color:var(--dark);margin-bottom:4px}
.rp-sub{font-size:16px;color:var(--muted);font-style:italic}
.rp-sec{font-size:18px;color:var(--brn);letter-spacing:.05em;text-transform:uppercase;margin-bottom:7px;font-weight:700}
.rp-conf-lbl{font-size:14px;color:var(--muted);letter-spacing:.03em;text-transform:uppercase;margin-bottom:4px}
.rp-bar{height:5px;background:#EDE8DF;margin-bottom:4px}
.rp-fill{height:100%}
.rp-pct{font-size:12px;text-align:right;margin-bottom:12px;font-weight:700}
.src-row{display:flex;align-items:flex-start;gap:6px;font-size:16px;color:var(--c);padding:3px 0}
.src-row a{color:inherit;text-decoration:none}
.src-row a:hover{text-decoration:underline}
.src-dot{width:5px;height:5px;border-radius:50%;background:var(--gold);flex-shrink:0;margin-top:4px}
.src-meta{font-size:13px;color:var(--out)}
.chips{display:flex;flex-wrap:wrap;gap:4px}
.chip{font-size:14px;letter-spacing:.04em;text-transform:uppercase;padding:3px 9px;background:#EAF4EF;color:var(--c)}
.mono{background:#F5F1EA;padding:10px 12px;font-family:monospace;font-size:14px;color:var(--muted);word-break:break-all}
.rp-error{padding:20px;color:var(--err);font-size:16px}

/* 인장 — 우측 하단 워터마크 */
.seal{position:absolute;bottom:var(--pad);right:var(--pad);display:flex;flex-direction:column;align-items:center;opacity:.15;pointer-events:none;user-select:none}
.seal-box{width:56px;height:56px;border:3.5px solid var(--dark);border-radius:13px;display:flex;flex-direction:column;align-items:center;justify-content:center}
.seal-ann{font-family:'Source Serif 4',serif;font-weight:700;font-size:20px;color:var(--dark);line-height:1;letter-spacing:-.5px}
.seal-vfy{font-family:'Source Serif 4',serif;font-weight:400;font-style:italic;font-size:15px;color:var(--dark);line-height:1.2}
.seal-txt{font-size:9px;letter-spacing:.1em;text-transform:uppercase;color:var(--dark);margin-top:5px;text-align:center;line-height:1.5}

/* PAGES — Live Feed / Discussions / Leaderboard 공용 리스트 UI */
.hidden{display:none !important}
.pg-scroll{flex:1;overflow-y:auto;padding:24px var(--pad)}
.pg-scroll::-webkit-scrollbar{width:3px}
.pg-scroll::-webkit-scrollbar-thumb{background:#E0D8CC}
.pg-list{display:flex;flex-direction:column;gap:10px;max-width:860px;margin:0 auto}
.pg-card{background:var(--card);border:1px solid #E8E0CF;border-radius:10px;padding:14px 16px;display:flex;flex-direction:column;gap:6px;cursor:default}
.pg-card.clickable{cursor:pointer;transition:background .15s}
.pg-card.clickable:hover{background:#F5F1EA}
.pg-card-row{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.pg-badge{font-size:11px;font-weight:700;letter-spacing:.04em;text-transform:uppercase;padding:3px 9px;border-radius:4px;flex-shrink:0}
.pg-badge-ok{background:#EAF4EF;color:var(--c)}
.pg-badge-mid{background:#FBF3E3;color:#8a6d1f}
.pg-badge-err{background:#FDEAEA;color:var(--err)}
.pg-badge-neutral{background:#F0EEEA;color:var(--muted)}
.pg-text{font-size:16px;font-family:'Source Serif 4',serif;color:var(--dark);line-height:1.5}
.pg-meta{font-size:13px;color:var(--out);display:flex;align-items:center;gap:14px}
.pg-meta-item{display:flex;align-items:center;gap:4px}
.pg-empty,.pg-error{text-align:center;padding:60px 20px;color:var(--out);font-style:italic}
.pg-error{color:var(--err);font-style:normal}
.pg-retry-btn{margin-top:12px;padding:8px 18px;background:var(--c);color:#fff;border:none;cursor:pointer;font-weight:700;font-family:'Libre Franklin',sans-serif;font-size:14px}
.pg-skeleton{background:var(--card);border:1px solid #E8E0CF;border-radius:10px;height:68px;animation:pu 1.5s infinite}

/* Leaderboard */
.lb-tabs{display:flex;max-width:860px;margin:0 auto 16px}
.lb-tab{padding:8px 18px;background:transparent;border:1px solid #E8E0CF;color:var(--muted);font-weight:700;font-size:14px;cursor:pointer;font-family:'Libre Franklin',sans-serif}
.lb-tab:first-child{border-radius:8px 0 0 8px}
.lb-tab:last-child{border-radius:0 8px 8px 0;border-left:none}
.lb-tab.on{background:var(--c);color:#fff;border-color:var(--c)}
.lb-row{display:flex;align-items:center;gap:14px;padding:12px 16px}
.lb-row.me{background:#EAF4EF;border-radius:8px}
.lb-rank{width:28px;text-align:center;font-weight:700;font-size:16px;color:var(--muted);flex-shrink:0}
.lb-medal{font-size:20px;width:28px;text-align:center;flex-shrink:0}
.lb-name{flex:1;font-weight:700;font-size:16px;color:var(--dark);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.lb-stats{display:flex;flex-direction:column;align-items:flex-end;gap:2px;flex-shrink:0}
.lb-ap{font-weight:700;color:var(--c);font-size:16px}
.lb-count{font-size:12px;color:var(--out)}

/* 모바일 — 기본 화면은 히스토리+입력창(.left). 결과(.right)는 카드 클릭/새 검증 시
   .shell.mobile-result 클래스(app/mobile.js)로 전체화면 전환. 사이드바는 hamburger로 여닫는
   오버레이 드로어. 데스크톱(768px 이상)에서는 이 규칙들이 전혀 적용되지 않음 — 항상
   3컬럼 동시 표시. */
.hamburger-btn{display:none}
.rp-back{display:none}
@media (max-width: 768px){
  .shell{position:relative}
  .hamburger-btn{display:flex;align-items:center;justify-content:center;width:32px;height:32px;background:transparent;border:none;cursor:pointer;color:var(--dark);margin-right:8px}

  /* 사이드바 — 기본은 화면 밖, .open 시 슬라이드인 오버레이 */
  .sb{position:fixed;top:0;left:0;height:100dvh;height:100vh;z-index:50;transform:translateX(-100%);transition:transform .22s ease;box-shadow:2px 0 16px rgba(0,0,0,.15)}
  .sb.open{transform:translateX(0)}
  .sb-backdrop{display:none;position:fixed;inset:0;background:rgba(0,0,0,.4);z-index:40}
  .sb-backdrop.open{display:block}

  /* 기본: 히스토리+입력창 전체화면. 결과 패널은 .mobile-result일 때만 전체화면으로 전환 */
  .left{display:flex;width:100%;min-width:0}
  .right{display:none}
  .shell.mobile-result .left{display:none}
  .shell.mobile-result .right{display:flex;width:100%}

  .rp-content{max-width:none;padding:24px 16px}
  .rp-back{display:flex;align-items:center;justify-content:center;width:26px;height:26px;background:transparent;border:none;cursor:pointer;color:var(--muted);margin-right:4px}

  .pg-scroll{padding:16px}
  .pg-list,.lb-tabs{max-width:none}

  /* 입력창 하단 고정 — 채팅 로그는 그만큼 하단 패딩 확보해 내용이 가려지지 않게 */
  .ia{position:fixed;left:0;right:0;bottom:0;z-index:10}
  .chat{padding-bottom:96px}
}

/* 모바일 base — 데스크톱(18px)보다 한 단계 작게. 본문 요소들은 명시적 px라 body font-size가
   자동으로 cascade되지 않으므로, 데스크톱에서 16px로 맞춰둔 요소들은 그대로 유지되고
   여기서는 body 기본값과 그 외 미지정 요소만 16px로 낮춘다. */
@media (max-width: 640px){
  body { font-size:16px }
}
