@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+KR:wght@400;500;600;700&family=Noto+Sans+KR:wght@400;500&display=swap');
:root{color-scheme:dark;--gold:#d9bd80;--muted:#a5b0ab;--ink:#080f13}*{box-sizing:border-box}body{margin:0;background:var(--ink);color:#eee8da;font:16px 'Noto Sans KR',sans-serif;overflow:hidden}button,a,input,textarea{-webkit-tap-highlight-color:transparent}button{font:inherit;color:inherit;cursor:pointer}button:focus-visible,a:focus-visible,canvas:focus-visible{outline:2px solid var(--gold);outline-offset:4px}button{border:0}button:disabled{cursor:wait}#world,#scene,.vignette,#loading{position:fixed;inset:0;width:100%;height:100%}#scene{display:block;touch-action:none}.vignette{pointer-events:none;background:linear-gradient(90deg,rgba(3,9,12,.76),transparent 35%,transparent 73%,rgba(3,9,12,.52)),linear-gradient(0deg,rgba(3,9,12,.9),transparent 22%,transparent 80%,rgba(3,9,12,.65))}header{position:absolute;top:32px;left:40px;right:40px;display:flex;justify-content:space-between;align-items:center}.brand{display:flex;gap:14px;color:inherit;text-decoration:none;font:600 26px 'Noto Serif KR',serif;letter-spacing:5px}.brand small{display:block;font:11px serif;letter-spacing:7px;color:var(--gold);margin-top:5px}.seal{font:24px serif;display:grid;place-items:center;width:43px;height:49px;border:1px solid #c6a671;color:var(--gold);border-radius:2px}.header-right{display:flex;gap:28px;align-items:center}.chapter{font-size:13px;letter-spacing:2px;color:#b5b7ad}.chapter i{display:inline-block;height:1px;width:25px;background:#727668;margin:0 12px 4px}.icon-button{background:#0c181ac2;border:1px solid #65716866;border-radius:50%;width:36px;height:36px;color:var(--gold)}.intro{position:absolute;left:5%;top:24%;pointer-events:none}.eyebrow{font-size:12px;letter-spacing:3px;color:var(--gold)}h1{font:500 clamp(36px,4vw,62px)/1.45 'Noto Serif KR',serif;letter-spacing:4px;margin:23px 0 24px}p{line-height:1.9}.intro p{color:#bbc2bc;font-size:14px;line-height:2}.fine-rule{display:block;width:40px;height:1px;background:var(--gold);margin-top:28px}.destinations{position:absolute;right:38px;top:23%;width:202px}.nav-title{padding:0 14px 17px;display:flex;justify-content:space-between;color:#a7b1aa;font-size:12px;letter-spacing:3px;border-bottom:1px solid #6e807038}.nav-title span{color:var(--gold)}.destinations button{background:transparent;display:flex;width:100%;text-align:left;align-items:center;padding:13px 12px;gap:13px;border-bottom:1px solid #6e80702b;color:#b9c1b9;transition:.2s}.destinations button:hover,.destinations button.selected{background:linear-gradient(90deg,#bfa26f23,transparent);color:#f5e4bc}.nav-symbol{font-size:23px;color:#bfa774;width:23px;text-align:center}.destinations button small{display:block;font-size:11px;color:#8e9b94;margin-top:3px}.nav-state{margin-left:auto;font-size:10px;border:1px solid #a78a585c;padding:3px;color:var(--gold)}.destinations>p{font-size:11px;color:#8e9b94;text-align:center}.place-label{position:absolute;text-align:center;pointer-events:none;transform:translate(-50%,-100%);text-shadow:0 2px 12px #000}.place-label small{display:block;font-size:11px;letter-spacing:2px;color:#c5bb9e}.place-label strong{display:block;font:500 22px 'Noto Serif KR',serif;letter-spacing:3px;margin:6px 0}.place-label>span{font-size:10px;letter-spacing:4px;color:#aa9772}.bottom{position:absolute;bottom:27px;left:40px;right:40px;display:flex;justify-content:space-between;align-items:center;gap:20px}.location{display:flex;align-items:center;gap:16px;font-size:14px;min-width:190px}.location small{display:block;font-size:11px;color:#9ca9a2;margin-top:6px}.compass{font-size:11px;text-align:center;color:var(--gold);line-height:1.5}.keys{font-size:12px;color:#a0afa6}.keys>span{margin:0 10px}kbd{font:11px 'Noto Sans KR',sans-serif;border:1px solid #9ca58e55;padding:4px 7px;border-radius:3px;color:#d9d8c6}.text-button{background:transparent;color:#b6bdae;font-size:12px;padding:10px}.arrival{position:absolute;left:50%;bottom:112px;transform:translateX(-50%);text-align:center}.arrival>span{display:block;font-size:12px;color:#d2c6a9;margin-bottom:14px;text-shadow:0 2px 8px #000}.arrival button,.primary{background:#cbb17a;color:#152022;padding:15px 30px;border:1px solid #e2cc99;font-weight:500;box-shadow:0 0 45px #d3b47724}.arrival kbd{margin-left:18px;border-color:#47504466;color:#28392f}#toast{position:absolute;left:50%;top:110px;transform:translateX(-50%);max-width:80%;font-size:13px;background:#0c181beb;border:1px solid #9d8d6755;padding:12px 22px;text-align:center;opacity:0;pointer-events:none;transition:opacity .3s}#toast.visible{opacity:1}#loading{background:#080f13;display:grid;place-content:center;text-align:center;z-index:20;transition:opacity .6s}#loading p{font:14px 'Noto Serif KR',serif;letter-spacing:4px;color:var(--gold)}.loader-seal{font:48px serif;color:var(--gold);animation:breathe 1.5s infinite}@keyframes breathe{50%{opacity:.35}}dialog{color:#eee8da;width:min(480px,calc(100% - 32px));background:linear-gradient(150deg,#192724,#0a1418);border:1px solid #b99f625c;padding:40px;max-height:90dvh;overflow-y:auto;box-shadow:0 30px 160px #0009}dialog::backdrop{background:#02090dc2;backdrop-filter:blur(7px)}dialog h2{font:500 25px/1.6 'Noto Serif KR',serif;margin:20px 0 12px}.dialog-lead,dialog>p{font-size:14px;color:#b5beb5}.close{position:absolute;right:12px;top:8px;font-size:28px;background:transparent;color:#b3bcae;padding:5px 10px}label{display:block;font-size:13px;color:#c9cdbd;margin:24px 0 10px}label span{font-size:11px;color:#939e93;margin-left:7px}input,textarea{width:100%;border:1px solid #86947755;background:#07111388;color:#ece7d7;padding:13px;font:14px 'Noto Sans KR',sans-serif;border-radius:0}input:focus,textarea:focus{outline:1px solid var(--gold)}textarea{resize:vertical;min-height:90px}.primary{width:100%;margin-top:24px}.primary span{float:right}.demo-note{font-size:11px!important;line-height:1.8;color:#8b978d!important;border-top:1px solid #75816a33;padding-top:17px;margin-bottom:0}.reading-mark{display:block;text-align:center;font:58px serif;color:var(--gold);margin:28px 0 16px}#reading h3{font:500 22px/1.6 'Noto Serif KR',serif;text-align:center}#reading p{font-size:15px;color:#ccd1c3}.reading-note{font-size:12px;border-left:1px solid #b99b64;padding-left:15px;color:#a7b69f;margin:24px 0}.reading-note strong{display:block;font-weight:400;color:#d8cfb1;margin-top:7px}[hidden]{display:none!important}@media(max-width:850px){header{top:22px;left:22px;right:22px}.chapter{display:none}.intro{left:25px;top:17%}.intro h1{font-size:35px;margin:12px 0}.intro .eyebrow{font-size:10px;letter-spacing:1px}.intro p,.fine-rule{display:none}.destinations{top:auto;bottom:85px;right:14px;left:14px;width:auto;display:flex;background:#061115c9;border:1px solid #69766344;overflow-x:auto}.destinations button{flex:1;min-width:95px;justify-content:center;padding:11px 7px;font-size:12px;gap:6px}.nav-title,.nav-state,.destinations>p{display:none}.destinations button small{font-size:10px}.nav-symbol{font-size:18px;width:17px}.bottom{left:22px;right:16px;bottom:18px}.keys{display:none}.location{font-size:12px;min-width:0}.location small{font-size:10px}.text-button{font-size:11px}.arrival{bottom:160px;width:90%}.arrival>span{font-size:11px}.arrival button{padding:12px 28px}.place-label strong{font-size:18px}.place-label small{display:none}.vignette{background:linear-gradient(0deg,#03090cbb,transparent 35%,transparent 75%,#03090c99)}#toast{top:90px;width:85%}dialog{padding:28px}dialog h2{font-size:23px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important}}

/* Keep introductory copy clear of the side shrines while exploring. */
.intro{transition:opacity .35s}.exploring .intro{opacity:0}

.place-label{white-space:nowrap}

#scene{cursor:grab}@media(max-width:850px){.bottom{gap:4px}.bottom .text-button{padding:8px 4px;font-size:10px}.location{gap:6px}.location small{font-size:9px}}

body{user-select:none}dialog input,dialog textarea,dialog p{user-select:text}

#quest-panel{position:absolute;left:40px;bottom:115px;width:285px;padding:18px 20px;background:#091619e8;border:1px solid #a08b534d;border-left:2px solid #bda16b}#quest-panel .eyebrow{font-size:11px;letter-spacing:2px}#quest-copy{font-size:14px;line-height:1.7;margin:10px 0}#inventory{font-size:12px;color:var(--gold)}#quest-hint{font-size:12px;color:#bac9b8;line-height:1.6;margin:10px 0 0}#quest-hint:empty{display:none}.quest-actions{display:flex;gap:12px;flex-wrap:wrap}.quest-actions button{background:transparent;padding:10px 0 0;color:#dcc798;font-size:12px;text-decoration:underline;text-underline-offset:4px}.quest-actions button:disabled{opacity:.45;cursor:default}.quest-active .intro{opacity:0}@media(max-width:850px){#quest-panel{top:135px;bottom:auto;left:22px;right:22px;width:auto;padding:12px 16px}#quest-panel .eyebrow{font-size:10px}#quest-copy{font-size:12px;margin:6px 0}#inventory{font-size:11px}#quest-hint{font-size:11px}.intro{display:none}}

.north-needle{display:block;font-size:20px;line-height:1}.compass>small{margin-top:2px;font-size:10px}@media(max-width:850px){.place-label{display:none}}

#hint-arrow{position:fixed;pointer-events:none;z-index:5;font-size:56px;line-height:1;color:#ffdc75;text-shadow:0 0 7px #f8bd46,0 0 22px #d89624,0 2px 3px #332000;filter:drop-shadow(0 0 4px #f0b54a);transform-origin:center}#hint-arrow span{display:block}

.character-choice{display:flex;align-items:center;gap:4px;padding:4px;border:1px solid #a08b5366;background:#091619df;border-radius:4px}.character-choice>span{font-size:11px;color:#bdae91;padding:0 6px}.character-choice button{min-width:36px;min-height:34px;background:transparent;color:#bfb9a9;border:1px solid transparent;border-radius:2px;font-size:13px}.character-choice button[aria-pressed="true"]{color:#f4dfae;background:#a08b5333;border-color:#bda16b}.character-choice button:focus-visible{outline:2px solid #e6c886;outline-offset:2px}@media(max-width:400px){.character-choice>span{display:none}.character-choice button{min-width:30px}}

#guardian-speech{position:fixed;z-index:6;pointer-events:none;transform:translate(-50%,-50%);text-align:center;white-space:nowrap;font-family:serif;font-size:clamp(22px,2.4vw,36px);font-weight:700;line-height:1.55;letter-spacing:.04em;color:#ffe49a;text-shadow:0 0 5px #ffc34b,0 0 16px #efaa3877,0 2px 4px #201303,0 0 28px #0a1010;padding:10px 18px;background:radial-gradient(ellipse,#15140bbd 0%,#15140b55 50%,transparent 72%)}

#quest-hint,.arrival #arrival-copy.golden-instruction{color:#ffe29a;text-shadow:0 0 6px #efb94388,0 0 14px #d59a3444;font-family:serif;font-weight:700;line-height:1.65}#quest-hint{font-size:15px;margin:12px 0 8px}.arrival #arrival-copy.golden-instruction{display:block;white-space:pre-line;font-size:clamp(17px,1.5vw,23px);margin-bottom:12px}@media(max-width:850px){#quest-hint{font-size:13px}.arrival #arrival-copy.golden-instruction{font-size:16px}}

#inventory{display:none}#offering-list{margin-top:8px;max-height:180px;overflow:auto}.offering-row{display:flex;align-items:center;gap:12px;justify-content:space-between;padding:6px 0;border-bottom:1px solid #bda16b22;font-size:12px;color:#dcc798}.offering-row button{background:transparent;color:#ffe29a;padding:5px 3px;text-decoration:underline;text-underline-offset:3px;white-space:nowrap;font-size:12px}@media(max-width:850px){#offering-list{max-height:140px}}

#oracle select{width:100%;padding:12px;background:#101d1c;color:#eee8da;border:1px solid #86947755}#oracle input[type=checkbox]{width:auto;margin-right:8px}#oracle .field-note{font-size:12px;color:#aeb9ae}#fortune-error{color:#ffd2a1;font-size:13px}#daily-result h4{color:#dec386;margin-top:26px}#daily-result p{white-space:pre-line;line-height:1.85}

#oracle input[type=radio]{width:auto;margin-right:8px}#leap-label{border:1px solid #86947755;margin-top:18px;padding:12px;font-size:13px}#leap-label label{margin:12px 0}

.birth-fields{border:0;padding:0;margin:24px 0 0;font-size:13px;color:#c9cdbd}.birth-date-row{display:grid;grid-template-columns:1.3fr 1fr 1fr;gap:8px;margin-top:10px}

/* Guardian oracle: warm gold lettering and a slow breathing glow. */
#fortune-form .primary{
 color:#ffe9a6;
 background:linear-gradient(135deg,#58421b,#292517 55%,#4c3918);
 border:1px solid #cda755;
 text-shadow:0 0 6px #ffd677aa,0 0 18px #e8aa4488;
 box-shadow:0 0 13px #e8b44d33,inset 0 0 14px #e8b44d1f;
 animation:oracle-gold-glow 3s ease-in-out infinite;
}
#fortune-form .primary:hover,#fortune-form .primary:focus-visible{
 color:#fff4d1;border-color:#ffe2a0;
 outline:2px solid #eac878;outline-offset:3px;
}
#fortune-form .primary:disabled{animation:none;opacity:.75;cursor:wait;}
#reading h3{
 color:#ffe5a0;
 text-shadow:0 0 8px #e8b64e88,0 0 24px #db9a394d;
}
@keyframes oracle-gold-glow{
 0%,100%{box-shadow:0 0 10px #e8b44d33,inset 0 0 12px #e8b44d1f;text-shadow:0 0 6px #ffd67788,0 0 16px #e8aa4466;}
 50%{box-shadow:0 0 24px #e8b44d66,inset 0 0 20px #e8b44d33;text-shadow:0 0 9px #ffe9aacc,0 0 24px #e8aa44aa;}
}
@media(prefers-reduced-motion:reduce){#fortune-form .primary{animation:none;}}

#oracle{width:min(680px,calc(100% - 32px));box-sizing:border-box;}

#oracle .oracle-toolbar{position:sticky;top:-40px;z-index:3;display:flex;align-items:center;gap:10px;margin:-40px -40px 22px;padding:14px 56px 14px 24px;background:#101d1c;border-bottom:1px solid #b99f625c;font-size:12px;color:#dcca9c;}
.oracle-toolbar button{width:34px;height:34px;padding:0;border:1px solid #b99f6277;background:#293429;color:#ffe5a0;font-size:22px;line-height:1;}
.oracle-toolbar button:disabled{opacity:.35;cursor:default;}
.oracle-toolbar output{min-width:34px;text-align:center;font-variant-numeric:tabular-nums;}
#oracle>.close{position:sticky;top:-32px;float:right;z-index:4;margin-top:-70px;margin-right:-30px;}
#oracle #daily-result p,#oracle .dialog-lead{font-size:var(--oracle-font-size,15px);}
#oracle #daily-result h4{font-size:calc(var(--oracle-font-size,15px) + 2px);}
#oracle #reading h3{font-size:calc(var(--oracle-font-size,15px) + 7px);}
@media(max-width:850px){#oracle .oracle-toolbar{top:-28px;margin:-28px -28px 22px;padding-left:18px;}#oracle>.close{top:-20px;margin-right:-18px;}}

#oracle .oracle-toolbar .close{position:absolute;right:12px;top:14px;border:0;background:transparent;font-size:28px;}

/* Structured oracle reading */
.reading-context{border-left:2px solid #b9a46a;padding:12px 16px;color:#dfd2af}.reading-chapter{border-top:1px solid #9d895544;padding:16px 0}.reading-chapter summary{cursor:pointer;color:#e1cf9e;font-family:serif;font-size:1.15em;min-height:32px}.reading-chapter p{white-space:pre-line;line-height:1.95}.reading-chapter summary:focus-visible{outline:2px solid #d9bc72;outline-offset:5px}

#affinity-speech{position:fixed;top:23%;left:50%;transform:translateX(-50%);z-index:6;width:min(90%,600px);text-align:center;white-space:pre-line;pointer-events:none;color:#ffe0a0;font:500 clamp(18px,2.2vw,28px)/1.9 "Noto Serif KR",serif;text-shadow:0 0 12px #e7ae57,0 2px 8px #000;background:radial-gradient(ellipse,#121910bb,transparent 70%);padding:25px;}

@media(max-width:850px){.destinations{top:88px;bottom:auto;z-index:2}#quest-panel{top:174px}header{gap:12px}.header-right{gap:8px}.brand{font-size:20px;gap:8px;letter-spacing:3px}.brand small{font-size:9px;letter-spacing:4px}.seal{width:34px;height:42px;font-size:21px}#toast{top:auto;bottom:85px;z-index:3}.character-choice>span{display:inline;padding:0 3px}.character-choice button{min-width:30px}.arrival{bottom:95px}}

@media(max-width:850px){#quest-panel{background:transparent;border:0;box-shadow:none;padding:8px 0;text-shadow:0 1px 4px #000,0 2px 12px #000b}}

@media(max-width:850px){#quest-panel{top:164px;padding:0}#quest-panel .eyebrow{letter-spacing:1px;line-height:1.3}#quest-copy{line-height:1.4;margin:3px 0}#quest-hint{line-height:1.4;margin:4px 0}#offering-list{margin-top:3px}.offering-row{padding:3px 0;line-height:1.3}.quest-actions{gap:6px}.quest-actions button{padding-top:4px}#quest-hint-button,.offering-row .offering-search{display:none!important}}

@media(max-width:850px){#quest-panel .eyebrow,#quest-copy{display:inline;font-size:11px;line-height:1.5;letter-spacing:0}#quest-copy{margin:0}#quest-copy::before{content:" - "}#offering-list .offering-search{display:inline-block!important}}
