/* 기본 */
body{margin:0}[hidden]{display:none!important}

:root{
  color-scheme: dark;
  --desk:#131C18; --desk-2:#1B2822; --desk-3:#25352D;
  --paper:#ECEDE6; --paper-2:#E1E3DA; --ink:#1A1F1C; --ink-2:#4B554F;
  --brass:#C9A45C; --brass-2:#E2C88F;
  --stamp:#C23A2E; --ok:#2F6B4F;
  --muted:#8FA39A; --line:rgba(236,237,230,.12);
  --display:"Bodoni Moda", "Didot", Georgia, serif;
  --serif:"Source Serif 4", Georgia, "Times New Roman", serif;
  --sans:"IBM Plex Sans KR", "Apple SD Gothic Neo", "Malgun Gothic", system-ui, sans-serif;
  --mono:"IBM Plex Mono", ui-monospace, Menlo, Consolas, monospace;
}
html,body{height:100%;overflow:hidden}
body{background:var(--desk);color:var(--paper);font-family:var(--sans);font-size:14px;overflow:hidden;
  background-image:radial-gradient(120% 70% at 50% 0%, #1E2D26 0%, var(--desk) 60%);}
button{font:inherit;color:inherit;cursor:pointer}
button:focus-visible,.card:focus-visible{outline:2px solid var(--brass-2);outline-offset:2px}
#app{height:100%;max-width:460px;margin:0 auto;padding-inline:16px;padding-block:10px;box-sizing:border-box;display:flex;flex-direction:column;gap:10px}
.mono{font-family:var(--mono);letter-spacing:.08em;text-transform:uppercase}

/* ---------- title ---------- */
.title-screen{flex:1;display:flex;flex-direction:column;justify-content:center;gap:22px;padding-block:12px;overflow:auto}
.seal{width:64px;height:64px;border:1.5px solid var(--brass);border-radius:50%;display:grid;place-items:center;color:var(--brass)}
.game-name{font-family:var(--display);font-weight:700;font-size:clamp(44px,13vw,60px);line-height:.95;margin:0;letter-spacing:-.01em;text-wrap:balance}
.game-name em{font-style:italic;font-weight:500;color:var(--brass-2)}
/* 시작 화면의 작품 이름 (예: 대통령편 · 영어 중급) */
.work-title{margin:0;font-family:var(--sans);font-size:20px;font-weight:600;display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.work-title .mono{font-size:10.5px;font-weight:400;letter-spacing:.12em;color:var(--muted)}
.kicker{font-size:11px;color:var(--muted)}
.lede{font-size:15px;line-height:1.65;color:#C9D3CD;margin:0;max-width:34em}
.rules{display:grid;gap:8px;margin:0;padding:0;list-style:none}
.rules li{display:grid;grid-template-columns:58px 1fr;gap:10px;font-size:13px;line-height:1.5;color:#C9D3CD}
.rules b{font-family:var(--mono);font-weight:500;font-size:11px;color:var(--brass);letter-spacing:.06em;padding-top:2px}
.honor{display:flex;gap:8px}
.honor button{flex:1;padding:12px 8px;border-radius:8px;border:1px solid var(--line);background:var(--desk-2);font-family:var(--serif);font-size:16px}
.honor button[aria-pressed="true"]{border-color:var(--brass);background:#2A3528;color:var(--brass-2)}
.primary{padding:15px;border-radius:8px;border:0;background:var(--brass);color:#1A1810;font-weight:600;font-size:15px}
.primary:hover{background:var(--brass-2)}
.ghost{padding:12px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--paper);font-size:14px}

/* ---------- header & gauges ---------- */
.topline{display:flex;justify-content:space-between;align-items:baseline;gap:8px}
.topline .who{font-family:var(--serif);font-size:15px}
.topline .when{font-size:11px;color:var(--muted);font-variant-numeric:tabular-nums}
.topline .who{display:flex;align-items:center;gap:6px;min-width:0;white-space:nowrap}
.topline .who .no{font-family:var(--mono);font-size:10.5px;color:var(--muted)}
.topline .when{white-space:nowrap;flex:none}
.topline .who{overflow:hidden;text-overflow:ellipsis}
/* 내용이 화면보다 길면 위가 잘리지 않고 위에서부터 스크롤 (짧으면 가운데) */
.title-screen,.ending{justify-content:flex-start}
.title-screen > :first-child,.ending > :first-child{margin-top:auto}
.title-screen > :last-child,.ending > :last-child{margin-bottom:auto}
.statrow .stat b{font-size:20px;white-space:nowrap}
.pface{flex:none;width:22px;height:22px;border-radius:50%;overflow:hidden;display:inline-block}
.pface svg{display:block;width:100%;height:100%}
/* 취임 화면·엔딩의 대통령 초상화, 기록 */
.io-face,.end-face{width:96px;height:96px;border-radius:50%;overflow:hidden;margin:0 auto;box-shadow:0 0 0 2px var(--desk),0 0 0 4px var(--brass)}
.io-face svg,.end-face svg{display:block;width:100%;height:100%}
.end-face{width:72px;height:72px}
.best{font-size:11.5px;color:var(--brass-2);letter-spacing:.06em;text-align:center;margin:0}
.lineage{font-size:11px;color:var(--muted);text-align:center;margin:0;line-height:1.6}
.title-screen .ghost,.intro-card .honor button{min-height:48px}

.gauges{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.gauge{display:grid;gap:5px;justify-items:center;position:relative}
.gauge svg{width:22px;height:22px;color:var(--brass)}
.gauge .lbl{font-size:11px;color:var(--muted);display:flex;gap:3px;align-items:center}
.meter{width:100%;height:7px;border-radius:4px;background:var(--desk-3);overflow:hidden;position:relative}
.meter i{position:absolute;inset:0 auto 0 0;background:var(--brass);border-radius:4px;transition:width .5s cubic-bezier(.3,.8,.3,1),background .3s}
.meter::before,.meter::after{content:"";position:absolute;top:0;bottom:0;width:15%;z-index:1;pointer-events:none}
.meter::before{left:0;background:linear-gradient(90deg,rgba(194,58,46,.35),transparent)}
.meter::after{right:0;background:linear-gradient(270deg,rgba(194,58,46,.35),transparent)}
.gauge.danger .meter i{background:var(--stamp)}
.delta{font-size:11px;font-weight:600;opacity:0;transition:opacity .2s}
.delta.up{color:#8BC7A2;opacity:1}.delta.down{color:#F08A7E;opacity:1}

/* ---------- stage & card ---------- */
.stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center}
.stage::before{content:"";position:absolute;inset:10px 6px -4px;border-radius:8px;background:var(--desk-3);transform:rotate(-2deg);opacity:.7}
.card{position:relative;width:100%;max-width:400px;height:100%;max-height:560px;box-sizing:border-box;border-radius:8px;box-shadow:0 18px 40px rgba(0,0,0,.45),0 2px 0 rgba(0,0,0,.2);
  touch-action:pan-y;user-select:none;-webkit-user-select:none;display:flex;flex-direction:column;overflow:hidden;will-change:transform;transition:transform .25s ease}
.card.dragging{transition:none}
.card.enter{animation:enter .35s cubic-bezier(.2,.8,.3,1)}
@keyframes enter{from{transform:translateY(18px) scale(.96);opacity:0}to{transform:none;opacity:1}}
.card.nudge{animation:nudge .3s}
@keyframes nudge{0%,100%{transform:none}30%{transform:translateX(-6px)}60%{transform:translateX(6px)}}
.card-body{flex:1;overflow:auto;padding:18px 20px 16px;display:flex;flex-direction:column;gap:14px;touch-action:pan-y}
.say{font-family:var(--serif);font-size:18px;line-height:1.55;margin:0;user-select:text;-webkit-user-select:text}
/* 휴대폰 스와이프: 카드 안의 스크롤 영역도 세로 스크롤만 브라우저에 맡기고 가로 끌기는 게임이 받는다.
   (스크롤 영역마다 따로 적어야 한다. 바깥 .card의 touch-action은 안쪽 스크롤 영역에 적용되지 않음) */
.card .card-body,.card [style*="overflow"]{touch-action:pan-y}
/* 터치 기기에서는 대사를 끌 때 글자가 선택되지 않게 */
@media (pointer:coarse){.say{user-select:none;-webkit-user-select:none;-webkit-touch-callout:none}}
.say em{font-style:italic}
.hint-overlay{position:absolute;left:12px;right:12px;top:12px;z-index:3;padding:10px 12px;border-radius:6px;background:rgba(19,28,24,.92);color:var(--paper);
  font-family:var(--serif);font-size:16px;line-height:1.35;opacity:0;pointer-events:none;transition:opacity .08s}
.hint-overlay.right{text-align:right}

/* paper documents */
.doc{background:var(--paper);color:var(--ink)}
.dochead{padding:14px 20px 10px;border-bottom:1px solid #C9CCC0;display:grid;gap:4px}
.dochead .org{font-size:10px;color:var(--ink-2);text-align:center}
.dochead .kind{font-family:var(--display);font-size:17px;text-align:center;font-weight:500}
.from{font-family:var(--mono);font-size:11px;color:var(--ink-2);display:grid;grid-template-columns:44px 1fr;gap:2px 6px}
.from b{font-weight:500;color:var(--ink)}
.stampmark{position:absolute;right:14px;top:14px;border:2px solid var(--stamp);color:var(--stamp);padding:3px 8px;font-family:var(--mono);font-weight:500;font-size:12px;letter-spacing:.14em;transform:rotate(-7deg);border-radius:3px;opacity:.85}

/* screens */
.screen{background:#0E1411;color:var(--paper)}
.screen .dochead{border-bottom:1px solid var(--line)}
.screen .from{color:var(--muted)} .screen .from b{color:var(--paper)}
.phone .thread{display:flex;flex-direction:column;gap:6px}
.phone .sender{font-size:11px;color:var(--muted)}
.bubble{align-self:flex-start;max-width:92%;background:#26342D;border-radius:16px 16px 16px 4px;padding:12px 14px}
.bubble .say{font-family:var(--sans);font-size:16px;line-height:1.55}

/* ---------- 인물별 카드: Kevin = 휴대폰 문자 ---------- */
.screen.phone{background:linear-gradient(180deg,#0B1210 0%,#101A16 100%);border:1px solid #26332C}
.phone .statusbar{display:flex;justify-content:space-between;align-items:center;padding:10px 18px 0;font-size:11px;color:#C9D3CD}
.phone .statusbar .sig{display:flex;gap:2px;align-items:flex-end;height:10px}
.phone .statusbar .sig i{display:block;width:3px;background:#C9D3CD;border-radius:1px}
.phone .statusbar .sig i:nth-child(1){height:3px}.phone .statusbar .sig i:nth-child(2){height:5px}
.phone .statusbar .sig i:nth-child(3){height:7px}.phone .statusbar .sig i:nth-child(4){height:10px}
.phone .contact{display:grid;justify-items:center;gap:2px;padding:10px 20px 12px;border-bottom:1px solid var(--line)}
.phone .avatar{width:84px;height:84px;border-radius:50%;overflow:hidden;box-shadow:0 0 0 2px #0B1210,0 0 0 3.5px #3E6B8A}
.phone .avatar svg{display:block;width:100%;height:100%}
.phone .contact b{font-size:15px;font-weight:600;margin-top:6px}
.phone .contact span{font-size:11px;color:var(--muted)}
.phone .stamp-time{text-align:center;font-size:10px;color:var(--muted);padding-top:12px;letter-spacing:.06em}
.phone .card-body{padding-top:8px}
.phone .bubble{background:#2A3A32}
.phone .blankword{border-bottom-color:var(--brass-2)}

/* ---------- 인물별 카드 공통 ---------- */
/* 꾸밈 글씨체는 머리글·서명·추신에만. 대사(.say)와 선택지는 기본 글씨체 그대로 */
.type{font-family:"Special Elite", var(--mono);font-size:12px;line-height:1.5}
.nm{font-weight:700;font-style:inherit;letter-spacing:inherit}
/* 사람 이름: 굵게 + 작품 강조색(--brass)을 조금 섞는다 (color-mix를 모르는 브라우저는 굵게만) */
@supports (color: color-mix(in srgb, red, blue)){ .card .nm, .choice .nm, .hint-overlay .nm{color:color-mix(in srgb, currentColor 72%, var(--brass))} }
.hand{font-family:"Caveat", cursive;font-size:22px;line-height:1.1}
.card svg{max-width:100%}
/* 종이 카드 위의 듣기 카드: 버튼과 자막 가림 막대 색을 종이에 맞춘다 */
.doc.audio .play{color:#6E5424;border-color:#9C7A3A}
.doc.audio .redacted span{background:#CFCBBE}
.doc.audio .wave span{background:#9C7A3A}

/* 강아지: 폴라로이드 사진 */
.doc.polaroid{background:#ECEDE6}
.polaroid .polaroid{margin:18px auto 0;width:62%;max-width:220px;background:#fff;padding:10px 10px 6px;box-shadow:0 3px 10px rgba(0,0,0,.25);transform:rotate(-2.5deg);display:grid;gap:4px}
.polaroid .pol-photo svg{display:block;width:100%;height:auto;aspect-ratio:1}
.polaroid .pol-cap{text-align:center;color:#2C3A5A;font-size:20px}
.polaroid .say{font-style:italic;font-size:17px}

/* ---------- 인물별 카드: 기자 = 신문 인터뷰 지면 ---------- */
.doc.interview{background:#EFEBDF;background-image:repeating-linear-gradient(0deg,rgba(0,0,0,.018) 0 1px,transparent 1px 3px)}
.interview .paperhead{padding:14px 18px 0;display:grid;gap:6px}
.interview .mast{font-family:var(--display);font-weight:700;font-size:26px;text-align:center;line-height:1}
.interview .dateline{display:flex;justify-content:space-between;font-size:9.5px;letter-spacing:.1em;text-transform:uppercase;color:var(--ink-2);
  border-top:2px solid var(--ink);border-bottom:1px solid var(--ink);padding:4px 0}
.interview .byline{display:grid;grid-template-columns:78px 1fr;gap:12px;align-items:center;padding:12px 18px;border-bottom:1px solid #C9C4B4}
.interview .headshot{width:78px;height:78px;border:1px solid var(--ink);padding:2px;background:#fff;box-sizing:border-box}
.interview .headshot svg{display:block;width:100%;height:100%;filter:grayscale(1) contrast(1.05)}
.interview .byline .kicker{display:block;font-size:9.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--stamp)}
.interview .byline .hl{display:block;font-family:var(--display);font-size:19px;line-height:1.15;margin:3px 0}
.interview .byline .by{display:block;font-family:var(--serif);font-style:italic;font-size:12px;color:var(--ink-2)}
.interview .card-body{padding-top:14px}
.interview .say.q{font-weight:600}
.interview .qa{font-family:var(--display);font-weight:700;margin-right:6px;color:var(--stamp)}
.interview .a-line{display:flex;align-items:baseline;font-family:var(--serif);font-size:18px}
.interview .a-line .write{flex:1;border-bottom:1.5px dashed #A7A08E;height:1.1em}
.audio .wave{display:flex;align-items:center;gap:3px;height:54px}
.audio .wave span{flex:1;background:var(--brass);border-radius:2px;opacity:.55;height:20%}
.audio.playing .wave span{animation:wv .9s ease-in-out infinite alternate}
@keyframes wv{from{transform:scaleY(.4)}to{transform:scaleY(1)}}
.play{align-self:flex-start;display:flex;gap:8px;align-items:center;padding:10px 16px;border-radius:999px;border:1px solid var(--brass);background:transparent;color:var(--brass-2);font-size:14px}
.redacted{display:grid;gap:7px}
.redacted span{height:12px;border-radius:2px;background:#26342D}

/* in-card extras */
.interp{border-radius:6px;padding:10px 12px;display:grid;gap:6px;font-size:13.5px;line-height:1.6;background:rgba(201,164,92,.16);border:1px dashed rgba(150,120,60,.55)}
.interp .tag{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:#8A6B2C}
.screen .interp .tag{color:var(--brass)}
.interp .expr{font-size:12.5px;line-height:1.55}
.interp .expr b{font-family:var(--serif);font-style:italic;font-weight:600;margin-right:4px}
.interp .tr{font-size:14.5px;line-height:1.55}
.interp .subtext{font-size:13px;line-height:1.5;padding:6px 8px;border-radius:4px;background:rgba(194,82,122,.12);border-left:3px solid #C2527A}
.interp .subtext b{font-family:var(--mono);font-size:10px;letter-spacing:.1em;color:#A23F63;margin-right:4px}
.interp .opts{font-size:12.5px;color:var(--ink-2);line-height:1.55}
.screen .interp .opts{color:var(--muted)}
/* 한국어 뜻 (선택지·끌기 힌트·브리핑 파일) */
.choice .ko{font-family:var(--sans);font-size:12px;line-height:1.35;color:var(--muted)}
.hint-overlay .ko{display:block;margin-top:4px;font-family:var(--sans);font-size:12.5px;color:var(--brass-2)}
.entry .ko{font-size:12.5px;color:var(--brass-2)}
/* 빈칸·조립: 답한 뒤에 보이는 뜻 */
.ko-after{display:grid;gap:4px;padding:8px 10px;border-radius:6px;background:rgba(47,107,79,.10);font-size:13.5px;line-height:1.5}
.ko-after .words{font-size:12px;color:var(--ink-2)}
.screen .ko-after .words{color:var(--muted)}
/* 타이틀의 뜻 보기 설정 */
.hintset{display:grid;gap:8px}
.hintset .honor button{font-family:var(--sans);font-size:14px;padding:10px 6px}
.hint-desc{margin:0;font-size:12.5px;color:var(--muted)}
.task{font-family:var(--mono);font-size:10.5px;letter-spacing:.08em;color:var(--ink-2);display:flex;justify-content:space-between}
.screen .task{color:var(--muted)}
.sentence{font-family:var(--serif);font-size:19px;line-height:1.7;padding:12px 14px;border-radius:6px;background:var(--paper-2);display:flex;flex-wrap:wrap;gap:4px 6px;align-items:baseline}
.sentence .slot{min-width:56px;border-bottom:2px solid var(--ink-2);height:1.2em}
.sentence .slot.now{border-color:var(--brass);animation:blink 1s steps(2) infinite}
@keyframes blink{50%{border-color:transparent}}
/* 조립 카드 (스크램블): 손가락으로 누르기 편하게 최소 44px */
.sentence.scramble{min-height:52px;gap:6px;align-items:center;padding:10px}
.sentence.scramble .slot{min-width:44px;height:0;align-self:flex-end;margin-bottom:10px}
.piece{min-height:44px;padding:8px 14px;border-radius:8px;border:1.5px solid #A89C80;background:#FFFDF7;color:var(--ink);
  font-family:var(--serif);font-size:17px;line-height:1.2;box-shadow:0 2px 0 rgba(0,0,0,.14);touch-action:manipulation}
.piece:active{transform:translateY(1px);box-shadow:none}
.piece.in{background:#fff;border-color:#6E6552}
.piece.ok{background:#DCE7DD;border-color:var(--ok);color:#1E4A36}
.piece.bad{background:#F4D9D4;border-color:var(--stamp);color:#7A1F1F;text-decoration:line-through;text-decoration-thickness:1px}
.piece.used{visibility:hidden}
.piece:disabled{cursor:default}
.pool{display:flex;flex-wrap:wrap;gap:8px}
/* 카드 내용이 길면 상자를 찌그러뜨리지 않고 카드 안에서 스크롤 */
.card-body > *{flex-shrink:0}
.say.answer{font-size:15px}
.choice.clear,.choice.submit{align-items:center;justify-content:center;font-family:var(--sans);font-size:16px;min-height:52px}
.choice.submit{background:var(--brass);color:#1A1810;border-color:var(--brass);font-weight:600}
.choice.submit:disabled{background:var(--desk-2);color:var(--muted);border-color:var(--line);opacity:1}
.sentence .got{background:#DCE7DD;border-radius:3px;padding:0 4px}
.sentence .miss{background:#F4D9D4;border-radius:3px;padding:0 4px}
.blankword{display:inline-block;min-width:3.2em;border-bottom:2px solid var(--brass);text-align:center}
.blankword.ok{color:var(--ok);font-weight:600;border-color:var(--ok)}
.blankword.bad{color:var(--stamp);font-weight:600;border-color:var(--stamp)}
.verdict{align-self:center;font-family:var(--mono);font-weight:500;font-size:15px;letter-spacing:.2em;padding:6px 14px;border:2px solid;border-radius:3px;transform:rotate(-4deg)}
.verdict.ok{color:var(--ok)} .verdict.bad{color:var(--stamp)}

/* choices & tools */
.choices{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.choice{display:flex;flex-direction:column;gap:3px;padding:10px 12px;border-radius:8px;border:1px solid var(--line);background:var(--desk-2);text-align:left;font-family:var(--serif);font-size:15px;line-height:1.35;min-height:52px;transition:border-color .1s,background .1s}
.choice.r{text-align:right}
.choice .dir{font-family:var(--mono);font-size:10px;color:var(--muted);letter-spacing:.1em}
.choice.hot,.choice:hover{border-color:var(--brass);background:#26332A}
.choice:disabled{opacity:.5;cursor:default}
.tools{display:grid;grid-template-columns:repeat(5,1fr);gap:4px}
.tool{display:grid;justify-items:center;gap:3px;padding:8px 4px;border-radius:8px;border:1px solid transparent;background:transparent;font-size:11.5px;color:#C9D3CD}
.tool:hover{border-color:var(--line)}
.tool svg{width:18px;height:18px;color:var(--brass)}
.tool:disabled{opacity:.4;cursor:default}
.tool .n{font-family:var(--mono);font-size:10px;color:var(--muted)}
.pips{display:flex;gap:3px}.pips i{width:6px;height:6px;border-radius:50%;background:var(--brass)}.pips i.off{background:var(--desk-3)}

/* ending */
.ending{flex:1;display:flex;flex-direction:column;justify-content:center;gap:16px;overflow:auto;padding-block:8px}
.ending .cause{font-size:11px;color:var(--stamp)}
.ending.good .cause{color:#8BC7A2}
.ending h2{font-family:var(--display);font-size:clamp(36px,11vw,50px);line-height:1;margin:0;font-weight:700;text-wrap:balance}
.ending .en{font-family:var(--serif);font-style:italic;font-size:18px;line-height:1.5;margin:0;color:#DDE3DE}
.ending .ko{font-size:14px;line-height:1.65;margin:0;color:#B7C3BC}
.souvenir{border:1px solid var(--line);border-radius:8px;padding:12px 14px;display:grid;gap:4px}
.souvenir .t{font-size:10px;color:var(--brass)}
.souvenir b{font-family:var(--serif);font-size:18px;font-weight:600}
.statrow{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.stat{padding:10px;border-radius:8px;background:var(--desk-2);display:grid;gap:2px}
.stat b{font-family:var(--display);font-size:24px;font-variant-numeric:tabular-nums}
.stat span{font-size:11px;color:var(--muted)}
.row2{display:grid;grid-template-columns:1fr 1fr;gap:8px}

/* sheet */
.sheet-wrap{position:fixed;inset:0;background:rgba(5,8,7,.6);display:flex;align-items:flex-end;justify-content:center;z-index:20}
.sheet{width:100%;max-width:460px;max-height:82%;background:var(--desk-2);border-radius:14px 14px 0 0;display:flex;flex-direction:column;padding-bottom:env(safe-area-inset-bottom,0px);box-sizing:border-box}
.sheet header{display:flex;justify-content:space-between;align-items:center;padding:16px 20px 10px;border-bottom:1px solid var(--line)}
.sheet h3{margin:0;font-family:var(--display);font-size:22px;font-weight:500}
.sheet .x{border:0;background:transparent;font-size:14px;color:var(--muted);padding:6px}
.sheet .body{overflow:auto;padding:12px 20px 20px;display:grid;gap:10px}
.sheet .note{font-size:12.5px;color:var(--muted);line-height:1.6;margin:0}
.entry{display:grid;gap:4px;padding:10px 0;border-bottom:1px solid var(--line)}
.entry .h{display:flex;justify-content:space-between;gap:8px;align-items:baseline}
.entry b{font-family:var(--serif);font-size:16px;font-weight:600}
.entry .c{font-family:var(--mono);font-size:10px;color:var(--muted)}
/* 브리핑 파일: 태그 진행도·필터·태그 칩 */
.sheet .note.exam{color:var(--paper);background:var(--desk-3);border-radius:6px;padding:8px 10px}
.sheet .note.exam b{color:var(--brass-2);font-weight:600}
.tagprog{display:grid;gap:6px;margin:4px 0}
.tp-row{display:grid;grid-template-columns:92px 1fr 52px;gap:8px;align-items:center}
.tp-row .bar{height:6px;border-radius:3px;background:var(--desk-3);overflow:hidden}
.tp-row .bar i{display:block;height:100%;background:var(--brass)}
.tp-row .num{font-size:11px;color:var(--muted);text-align:right}
.tag{display:inline-block;font-size:11px;line-height:1;padding:4px 7px;border-radius:999px;border:1px solid currentColor;white-space:nowrap;justify-self:start}
.t-essential{color:#9FD3B5} .t-business{color:#E2C88F} .t-academic{color:#A9C4F0} .t-news{color:#F0A9A0} .t-idiom{color:#D2B4F0}
.filters{display:flex;flex-wrap:wrap;gap:6px;margin:6px 0 2px}
.fbtn{min-height:36px;padding:6px 12px;border-radius:999px;border:1px solid var(--line);background:var(--desk-2);font-size:13px;color:#C9D3CD}
.fbtn.on{border-color:var(--brass);background:#2A3528;color:var(--brass-2)}
.entry .tags{display:flex;flex-wrap:wrap;gap:4px}
.linkbtn{background:none;border:0;padding:0;color:var(--brass-2);text-decoration:underline;font-size:inherit}
.title-credits{align-self:center;font-size:12.5px;color:var(--muted)}
.title-links{display:flex;justify-content:center;flex-wrap:wrap;gap:6px 10px;font-size:12.5px;color:var(--muted)}
.title-links .linkbtn{color:var(--muted);min-height:32px}
.cr-h{margin:14px 0 2px;font-size:13px;font-weight:600;color:var(--brass-2);letter-spacing:.04em}
/* 설정 화면 */
.set-row{display:grid;gap:8px;padding:12px 0;border-bottom:1px solid var(--line)}
.set-row b{font-size:15px;font-weight:600}
.honor.seg button{font-family:var(--sans);font-size:14px;min-height:44px;padding:8px 6px}
.set-row .ghost{min-height:44px;border-radius:8px;border:1px solid var(--line);background:var(--desk-2);font-size:14px}
.set-row .warn{margin:0;color:#F0A9A0;font-size:13.5px;font-weight:600}
.danger-btn{min-height:44px;border-radius:8px;border:1px solid var(--stamp);background:var(--stamp);color:#fff;font-weight:600;font-size:14px}
.set-row .row2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.play.off{border-style:dashed;color:var(--muted);border-color:var(--line);font-size:12.5px;cursor:default}
.sheet a{color:var(--brass-2)}
.note.credit{margin-top:8px}
.entry p{margin:0;font-family:var(--serif);font-size:13.5px;line-height:1.5;color:#B7C3BC}
.clue{display:grid;grid-template-columns:22px 1fr;gap:8px;padding:10px 0;border-bottom:1px solid var(--line);font-size:13.5px;line-height:1.55}
.clue .dot{width:10px;height:10px;border-radius:50%;margin-top:5px;background:var(--brass)}
.clue.locked{color:var(--muted)} .clue.locked .dot{background:transparent;border:1px solid var(--muted)}
.progress{height:6px;border-radius:3px;background:var(--desk-3);overflow:hidden}.progress i{display:block;height:100%;background:var(--brass)}
.dex{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.dex div{padding:10px;border-radius:8px;border:1px solid var(--line);display:grid;gap:3px;min-height:58px}
.dex div b{font-family:var(--serif);font-size:15px}
.dex div span{font-size:11px;color:var(--muted)}
.dex div.locked b{color:var(--muted);letter-spacing:.2em}

.popnote{position:fixed;left:50%;bottom:calc(150px + env(safe-area-inset-bottom,0px));transform:translateX(-50%);width:min(420px,calc(100% - 32px));background:#15131F;color:#ECEDE6;border:1px solid rgba(236,237,230,.2);border-radius:10px;padding:12px 14px;box-shadow:0 12px 30px rgba(0,0,0,.5);z-index:31;cursor:pointer;animation:popnote-in .35s ease-out}
.popnote p{margin:0}
.popnote .en{font-family:var(--serif);font-size:15px;line-height:1.45}
.popnote .ko{font-size:12.5px;line-height:1.5;opacity:.75;margin-top:4px}
@keyframes popnote-in{from{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%,0)}}
.toast{position:fixed;left:50%;top:calc(104px + env(safe-area-inset-top,0px));transform:translateX(-50%);background:var(--paper);color:var(--ink);padding:9px 14px;border-radius:999px;font-size:13px;box-shadow:0 8px 20px rgba(0,0,0,.4);z-index:30;max-width:calc(100% - 32px);text-align:center}
.intro-card{position:fixed;inset:0;z-index:25;display:grid;place-items:center;background:rgba(10,15,13,.86);padding-inline:16px}
.intro-card .inner{max-width:380px;display:grid;gap:12px;text-align:center}
.intro-card h2{font-family:var(--display);font-size:28px;line-height:1.15;margin:0;font-weight:700}
.intro-card p{margin:0;color:#C9D3CD;line-height:1.6}
@media (max-height:640px){.say{font-size:16.5px}.card-body{padding:14px 16px}.choice{min-height:44px;font-size:14px;padding:8px 10px}.gauge svg{display:none}}
@media (prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* ---------- 홈(작품 고르기) · 작품 소개 ---------- */
#app.wide{max-width:1080px;height:auto;min-height:100%;overflow:visible}
html:has(#app.wide),body:has(#app.wide){height:auto;min-height:100%;overflow:visible}
.loading{margin:auto;color:var(--muted);font-size:12px}
.home{display:grid;gap:18px;padding-block:14px 28px}
.home-head{display:grid;gap:8px}
.home-lede{margin:0;color:#C9D3CD;font-size:14.5px;line-height:1.6}
.story-grid{display:grid;grid-template-columns:1fr;gap:14px}
@media (min-width:640px){.story-grid{grid-template-columns:repeat(2,1fr)}}
@media (min-width:980px){.story-grid{grid-template-columns:repeat(3,1fr)}}
.story-card{display:grid;border-radius:12px;overflow:hidden;background:var(--desk-2);border:1px solid var(--line);color:inherit;text-decoration:none;transition:transform .12s,border-color .12s}
.story-card:hover,.story-card:focus-visible{border-color:var(--accent);transform:translateY(-2px)}
.story-card.is-soon .cover{filter:saturate(.75) brightness(.85)}
.cover{aspect-ratio:16/9;background:#0C1422;line-height:0}
.cover svg{width:100%;height:100%;display:block}
.sc-body{display:grid;gap:6px;padding:12px 14px 14px}
.sc-top{display:flex;align-items:center;justify-content:space-between;gap:8px}
.sc-title{font-size:18px;font-weight:600}
.badge{font-size:11.5px;padding:3px 9px;border-radius:999px;border:1px solid var(--accent,var(--brass));color:var(--accent,var(--brass-2));white-space:nowrap}
.sc-sub{margin:0;font-size:10.5px;letter-spacing:.12em;text-transform:uppercase;color:var(--muted)}
.sc-line{margin:0;font-size:14px;line-height:1.55;color:#DDE3DE}
.sc-tags{display:flex;flex-wrap:wrap;gap:6px}
.sc-tags span{font-size:11.5px;color:var(--muted);background:var(--desk-3);padding:3px 8px;border-radius:6px}
.sc-status{display:flex;flex-wrap:wrap;gap:6px;margin-top:2px}
.st{font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:6px}
.st.cont{background:var(--brass);color:#1A1810}
.st.best,.st.new{background:var(--desk-3);color:var(--brass-2)}
.st.soon{background:transparent;border:1px dashed var(--line);color:var(--muted)}
.home-foot{margin:0;text-align:center;font-size:10.5px;color:var(--muted);letter-spacing:.06em}
.backlink{justify-self:start;align-self:flex-start;background:none;border:0;padding:6px 0;color:var(--muted);font-size:13px;min-height:36px}
.intro{display:grid;gap:12px;padding-block:6px 32px;max-width:720px;margin:0 auto;width:100%}
.intro .cover.big{border-radius:12px;overflow:hidden}
.intro-head{display:flex;align-items:center;gap:10px;flex-wrap:wrap}
.intro-head h1{margin:0;font-family:var(--display);font-size:clamp(30px,8vw,42px);font-weight:700}
.intro-line{margin:0;font-size:16px;line-height:1.6;font-weight:600}
.intro-desc{margin:0;font-size:14.5px;line-height:1.75;color:#C9D3CD}
.intro .actions{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-top:4px}
.intro .actions .primary,.intro .actions .ghost{min-height:52px}
.intro .actions button:disabled{opacity:.55;cursor:default}
.intro .actions .primary:only-child{grid-column:1/-1}
.intro-h{margin:14px 0 0;font-size:13px;font-weight:600;color:var(--brass-2);letter-spacing:.04em}
.intro-note{margin:0;font-size:13px;color:var(--muted);line-height:1.6}
.cast{display:flex;gap:12px;overflow-x:auto;padding-bottom:6px;scroll-snap-type:x mandatory}
.cast-one{flex:none;width:78px;display:grid;justify-items:center;gap:3px;text-align:center;scroll-snap-align:start}
.cast-face{width:62px;height:62px;border-radius:50%;overflow:hidden;background:var(--desk-3);border:2px solid var(--accent);display:grid;place-items:center}
.cast-face svg{width:100%;height:100%;display:block}
.cast-face span{font-family:var(--display);font-weight:700;font-size:20px;color:var(--accent)}
.cast-one b{font-size:11.5px;font-weight:600;line-height:1.25}
.cast-one > span{font-size:10.5px;color:var(--muted);line-height:1.3}
.gauge-list{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.gl-one{display:flex;gap:10px;align-items:center;background:var(--desk-2);border-radius:8px;padding:10px}
.gl-icon{flex:none;width:26px;height:26px;color:var(--accent)}
.gl-icon svg{width:100%;height:100%}
.gl-one b{display:block;font-size:13.5px}
.gl-one span{font-size:11.5px;color:var(--muted)}
/* 게임 화면의 홈 버튼 */
.homebtn{flex:none;width:30px;height:30px;margin-right:4px;border-radius:8px;border:1px solid var(--line);background:transparent;color:var(--muted);display:grid;place-items:center;padding:0}
.homebtn svg{width:17px;height:17px}
.topline{align-items:center}
.topline .who{flex:1}

/* 단톡방 · DM */
.screen.groupchat,.screen.dm{background:linear-gradient(180deg,#15111D 0%,#1C1626 100%);border:1px solid #33294A}
.groupchat .statusbar,.dm .statusbar,.voice .statusbar{display:flex;justify-content:space-between;align-items:center;padding:10px 18px 0;font-size:11px;color:#D3CCDC}
.groupchat .sig,.dm .sig,.voice .sig{display:flex;gap:2px;align-items:flex-end;height:10px}
.groupchat .sig i,.dm .sig i,.voice .sig i{display:block;width:3px;background:#D3CCDC;border-radius:1px;height:6px}
.chathead{display:grid;grid-template-columns:14px 42px 1fr;gap:10px;align-items:center;padding:10px 16px 10px;border-bottom:1px solid var(--line)}
.chathead .back{font-size:24px;line-height:1;color:var(--brass-2)}
.gavatar{width:42px;height:42px;border-radius:50%;overflow:hidden}
.gavatar svg,.mini svg{display:block;width:100%;height:100%}
.chathead .ct{display:grid;min-width:0}
.chathead b{font-size:15px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.chathead .ct span{font-size:11px;color:var(--muted)}
.dm .chathead .ct span{color:#8BC7A2}
.groupchat .stamp-time,.dm .stamp-time{text-align:center;font-size:10px;color:var(--muted);padding-top:10px;letter-spacing:.06em}
.groupchat .card-body,.dm .card-body{padding-top:8px}
.groupchat .thread,.dm .thread{display:flex;flex-direction:column;gap:6px}
.msgrow{display:grid;grid-template-columns:30px 1fr;gap:8px;align-items:end}
.mini{width:30px;height:30px;border-radius:50%;overflow:hidden}
.msgcol{display:grid;gap:3px;min-width:0}
.msgcol .sender{font-size:11px;color:var(--brass-2)}
.groupchat .bubble{background:#2E2440;max-width:100%}
.dm .bubble{background:#3A2436;border-radius:18px 18px 18px 4px}
.chatbar{display:flex;align-items:center;justify-content:space-between;gap:10px;margin:0 12px 12px;padding:9px 12px 9px 16px;border-radius:999px;border:1px solid var(--line);font-size:12.5px;color:var(--muted)}
.chatbar i{width:22px;height:22px;border-radius:50%;background:var(--brass)}

/* 학교 공문 이메일 (Dean, Hartley) */
.doc.email{background:#FBFBFD}
.mailbar{display:flex;justify-content:space-between;padding:8px 16px;font-size:9.5px;background:#2A2A5E;color:#DCDDF2}
.mailhead{display:grid;grid-template-columns:44px 1fr;gap:10px;align-items:center;padding:12px 18px 10px;border-bottom:1px solid #E1E1EA}
.mailpic{width:44px;height:44px;border-radius:50%;overflow:hidden}.mailpic svg{display:block;width:100%;height:100%}
.mailmeta{display:grid;font-size:11.5px;color:#5A5D70;min-width:0}
.mailmeta b{font-size:14px;color:#1A1C2A}
.mailmeta span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.mailsign{display:grid;gap:2px;padding:0 20px 16px;font-family:var(--serif);font-size:14px;color:#2A2A5E}
.mailsign .mono{font-size:9.5px;color:#6A6D82}

/* 음성 메시지 재생 화면 (듣기) */
.screen.voice{background:linear-gradient(180deg,#1A1424,#120E1A);border:1px solid #33294A}
.voice .contact{display:grid;justify-items:center;gap:3px;padding:12px 20px 12px;border-bottom:1px solid var(--line)}
.voice .avatar{width:78px;height:78px;border-radius:50%;overflow:hidden;box-shadow:0 0 0 2px #120E1A,0 0 0 3.5px var(--brass)}
.voice .avatar svg{display:block;width:100%;height:100%}
.voice .contact b{font-size:15px;font-weight:600;margin-top:6px}
.voice .contact .mono{font-size:10px;color:var(--muted)}

/* 공지문 (학교 기관) */
.doc.notice{background:#F7F5EE;border-top:6px solid #2A2A5E}
.nt-top{display:flex;justify-content:space-between;padding:10px 18px 0;font-size:9.5px;color:#5A5D70}
.nt-dept{display:grid;grid-template-columns:36px 1fr;gap:10px;align-items:center;padding:8px 18px 10px;border-bottom:3px double #C9C6B8}
.nt-pic{width:36px;height:36px;border-radius:6px;overflow:hidden}.nt-pic svg{display:block;width:100%;height:100%}
.nt-dept b{font-family:var(--display);font-size:17px}
.notice .stampmark{top:auto;bottom:18px;right:18px}

/* SNS 게시물 (특정 서비스의 로고·아이콘은 쓰지 않는다) */
.doc.sns{background:#FFFFFF}
.sn-top{display:grid;grid-template-columns:34px 1fr auto;gap:10px;align-items:center;padding:10px 14px;font-size:13px}
.sn-pic{width:34px;height:34px;border-radius:50%;overflow:hidden;box-shadow:0 0 0 2px #fff,0 0 0 3.5px #E0873A}
.sn-pic svg,.sn-photo svg{display:block;width:100%;height:100%}
.sn-photo{flex:none;height:132px;overflow:hidden;display:grid;place-items:center;background:#F0EDF3}
.sn-photo svg{width:132px;height:132px}
.sn-photo.scene svg,.bd-photo svg{width:100%;height:100%}
.sn-photo.scene{height:150px}
.sn-acts{display:flex;gap:14px;padding:8px 14px 0}
.sn-acts svg{width:22px;height:22px;fill:none;stroke:#1A1A1A;stroke-width:1.8;stroke-linejoin:round}
.sns .card-body{padding-top:6px}
.sns .say{font-family:var(--sans);font-size:15.5px}
.notice .stampmark{pointer-events:none}
