:root{
  --bg:#07060b;--panel:rgba(12,10,18,.94);--panel2:rgba(20,16,29,.96);
  --ink:#f3f0f7;--muted:#9b91aa;--purple:#a343ff;--green:#66d68e;--cyan:#61e4e8;
  --danger:#ff4c69;--line:rgba(184,126,255,.23);--sidebar-width:390px;--safe-top:env(safe-area-inset-top,0px);--safe-bottom:env(safe-area-inset-bottom,0px)
}
*{box-sizing:border-box}
html,body{width:100%;height:100%;margin:0;overflow:hidden;background:var(--bg);color:var(--ink);font-family:"Pretendard","Noto Sans KR","Malgun Gothic",system-ui,sans-serif}
button,input{font:inherit}.app{position:fixed;inset:0;isolation:isolate;background:
 radial-gradient(circle at 18% 16%,rgba(125,45,190,.13),transparent 34%),
 radial-gradient(circle at 83% 80%,rgba(20,160,120,.09),transparent 33%),#08070c}
.app:before{content:"";position:absolute;inset:0;z-index:-1;opacity:.28;pointer-events:none;background-image:linear-gradient(rgba(255,255,255,.018) 1px,transparent 1px),linear-gradient(90deg,rgba(255,255,255,.014) 1px,transparent 1px);background-size:48px 48px}
button{border:0;color:inherit;background:none;cursor:pointer}
button:focus-visible,input:focus-visible{outline:2px solid var(--cyan);outline-offset:3px}
[hidden]{display:none!important}

.boot{position:fixed;inset:0;z-index:200;background:#06050a;display:grid;place-content:center;justify-items:center;gap:18px;transition:opacity .45s ease,visibility .45s ease}
.boot.done{opacity:0;visibility:hidden}.boot-mark{width:82px;height:82px;display:grid;place-content:center;border:1px solid rgba(171,83,255,.72);font-weight:900;font-size:48px;clip-path:polygon(15% 0,100% 0,100% 85%,85% 100%,0 100%,0 15%);box-shadow:0 0 35px rgba(142,52,235,.28),inset 0 0 20px rgba(142,52,235,.12)}
.boot-line{width:260px;height:3px;background:#1d1728;overflow:hidden}.boot-line span{display:block;width:100%;height:100%;background:linear-gradient(90deg,var(--purple),var(--green));animation:bootline .9s ease both}.boot p{font-size:10px;letter-spacing:.23em;color:#867b96;margin:0}@keyframes bootline{from{transform:translateX(-100%)}to{transform:none}}

.topbar{position:fixed;top:0;left:0;right:0;height:64px;padding-top:var(--safe-top);z-index:40;display:flex;align-items:center;gap:12px;background:linear-gradient(180deg,rgba(6,5,10,.96),rgba(6,5,10,.78));border-bottom:1px solid var(--line);backdrop-filter:blur(18px);transition:transform .25s ease,opacity .25s ease,left .28s cubic-bezier(.2,.8,.2,1)}
.brand{width:64px;height:64px;display:grid;place-content:center;border-right:1px solid var(--line)}.brand span{width:34px;height:34px;display:grid;place-content:center;border:1px solid rgba(173,89,255,.7);font-weight:900;font-size:18px;clip-path:polygon(20% 0,100% 0,100% 80%,80% 100%,0 100%,0 20%);text-shadow:0 0 14px var(--purple)}
.icon-btn{width:38px;height:38px;display:grid;place-content:center;border:1px solid transparent;border-radius:3px;color:#c9c1d5;transition:.15s ease}.icon-btn:hover{border-color:var(--line);background:rgba(154,72,224,.08);color:#fff}.menu-btn{gap:4px}.menu-btn i{display:block;width:16px;height:1px;background:currentColor}.menu-btn i:nth-child(2){width:11px}
.crumb{min-width:0;display:flex;align-items:center;gap:11px;flex:1}.chapter-code{color:var(--green);font-weight:800;letter-spacing:.08em}.crumb div{display:grid;min-width:0}.crumb strong{font-size:14px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.crumb small{font-size:9px;color:var(--muted);letter-spacing:.08em;margin-top:2px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.top-status{display:flex;align-items:center;gap:8px;color:#857a94;font-size:9px;letter-spacing:.12em}.top-status b{color:#ddd5e6;font-size:10px}.signal-dot{width:6px;height:6px;border-radius:50%;background:var(--green);box-shadow:0 0 10px var(--green)}

.sidebar{position:fixed;left:0;top:0;bottom:0;width:min(390px,88vw);z-index:80;background:linear-gradient(180deg,rgba(10,8,15,.99),rgba(14,10,21,.98));border-right:1px solid rgba(176,87,255,.32);box-shadow:20px 0 60px rgba(0,0,0,.48);transform:translateX(-104%);transition:transform .28s cubic-bezier(.2,.8,.2,1);display:flex;flex-direction:column;padding-top:var(--safe-top)}.sidebar.open{transform:none}.scrim{position:fixed;inset:0;z-index:70;background:rgba(0,0,0,.52);backdrop-filter:blur(2px);opacity:0;visibility:hidden;transition:.25s}.scrim.show{opacity:1;visibility:visible}
.sidebar-head{height:78px;display:flex;align-items:center;justify-content:space-between;padding:0 18px 0 22px;border-bottom:1px solid var(--line)}.sidebar-head div{display:grid}.sidebar-head span{font-size:9px;color:var(--green);letter-spacing:.2em}.sidebar-head strong{font-size:21px;margin-top:4px}.search-launch{margin:16px 18px 10px;padding:11px 12px;display:flex;align-items:center;gap:9px;border:1px solid rgba(173,91,255,.25);background:rgba(255,255,255,.025);color:#afa4bd}.search-launch span:nth-child(2){flex:1;text-align:left;font-size:12px}.search-launch kbd{font-size:8px;color:#746a80;border:1px solid #403647;padding:2px 5px;border-radius:2px}.search-launch:hover{border-color:rgba(173,91,255,.58);background:rgba(147,58,219,.08)}
.read-progress{padding:0 18px 14px;display:flex;align-items:center;gap:10px}.read-progress>span{height:2px;background:#292230;flex:1}.read-progress i{display:block;height:100%;width:0;background:linear-gradient(90deg,var(--purple),var(--green));box-shadow:0 0 8px rgba(148,74,230,.6)}.read-progress small{font-size:8px;color:#766b82;letter-spacing:.12em}
.nav-tree{overflow:auto;padding:0 11px 20px;scrollbar-width:thin;scrollbar-color:#463753 transparent}.nav-chapter{border-top:1px solid rgba(255,255,255,.055)}.nav-chapter:first-child{border-top:0}.chapter-toggle{width:100%;display:flex;align-items:center;gap:11px;padding:13px 10px;color:#c9c1d2;text-align:left}.chapter-toggle .num{font-size:12px;color:var(--purple);font-weight:900}.nav-chapter:nth-child(3n+2) .chapter-toggle .num{color:var(--green)}.chapter-toggle strong{font-size:13px;flex:1}.chapter-toggle .chev{font-size:12px;color:#5f536b;transition:transform .2s}.nav-chapter.expanded .chev{transform:rotate(90deg)}.chapter-pages{display:none;padding:0 0 8px 20px}.nav-chapter.expanded .chapter-pages{display:block}.nav-page{width:100%;display:flex;align-items:center;gap:8px;min-height:34px;padding:6px 9px;border-left:1px solid #34283e;color:#8f849c;text-align:left;font-size:11px}.nav-page:before{content:"";width:5px;height:5px;border:1px solid #574961;transform:rotate(45deg)}.nav-page:hover{color:#f0ebf4;background:rgba(255,255,255,.025)}.nav-page.active{color:#fff;border-left-color:var(--green);background:linear-gradient(90deg,rgba(88,198,126,.13),transparent)}.nav-page.active:before{border-color:var(--green);background:var(--green);box-shadow:0 0 9px var(--green)}.nav-page .lock{margin-left:auto;color:var(--danger)}.nav-page .star{margin-left:auto;color:#e8c85b}.sidebar-foot{margin-top:auto;border-top:1px solid var(--line);padding:12px 16px calc(12px + var(--safe-bottom));display:flex;gap:8px}.soft-btn{flex:1;border:1px solid rgba(255,255,255,.1);padding:9px;color:#aaa0b4;font-size:11px;background:rgba(255,255,255,.025)}.soft-btn:hover{border-color:var(--line);color:#fff}

.stage{position:fixed;inset:64px 0 0;overflow:hidden;outline:none;cursor:grab;touch-action:none;transition:left .28s cubic-bezier(.2,.8,.2,1),top .25s ease}.stage.dragging{cursor:grabbing}.ambient-grid,.scanline{position:absolute;inset:0;pointer-events:none}.ambient-grid{opacity:.18;background-image:linear-gradient(rgba(110,83,130,.08) 1px,transparent 1px),linear-gradient(90deg,rgba(110,83,130,.06) 1px,transparent 1px);background-size:35px 35px;mask-image:radial-gradient(circle at center,#000,transparent 90%)}.scanline{opacity:.08;background:repeating-linear-gradient(180deg,transparent 0,transparent 3px,rgba(255,255,255,.055) 4px)}
.page-positioner{position:absolute;left:50%;top:50%;will-change:transform}.page-scaler{transform-origin:center center;will-change:transform}.page-canvas{position:relative;overflow:hidden;background:#111;box-shadow:0 25px 75px rgba(0,0,0,.72),0 0 0 1px rgba(255,255,255,.12),0 0 42px rgba(123,56,164,.14);user-select:none;transition:opacity .14s ease,filter .14s ease}.page-canvas.switching{opacity:.2;filter:blur(5px) saturate(.55)}.page-background{position:absolute;inset:0;width:100%;height:100%;display:block;pointer-events:none;user-select:none}.text-box{position:absolute;overflow:hidden;white-space:pre-wrap;overflow-wrap:anywhere;pointer-events:auto;user-select:text;-webkit-user-select:text}.text-box *{max-width:100%}.text-box div{min-height:1em}.text-box::selection,.text-box *::selection{background:rgba(118,74,197,.34)}.app.reader-contrast .text-box{-webkit-text-stroke:.12px rgba(0,0,0,.28);filter:drop-shadow(0 0 .45px rgba(255,255,255,.5))}.glossary-term{text-decoration-line:underline!important;text-decoration-style:solid!important;text-decoration-thickness:.13em!important;text-decoration-color:#42efaa!important;text-underline-offset:.17em;box-shadow:inset 0 -.09em 0 rgba(66,239,170,.32);background:linear-gradient(180deg,transparent 68%,rgba(66,239,170,.12) 68%);border-radius:.08em;cursor:help}.glossary-term:hover{box-shadow:inset 0 -.16em 0 rgba(66,239,170,.5);text-shadow:0 0 .32em rgba(66,239,170,.45)}.app.terms-off .glossary-term{text-decoration:none!important;box-shadow:none;background:none;cursor:text}
.page-loader{position:absolute;left:50%;top:50%;transform:translate(-50%,-50%);z-index:8;display:grid;place-items:center;gap:10px;opacity:0;visibility:hidden;transition:.15s;pointer-events:none}.page-loader.show{opacity:1;visibility:visible}.page-loader span{width:42px;height:42px;border:2px solid rgba(255,255,255,.12);border-top-color:var(--purple);border-right-color:var(--green);border-radius:50%;animation:spin .8s linear infinite}.page-loader p{font-size:8px;letter-spacing:.18em;color:#8c8098}@keyframes spin{to{transform:rotate(360deg)}}
.drag-hint{position:absolute;left:50%;bottom:22px;transform:translateX(-50%);padding:7px 11px;border:1px solid rgba(255,255,255,.08);background:rgba(8,6,12,.62);backdrop-filter:blur(8px);font-size:9px;color:#807589;letter-spacing:.04em;opacity:0;transition:.25s;pointer-events:none}.stage:hover .drag-hint{opacity:.72}.page-arrow{position:absolute;top:50%;transform:translateY(-50%);z-index:10;height:112px;min-width:62px;display:flex;align-items:center;justify-content:center;gap:3px;color:#9d92aa;opacity:.38;transition:.18s}.page-arrow:hover{opacity:1;color:#fff;text-shadow:0 0 16px var(--purple)}.page-arrow span{font-size:52px;font-weight:200;line-height:1}.page-arrow small{font-size:7px;letter-spacing:.16em;writing-mode:vertical-rl}.page-arrow.prev{left:0;background:linear-gradient(90deg,rgba(8,6,12,.68),transparent)}.page-arrow.next{right:0;background:linear-gradient(-90deg,rgba(8,6,12,.68),transparent)}.page-arrow:disabled{opacity:.08;cursor:default}
.resume-chip{position:absolute;left:18px;bottom:18px;z-index:20;display:grid;grid-template-columns:1fr auto auto;gap:4px 10px;align-items:center;min-width:290px;padding:11px 10px 10px 13px;background:rgba(12,9,17,.93);border:1px solid rgba(173,92,255,.34);box-shadow:0 12px 40px rgba(0,0,0,.5);backdrop-filter:blur(12px)}.resume-chip span{font-size:8px;color:var(--green);letter-spacing:.12em}.resume-chip strong{grid-column:1;font-size:11px}.resume-chip button{grid-row:1/3;padding:7px 10px;border-left:1px solid rgba(255,255,255,.09);font-size:10px;color:#cfc6d8}.resume-chip button:last-child{padding:3px;grid-column:3}

.control-dock{position:fixed;right:16px;bottom:calc(16px + var(--safe-bottom));z-index:35;display:grid;grid-template-columns:34px 118px 34px 50px 38px 38px 38px;align-items:center;background:rgba(10,8,14,.9);border:1px solid rgba(177,91,255,.28);box-shadow:0 12px 35px rgba(0,0,0,.45);backdrop-filter:blur(15px);transition:transform .25s,opacity .25s}.control-dock button{height:36px;border-right:1px solid rgba(255,255,255,.06);color:#aaa0b4}.control-dock #quickHelpBtn{font-weight:800;color:#d6f9f4}.control-dock button:hover{background:rgba(140,66,211,.12);color:#fff}.control-dock input{width:100%;accent-color:var(--purple)}.control-dock output{position:absolute;right:0;top:-20px;font-size:8px;color:#766b81;letter-spacing:.08em}.dock-wide{font-size:9px!important}.floating-panel{position:fixed;right:16px;bottom:72px;z-index:60;width:300px;background:var(--panel2);border:1px solid rgba(177,91,255,.3);box-shadow:0 18px 50px rgba(0,0,0,.55)}.floating-panel header{height:45px;padding:0 12px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.floating-panel label{display:flex;justify-content:space-between;align-items:center;padding:12px 14px;border-bottom:1px solid rgba(255,255,255,.05);font-size:12px;color:#c8bdcf}.floating-panel input{accent-color:var(--green)}.setting-range{padding:13px 14px 14px;border-bottom:1px solid rgba(255,255,255,.06);background:rgba(97,228,232,.025)}.setting-range-head{display:flex;align-items:center;justify-content:space-between;margin-bottom:10px;font-size:12px;color:#d3c9da}.setting-range-head output{color:var(--cyan);font-size:11px;font-weight:800}.setting-range-controls{display:grid;grid-template-columns:34px 1fr 34px;align-items:center;gap:9px}.setting-range-controls button{height:32px;border:1px solid rgba(97,228,232,.2);background:rgba(97,228,232,.04);color:#c9f8fa;font-size:18px}.setting-range-controls button:hover{border-color:rgba(97,228,232,.55);background:rgba(97,228,232,.1)}.setting-range-controls input{width:100%;accent-color:var(--cyan)}.danger-soft{width:calc(100% - 20px);margin:10px;padding:9px;border:1px solid rgba(255,76,105,.22);color:#b8929b;font-size:10px}.danger-soft:hover{border-color:rgba(255,76,105,.5);color:#ffd3db}

.modal{position:fixed;inset:0;z-index:120;display:grid;place-items:center;padding:20px;background:rgba(4,3,7,.7);backdrop-filter:blur(11px)}.modal-card{width:min(680px,100%);max-height:min(780px,90vh);background:linear-gradient(180deg,rgba(16,12,23,.99),rgba(10,8,15,.99));border:1px solid rgba(173,87,255,.36);box-shadow:0 30px 90px rgba(0,0,0,.72);overflow:hidden}.modal-card>header{height:70px;padding:0 20px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.modal-card header div{display:grid}.modal-card header small{font-size:8px;color:var(--green);letter-spacing:.18em}.modal-card header strong{font-size:18px;margin-top:4px}.modal-card header button{font-size:24px;color:#82778e}.search-box{margin:18px;display:flex;align-items:center;gap:10px;padding:0 12px;height:48px;border:1px solid rgba(169,84,255,.35);background:rgba(255,255,255,.025)}.search-box input{flex:1;background:none;border:0;color:#fff;font-size:14px;outline:none}.search-box kbd{font-size:8px;color:#665d70}.search-results,.bookmark-results{overflow:auto;max-height:570px;padding:0 18px 18px}.search-result,.bookmark-item{width:100%;display:grid;grid-template-columns:44px 1fr auto;gap:10px;align-items:start;padding:13px 9px;border-bottom:1px solid rgba(255,255,255,.06);text-align:left}.search-result:hover,.bookmark-item:hover{background:rgba(255,255,255,.025)}.result-code{font-size:10px;color:var(--purple);font-weight:800}.search-result strong,.bookmark-item strong{font-size:12px}.search-result p{grid-column:2/4;margin:2px 0 0;color:#91869d;font-size:10px;line-height:1.55}.search-result mark{background:rgba(97,214,142,.2);color:#b9ffd0}.result-page{font-size:8px;color:#615769}.empty-state{padding:36px;text-align:center;color:#6f6479;font-size:11px}.bookmark-item button{color:#cdb958}.help-card{width:min(620px,100%)}.help-grid{display:grid;grid-template-columns:1fr 1fr;gap:1px;background:rgba(255,255,255,.05)}.help-grid>div{min-height:82px;padding:18px;display:flex;align-items:center;gap:8px;background:#100d17}.help-grid .wide{grid-column:1/-1}.help-grid kbd{min-width:30px;padding:7px;text-align:center;border:1px solid #4b3a56;background:#17111f;color:#d9cee2;font-size:10px}.help-grid span{font-size:11px;color:#968a9f}.mouse-icon{font-size:27px!important;color:var(--green)!important}
.spoiler-card{width:min(490px,100%);padding:42px;text-align:center;border-color:rgba(255,76,105,.48)}.warning-glyph{font-size:44px;color:var(--danger);filter:drop-shadow(0 0 14px rgba(255,76,105,.4))}.spoiler-card small{color:var(--danger);letter-spacing:.2em;font-size:8px}.spoiler-card h2{margin:9px 0 10px;font-size:25px}.spoiler-card p{margin:0 auto 26px;max-width:360px;color:#a89dad;font-size:12px;line-height:1.7}.spoiler-card>div:last-child{display:flex;gap:10px}.warning-btn{flex:1;padding:11px;border:1px solid rgba(255,76,105,.55);background:rgba(255,76,105,.1);color:#ffc2cc}.warning-btn:hover{background:rgba(255,76,105,.2)}
.term-tooltip{position:fixed;z-index:150;width:min(432px,calc(100vw - 24px));padding:18px 19px;background:linear-gradient(145deg,rgba(12,10,17,.985),rgba(15,13,22,.985));border:1px solid rgba(83,220,145,.62);box-shadow:0 18px 55px rgba(0,0,0,.62),0 0 25px rgba(66,239,170,.09);pointer-events:none}.term-tooltip:before{content:"";position:absolute;left:-1px;top:14px;bottom:14px;width:3px;background:linear-gradient(var(--green),var(--cyan));box-shadow:0 0 12px rgba(66,239,170,.4)}.term-tooltip small{display:block;color:#78f3b4;font-size:11px;font-weight:800;letter-spacing:.16em}.term-tooltip strong{display:block;margin-top:6px;font-size:19px}.term-tooltip p{margin:10px 0 0;color:#d0c7d6;font-size:15px;line-height:1.65}.toast{position:fixed;left:50%;bottom:24px;z-index:180;transform:translate(-50%,18px);padding:9px 13px;background:rgba(12,9,17,.95);border:1px solid rgba(173,91,255,.32);font-size:10px;color:#d8cfdf;opacity:0;visibility:hidden;transition:.2s}.toast.show{opacity:1;visibility:visible;transform:translate(-50%,0)}

.app.sidebar-open .topbar{left:var(--sidebar-width)}.app.sidebar-open .stage{left:var(--sidebar-width)}.restore-ui{position:fixed;left:50%;top:calc(14px + var(--safe-top));z-index:190;display:flex;align-items:center;gap:9px;padding:10px 14px;transform:translate(-50%,-24px);opacity:0;visibility:hidden;pointer-events:none;background:rgba(10,8,15,.94);border:1px solid rgba(97,228,232,.58);box-shadow:0 12px 40px rgba(0,0,0,.55),0 0 22px rgba(97,228,232,.12);color:#e7fdff;transition:.2s}.restore-ui span{color:var(--cyan);font-size:17px}.restore-ui strong{font-size:11px;letter-spacing:.04em}.restore-ui kbd{padding:2px 5px;border:1px solid rgba(255,255,255,.16);color:#91889b;font-size:8px}.app.focus .restore-ui{transform:translate(-50%,0);opacity:1;visibility:visible;pointer-events:auto}.app.focus .sidebar{transform:translateX(-104%)}.app.focus.sidebar-open .topbar{left:0}.app.focus.sidebar-open .stage{left:0}.app.focus .topbar{transform:translateY(-105%);opacity:0}.app.focus .control-dock{transform:translateY(130%);opacity:0}.app.focus .page-arrow{opacity:0}.app.focus .stage{inset:0}.app.focus .drag-hint{display:none}
@media (prefers-reduced-motion:reduce){*,*:before,*:after{animation:none!important;transition:none!important}}
@media (min-width:901px){.scrim,.scrim.show{opacity:0;visibility:hidden;pointer-events:none}}
@media (max-width:900px){.app.sidebar-open .topbar,.app.sidebar-open .stage{left:0}}
@media (max-width:760px){
 .topbar{height:56px}.brand{width:52px;height:56px}.brand span{width:30px;height:30px}.top-status{display:none}.crumb strong{font-size:12px}.crumb small{display:none}.stage{inset:56px 0 0}.topbar>.icon-btn:not(.menu-btn):not(#searchBtn){display:none}
 .control-dock{left:10px;right:10px;bottom:calc(10px + var(--safe-bottom));grid-template-columns:34px 1fr 34px 52px 40px 40px}.control-dock #fullscreenBtn{display:none}.control-dock output{display:none}
 .page-arrow{top:auto;bottom:58px;height:54px;min-width:55px}.page-arrow small{display:none}.page-arrow span{font-size:42px}.drag-hint{display:none}.resume-chip{left:10px;right:10px;bottom:62px;min-width:0}
 .app.sidebar-open .topbar,.app.sidebar-open .stage{left:0}.scrim.show{opacity:1;visibility:visible}.floating-panel{left:10px;right:10px;bottom:62px;width:auto}.modal{padding:10px}.search-results,.bookmark-results{max-height:65vh}.help-grid{grid-template-columns:1fr}.help-grid .wide{grid-column:auto}
}
@media (max-width:420px){.crumb .chapter-code{display:none}.sidebar{width:92vw}.search-result{grid-template-columns:36px 1fr}.result-page{display:none}.search-result p{grid-column:2}.spoiler-card{padding:30px 20px}}
