/* All-in-One 뷰어 — 철도피지컬AI연구실 UI 토큰 */
:root{
  --bg:#cfd6de; --card:#f4f6f9; --section:#e9edf2; --line:#b7c1cc; --ink:#1f2430; --sub:#596575;
  --blue:#2563eb; --blue-hover:#1d4ed8; --blue-bg:#eff6ff; --on-accent:#fff;
  --red:#b42318; --red-bg:#fef2f2; --amber:#b45309; --amber-bg:#fffbeb;
  --paper-shadow:0 2px 10px rgba(52,64,84,.16);
  --radius:10px; --ctl:8px; --head-h:68px; --bar-h:44px; --tool-h:60px;
  --font:Pretendard,'Pretendard Variable','Noto Sans KR','Apple SD Gothic Neo','Malgun Gothic',-apple-system,BlinkMacSystemFont,sans-serif;
  --mono:'JetBrains Mono',ui-monospace,SFMono-Regular,Consolas,monospace;
  color-scheme:light;
}
@media (prefers-color-scheme: dark){
  :root:not([data-theme="light"]){
    --bg:#131820; --card:#1c232d; --section:#232c38; --line:#394556; --ink:#e5e9ef; --sub:#a4aebb;
    --blue:#7aa2ff; --blue-hover:#9bb9ff; --blue-bg:#1b2742; --on-accent:#0d1422;
    --red:#ff8a8a; --red-bg:#3a1a1a; --amber:#f0b25a; --amber-bg:#35280f;
    --paper-shadow:0 2px 14px rgba(0,0,0,.45);
    color-scheme:dark;
  }
}
:root[data-theme="dark"]{
  --bg:#131820; --card:#1c232d; --section:#232c38; --line:#394556; --ink:#e5e9ef; --sub:#a4aebb;
  --blue:#7aa2ff; --blue-hover:#9bb9ff; --blue-bg:#1b2742; --on-accent:#0d1422;
  --red:#ff8a8a; --red-bg:#3a1a1a; --amber:#f0b25a; --amber-bg:#35280f;
  --paper-shadow:0 2px 14px rgba(0,0,0,.45);
  color-scheme:dark;
}
*{box-sizing:border-box}
[hidden]{display:none!important}
html,body{height:100%}
body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--font);font-size:16px;line-height:1.6;word-break:keep-all;overflow-wrap:break-word;-webkit-text-size-adjust:100%}
a{color:var(--blue)}
:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
button,input{font:inherit}
button,.btn{display:inline-flex;align-items:center;justify-content:center;border:1px solid var(--line);background:var(--card);color:var(--ink);border-radius:var(--ctl);padding:6px 12px;min-height:36px;font-size:.875rem;cursor:pointer;white-space:nowrap;text-decoration:none}
button:hover,.btn:hover{border-color:var(--blue);color:var(--ink)}
button:disabled{opacity:.35;cursor:default;border-color:var(--line)}
button.primary,a.btn.primary{background:var(--blue);border-color:var(--blue);color:var(--on-accent);font-weight:600}
button.primary:hover,a.btn.primary:hover{background:var(--blue-hover);border-color:var(--blue-hover)}
button.ghost{border-color:transparent;background:transparent;color:var(--sub)}
button.ghost:hover{background:var(--section);color:var(--ink)}

/* 머리 */
.app-header{position:sticky;top:0;z-index:30;height:var(--head-h);background:var(--card);border-bottom:1px solid var(--line);display:flex;align-items:center;justify-content:space-between;gap:12px;padding:8px 20px}
.brand{display:flex;align-items:center;gap:14px;min-width:0;color:var(--ink);text-decoration:none}
.brand .logo-wrap{background:#fff;border-radius:8px;padding:3px 6px;flex:none;line-height:0}
.brand img{display:block;width:70px;height:44px;object-fit:contain}
.brand-text{min-width:0}
.brand strong{display:block;font-size:1.0625rem;letter-spacing:-.3px;font-weight:700;white-space:nowrap}
.brand small{display:block;font-size:.8125rem;color:var(--sub);white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.header-actions{display:flex;gap:8px;flex:none;align-items:center}

/* 첫 화면 */
.empty{min-height:calc(100dvh - var(--head-h));display:flex;flex-direction:column;align-items:center;padding:28px 16px 24px;gap:14px}
.open-card{width:min(100%,560px);background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:24px 24px 20px;display:flex;flex-direction:column;align-items:stretch}
.open-card h1{margin:0;font-size:1.6rem;letter-spacing:-.5px;line-height:1.3}
.tagline{margin:4px 0 14px;font-size:.875rem;color:var(--sub)}
.formats{list-style:none;margin:0 0 18px;padding:0;display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:6px}
.formats li{display:flex;flex-direction:column;background:var(--section);border:1px solid var(--line);border-radius:8px;padding:7px 10px;line-height:1.35}
.formats b{font-size:.875rem}
.formats span{font-size:.75rem;color:var(--sub);font-family:var(--mono);letter-spacing:.01em}
button.big{min-height:50px;font-size:1rem;border-radius:var(--ctl)}
.drop-hint{margin-top:10px;text-align:center;font-size:.8125rem;color:var(--sub)}
.dragging .open-card{outline:3px solid var(--blue);outline-offset:4px;background:var(--blue-bg)}
.dragging #workspace{outline:3px solid var(--blue);outline-offset:-3px}
.points{width:min(100%,560px);margin:0;padding:0 0 0 1.2em;font-size:.875rem;color:var(--sub)}
.points li{margin:2px 0}
.kakao-banner{width:min(100%,560px);display:flex;align-items:center;gap:10px;background:var(--amber-bg);color:var(--amber);border-radius:8px;padding:10px 12px;font-size:.875rem}
.kakao-banner span{flex:1}
.qr-card{width:min(100%,560px);display:flex;align-items:center;gap:16px;background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:12px 16px}
.qr-card img{background:#fff;border-radius:6px;padding:4px;flex:none}
.qr-card ul{margin:0;padding-left:1.1em;font-size:.875rem;color:var(--sub)}
.site-foot{width:min(100%,560px);margin-top:auto;padding-top:10px;display:flex;flex-wrap:wrap;gap:4px 14px;justify-content:center;font-size:.8125rem;color:var(--sub)}
.site-foot b{font-variant-numeric:tabular-nums;color:var(--ink)}
@media (hover:none),(max-width:760px){.desk-only{display:none!important}}

/* 문서 화면 */
#workspace{display:flex;flex-direction:column;height:calc(100dvh - var(--head-h))}
.filebar{flex:none;height:var(--bar-h);display:flex;align-items:center;gap:10px;padding:0 12px 0 20px;background:var(--section);border-bottom:1px solid var(--line);min-width:0}
.kind{flex:none;font-family:var(--mono);font-size:.72rem;font-weight:700;color:var(--blue);background:var(--blue-bg);border-radius:6px;padding:1px 7px;letter-spacing:.04em}
.filebar h2{margin:0;flex:1;min-width:0;font-size:.875rem;font-weight:500;overflow:hidden;white-space:nowrap;text-overflow:ellipsis}
.file-size{flex:none;font-size:.75rem;color:var(--sub)}
.sheet-tabs{flex:none;display:flex;gap:4px;overflow-x:auto;padding:6px 12px;background:var(--card);border-bottom:1px solid var(--line)}
.sheet-tabs button{min-height:32px;border-radius:6px}
.sheet-tabs button[aria-selected="true"]{background:var(--blue);border-color:var(--blue);color:var(--on-accent);font-weight:600}
#viewport{flex:1;min-height:0;overflow:auto;touch-action:pan-x pan-y;overscroll-behavior:contain;position:relative;-webkit-overflow-scrolling:touch}
#viewport:focus{outline:none}
#viewport.frame{overflow:hidden}
#viewport.frame iframe{display:block;width:100%;height:100%;border:0;background:transparent}

.toolbar{flex:none;height:calc(var(--tool-h) + env(safe-area-inset-bottom));padding:8px 12px calc(8px + env(safe-area-inset-bottom));background:var(--card);border-top:1px solid var(--line);display:flex;align-items:center;justify-content:center;gap:14px}
.page-controls,.zoom-controls{display:flex;align-items:center;gap:4px}
button.icon{width:44px;min-width:44px;height:44px;padding:0;font-size:1.35rem;line-height:1;border-color:transparent;background:transparent}
button.icon:hover:not(:disabled){background:var(--section);border-color:transparent}
.page-number{display:flex;align-items:center;font-size:.875rem;color:var(--sub);white-space:nowrap}
.page-number input{width:52px;height:38px;border:1px solid var(--line);border-radius:6px;background:var(--bg);color:var(--ink);text-align:center;-moz-appearance:textfield;margin-right:6px}
.page-number input::-webkit-inner-spin-button,.page-number input::-webkit-outer-spin-button{-webkit-appearance:none;margin:0}
.divider{width:1px;height:24px;background:var(--line)}
button.fit{min-width:62px;height:40px;border-color:transparent;background:transparent;color:var(--blue);font-weight:600}
button.fit:hover{background:var(--section);border-color:transparent}

/* 페이지 목록(HWP·PDF) */
.pages{display:flex;flex-direction:column;align-items:center;gap:18px;padding:20px 12px 28px;min-width:min-content}
.page{position:relative;flex:none;background:#fff;box-shadow:var(--paper-shadow)}
.page > svg,.page > canvas,.page > .svg-host > svg{display:block;width:100%;height:100%}
.page .svg-host{width:100%;height:100%}
.page.pending::after{content:attr(data-n);position:absolute;inset:0;display:grid;place-items:center;color:#98a2b3;font-family:var(--mono);font-size:.875rem}

/* 표 */
.sheet-wrap{padding:0;min-width:min-content}
table.grid{border-collapse:separate;border-spacing:0;font-size:.8125rem;line-height:1.4;background:var(--card);color:var(--ink)}
table.grid th,table.grid td{border-right:1px solid var(--line);border-bottom:1px solid var(--line);padding:4px 8px;white-space:pre;max-width:360px;overflow:hidden;text-overflow:ellipsis;vertical-align:top}
table.grid thead th{position:sticky;top:0;z-index:2;background:var(--section);font-weight:600;color:var(--sub);text-align:center;font-family:var(--mono);font-size:.72rem}
table.grid tbody th{position:sticky;left:0;z-index:1;background:var(--section);font-weight:400;color:var(--sub);text-align:right;font-family:var(--mono);font-size:.72rem}
table.grid thead th:first-child{left:0;z-index:3}
table.grid td.num{text-align:right;font-variant-numeric:tabular-nums}
.note-line{padding:8px 16px;font-size:.8125rem;color:var(--amber);background:var(--amber-bg)}

/* 이미지·미디어·텍스트 */
.img-wrap{min-height:100%;display:flex;align-items:center;justify-content:center;padding:16px;min-width:min-content}
.img-wrap img{display:block;max-width:none;background:repeating-conic-gradient(#e5e7eb 0 25%,#fff 0 50%) 0 0/16px 16px;box-shadow:var(--paper-shadow)}
.media-wrap{height:100%;display:flex;align-items:center;justify-content:center;padding:16px}
.media-wrap video{max-width:100%;max-height:100%;background:#000;border-radius:6px}
.media-wrap audio{width:min(100%,560px)}
pre.text{margin:0;padding:16px 20px;font-family:var(--mono);font-size:.8125rem;line-height:1.6;white-space:pre-wrap;word-break:break-all;color:var(--ink);min-height:100%;background:var(--card)}

/* 상태 */
#loading{position:fixed;inset:var(--head-h) 0 0;z-index:40;display:flex;align-items:center;justify-content:center;gap:12px;background:color-mix(in srgb,var(--bg) 88%,transparent);color:var(--ink);font-size:.9375rem}
.spinner{width:22px;height:22px;border:2px solid var(--line);border-top-color:var(--blue);border-radius:50%;animation:spin .8s linear infinite}
@keyframes spin{to{transform:rotate(360deg)}}
@media (prefers-reduced-motion: reduce){.spinner{animation:none}}
#toast{position:fixed;left:50%;bottom:calc(84px + env(safe-area-inset-bottom));transform:translateX(-50%);z-index:50;max-width:calc(100% - 32px);width:max-content;background:var(--red-bg);color:var(--red);border:1px solid color-mix(in srgb,var(--red) 35%,transparent);border-radius:8px;padding:12px 16px;font-size:.875rem}
.modal{position:fixed;inset:0;z-index:60;display:grid;place-items:center;background:rgba(15,23,42,.45);padding:16px}
.modal-card{width:min(100%,380px);background:var(--card);border:1px solid var(--line);border-radius:var(--radius);padding:18px 20px;display:flex;flex-direction:column;gap:8px}
.modal-card ol{margin:0;padding-left:1.3em;font-size:.9375rem}
.modal-card button{align-self:flex-end}

@media (max-width:600px){
  :root{--head-h:60px;--bar-h:40px;--tool-h:56px}
  .app-header{padding:6px 12px;gap:8px}
  .brand{gap:10px}
  .brand img{width:54px;height:34px}
  .brand small{display:none}
  .wide-only{display:none!important}
  .filebar{padding:0 6px 0 12px}
  .file-size{display:none}
  .toolbar{gap:4px;padding-left:4px;padding-right:4px}
  .divider{margin:0 2px}
  .pages{gap:12px;padding:12px 8px 20px}
  .open-card{padding:18px 16px 16px}
}
@media (max-width:360px){.page-number input{width:42px}button.fit{min-width:48px}button.icon{width:40px;min-width:40px}}
.site-foot .hwp-note{flex-basis:100%;text-align:center;font-size:.75rem}
#loading #cancel-load{margin-left:4px}
.site-foot #theme-btn{min-height:0;padding:0 4px;font-size:.8125rem;color:var(--blue);text-decoration:underline;background:none;border:0}

/* 쪽 이동 레일: 로봇을 끌어 쪽을 넘긴다 */
.rail-bar{flex:none;padding:6px 14px 2px;background:var(--card);border-top:1px solid var(--line)}
.rail-bar + .toolbar{border-top:0}
.rail{position:relative;height:54px;cursor:grab;touch-action:none;user-select:none;-webkit-user-select:none;border-radius:8px}
.rail:active{cursor:grabbing}
.rail:focus-visible{outline:3px solid var(--blue);outline-offset:2px}
.rail canvas{position:absolute;inset:0;width:100%;height:100%;display:block}
.rail-tip{position:absolute;bottom:100%;margin-bottom:4px;left:0;transform:translateX(-50%);background:var(--ink);color:var(--card);font-size:.75rem;font-weight:700;font-variant-numeric:tabular-nums;padding:3px 9px;border-radius:6px;white-space:nowrap;pointer-events:none;opacity:0;transition:opacity .12s;z-index:5}
.rail-tip.show{opacity:1}
@media (max-width:600px){.rail-bar{padding:4px 10px 0}}

/* 검색 */
.searchbar{flex:none;display:flex;align-items:center;gap:4px;padding:6px 8px 6px 12px;background:var(--card);border-bottom:1px solid var(--line)}
.searchbar input{flex:1;min-width:0;height:36px;border:1px solid var(--line);border-radius:var(--ctl);background:var(--bg);color:var(--ink);padding:0 10px}
.scount{flex:none;min-width:52px;text-align:center;font-size:.8125rem;color:var(--sub);font-variant-numeric:tabular-nums}
.searchbar button.icon{width:38px;min-width:38px;height:38px}
.hl{position:absolute;inset:0;pointer-events:none;z-index:2}
.hl i{position:absolute;background:rgba(253,224,71,.5);mix-blend-mode:multiply;border-radius:2px}
.hl i.cur{background:rgba(251,146,60,.6);outline:2px solid #f97316}
table.grid td.hit{background:#fef08a;color:#1f2430}
table.grid td.hit.cur{background:#fb923c;color:#1f2430}
pre.text mark{background:#fde047;color:inherit;border-radius:2px}
pre.text mark.cur{background:#fb923c}
#toast.info{background:var(--blue-bg);color:var(--blue);border-color:color-mix(in srgb,var(--blue) 35%,transparent)}
