:root{--bg:#f4efe8;--sheet:#fbf7f2;--ink:#1d2a26;--muted:#5d6e69;--line:#d9d0c4;--accent:#2c5b4d;--accent-soft:#e7f1ec;--marker:#d9a65f;--reader-font:'Literata',Georgia,serif;--reader-fs:1.25rem;--reader-leading:1.9;--reader-width:860px;--display:'Fraunces',Georgia,serif;--ui:system-ui,'Segoe UI',sans-serif;--shadow:0 18px 42px rgba(26,25,20,.08)}
[data-theme=dark]{--bg:#111918;--sheet:#1a2827;--ink:#edf4ed;--muted:#adc0bb;--line:#334a48;--accent:#9dd1c0;--accent-soft:#1f3732;--marker:#e7c178}
*{box-sizing:border-box}html{scroll-behavior:smooth}body{margin:0;background:var(--bg);color:var(--ink);font:1rem/1.65 var(--ui);transition:background .2s,color .2s}button,input,select,textarea{font:inherit}button{color:inherit}button:focus-visible,a:focus-visible,input:focus-visible,select:focus-visible{outline:3px solid var(--accent);outline-offset:3px}a{color:inherit} [hidden]{display:none!important}
#meter{position:fixed;z-index:80;inset:0 auto auto 0;width:100%;height:3px;background:var(--accent);transform:scaleX(0);transform-origin:left}.network-status{position:fixed;z-index:90;top:0;left:50%;padding:6px 14px;transform:translateX(-50%);background:#1e2d2a;color:#fff;border-radius:0 0 9px 9px;font-size:.8rem}.toast{position:fixed;z-index:100;right:18px;bottom:18px;max-width:min(360px,calc(100vw - 36px));padding:12px 16px;border-radius:12px;background:#1a2a28;color:#fff;box-shadow:var(--shadow)}
.app-sidebar{position:fixed;z-index:30;inset:0 auto 0 0;width:232px;padding:24px 16px;background:var(--sheet);border-right:1px solid var(--line);display:flex;flex-direction:column}.sidebar-brand{display:flex;gap:10px;align-items:center;text-decoration:none;font:500 1.4rem var(--display)}.sidebar-mark,.signin-mark,.onboarding-mark{display:grid;place-items:center;width:32px;height:32px;border-radius:9px;background:var(--accent);color:var(--marker);font-weight:800}.sidebar-caption{margin:6px 8px 26px;color:var(--muted);font-size:.78rem}.sidebar-nav,.sidebar-bottom{display:grid;gap:7px}.sidebar-bottom{margin-top:auto}.shell-nav,.profile-entry{display:flex;align-items:center;gap:10px;width:100%;min-height:44px;padding:10px 12px;border:1px solid transparent;border-radius:10px;background:transparent;text-align:left;cursor:pointer}.shell-nav:hover,.shell-nav.active{background:var(--accent-soft);color:var(--accent)}.nav-icon{width:20px;height:20px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}.profile-entry{border-color:var(--line);background:var(--bg)}.profile-entry strong,.profile-entry small{display:block;max-width:150px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.profile-entry small{color:var(--muted);font-size:.72rem}.profile-avatar,.profile-avatar img{width:34px;height:34px;border-radius:50%;object-fit:cover}.top{position:sticky;z-index:25;top:0;min-height:64px;padding:10px 32px;display:flex;gap:14px;align-items:center;background:color-mix(in srgb,var(--bg) 92%,transparent);border-bottom:1px solid var(--line);backdrop-filter:blur(14px)}.brand{display:flex;align-items:center;gap:9px;text-decoration:none;font:500 1.35rem var(--display)}.brand svg{color:var(--accent)}.theme-toggle,.btn{display:inline-flex;align-items:center;justify-content:center;gap:7px;min-height:42px;padding:8px 13px;background:var(--sheet);border:1px solid var(--line);border-radius:999px;text-decoration:none;cursor:pointer}.btn:hover,.theme-toggle:hover{border-color:var(--accent)}.nav-links{display:flex;gap:5px;margin-left:20px}.nav-link{padding:8px 12px;border:0;border-radius:999px;background:transparent;color:var(--muted);cursor:pointer}.nav-link.active{background:var(--accent-soft);color:var(--accent)}.top-library{margin-left:auto}.account-trigger img{width:24px;height:24px;border-radius:50%;object-fit:cover}.mobile-nav{display:none}
main,.site-footer{margin-left:232px}.site-footer{display:flex;justify-content:center;gap:20px;flex-wrap:wrap;padding:30px 20px 42px;color:var(--muted);font-size:.83rem}.site-footer>span:first-child{color:var(--accent);font-weight:700}.footer-links{display:flex;gap:16px}.footer-button{padding:0;border:0;background:none;color:inherit;cursor:pointer}.hero{max-width:1300px;margin:auto;padding:clamp(48px,8vw,100px) clamp(20px,5vw,64px);display:grid;grid-template-columns:1.1fr .9fr;gap:clamp(28px,6vw,78px);align-items:center}.welcome-kicker,.eyebrow{color:var(--accent);font-size:.76rem;font-weight:750;letter-spacing:.1em;text-transform:uppercase}.hero h1{max-width:11ch;margin:.3em 0;font:300 clamp(3rem,6vw,5.5rem)/.98 var(--display)}.lead{max-width:42ch;color:var(--muted);font:1.15rem/1.65 var(--reader-font)}.drop{width:100%;min-height:155px;margin-top:26px;padding:24px;display:grid;justify-items:center;gap:8px;background:var(--sheet);border:1.5px dashed color-mix(in srgb,var(--accent) 55%,var(--line));border-radius:18px;box-shadow:var(--shadow);cursor:pointer;transition:.2s}.drop:hover,.drop.over,.drop:focus-visible,.drop.guide-focus{background:var(--accent-soft);border-color:var(--accent);transform:translateY(-2px)}.drop svg{color:var(--accent)}.drop-title{font-weight:700}.drop small{max-width:45ch;color:var(--muted);font-size:.84rem}.file-input{position:fixed;width:1px;height:1px;opacity:0;pointer-events:none}.welcome-signin{display:flex;gap:10px;align-items:center;flex-wrap:wrap;margin-top:14px;color:var(--muted);font-size:.85rem}.text-button{padding:8px;border:0;background:none;color:var(--muted);cursor:pointer}.stack{position:relative;margin:10px 22px 20px 0;transform:rotate(1deg)}.sheet{padding:clamp(24px,5vw,50px);background:var(--sheet);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow)}.stack .sheet p{margin:0;font:1.4rem/1.8 var(--reader-font)}.demo-word{background:color-mix(in srgb,var(--marker) 52%,transparent);border-radius:3px}.demo-definition{position:relative;z-index:2;display:grid;gap:5px;width:min(290px,85%);margin:-18px 0 0 auto;padding:14px 17px;background:#192335;color:#fff;border-radius:11px;box-shadow:var(--shadow)}.demo-definition span{color:#b8c8ff;font-size:.8rem}.demo-definition small{color:#b3bdcc}.stack figcaption{margin-top:20px;color:var(--muted);text-align:right;font-size:.86rem}.steps,.library-home{max-width:1300px;margin:auto;padding:0 clamp(20px,5vw,64px) 80px}.steps ol{display:grid;grid-template-columns:repeat(3,1fr);gap:24px;margin:0;padding:28px 0 0;border-top:1px solid var(--line);list-style:none}.steps li:before{content:counter(list-item,decimal-leading-zero);color:var(--accent);font-weight:700}.steps h2{font:500 1.25rem var(--display)}.steps p,.note{color:var(--muted);font-size:.9rem}.section-heading{display:flex;justify-content:space-between;align-items:end;padding-top:20px;border-top:1px solid var(--line)}.section-heading h2{margin:0;font:500 2rem var(--display)}.library-subheading{display:flex;justify-content:space-between;margin-top:22px;color:var(--muted)}.library-subheading select,.panel select{padding:8px;border:1px solid var(--line);border-radius:8px;background:var(--sheet);color:var(--ink)}.library-grid{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:14px;max-width:1120px}.book-card{display:grid;grid-template-rows:auto auto auto;align-content:start;gap:10px;min-width:0;min-height:124px;padding:15px;background:var(--sheet);border:1px solid var(--line);border-radius:12px;overflow:hidden}.book-card strong{display:-webkit-box;min-width:0;font:500 1.08rem/1.2 var(--display);overflow:hidden;overflow-wrap:anywhere;word-break:break-word;-webkit-box-orient:vertical;-webkit-line-clamp:2}.book-card progress{width:100%;height:5px;accent-color:var(--accent)}.book-card .btn{width:100%;min-height:40px;padding:8px 12px;font-size:.9rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.reader-wrap{width:min(var(--reader-width),100%);margin:0 auto;padding:14px 18px 90px;scroll-margin-top:72px}.bar{position:sticky;z-index:15;top:72px;display:flex;align-items:center;gap:8px;margin-bottom:24px;padding:8px;background:color-mix(in srgb,var(--sheet) 92%,transparent);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);backdrop-filter:blur(14px)}.bar-primary{display:flex;gap:6px}.toolbar-more{position:relative;margin-left:auto}.toolbar-more summary{list-style:none}.toolbar-menu{position:absolute;right:0;top:calc(100% + 8px);min-width:190px;padding:10px;display:grid;gap:7px;background:var(--sheet);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}.toolbar-menu .btn{justify-content:flex-start}.text-size{display:flex;gap:6px}.doc-head{margin:0 5px 20px}.doc-title{margin:0;font:300 clamp(2rem,4vw,3.2rem)/1.05 var(--display);overflow-wrap:anywhere}#doc-meta{color:var(--muted);font-size:.85rem}.reader-tools{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin-bottom:16px}.reader-tools label{display:flex;align-items:center;gap:8px;flex:1 1 230px;color:var(--muted)}.reader-tools input{min-width:0;flex:1;padding:9px 12px;border:1px solid var(--line);border-radius:999px;background:var(--sheet);color:var(--ink)}#reader{font:var(--reader-fs)/var(--reader-leading) var(--reader-font);hyphens:auto}.readable{touch-action:manipulation;user-select:text;-webkit-tap-highlight-color:transparent}#reader p{margin:0 0 1.3em}#reader h2{font:500 1.8rem/1.2 var(--display)}.page{scroll-margin-top:105px}.page-mark{margin:0 0 1.5em;color:var(--muted);font:700 .75rem var(--ui);text-align:center}.pdf-pages{display:grid;justify-items:center;gap:22px}.pdf-page{position:relative;width:100%;min-height:450px;margin:0;padding:16px;background:var(--sheet);border:1px solid var(--line);border-radius:10px;box-shadow:var(--shadow);scroll-margin-top:110px}.pdf-page canvas{display:block;max-width:100%;height:auto;margin:auto;background:#fff}.textLayer{position:absolute;inset:16px auto auto 50%;overflow:hidden;line-height:1;transform:translateX(-50%);pointer-events:auto;user-select:text}.pdf-text-hit{position:absolute;white-space:pre;pointer-events:auto;user-select:text;cursor:text;color:transparent}.pdf-text-hit:hover{background:rgba(113,165,150,.14)}.textLayer span{position:absolute;color:transparent;white-space:pre;cursor:text;transform-origin:0 0;user-select:text}.textLayer span::selection{background:rgba(35,74,159,.3)}.pdf-caption{position:absolute;right:0;bottom:5px;left:0;color:var(--muted);text-align:center;font-size:.72rem}.pdf-thumbs{position:sticky;top:126px;z-index:8;display:flex;gap:6px;overflow-x:auto;padding:7px;background:var(--sheet);border:1px solid var(--line);border-radius:10px}.pdf-thumb{display:grid;justify-items:center;gap:3px;min-width:48px;padding:4px;border:1px solid transparent;border-radius:7px;background:transparent;cursor:pointer;font-size:.7rem}.pdf-thumb:hover{border-color:var(--accent);background:var(--accent-soft)}.pdf-thumb canvas{max-width:56px;height:auto}.pdf-controls{display:inline-flex;align-items:center;gap:4px;margin-left:auto}.icon-btn{display:grid;place-items:center;min-width:42px;min-height:42px;border:1px solid var(--line);border-radius:50%;background:var(--sheet);cursor:pointer}.loading-skeleton{display:grid;gap:16px;padding:40px;background:var(--sheet);border-radius:14px}.loading-skeleton span{height:18px;border-radius:6px;background:linear-gradient(90deg,var(--accent-soft),var(--sheet),var(--accent-soft));background-size:200% 100%;animation:shimmer 1.2s infinite}.loading-skeleton span:nth-child(2){width:80%}.loading-skeleton span:nth-child(3){width:60%}
.contents{position:fixed;z-index:60;inset:64px auto 0 0;width:min(370px,90vw);padding:12px;background:var(--sheet);border-right:1px solid var(--line);box-shadow:var(--shadow);transform:translateX(-105%);visibility:hidden;transition:transform .2s,visibility .2s;overflow:auto}.contents.open{transform:none;visibility:visible}.panel{position:fixed;z-index:65;inset:64px 0 0 auto;width:min(440px,94vw);padding:12px 20px 30px;overflow:auto;background:var(--sheet);border-left:1px solid var(--line);box-shadow:var(--shadow)}.contents-head{display:flex;align-items:center;justify-content:space-between;gap:10px;padding:8px 0 14px}.contents-head h2{margin:0;font:500 1.5rem var(--display)}.panel>label{display:grid;gap:7px;margin:16px 0;color:var(--muted);font-size:.87rem}.account-action{width:100%;margin:7px 0}.auth-intro{margin-bottom:18px}.auth-tabs{display:grid;grid-template-columns:1fr 1fr;gap:4px;margin:18px 0 16px;padding:4px;background:var(--bg);border:1px solid var(--line);border-radius:12px}.auth-tab{min-height:40px;border:0;border-radius:9px;background:transparent;color:var(--muted);cursor:pointer;font-weight:700}.auth-tab.active{background:var(--sheet);color:var(--ink);box-shadow:0 2px 8px rgba(0,0,0,.08)}.auth-form{display:grid;gap:12px}.auth-form label{display:grid;gap:6px;color:var(--muted);font-size:.82rem}.auth-form input{width:100%;min-height:44px;padding:9px 12px;border:1px solid var(--line);border-radius:10px;background:var(--bg);color:var(--ink)}.auth-form input:focus{border-color:var(--accent);outline:2px solid color-mix(in srgb,var(--accent) 25%,transparent)}.password-field{position:relative}.password-field input{padding-right:70px}.password-toggle{position:absolute;right:6px;top:5px;min-height:34px;padding:5px 9px;border:0;border-radius:8px;background:transparent;color:var(--accent);cursor:pointer;font-size:.8rem;font-weight:700}.auth-submit{margin-top:3px}.auth-forgot{justify-self:center;font-size:.8rem}.auth-divider{display:flex;align-items:center;gap:12px;margin:18px 0;color:var(--muted);font-size:.78rem}.auth-divider:before,.auth-divider:after{content:"";height:1px;flex:1;background:var(--line)}.google-auth{background:var(--sheet)}.google-logo{display:block;width:20px;height:20px;flex:0 0 20px}.auth-loading{opacity:.7;pointer-events:none}.auth-error{color:#a42d39!important}.auth-success{color:var(--accent)!important}.account-summary{display:flex;align-items:center;gap:14px;margin:18px 0}.account-photo{width:64px;height:64px;border:3px solid var(--accent-soft);border-radius:50%;object-fit:cover}.account-summary strong,.account-summary small{display:block;overflow-wrap:anywhere}.account-summary small{color:var(--muted)}.sync-state{font-weight:700}.sync-dot{display:inline-block;width:8px;height:8px;margin-right:8px;border-radius:50%;background:#2eaa69}.vocab-row,.library-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}.vocab-row{align-items:flex-start}.vocab-info{min-width:0;flex:1}.vocab-info strong,.vocab-info p{overflow-wrap:anywhere}.vocab-info p{margin:.25em 0 0;color:var(--muted);font-size:.85rem}.vocab-remove{flex:none;min-height:36px;padding:6px 10px;border:1px solid var(--line);border-radius:8px;background:var(--sheet);color:var(--muted);cursor:pointer}.vocab-remove:hover{border-color:#a42d39;color:#a42d39}@media(max-width:420px){.vocab-row{gap:8px}.vocab-remove{min-height:40px;padding:7px 9px;font-size:.8rem}}.library-row progress{width:100px}.library-section-title{margin:22px 0 6px;color:var(--muted);font-size:.75rem;text-transform:uppercase}.saved-section{padding:16px 8px}.saved-item{display:block;width:100%;padding:10px;border:0;border-radius:8px;background:none;text-align:left;color:var(--ink);cursor:pointer}.saved-item:hover{background:var(--accent-soft)}.word-actions{display:flex;gap:6px;margin:10px 0}.close{position:absolute;top:9px;right:10px;width:36px;height:36px;border:0;border-radius:50%;background:transparent;font-size:1.5rem;cursor:pointer}#popup{position:absolute;z-index:75;width:min(350px,calc(100vw - 24px));padding:18px 42px 16px 18px;border:1px solid rgba(255,255,255,.12);border-radius:14px;background:#172337;color:#fff;box-shadow:0 20px 55px -20px #000;font:1rem/1.5 var(--ui)}#popup[hidden]{display:none}#popup h2{margin:0;font:500 1.6rem var(--display)}#popup .pos{margin:12px 0 2px;color:#c4d1ff;font-style:italic}#popup .def{margin:0}#popup .ex{color:#c8d0dc;font-style:italic}#popup .note{color:#c8d0dc}::highlight(picked){background:var(--marker);color:#182333}::highlight(search){background:var(--accent);color:#fff}
.signin-modal{position:fixed;z-index:110;inset:0;display:grid;place-items:center;padding:16px;background:rgba(17,26,39,.48);backdrop-filter:blur(5px)}.signin-card{position:relative;width:min(440px,100%);padding:32px;background:var(--sheet);border:1px solid var(--line);border-radius:18px;box-shadow:0 30px 100px -35px #000}.signin-card h2,.onboarding-panel h2{font:500 2.1rem/1.07 var(--display)}.signin-mark{margin-bottom:20px}.signin-close{position:absolute}.privacy-block{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}.privacy-block p{color:var(--muted);font-size:.85rem}.danger-action{color:#a42d39}.shortcut-row{display:flex;gap:12px;padding:12px 0;border-bottom:1px solid var(--line)}kbd{padding:3px 7px;background:var(--bg);border:1px solid var(--line);border-radius:5px}.onboarding-panel{position:fixed;z-index:105;top:50%;left:50%;width:min(470px,calc(100vw - 32px));padding:32px;background:var(--sheet);border:1px solid var(--line);border-radius:18px;box-shadow:0 28px 90px -25px #000;transform:translate(-50%,-50%)}.onboarding-steps{display:grid;gap:8px;margin:20px 0}.onboarding-steps b{color:var(--accent)}.contact-cards{display:grid;grid-template-columns:repeat(3,1fr);gap:7px}.contact-card{display:grid;gap:6px;padding:10px;border:1px solid var(--line);border-radius:9px;text-decoration:none}.contact-card small{overflow-wrap:anywhere;color:var(--muted)}.contact-card.unavailable{opacity:.45;pointer-events:none}.contact-panel textarea{width:100%;padding:10px;border:1px solid var(--line);border-radius:9px;background:var(--bg);color:var(--ink)}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}.stats-grid p{padding:10px;background:var(--accent-soft);border-radius:9px}.stats-grid small{display:block;color:var(--muted)}.flashcard{width:100%;padding:14px;border:1px solid var(--line);border-radius:9px;background:var(--accent-soft);text-align:left}.focus-mode .hero,.focus-mode .steps,.focus-mode .top{opacity:.2}.line-focus #reader p{opacity:.35}.line-focus #reader p:hover{opacity:1}.high-contrast{--bg:#fff;--sheet:#fff;--ink:#000;--muted:#222;--line:#555;--accent:#123a98}
@keyframes shimmer{to{background-position:-200% 0}}@media(prefers-reduced-motion:reduce){*,*:before,*:after{scroll-behavior:auto!important;animation-duration:.01ms!important;transition-duration:.01ms!important}}
@media(min-width:901px){.top{margin-left:232px}main,.site-footer{margin-left:232px}}
@media(max-width:900px){.panel{z-index:50}.contents{z-index:50}.app-sidebar{display:none}.top{padding-inline:16px}.top .nav-links,.top-library{display:none}.mobile-nav{position:fixed;z-index:55;inset:auto 10px 10px;display:grid;grid-template-columns:repeat(4,1fr);gap:4px;padding:6px;background:color-mix(in srgb,var(--sheet) 94%,transparent);border:1px solid var(--line);border-radius:15px;box-shadow:var(--shadow);backdrop-filter:blur(14px)}.mobile-nav .shell-nav{display:grid;justify-items:center;gap:2px;padding:5px 3px;font-size:.69rem}.mobile-nav .nav-icon{width:19px;height:19px}main,.site-footer{margin-left:0}body{padding-bottom:78px}.hero{grid-template-columns:1fr;padding-top:48px}.stack{max-width:620px;width:100%;margin-inline:auto}.steps ol{grid-template-columns:1fr}.bar{top:66px}.pdf-controls{flex-wrap:wrap}.reader-wrap{padding-inline:10px}}
@media(max-width:420px){.theme-toggle{padding:7px}.top{gap:7px}.brand{font-size:1.15rem}.hero h1{font-size:2.75rem}.drop{padding:20px 13px}.pdf-page{padding:7px;min-height:280px}.textLayer{top:7px}.pdf-controls #pdf-fullscreen{display:none}.reader-tools .btn{min-height:44px;padding:8px 10px}.contact-cards{grid-template-columns:1fr}.panel{inset:58px 0 0;width:100%}.signin-card{padding:25px}}

.pdf-toolbar,.text-view-controls{position:sticky;top:130px;z-index:14;background:color-mix(in srgb,var(--sheet) 94%,transparent);backdrop-filter:blur(14px);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow)}
.text-view-controls{display:flex;align-items:center;gap:7px;flex-wrap:wrap;margin:0 0 14px;padding:8px}
.document-page-reader{width:min(100%,var(--reader-width));margin:0 auto;padding:0;background:transparent;border:0;box-shadow:none}
.document-page-reader .page{min-height:min(78vh,900px);margin:0 auto 20px;display:flex;flex-direction:column;padding:clamp(32px,6vw,72px) clamp(24px,7vw,78px);background:var(--sheet);border:1px solid var(--line);border-radius:14px;box-shadow:var(--shadow);overflow:auto}
.document-page-reader .page-mark{flex:0 0 auto}
.text-view-divider{width:1px;height:26px;background:var(--line);margin:0 4px}
.text-view-controls .icon-btn:disabled{opacity:.45;cursor:not-allowed}
@media (max-width:700px){
  .pdf-toolbar,.text-view-controls{top:116px}
  .document-page-reader .page{min-height:calc(100vh - 190px);padding:28px 20px 34px;border-radius:12px}
  .text-view-divider{display:none}
}
.library-backdrop{position:fixed;z-index:49;inset:64px 0 0;background:rgba(17,25,24,.14);border:0;padding:0;cursor:default}
@media(max-width:900px){
  .library-backdrop{z-index:48;inset:58px 0 78px}
  .library-panel{z-index:50;inset:auto 10px 88px;width:auto;max-height:calc(100vh - 170px);border:1px solid var(--line);border-radius:16px;padding:12px 16px 24px}
}
@media(max-width:420px){
  .library-panel{inset:auto 8px 86px;max-height:calc(100vh - 150px)}
}
.global-reader-controls{position:fixed;z-index:45;top:76px;right:18px;display:flex;align-items:center;gap:6px;padding:6px;background:color-mix(in srgb,var(--sheet) 94%,transparent);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow);backdrop-filter:blur(14px)}
.global-reader-controls .icon-btn{min-width:38px;min-height:38px}
.global-reader-controls .btn{min-height:38px}
.global-reader-controls button:disabled{opacity:.45;cursor:not-allowed}
@media(max-width:900px){
  .global-reader-controls{top:70px;right:10px;max-width:calc(100vw - 20px)}
  .global-reader-controls #global-view-label{display:none}
}

/* Mobile UX pass */
@media (max-width:900px){
  .top{min-height:58px;padding:8px 12px;gap:8px}
  .top .theme-toggle{margin-left:auto}
  .top .theme-toggle #theme-label{display:none}
  .top #account-btn{min-width:42px;width:42px;padding:7px}
  .top #account-label{display:none}
  .reader-wrap{width:100%;padding:8px 10px 105px}
  .bar{
    position:sticky;top:58px;z-index:40;
    margin:0 -2px 14px;padding:7px;
    overflow-x:auto;overscroll-behavior-x:contain;
    flex-wrap:nowrap;scrollbar-width:none;
    border-radius:12px;
  }
  .bar::-webkit-scrollbar{display:none}
  .bar-primary{flex:0 0 auto;flex-wrap:nowrap}
  .bar-primary .btn,.bar .btn{min-height:44px;white-space:nowrap}
  .reading-timer{display:none}
  .page-jump-inline{flex:0 0 auto;white-space:nowrap}
  .page-jump-inline input{width:58px;min-height:42px}
  .toolbar-more{flex:0 0 auto}
  .toolbar-more summary{white-space:nowrap}
  .toolbar-menu{position:fixed;right:10px;bottom:auto;top:auto;z-index:200;width:min(280px,calc(100vw - 20px));max-height:calc(100dvh - 150px);overflow:auto}
  .doc-head{margin:4px 3px 16px}
  .doc-title{font-size:clamp(1.65rem,8vw,2.4rem)}
  .reader-tools{
    display:flex;flex-wrap:nowrap;overflow-x:auto;
    margin:0 -2px 14px;padding-bottom:4px;
    overscroll-behavior-x:contain;scrollbar-width:none;
  }
  .reader-tools::-webkit-scrollbar{display:none}
  .reader-tools label{flex:0 0 min(260px,72vw)}
  .reader-tools .btn{flex:0 0 auto;min-height:44px;white-space:nowrap}
  .dictionary-panel{
    position:sticky;top:116px;z-index:35;
    display:grid;grid-template-columns:1fr auto;
    gap:8px;padding:10px;margin-bottom:12px;
  }
  .dictionary-panel label{grid-column:1/-1;margin:0}
  .dictionary-panel input{min-width:0;min-height:44px}
  .dictionary-panel .btn{min-height:44px}
  .pdf-toolbar,.text-view-controls{
    position:sticky;top:116px;z-index:34;
    max-width:100%;overflow-x:auto;scrollbar-width:none;
  }
  .pdf-toolbar::-webkit-scrollbar,.text-view-controls::-webkit-scrollbar{display:none}
  .pdf-toolbar{display:flex;align-items:center;gap:7px;flex-wrap:nowrap;white-space:nowrap}
  .pdf-toolbar>*{flex:0 0 auto}
  .pdf-controls{flex:0 0 auto;flex-wrap:nowrap;white-space:nowrap;overflow-x:auto;max-width:100%;scrollbar-width:none}
  .pdf-controls::-webkit-scrollbar{display:none}
  .pdf-controls .icon-btn,.pdf-controls .btn{min-width:44px;min-height:44px}
  .text-view-controls{flex-wrap:nowrap;white-space:nowrap}
  .text-view-controls>*{flex:0 0 auto}
  .text-view-controls .icon-btn,.text-view-controls .btn{min-width:44px;min-height:44px}
  .pdf-thumbs{top:116px;z-index:30;padding:5px}
  .pdf-page{padding:5px;min-height:240px;border-radius:8px;overflow:hidden}
  .pdf-page canvas{width:100%;height:auto}
  .textLayer{top:5px;max-width:calc(100% - 10px)}
  .document-page-reader .page{width:100%;min-height:calc(100svh - 185px);padding:24px 18px 32px;margin-bottom:14px}
  .global-reader-controls{
    top:auto;right:10px;bottom:88px;left:10px;
    width:auto;justify-content:center;z-index:54;
    padding:5px;overflow:hidden;
  }
  .global-reader-controls .btn{flex:1;min-width:0;min-height:44px}
  .global-reader-controls .icon-btn{min-width:44px;min-height:44px}
  .global-reader-controls #global-view-label{display:inline;font-size:.78rem;white-space:nowrap}
  .mobile-nav{z-index:80}
  .library-backdrop{z-index:71;inset:58px 0 76px}
  .panel{z-index:75}
  .library-panel{z-index:76}
  #popup{
    position:fixed;left:10px;right:10px;bottom:88px;
    width:auto;max-width:none;max-height:55svh;
    overflow:auto;padding:18px 44px 18px 18px;
    border-radius:16px;overscroll-behavior:contain;
  }
  .signin-modal{padding:10px;align-items:end}
  .signin-card{width:100%;max-height:90svh;overflow:auto;padding:24px 20px;border-radius:18px 18px 12px 12px}
  .onboarding-panel{width:calc(100vw - 20px);max-height:88svh;overflow:auto;padding:24px 18px}
  dialog.note-dialog{width:calc(100vw - 20px);max-width:none;margin:auto;padding:18px}
  .contact-cards,.stats-grid{grid-template-columns:1fr}
  .site-footer{padding-bottom:100px}
  button,.btn,.icon-btn,.shell-nav,.nav-link,input,select{touch-action:manipulation}
}
@media (max-width:420px){
  .brand{font-size:1.05rem}
  .top{padding-inline:10px}
  .hero{padding-inline:14px}
  .hero h1{font-size:2.55rem}
  .drop{min-height:140px}
  .reader-wrap{padding-inline:7px}
  .bar{margin-inline:-1px}
  .bar-primary .btn{padding-inline:10px}
  .global-reader-controls{left:7px;right:7px}
  .global-reader-controls #global-view-label{display:none}
  .pdf-page{padding:3px}
  .document-page-reader .page{padding:20px 14px 28px}
}


#reader-wrap:fullscreen{position:relative;overflow:auto;min-height:100vh;background:var(--bg)}
#reader-wrap:fullscreen #popup,#reader-wrap:-webkit-full-screen #popup{z-index:1000}


/* Mobile reliability layer: keep every reader surface reachable and touch-friendly. */
@media (max-width:900px){
  html{min-height:100%;-webkit-text-size-adjust:100%;text-size-adjust:100%}
  body{min-height:100%;overscroll-behavior-x:none}
  .top{padding-top:max(8px,env(safe-area-inset-top));}
  main{width:100%;overflow-x:clip}
  .reader-wrap{scroll-margin-top:60px;overscroll-behavior-x:none}
  .bar{scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}
  .bar-primary .btn,.toolbar-more summary,.page-jump-inline,.global-reader-controls button{scroll-snap-align:start}
  .toolbar-menu{max-height:min(62svh,520px);padding-bottom:max(10px,env(safe-area-inset-bottom))}
  .contents{inset:58px auto 78px 0;width:min(92vw,380px);padding-bottom:24px}
  .panel{inset:58px 0 78px;width:100%;padding-bottom:calc(28px + env(safe-area-inset-bottom));-webkit-overflow-scrolling:touch}
  .library-panel{inset:auto 8px calc(78px + env(safe-area-inset-bottom));max-height:calc(100svh - 150px)}
  .library-backdrop{inset:58px 0 calc(78px + env(safe-area-inset-bottom))}
  .mobile-nav{bottom:max(10px,env(safe-area-inset-bottom));padding-bottom:6px}
  .global-reader-controls{bottom:calc(82px + env(safe-area-inset-bottom));}
  .pdf-thumbs{max-width:100%;-webkit-overflow-scrolling:touch}
  .pdf-thumb{min-width:54px;min-height:54px}
  .pdf-page{touch-action:pan-y}
  .pdf-page .textLayer{touch-action:auto;-webkit-user-select:text;user-select:text}
  .pdf-page .textLayer span,.pdf-page .textLayer br{touch-action:auto;-webkit-user-select:text!important;user-select:text!important}
  #popup{z-index:1000;max-width:calc(100vw - 20px);padding-bottom:calc(18px + env(safe-area-inset-bottom));}
  #reader-wrap:fullscreen,#pdf-pages:fullscreen{padding:max(8px,env(safe-area-inset-top)) 8px max(90px,calc(8px + env(safe-area-inset-bottom)));width:100vw;height:100svh;max-height:100svh}
  #reader-wrap:fullscreen #popup,#pdf-pages:fullscreen #popup{z-index:10000}
  #reader-wrap:fullscreen .bar,#pdf-pages:fullscreen .pdf-toolbar{top:max(8px,env(safe-area-inset-top));}
  .signin-modal{padding:calc(8px + env(safe-area-inset-top)) 8px calc(8px + env(safe-area-inset-bottom))}
  .signin-card{max-height:calc(100svh - 20px)}
  .note-dialog{max-height:calc(100svh - 24px)}
  input,select,textarea{font-size:16px}
  button,.btn,.icon-btn,.shell-nav,.profile-entry{min-height:44px}
}
@media(max-width:420px){
  .mobile-nav{inset:auto 7px max(7px,env(safe-area-inset-bottom))}
  .global-reader-controls{bottom:calc(78px + env(safe-area-inset-bottom));}
  .bar{gap:6px}
  .bar-primary{gap:4px}
  .bar-primary .btn{padding-inline:9px}
  .page-jump-inline input{width:54px}
}

/* Paste-to-read surface */
.paste-reader{width:min(760px,100%);margin:22px 0 0;padding:18px;border:1px solid var(--line);border-radius:16px;background:var(--sheet);box-shadow:var(--shadow)}
.paste-reader-head{display:flex;align-items:flex-start;justify-content:space-between;gap:14px;margin-bottom:12px}
.paste-reader-head h2{margin:3px 0 0;font:500 1.45rem var(--display)}
.paste-badge{padding:5px 9px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.72rem;font-weight:700}
#paste-input{display:block;width:100%;min-height:170px;resize:vertical;padding:13px 14px;border:1px solid var(--line);border-radius:11px;background:var(--bg);color:var(--ink);font:1rem/1.7 var(--reader-font);outline:none}
#paste-input:focus{border-color:var(--accent);outline:2px solid color-mix(in srgb,var(--accent) 22%,transparent)}
.paste-actions{display:flex;align-items:center;gap:9px;margin-top:10px}
.paste-actions .account-action{width:auto;margin:0}
.paste-reader>small{display:block;margin-top:9px;color:var(--muted);font-size:.78rem;line-height:1.5}
@media(max-width:700px){
  .paste-reader{margin-top:18px;padding:15px;border-radius:14px}
  .paste-reader-head h2{font-size:1.25rem}
  #paste-input{min-height:190px;font-size:16px}
  .paste-actions{flex-wrap:wrap}
  .paste-actions .account-action{flex:1;min-width:180px}
}


@media(max-width:900px){
  .library-grid{grid-template-columns:repeat(2,minmax(0,1fr));max-width:none}
}
@media(max-width:520px){
  .library-grid{grid-template-columns:1fr;gap:10px}
  .book-card{min-height:112px}
}

/* Performance: keep long text documents light while preserving their layout. */
#reader .page{
  content-visibility:auto;
  contain-intrinsic-size:auto 680px;
}
.library-home,
.steps{
  content-visibility:auto;
  contain-intrinsic-size:auto 520px;
}

/* Fullscreen dictionary overlay: keep the definition above every PDF canvas/text layer. */
#fullscreen-dictionary-layer{
  position:fixed;
  inset:0;
  z-index:2147483646;
  pointer-events:none;
  isolation:isolate;
}
#fullscreen-dictionary-layer #popup{
  pointer-events:auto;
  z-index:2147483647 !important;
}
#reader-wrap:fullscreen,#pdf-pages:fullscreen{
  position:relative;
  isolation:isolate;
}
#reader-wrap:fullscreen #fullscreen-dictionary-layer,
#pdf-pages:fullscreen #fullscreen-dictionary-layer{
  display:block;
  z-index:2147483646;
}


/* EasyRead fixes: mobile reader controls stay reachable above the phone safe area. */
.scroll-nav{position:fixed;right:10px;top:50%;bottom:auto;transform:translateY(-50%);z-index:120;display:flex;flex-direction:column;justify-content:flex-start;align-items:center;gap:8px;padding:4px;}
.scroll-nav .icon-btn{width:44px;height:44px;min-width:44px;min-height:44px;box-shadow:var(--shadow);touch-action:manipulation;}
@media(max-width:700px){.scroll-nav{right:max(8px,env(safe-area-inset-right));top:50%;bottom:auto;transform:translateY(-50%);gap:6px;z-index:120;}.reader-wrap:fullscreen .scroll-nav{right:max(8px,env(safe-area-inset-right));top:50%;bottom:auto;transform:translateY(-50%);}}
body.focus-mode .top,body.focus-mode .site-footer,body.focus-mode .app-sidebar,body.focus-mode .mobile-nav{display:none!important;}
body.focus-mode main{margin-left:0!important;}
body.focus-mode .reader-wrap{width:min(980px,100%);margin-inline:auto;padding-top:12px;}
body.focus-mode .bar{position:sticky;top:8px;z-index:80;}
.notes-panel .saved-note-row{display:flex;align-items:flex-start;justify-content:space-between;gap:12px;padding:14px 0;border-bottom:1px solid var(--line);}
.notes-panel .saved-note-content{min-width:0;flex:1;}
.notes-panel .saved-note-content p{margin:6px 0;overflow-wrap:anywhere;}
.notes-panel .saved-note-text{white-space:pre-wrap;}
.notes-panel .saved-note-actions{display:flex;gap:6px;flex-wrap:wrap;}
.notes-panel .saved-note-actions .btn{min-height:38px;}
@media(max-width:700px){.bar-primary{flex-wrap:wrap;}.notes-panel .saved-note-row{gap:8px;}.notes-panel .saved-note-actions{flex-direction:column;}}


/* Branded confirmation for deleting notes and highlights */
.delete-confirm-dialog{
  width:min(420px,calc(100vw - 32px));
  max-width:420px;
  margin:auto;
  padding:0;
  color:var(--ink);
  background:var(--sheet);
  border:1px solid var(--line);
  border-radius:18px;
  box-shadow:var(--shadow);
}
.delete-confirm-dialog::backdrop{background:rgba(12,20,19,.48);backdrop-filter:blur(4px)}
.delete-confirm-content{padding:26px}
.delete-confirm-mark{
  display:grid;
  place-items:center;
  width:42px;
  height:42px;
  margin-bottom:16px;
  border-radius:13px;
  background:color-mix(in srgb,#a42d39 12%,var(--sheet));
  color:#a42d39;
  font-size:1.35rem;
  font-weight:800;
}
.delete-confirm-content h2{margin:0;font:500 1.55rem/1.2 var(--display)}
.delete-confirm-content p{margin:10px 0 0;color:var(--muted);font-size:.92rem;line-height:1.6}
.delete-confirm-actions{display:flex;justify-content:flex-end;gap:8px;margin-top:24px}
.delete-confirm-actions .danger-action{border-color:color-mix(in srgb,#a42d39 38%,var(--line));background:color-mix(in srgb,#a42d39 9%,var(--sheet));color:#a42d39;font-weight:700}
.delete-confirm-actions .danger-action:hover{background:color-mix(in srgb,#a42d39 16%,var(--sheet));border-color:#a42d39}
@media(max-width:420px){
  .delete-confirm-dialog{width:calc(100vw - 24px)}
  .delete-confirm-content{padding:22px 18px}
  .delete-confirm-actions{flex-direction:column-reverse}
  .delete-confirm-actions .btn{width:100%;min-height:44px}
}


/* Route foundation: page-like destinations reuse the existing DOM and data model. */
body[data-route="home"] #reader-wrap,
body[data-route="reader"] main > .hero,
body[data-route="reader"] main > .steps,
body[data-route="reader"] main > #library-home,
body[data-route="library"] main,
body[data-route="notes"] main,
body[data-route="library"] .site-footer,
body[data-route="notes"] .site-footer { display:none !important; }
.panel.route-page {
  position:relative;
  inset:auto;
  width:min(1100px, calc(100% - 48px));
  max-height:none;
  margin:28px auto;
  padding:24px clamp(18px, 4vw, 42px);
  overflow:visible;
  border:0;
  border-radius:18px;
  box-shadow:none;
  background:var(--bg);
}
body[data-route="library"] #library-backdrop { display:none !important; }
@media(max-width:900px) {
  .mobile-nav { grid-template-columns:repeat(5,minmax(0,1fr)); }
  .panel.route-page {
    width:100%;
    margin:0 auto;
    padding:14px 16px calc(100px + env(safe-area-inset-bottom));
    border-radius:0;
    background:var(--bg);
  }
}


/* Contact, privacy and creator-support surfaces */
.site-footer{align-items:center;gap:14px 24px}
.footer-credit{display:flex;gap:6px;align-items:center}
.footer-credit span{color:#bd6b4d}
.footer-links{align-items:center;flex-wrap:wrap;gap:10px 18px}
.footer-links>a:not(.coffee-link),.footer-button{color:var(--muted);font:inherit;text-decoration:none}
.footer-links>a:not(.coffee-link):hover,.footer-button:hover{color:var(--accent)}
.coffee-link{display:inline-flex;align-items:center;gap:7px;padding:9px 13px;border:1px solid color-mix(in srgb,#bd754e 40%,var(--line));border-radius:999px;background:color-mix(in srgb,#bd754e 10%,var(--sheet));color:var(--ink);font-size:.82rem;font-weight:750;text-decoration:none;transition:transform .18s,border-color .18s,background .18s}
.coffee-link:hover{transform:translateY(-1px);border-color:#bd754e;background:color-mix(in srgb,#bd754e 17%,var(--sheet))}
.contact-panel,.privacy-panel{width:min(570px,96vw);padding:0 0 26px;border-left:1px solid var(--line);border-radius:0 0 0 20px}
.contact-hero,.privacy-hero{position:relative;padding:25px 28px 23px;background:linear-gradient(135deg,color-mix(in srgb,var(--accent-soft) 82%,var(--sheet)),var(--sheet) 78%);border-bottom:1px solid var(--line)}
.contact-hero-top,.privacy-hero-top{display:flex;justify-content:space-between;align-items:center;margin-bottom:23px}
.contact-mark,.privacy-mark{display:grid;place-items:center;width:42px;height:42px;border:1px solid color-mix(in srgb,var(--accent) 26%,var(--line));border-radius:14px;background:var(--sheet);color:var(--accent);font-size:1.45rem}
.contact-hero .eyebrow,.privacy-hero .eyebrow{margin:0 0 8px;font-size:.68rem;letter-spacing:.15em}
.contact-hero h2,.privacy-hero h2{margin:0;font:500 clamp(2rem,4vw,2.6rem)/1.05 var(--display);letter-spacing:-.035em}
.contact-intro,.privacy-intro{max-width:43ch;margin:11px 0 0;color:var(--muted);font-size:.93rem;line-height:1.65}
.panel-close{display:grid;place-items:center;width:38px;height:38px;border:1px solid var(--line);border-radius:50%;background:var(--sheet);color:var(--ink);font-size:1.5rem;line-height:1;cursor:pointer}
.panel-close:hover{border-color:var(--accent);color:var(--accent)}
.contact-methods{display:grid;gap:9px;padding:22px 28px 5px}
.contact-card{position:relative;display:flex;align-items:center;gap:13px;min-width:0;padding:13px 14px;border:1px solid var(--line);border-radius:13px;background:var(--sheet);color:var(--ink);text-decoration:none;transition:background .16s,border-color .16s,transform .16s}
.contact-card:hover:not(.unavailable){transform:translateY(-1px);border-color:color-mix(in srgb,var(--accent) 50%,var(--line));background:var(--accent-soft)}
.contact-symbol{display:grid;place-items:center;flex:0 0 40px;width:40px;height:40px;border-radius:12px;background:var(--accent-soft);color:var(--accent);font-size:1.15rem}
.contact-card>span:nth-child(2){display:grid;gap:3px;min-width:0;flex:1}
.contact-card strong{font-size:.91rem}
.contact-card small{font-size:.82rem;overflow-wrap:anywhere}
.contact-card-arrow{color:var(--muted);font-size:.9rem}
.contact-card.unavailable{opacity:.5;pointer-events:none}
.contact-compose{padding:18px 28px 22px}
.contact-compose label{display:grid;gap:9px;color:var(--ink);font-size:.88rem;font-weight:700}
.contact-panel textarea{min-height:120px;resize:vertical;padding:13px 14px;border:1px solid var(--line);border-radius:12px;background:var(--bg);color:var(--ink);font:inherit;font-weight:400;line-height:1.55}
.contact-panel textarea:focus{outline:2px solid color-mix(in srgb,var(--accent) 25%,transparent);border-color:var(--accent)}
.contact-panel .account-action{display:flex;align-items:center;justify-content:center;gap:9px;min-height:46px;margin:13px 0 0;border-radius:12px}
.contact-hint{margin:9px 0 0;color:var(--muted);font-size:.76rem;line-height:1.5}
.coffee-feature{display:flex;align-items:center;gap:12px;margin:0 28px;padding:15px;border:1px solid color-mix(in srgb,#bd754e 42%,var(--line));border-radius:15px;background:color-mix(in srgb,#bd754e 9%,var(--sheet));color:var(--ink);text-decoration:none}
.coffee-feature-icon{display:grid;place-items:center;flex:0 0 42px;width:42px;height:42px;border-radius:13px;background:color-mix(in srgb,#bd754e 18%,var(--sheet));font-size:1.25rem}
.coffee-feature>span:nth-child(2){display:grid;gap:3px;min-width:0;flex:1}
.coffee-feature strong{font-size:.88rem}
.coffee-feature small{color:var(--muted);font-size:.78rem}
.coffee-feature-action{color:var(--accent);font-size:.78rem;font-weight:750;text-align:right}
.coffee-feature:hover{border-color:#bd754e;background:color-mix(in srgb,#bd754e 14%,var(--sheet))}
.privacy-summary{display:flex;align-items:flex-start;gap:14px;margin:22px 26px 13px;padding:17px;border:1px solid color-mix(in srgb,var(--accent) 26%,var(--line));border-radius:15px;background:var(--accent-soft)}
.privacy-summary-icon,.privacy-detail-icon{display:grid;place-items:center;flex:0 0 38px;width:38px;height:38px;border-radius:12px;background:var(--sheet);color:var(--accent);font-size:1.15rem}
.privacy-summary strong{display:block;margin:1px 0 5px;font-size:.91rem}
.privacy-summary p,.privacy-detail p,.privacy-actions>p{margin:0;color:var(--muted);font-size:.82rem;line-height:1.6}
.privacy-detail{display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 26px;padding:17px 0;border-bottom:1px solid var(--line)}
.privacy-detail-heading{display:flex;align-items:flex-start;gap:12px;min-width:0}
.privacy-detail-heading>div{min-width:0}
.privacy-detail h3,.privacy-actions h3{margin:2px 0 5px;font-size:.92rem}
.privacy-tag{flex:0 0 auto;padding:6px 8px;border:1px solid var(--line);border-radius:999px;color:var(--muted);font-size:.68rem;white-space:nowrap}
.privacy-actions{margin:22px 26px 0;padding:18px;border:1px solid var(--line);border-radius:15px;background:var(--sheet)}
.privacy-actions>p{margin-bottom:12px}
.privacy-actions .btn{display:flex;align-items:center;justify-content:center;gap:9px;width:100%;min-height:44px;margin:9px 0;border-radius:11px}
.privacy-export{border-color:var(--accent);background:var(--accent);color:#fff}
.privacy-export:hover{filter:brightness(.96)}
.privacy-delete{border:1px solid color-mix(in srgb,#b33b47 40%,var(--line));background:transparent;color:#b33b47}
.privacy-delete:hover{background:color-mix(in srgb,#b33b47 8%,var(--sheet))}
.privacy-actions .privacy-caution{margin:12px 0 0;font-size:.74rem}
.privacy-status{margin:8px 0 0!important}
@media(max-width:900px){
 .site-footer{padding-inline:16px}
 .contact-panel,.privacy-panel{inset:58px 0 78px;width:100%;max-width:none;border-radius:0;border-inline:0;padding-bottom:calc(24px + env(safe-area-inset-bottom))}
 .contact-hero,.privacy-hero{padding:20px 20px 22px}
 .contact-methods{padding:18px 20px 4px}
 .contact-compose{padding:16px 20px 20px}
 .coffee-feature{margin:0 20px}
 .privacy-summary{margin:18px 20px 10px}
 .privacy-detail{margin-inline:20px}
 .privacy-actions{margin:20px}
}
@media(max-width:420px){
 .footer-links{justify-content:center;gap:12px}
 .coffee-link{padding:8px 10px;font-size:.77rem}
 .contact-hero h2,.privacy-hero h2{font-size:2.15rem}
 .contact-methods{gap:8px}
 .privacy-detail{align-items:flex-start;flex-direction:column}
 .privacy-tag{margin-left:50px}
 .coffee-feature{align-items:flex-start;flex-wrap:wrap}
 .coffee-feature-action{width:100%;padding-left:54px;text-align:left}
}


/* Photo reading: preserve the original image and support OCR word taps. */
.image-readable-page{width:100%;margin:0 auto 22px;display:flex;justify-content:center;align-items:flex-start;overflow:hidden;border:1px solid var(--line);border-radius:12px;background:var(--sheet)}
.image-readable-photo{display:block;width:auto;max-width:100%;height:auto;max-height:none;object-fit:contain;user-select:none;-webkit-user-select:none;-webkit-user-drag:none;touch-action:pan-y;cursor:text}
@media(max-width:700px){.image-readable-page{margin-bottom:16px;border-radius:9px}.image-readable-photo{width:100%;height:auto}}


/* Literary quote preview and refined dictionary popup. */
.quote-preview{transform:rotate(.35deg);margin-right:18px}
.quote-sheet{position:relative;padding:clamp(24px,4vw,42px);overflow:hidden;background:linear-gradient(145deg,var(--sheet),color-mix(in srgb,var(--sheet) 91%,var(--marker) 9%))}
.quote-topline{display:flex;align-items:center;gap:9px;margin-bottom:clamp(24px,4vw,38px);color:var(--muted);font:750 .68rem/1 var(--ui);letter-spacing:.15em}
.quote-bookmark{display:grid;place-items:center;width:29px;height:29px;border:1px solid color-mix(in srgb,var(--marker) 65%,var(--line));border-radius:9px;color:var(--accent);font-size:1rem}
.quote-text{margin:0!important;font:400 clamp(1.35rem,2.1vw,1.9rem)/1.65 var(--reader-font)!important;letter-spacing:-.025em}
.quote-text .demo-word{padding:0 .1em;border-radius:4px;background:color-mix(in srgb,var(--marker) 58%,transparent);box-decoration-break:clone;-webkit-box-decoration-break:clone}
.quote-attribution{display:flex;align-items:center;gap:12px;margin-top:clamp(24px,4vw,38px)}
.quote-rule{width:28px;height:2px;flex:0 0 28px;border-radius:2px;background:var(--marker)}
.quote-attribution strong,.quote-attribution small{display:block}
.quote-attribution strong{font:600 .88rem var(--ui);color:var(--ink)}
.quote-attribution small{margin-top:4px;color:var(--muted);font-size:.78rem}
.quote-preview .demo-definition{width:min(330px,91%);margin:-13px -4px 0 auto;padding:16px;gap:11px;border:1px solid rgba(255,255,255,.13);border-radius:16px;background:linear-gradient(145deg,#1b2a40,#111b2b);box-shadow:0 22px 55px -25px rgba(0,0,0,.6);transform:rotate(-.25deg)}
.demo-popup-head{display:flex;align-items:center;gap:10px}
.demo-popup-icon{display:grid;place-items:center;width:38px;height:38px;flex:0 0 38px;border-radius:11px;background:rgba(220,184,117,.16);color:#f0d5a0;font:600 1rem var(--display)}
.demo-popup-word{flex:1;color:#fff;font:600 1.06rem var(--ui)}
.demo-popup-word small{display:block;margin-top:3px;color:#aab8ca;font:400 .72rem var(--ui)}
.demo-popup-close{display:grid;place-items:center;width:29px;height:29px;border-radius:50%;background:rgba(255,255,255,.08);color:#c8d2df;font-size:1.2rem}
.demo-popup-label,.demo-popup-context>span{color:#c5a66f;font:750 .62rem var(--ui);letter-spacing:.13em}
.quote-preview .demo-definition>strong{color:#f1f4f8;font:400 .88rem/1.55 var(--ui)}
.demo-popup-context{padding:11px 12px;border:1px solid rgba(255,255,255,.08);border-radius:10px;background:rgba(255,255,255,.045)}
.demo-popup-context p{margin:5px 0 0;color:#cbd5e2;font:400 .8rem/1.5 var(--ui)}
.demo-popup-actions{display:flex;gap:8px;flex-wrap:wrap}
.demo-popup-actions span{padding:8px 10px;border:1px solid rgba(255,255,255,.14);border-radius:9px;color:#e5ebf4;font:600 .72rem var(--ui)}
.quote-preview figcaption{margin-top:17px}
#popup{width:min(370px,calc(100vw - 24px));padding:22px 18px 18px;border:1px solid rgba(255,255,255,.12);border-radius:18px;background:linear-gradient(150deg,#1c2b41 0%,#111b2b 100%);box-shadow:0 24px 70px -24px rgba(0,0,0,.68),0 3px 12px rgba(0,0,0,.15);color:#f6f8fc;font:.94rem/1.6 var(--ui);backdrop-filter:blur(18px);animation:dictionary-enter .16s ease-out}
#popup .close{top:12px;right:12px;display:grid;place-items:center;width:34px;height:34px;border:1px solid rgba(255,255,255,.1);background:rgba(255,255,255,.06);color:#e5ebf5;font-size:1.25rem;transition:background .15s,transform .15s}
#popup .close:hover{background:rgba(255,255,255,.13);transform:scale(1.04)}
#popup h2{padding-right:38px;color:#fff;font:600 1.65rem/1.2 var(--display);letter-spacing:-.025em}
#popup .ph{margin:6px 0 8px;color:#b9c6d8;font:400 .82rem var(--ui)}
#popup .dictionary-source{display:inline-flex;align-items:center;max-width:100%;margin:0 0 8px;padding:4px 8px;border:1px solid rgba(255,255,255,.1);border-radius:999px;background:rgba(255,255,255,.05);color:#c8d5e5;font-size:.68rem}
#popup .pos{margin:14px 0 4px;color:#e2c48b;font:700 .68rem var(--ui);letter-spacing:.1em;text-transform:uppercase}
#popup .def{color:#f0f3f8;font-size:.92rem;line-height:1.65}
#popup .ex{margin:10px 0 0;padding:10px 12px;border-left:2px solid #c8a76e;border-radius:0 8px 8px 0;background:rgba(255,255,255,.055);color:#cbd6e4;font-size:.83rem;line-height:1.55}
#popup .note,#popup .translation-result{color:#c4d0df;font-size:.82rem}
#popup .word-actions{display:flex;gap:7px;flex-wrap:wrap;margin:14px 0;padding-bottom:13px;border-bottom:1px solid rgba(255,255,255,.1)}
#popup .word-actions .btn{display:inline-flex;align-items:center;justify-content:center;min-height:37px;padding:8px 11px;border:1px solid rgba(255,255,255,.13);border-radius:10px;background:rgba(255,255,255,.055);color:#eef3fa;font-size:.76rem;font-weight:650;transition:background .15s,border-color .15s,transform .15s}
#popup .word-actions .btn:hover{transform:translateY(-1px);border-color:rgba(226,196,139,.55);background:rgba(226,196,139,.12)}
#popup .word-actions .btn:focus-visible,#popup .close:focus-visible{outline:2px solid #e2c48b;outline-offset:2px}
#popup .translation-result{padding:10px 12px;border-radius:10px;background:rgba(255,255,255,.06)}
#popup .synonyms,#popup .antonyms{margin-top:10px;color:#d5dfeb;font-size:.82rem}
@keyframes dictionary-enter{from{opacity:0;transform:translateY(5px) scale(.985)}to{opacity:1;transform:translateY(0) scale(1)}}
@media(prefers-reduced-motion:reduce){#popup{animation:none}#popup .close,#popup .word-actions .btn{transition:none}}
@media(max-width:640px){.quote-preview{margin:0;transform:none}.quote-sheet{padding:24px}.quote-preview .demo-definition{width:calc(100% - 8px);margin:-8px 4px 0 4px;transform:none}.quote-text{font-size:1.3rem!important;line-height:1.7!important}#popup{width:auto;max-height:min(72dvh,620px);overflow:auto;padding:20px 16px calc(18px + env(safe-area-inset-bottom));border-radius:18px}#popup .word-actions .btn{flex:1 1 calc(50% - 7px);min-height:42px}}


/* Reliable avatar fallback, including signed-out and blocked-photo states. */
.profile-avatar{position:relative;display:grid;place-items:center;flex:0 0 34px;overflow:hidden;background:var(--accent-soft);border:1px solid color-mix(in srgb,var(--accent) 22%,var(--line));color:var(--accent)}
.profile-avatar::before{content:"";position:absolute;top:6px;width:10px;height:10px;border-radius:50%;background:currentColor;opacity:.9}
.profile-avatar::after{content:"";position:absolute;bottom:4px;width:21px;height:12px;border-radius:12px 12px 7px 7px;background:currentColor;opacity:.9}
.profile-avatar:has(img:not([hidden]))::before,.profile-avatar:has(img:not([hidden]))::after{display:none}
.profile-avatar img{position:relative;z-index:1;display:block;width:100%;height:100%;border-radius:50%;object-fit:cover}
.profile-avatar img[hidden]{display:none}
.account-trigger{gap:8px}
.account-trigger img[hidden]{display:none}
@media(max-width:900px){.toolbar-menu{z-index:100;isolation:isolate;box-shadow:0 18px 48px rgba(12,20,32,.24)}.toolbar-more{z-index:100}.toolbar-more[open]{z-index:100}}
/* First-visit welcome: product explanation first, account remains optional. */
.welcome-card{width:min(480px,100%);padding:clamp(24px,5vw,36px);max-height:min(92svh,760px);overflow:auto}
.welcome-brand-mark{display:grid;place-items:center;width:48px;height:48px;margin:0 0 22px;border-radius:15px;background:var(--accent);color:var(--marker);font:700 1.15rem var(--display);box-shadow:0 8px 20px color-mix(in srgb,var(--accent) 22%,transparent)}
.welcome-card .eyebrow{margin:0 0 10px;font-size:.7rem;letter-spacing:.16em}
.welcome-card h2{max-width:12ch;margin:0 0 14px;font-size:clamp(1.9rem,6vw,2.45rem);line-height:1.06}
.welcome-description{margin:0;color:var(--muted);font-size:.96rem;line-height:1.7}
.welcome-feature-list{display:grid;gap:10px;margin:20px 0;padding:15px;border:1px solid var(--line);border-radius:13px;background:var(--bg)}
.welcome-feature-list span{display:flex;align-items:center;gap:10px;font-size:.86rem}
.welcome-feature-list b{display:grid;place-items:center;width:27px;height:27px;flex:0 0 27px;border-radius:8px;background:var(--accent-soft);color:var(--accent);font-size:1rem}
.welcome-privacy-note{margin:0 0 10px;color:var(--muted);font-size:.78rem;line-height:1.55}
.welcome-card .account-action{min-height:48px;margin:8px 0 2px}
.welcome-continue{display:block;width:100%;min-height:44px;margin-top:6px;text-align:center}
@media(max-width:520px){.welcome-card{padding:24px 20px;border-radius:22px}.welcome-brand-mark{margin-bottom:17px}.welcome-feature-list{gap:8px;margin:16px 0;padding:12px}.welcome-description{font-size:.92rem}.welcome-card .account-action{min-height:48px}}

/* Keep reading nudges compact and only visible inside an opened reader. */
.scroll-nav{gap:7px;justify-content:flex-start}
#reader-wrap[hidden] .scroll-nav,
body[data-route="home"] .scroll-nav,
body[data-route="library"] .scroll-nav,
body[data-route="notes"] .scroll-nav{display:none!important}
#reader-wrap:not([hidden]) .scroll-nav{display:flex}

/* Keep the scroll pair vertically centered on every screen size. */
.scroll-nav{top:50%!important;bottom:auto!important;transform:translateY(-50%)!important;justify-content:center}
@media(max-width:700px){.toolbar-menu[data-portaled="true"]{display:grid;min-width:190px;width:min(280px,calc(100vw - 20px));max-height:60vh;overflow:auto;padding:10px;border:1px solid var(--line);border-radius:12px;background:var(--sheet);box-shadow:var(--shadow)}}


/* ---------- UI consistency pass: library, reader, notes and overlays ---------- */
:root{
  --ui-radius-sm:10px;
  --ui-radius-md:15px;
  --ui-radius-lg:22px;
  --ui-focus-ring:0 0 0 3px color-mix(in srgb,var(--accent) 24%,transparent);
}
:where(button,input,textarea,select,summary,a):focus-visible{
  outline:2px solid var(--accent);
  outline-offset:3px;
}
:where(button,input,textarea,select){font:inherit}
:where(button,.btn,.icon-btn){-webkit-tap-highlight-color:transparent}
.btn,.icon-btn{
  transition:background-color .16s,border-color .16s,color .16s,box-shadow .16s,transform .16s;
}
.btn:active:not(:disabled),.icon-btn:active:not(:disabled){transform:translateY(1px)}
button:disabled,.btn:disabled{opacity:.48;cursor:not-allowed}
input,textarea,select{
  max-width:100%;
}
input:not([type=checkbox]):not([type=radio]):focus,
textarea:focus,select:focus{
  border-color:var(--accent);
  outline:none;
  box-shadow:var(--ui-focus-ring);
}
.section-heading{gap:18px}
.section-heading>div{min-width:0}
.section-heading h2{line-height:1.12}
.library-grid{align-items:stretch}
.book-card{
  position:relative;
  gap:12px;
  padding:17px;
  border-radius:var(--ui-radius-md);
  transition:border-color .18s,background-color .18s,transform .18s,box-shadow .18s;
}
.book-card:hover{
  border-color:color-mix(in srgb,var(--accent) 42%,var(--line));
  box-shadow:0 10px 26px color-mix(in srgb,var(--ink) 7%,transparent);
  transform:translateY(-2px);
}
.book-card strong{line-height:1.35}
.book-card .btn{min-height:42px}
.library-panel,.notes-panel,.vocab-panel,.stats-panel,.learning-panel,.account-panel,.shortcuts-panel{
  padding:22px clamp(16px,2.4vw,28px) calc(30px + env(safe-area-inset-bottom));
}
.panel .contents-head{
  position:sticky;
  z-index:2;
  top:-22px;
  margin:0 -2px;
  padding:18px 2px 15px;
  background:var(--sheet);
  border-bottom:1px solid var(--line);
}
.panel .contents-head h2{
  min-width:0;
  font-size:clamp(1.3rem,3vw,1.65rem);
  line-height:1.15;
}
.library-search input,.notes-panel input[type=search],.panel input[type=search]{
  width:100%;
  min-height:44px;
  padding:10px 13px;
  border:1px solid var(--line);
  border-radius:12px;
  background:var(--bg);
  color:var(--ink);
}
.library-row,.vocab-row,.notes-panel .saved-note-row{
  gap:12px;
  padding:15px 0;
}
.library-row>*{min-width:0}
.library-row progress{flex:0 0 84px;max-width:100%}
.notes-panel .saved-note-row{
  margin:0;
  border-bottom:1px solid var(--line);
}
.notes-panel .saved-note-content p{
  line-height:1.6;
}
.notes-panel .saved-note-actions .btn{
  min-height:40px;
  border-radius:10px;
}
#my-notes-list:empty::before{
  content:"Your saved notes and highlights will appear here.";
  display:block;
  padding:28px 16px;
  border:1px dashed var(--line);
  border-radius:var(--ui-radius-md);
  color:var(--muted);
  text-align:center;
  line-height:1.6;
}
.reader-wrap{min-width:0}
.bar{
  gap:8px;
  border-radius:var(--ui-radius-md);
}
.bar-primary .btn,.bar .btn,.toolbar-more summary{
  min-height:40px;
  border-radius:10px;
}
.doc-head{min-width:0}
#doc-meta{line-height:1.5}
.reader-tools .btn{min-height:40px;border-radius:10px}
#reader{
  min-width:0;
  overflow-wrap:anywhere;
}
#reader .page.readable{
  scroll-margin-top:125px;
}
#reader .page.readable p{
  max-width:100%;
}
.pdf-page{
  overflow:hidden;
  border-radius:var(--ui-radius-md);
}
#popup{
  max-width:calc(100vw - 20px);
  max-height:min(76dvh,680px);
  overflow:auto;
  overscroll-behavior:contain;
  scrollbar-width:thin;
  -webkit-overflow-scrolling:touch;
}
#popup .word-actions .btn{min-height:40px}
#popup .close{position:sticky;float:right;top:0;margin:-7px -8px 0 8px}
.toast{
  max-width:min(440px,calc(100vw - 28px));
  overflow-wrap:anywhere;
}
@media(max-width:900px){
  .section-heading{align-items:flex-start}
  .library-grid{gap:12px}
  .reader-wrap{min-width:0}
  .bar{scrollbar-width:none}
  .bar::-webkit-scrollbar{display:none}
  .panel{
    inset:max(54px,env(safe-area-inset-top)) 0 calc(72px + env(safe-area-inset-bottom)) 0;
    width:100%;
    max-width:none;
    border-inline:0;
    border-top:1px solid var(--line);
    border-radius:18px 18px 0 0;
    box-shadow:0 -12px 36px color-mix(in srgb,var(--ink) 12%,transparent);
  }
  .panel .contents-head{top:-22px}
  .notes-panel .saved-note-actions{flex-direction:row;flex-wrap:wrap}
  .notes-panel .saved-note-actions .btn{flex:1 1 auto}
}
@media(max-width:560px){
  .hero h1{font-size:clamp(2.55rem,12vw,3.5rem)}
  .section-heading{flex-direction:column;align-items:stretch}
  .section-heading>.btn{width:100%}
  .library-grid{grid-template-columns:1fr}
  .book-card{min-height:0;padding:15px}
  .library-subheading{align-items:center;gap:10px}
  .library-subheading select{min-width:0;max-width:58%}
  .reader-wrap{padding-inline:8px}
  .bar{border-radius:12px;padding:6px}
  .bar-primary .btn,.bar .btn,.toolbar-more summary{min-height:42px}
  .bar-end{gap:6px}
  .page-jump-inline input{width:52px}
  .doc-title{font-size:clamp(1.8rem,9vw,2.5rem)}
  .pdf-page{padding:8px;border-radius:10px}
  .notes-panel .saved-note-row{display:grid;grid-template-columns:minmax(0,1fr);gap:10px}
  .notes-panel .saved-note-actions{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}
  .notes-panel .saved-note-actions .btn{width:100%;padding-inline:8px}
  #popup{width:auto;max-width:calc(100vw - 20px);max-height:68dvh;padding:18px 14px calc(16px + env(safe-area-inset-bottom))}
  #popup h2{font-size:1.45rem}
  #popup .word-actions .btn{flex:1 1 calc(50% - 7px)}
  .panel .contents-head{gap:8px}
  .panel .contents-head .btn{min-height:40px}
}
@media(prefers-reduced-motion:reduce){
  .btn,.icon-btn,.book-card{transition:none}
  .book-card:hover{transform:none}
}


/* Mobile accessibility fixes */
@media (max-width: 900px) {
  .reader-wrap { margin-top: 0; }
  .bar { margin-top: 0; }
  .toolbar-menu[data-portaled="true"] {
    position: fixed !important;
    top: auto;
    right: 10px;
    bottom: auto;
    left: auto;
    width: min(280px, calc(100vw - 20px));
    max-height: min(60dvh, calc(100dvh - 150px));
    overflow-y: auto;
    overscroll-behavior: contain;
    z-index: 200;
  }
  .scroll-nav { bottom: calc(94px + env(safe-area-inset-bottom)) !important; }
  .pdf-controls #pdf-fullscreen { display: inline-flex !important; }
  .bar { gap: 6px; }
  .bar-end { flex: 0 0 auto; min-width: 0; }
  .bar-primary { flex: 0 0 auto; }
  .page-jump-inline { display: inline-flex; }
  .toolbar-more { margin-left: 0; }
  body.focus-mode .focus-exit-floating { display: inline-flex; }
}
.focus-exit-floating {
  display: none;
  position: fixed;
  z-index: 220;
  top: calc(12px + env(safe-area-inset-top));
  right: 12px;
  min-height: 42px;
  padding: 8px 14px;
  border: 1px solid var(--line);
  border-radius: 999px;
  background: var(--sheet);
  color: var(--ink);
  box-shadow: var(--shadow);
}
body.focus-mode .focus-exit-floating { display: inline-flex; }
body.focus-mode .bar { top: 8px; }
@media (max-width: 900px) {
  .reading-timer { display: none; }
  .reader-wrap { padding-top: 0; }
  .top { margin-bottom: 0; }
  .bar { top: 58px; }
}
.saved-note-row { align-items: flex-start; }
.saved-note-content { min-width: 0; }
.saved-note-text { white-space: pre-wrap; overflow-wrap: anywhere; }
.saved-note-actions { display: flex; flex-wrap: wrap; gap: 6px; }

@media (max-width: 700px) {
  .scroll-nav { top: auto !important; bottom: calc(98px + env(safe-area-inset-bottom)) !important; transform: none !important; }
  .bar { overflow: visible; flex-wrap: nowrap; }
  .bar-primary { min-width: 0; max-width: calc(100vw - 175px); overflow-x: auto; scrollbar-width: none; }
  .bar-primary::-webkit-scrollbar { display: none; }
  .bar-end { position: sticky; right: 0; margin-left: auto; z-index: 2; background: var(--sheet); border-radius: 10px; box-shadow: -8px 0 10px -10px var(--ink); }
  .page-jump-inline input { width: 44px; }
  .toolbar-more summary { padding-inline: 10px; }
  .reader-wrap { margin-block-start: 0; }
}
.saved-bookmark-row { display: flex; align-items: center; gap: 6px; border-bottom: 1px solid var(--line); }
.saved-bookmark-row .saved-item { min-width: 0; flex: 1; }

.saved-note-group-title { margin: 18px 0 6px; padding-bottom: 6px; border-bottom: 1px solid var(--line); font: 600 1rem var(--ui); }
@media (max-width: 700px) {
  .bar { flex-wrap: wrap; overflow: visible; }
  .bar-primary { width: 100%; max-width: 100%; overflow-x: auto; }
  .bar-end { width: 100%; display: flex; justify-content: flex-end; gap: 6px; }
  .reading-timer { display: flex; align-items: center; gap: 4px; margin-right: auto; }
  .reading-timer #timer-state, .reading-timer #timer-reset { display: none; }
  .reading-timer output { font-size: .78rem; font-variant-numeric: tabular-nums; }
  .reading-timer .icon-btn { min-width: 36px; min-height: 36px; padding: 4px 7px; font-size: .78rem; }
  .page-jump-inline { font-size: .8rem; }
  .toolbar-more summary { min-height: 38px; }
}

.saved-note-content[role="button"]{cursor:pointer;border-radius:8px}.saved-note-content[role="button"]:focus-visible{outline:2px solid var(--accent);outline-offset:3px}.saved-note-content[role="button"]:hover{background:var(--accent-soft)}


/* The main navigation already exists in the left sidebar and mobile nav. */
.top .nav-links { display: none !important; }


/* Prevent PDF controls and page previews from stacking over the document in fullscreen. */
#pdf-pages:fullscreen {
  display: flex !important;
  flex-direction: column;
  align-items: center;
  justify-content: flex-start;
  gap: 18px;
  overflow: auto;
  padding: max(12px, env(safe-area-inset-top)) 12px max(24px, env(safe-area-inset-bottom));
  height: 100dvh;
  max-height: 100dvh;
}
#pdf-pages:fullscreen .pdf-toolbar,
#pdf-pages:fullscreen .pdf-thumbs,
#pdf-pages:fullscreen .pdf-page {
  position: relative !important;
  inset: auto !important;
  top: auto !important;
  flex: 0 0 auto;
  transform: none;
}
#pdf-pages:fullscreen .pdf-toolbar,
#pdf-pages:fullscreen .pdf-thumbs {
  width: min(100%, 1100px);
  z-index: 1;
}
#pdf-pages:fullscreen .pdf-page {
  width: min(100%, 1100px);
  min-height: 0;
  margin: 0 auto;
}
#pdf-pages:fullscreen .pdf-page canvas {
  display: block;
  max-width: 100%;
  height: auto !important;
}


/* Keep the Library panel clear of the fixed sidebar on desktop. */
.library-panel { left: 232px; right: 0; width: auto; max-width: none; min-width: 0; box-sizing: border-box; }
.library-panel > * { min-width: 0; max-width: 100%; }
.library-panel .contents-head { gap: 12px; flex-wrap: wrap; }
.library-panel .contents-head h2 { min-width: 0; overflow-wrap: anywhere; }
@media (max-width: 900px) { .library-panel { left: 0; right: 0; width: auto; } }
@media (max-width: 700px) { .library-panel { left: 10px; right: 10px; width: auto; max-width: none; } }


/* Keep sidebar navigation and Sign in separately visible on shorter screens. */
.app-sidebar {
  height: 100vh;
  height: 100dvh;
  min-height: 0;
  box-sizing: border-box;
  overflow: hidden;
}
.sidebar-nav {
  flex: 1 1 auto;
  min-height: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  align-content: start;
}
.sidebar-bottom {
  flex: 0 0 auto;
  margin-top: auto;
  padding-top: 12px;
  background: var(--sheet);
  position: relative;
  z-index: 2;
}
.profile-entry { min-height: 52px; }
@media (max-height: 560px) {
  .app-sidebar { padding-top: 12px; padding-bottom: 12px; }
  .sidebar-caption { margin-bottom: 10px; }
  .shell-nav { min-height: 38px; padding-block: 6px; }
}


/* Library and My notes are full pages: sit beside the sidebar and read as one flat surface (no box inside a box). */
.panel.route-page { left: auto; right: auto; z-index: 1; box-sizing: border-box; }
@media (min-width: 901px) {
  .panel.route-page {
    width: auto;
    max-width: 1060px;
    margin: 28px 32px 40px max(264px, calc(232px + (100% - 232px - 1060px) / 2));
    padding: 8px 0 24px;
    background: transparent;
  }
}
.panel.route-page .contents-head {
  position: static;
  margin: 0 0 18px;
  padding: 4px 0 16px;
  background: transparent;
  border-bottom: 1px solid var(--line);
}
@media (max-width: 900px) {
  .panel.route-page { margin: 0; padding-top: 10px; }
  .panel.route-page .contents-head { padding-top: 6px; }
}


/* Contents opens beside the desktop sidebar, never over its tabs or Sign in. */
@media (min-width: 901px) {
  .contents { left: 232px; }
  .contents:not(.open) { transform: translateX(calc(-100% - 260px)); }
}

/* Phone panels stop above the bottom navigation instead of tucking 3px under it. */
@media (max-width: 900px) {
  .panel:not(.route-page) { bottom: calc(80px + env(safe-area-inset-bottom)); }
}


/* Phones: keep the reading area clear. Secondary toolbars scroll away; the main toolbar slides away while reading down and returns on scroll up. */
@media (max-width: 700px) {
  #pdf-toolbar.pdf-toolbar, #text-view-controls.text-view-controls { position: static; }
  .bar { transition: transform .22s ease; }
  body.bar-away .bar { transform: translateY(calc(-100% - 72px)); pointer-events: none; }
  body.bar-away .toolbar-more[open] .toolbar-menu { display: none; }
}
@media (prefers-reduced-motion: reduce) { .bar { transition: none; } }


/* Optional AI explanation inside the word popup (the popup is dark in every theme) */
.ai-explain { margin: 8px 0 6px; padding: 10px 12px; border: 1px solid rgba(255,255,255,.14); border-left: 3px solid var(--accent); border-radius: 10px; background: rgba(255,255,255,.07); color: #eef3f9; overflow-wrap: anywhere; }
.ai-explain[hidden] { display: none; }
#popup .ai-explain-text { margin: 0; color: #eef3f9; font-size: .92rem; white-space: pre-line; line-height: 1.5; }
#popup .ai-explain-note { display: block; margin-top: 6px; color: #c4d0df; font-size: .78rem; line-height: 1.35; }


/* ===== Glass surfaces: one consistent frosted-glass system (header, sidebar, toolbars, nav, drawers, cards) ===== */
:root {
  --glass: color-mix(in srgb, var(--sheet) 80%, transparent);
  --glass-soft: color-mix(in srgb, var(--sheet) 66%, transparent);
  --glass-strong: color-mix(in srgb, var(--sheet) 84%, transparent);
  --glass-edge: color-mix(in srgb, #ffffff 58%, var(--line));
  --glass-shine: inset 0 1px 0 rgba(255, 255, 255, .55);
  --glass-shadow: 0 10px 34px rgba(31, 45, 40, .10);
  --glass-blur: blur(18px) saturate(1.5);
}
[data-theme=dark] {
  --glass: color-mix(in srgb, var(--sheet) 76%, transparent);
  --glass-soft: color-mix(in srgb, var(--sheet) 60%, transparent);
  --glass-strong: color-mix(in srgb, var(--sheet) 84%, transparent);
  --glass-edge: rgba(255, 255, 255, .11);
  --glass-shine: inset 0 1px 0 rgba(255, 255, 255, .07);
  --glass-shadow: 0 12px 38px rgba(0, 0, 0, .38);
}
/* Soft colour behind the glass so there is something to frost. Kept faint so reading stays calm. */
body::before {
  content: "";
  position: fixed;
  inset: 0;
  z-index: -1;
  pointer-events: none;
  background:
    radial-gradient(60vmax 50vmax at 6% -4%, color-mix(in srgb, var(--accent) 17%, transparent), transparent 62%),
    radial-gradient(50vmax 44vmax at 100% 16%, color-mix(in srgb, var(--marker) 20%, transparent), transparent 60%),
    radial-gradient(56vmax 50vmax at 72% 108%, color-mix(in srgb, var(--accent) 13%, transparent), transparent 62%);
}
body .top,
body .app-sidebar,
body .bar,
body .mobile-nav,
body .global-reader-controls,
body #pdf-toolbar.pdf-toolbar,
body #text-view-controls.text-view-controls {
  background: var(--glass);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-color: var(--glass-edge);
  box-shadow: var(--glass-shine), var(--glass-shadow);
}
body .top { box-shadow: var(--glass-shine); }
body .app-sidebar { background: var(--glass-soft); }
body .app-sidebar { box-shadow: var(--glass-shine), 6px 0 30px rgba(31, 45, 40, .05); }
[data-theme=dark] body .app-sidebar { box-shadow: var(--glass-shine), 6px 0 30px rgba(0, 0, 0, .25); }
body .contents,
body .panel:not(.route-page) {
  background: var(--glass-strong);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-color: var(--glass-edge);
}
body .bar .btn,
body .pdf-toolbar .btn,
body .text-view-controls .btn,
body .mobile-nav .shell-nav:not(.active) {
  background: color-mix(in srgb, var(--sheet) 55%, transparent);
  border-color: var(--glass-edge);
}
body .scroll-nav .icon-btn {
  background: var(--glass);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-color: var(--glass-edge);
  box-shadow: var(--glass-shine), var(--glass-shadow);
}
body .toast {
  background: rgba(24, 38, 36, .82);
  -webkit-backdrop-filter: blur(14px) saturate(1.4);
  backdrop-filter: blur(14px) saturate(1.4);
  border: 1px solid rgba(255, 255, 255, .14);
}
/* Cards on the home page and in the library read as glass too. */
body .paste-reader,
body .library-grid > *,
body .continue-card,
body .steps li {
  background: var(--glass-strong);
  -webkit-backdrop-filter: var(--glass-blur);
  backdrop-filter: var(--glass-blur);
  border-color: var(--glass-edge);
}
/* Secondary toolbars scroll away on every screen size so they never ghost through the main bar. */
body #pdf-toolbar.pdf-toolbar,
body #text-view-controls.text-view-controls { position: static; }
/* Desktop: the main bar sits flush under the header, so scrolled text never shows in a gap between them. */
@media (min-width: 901px) { body .bar { top: 64px; } }
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
  :root, [data-theme=dark] { --glass: var(--sheet); --glass-soft: var(--sheet); --glass-strong: var(--sheet); }
}
@media (prefers-reduced-transparency: reduce) {
  :root, [data-theme=dark] { --glass: var(--sheet); --glass-soft: var(--sheet); --glass-strong: var(--sheet); }
  body::before { display: none; }
}
body .sidebar-bottom { background: transparent; }

/* PDF zoom: a page zoomed past the screen width scrolls sideways instead of being squashed (the canvas was clamped to 100% width while its height kept growing). */
body .pdf-page { overflow-x: auto; overflow-y: hidden; }
body .pdf-page canvas { max-width: none; }

/* The PDF text layer must always match its (possibly zoomed, side-scrolling) canvas; on phones a max-width clamp made it narrower than the page. */
body .pdf-page .textLayer { max-width: none; }

/* Glass performance: cards sit on a plain gradient, so they keep the translucent look without a blur pass; phones use a lighter blur. */
body .paste-reader,
body .library-grid > *,
body .continue-card,
body .steps li { -webkit-backdrop-filter: none; backdrop-filter: none; }
@media (max-width: 700px) { :root { --glass-blur: blur(10px) saturate(1.3); } }


/* Ask AI about a selected phrase or sentence in the reader. */
.ai-passage-toggle {
  background: linear-gradient(135deg, rgba(44,91,77,.14), rgba(217,166,95,.12));
  border-color: color-mix(in srgb, var(--accent) 24%, var(--glass-border));
}
.ai-passage-panel {
  position: sticky;
  top: 116px;
  z-index: 36;
  display: grid;
  grid-template-columns: minmax(0, 1fr);
  gap: 10px;
  margin: 0 0 16px;
  padding: clamp(16px, 2.4vw, 24px);
  border: 1px solid var(--glass-border);
  border-radius: 22px;
  background:
    radial-gradient(ellipse at 100% 0%, rgba(217,166,95,.13), transparent 38%),
    var(--glass-surface-strong);
  box-shadow: var(--ui-shadow-float, 0 18px 48px rgba(32,48,42,.12));
  -webkit-backdrop-filter: blur(var(--glass-blur, 18px)) saturate(145%);
  backdrop-filter: blur(var(--glass-blur, 18px)) saturate(145%);
}
.ai-passage-panel[hidden] { display: none !important; }
.ai-passage-heading {
  display: flex;
  align-items: flex-start;
  justify-content: space-between;
  gap: 16px;
}
.ai-passage-heading .eyebrow { margin: 0 0 5px; }
.ai-passage-heading h3 {
  margin: 0 0 6px;
  color: var(--ink);
  font-family: var(--display);
  font-size: clamp(1.2rem, 2vw, 1.55rem);
  letter-spacing: -.035em;
}
.ai-passage-heading p:not(.eyebrow) {
  margin: 0;
  color: var(--muted);
  line-height: 1.55;
  font-size: .92rem;
}
.ai-passage-panel label {
  color: var(--muted);
  font-size: .84rem;
  font-weight: 650;
}
.ai-passage-panel label span { font-weight: 400; }
.ai-passage-panel textarea,
.ai-passage-panel input {
  width: 100%;
  min-width: 0;
  background: var(--glass-surface);
  border: 1px solid var(--line);
  border-radius: 14px;
  color: var(--ink);
  padding: 12px 14px;
}
.ai-passage-panel textarea {
  min-height: 92px;
  resize: vertical;
  line-height: 1.65;
  font-family: var(--reader-font);
}
.ai-passage-panel textarea::placeholder,
.ai-passage-panel input::placeholder { color: var(--muted); opacity: .8; }
.ai-passage-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 12px;
}
.ai-passage-footer small { color: var(--muted); font-variant-numeric: tabular-nums; }
.ai-passage-answer {
  padding: 16px 18px;
  border: 1px solid color-mix(in srgb, var(--accent) 18%, var(--glass-border));
  border-radius: 16px;
  background: color-mix(in srgb, var(--accent-soft) 65%, transparent);
}
.ai-passage-answer[hidden] { display: none !important; }
.ai-passage-response {
  margin: 0;
  color: var(--ink);
  line-height: 1.8;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}
.ai-passage-answer small {
  display: block;
  margin-top: 12px;
  color: var(--muted);
  line-height: 1.55;
}
@media (max-width: 700px) {
  .ai-passage-panel { top: 104px; padding: 15px; border-radius: 18px; }
  .ai-passage-footer { align-items: stretch; flex-direction: column; }
  .ai-passage-footer .btn { width: 100%; }
}


/* ===== Ask AI: premium reading companion refinement ===== */
#ask-ai-toggle.ai-passage-toggle {
  position: relative;
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 8px;
  isolation: isolate;
  overflow: hidden;
  border: 1px solid color-mix(in srgb, var(--accent) 38%, var(--line));
  background: linear-gradient(135deg,
    color-mix(in srgb, var(--accent) 18%, var(--sheet)),
    color-mix(in srgb, #d9a65f 17%, var(--sheet)));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.35), 0 3px 12px rgba(35,65,54,.08);
  font-weight: 750;
  letter-spacing: -.015em;
  transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease;
}
#ask-ai-toggle.ai-passage-toggle::before {
  content: "✦";
  display: inline-grid;
  place-items: center;
  width: 20px;
  height: 20px;
  border-radius: 7px;
  color: #fff;
  background: linear-gradient(145deg, #467b68, #234c40);
  font-size: 12px;
  box-shadow: 0 2px 6px rgba(26,65,51,.2);
}
#ask-ai-toggle.ai-passage-toggle:hover {
  transform: translateY(-1px);
  border-color: color-mix(in srgb, var(--accent) 58%, var(--line));
  box-shadow: inset 0 1px 0 rgba(255,255,255,.45), 0 7px 18px rgba(35,65,54,.14);
}
#ask-ai-toggle.ai-passage-toggle:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--accent) 42%, transparent);
  outline-offset: 3px;
}
[data-theme="dark"] #ask-ai-toggle.ai-passage-toggle {
  background: linear-gradient(135deg, rgba(100,157,133,.2), rgba(217,166,95,.13));
  border-color: rgba(145,190,168,.3);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.07), 0 4px 16px rgba(0,0,0,.18);
}

#ai-passage-panel.ai-passage-panel {
  --ai-forest: #244b3f;
  --ai-gold: #d9a65f;
  position: relative;
  isolation: isolate;
  overflow: hidden;
  gap: 14px;
  margin: 12px 0 22px;
  padding: clamp(18px, 2.8vw, 30px);
  border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line));
  border-radius: 26px;
  background:
    radial-gradient(ellipse at 100% 0%, rgba(217,166,95,.17), transparent 34%),
    radial-gradient(ellipse at 0% 100%, color-mix(in srgb, var(--accent) 11%, transparent), transparent 42%),
    var(--glass-strong, var(--sheet));
  box-shadow: 0 22px 60px rgba(31,52,43,.12), inset 0 1px 0 rgba(255,255,255,.48);
  -webkit-backdrop-filter: blur(22px) saturate(145%);
  backdrop-filter: blur(22px) saturate(145%);
}
#ai-passage-panel.ai-passage-panel::before {
  content: "";
  position: absolute;
  z-index: -1;
  top: 0;
  left: clamp(18px, 2.8vw, 30px);
  right: clamp(18px, 2.8vw, 30px);
  height: 2px;
  border-radius: 0 0 4px 4px;
  background: linear-gradient(90deg, transparent, var(--accent), var(--ai-gold), transparent);
  opacity: .8;
}
[data-theme="dark"] #ai-passage-panel.ai-passage-panel {
  border-color: rgba(151,190,169,.2);
  background:
    radial-gradient(ellipse at 100% 0%, rgba(217,166,95,.12), transparent 38%),
    radial-gradient(ellipse at 0% 100%, rgba(77,133,109,.12), transparent 45%),
    var(--glass-strong, var(--sheet));
  box-shadow: 0 24px 65px rgba(0,0,0,.28), inset 0 1px 0 rgba(255,255,255,.06);
}
#ai-passage-panel .ai-passage-heading {
  align-items: flex-start;
  gap: 18px;
  padding-bottom: 17px;
  border-bottom: 1px solid color-mix(in srgb, var(--line) 80%, transparent);
}
#ai-passage-panel .ai-passage-heading > div { min-width: 0; }
#ai-passage-panel .ai-passage-heading .eyebrow {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  margin: 0 0 10px;
  padding: 6px 10px;
  border: 1px solid color-mix(in srgb, var(--accent) 22%, var(--line));
  border-radius: 999px;
  background: color-mix(in srgb, var(--accent) 8%, transparent);
  color: var(--accent);
  font-family: var(--ui);
  font-size: .68rem;
  font-weight: 800;
  letter-spacing: .12em;
  line-height: 1;
}
#ai-passage-panel .ai-passage-heading .eyebrow::before {
  content: "✦";
  color: var(--ai-gold, #d9a65f);
  font-size: .8rem;
}
#ai-passage-panel .ai-passage-heading h3 {
  max-width: 680px;
  margin: 0 0 8px;
  font-size: clamp(1.45rem, 2.7vw, 2rem);
  font-weight: 760;
  letter-spacing: -.045em;
  line-height: 1.12;
}
#ai-passage-panel .ai-passage-heading p:not(.eyebrow) {
  max-width: 600px;
  font-size: .94rem;
  line-height: 1.65;
}
#ai-passage-close.icon-btn {
  flex: 0 0 auto;
  width: 42px;
  height: 42px;
  border: 1px solid var(--glass-edge, var(--line));
  border-radius: 14px;
  background: color-mix(in srgb, var(--sheet) 68%, transparent);
  color: var(--muted);
  font-size: 1.45rem;
  transition: color .18s ease, background .18s ease, transform .18s ease;
}
#ai-passage-close.icon-btn:hover {
  color: var(--ink);
  background: var(--accent-soft);
  transform: rotate(4deg);
}
#ai-passage-panel > label {
  display: block;
  margin: 2px 0 -7px;
  color: var(--ink);
  font-size: .82rem;
  font-weight: 750;
  letter-spacing: .005em;
}
#ai-passage-panel > label span {
  margin-left: 4px;
  color: var(--muted);
  font-size: .78rem;
  font-weight: 500;
}
#ai-passage-panel textarea#ai-passage-text,
#ai-passage-panel input#ai-passage-question {
  display: block;
  box-sizing: border-box;
  width: 100%;
  min-width: 0;
  border: 1px solid color-mix(in srgb, var(--line) 82%, var(--accent));
  border-radius: 16px;
  background: color-mix(in srgb, var(--sheet) 82%, transparent);
  color: var(--ink);
  box-shadow: inset 0 1px 2px rgba(20,35,28,.035);
  transition: border-color .18s ease, box-shadow .18s ease, background .18s ease;
}
#ai-passage-panel textarea#ai-passage-text {
  min-height: 116px;
  padding: 16px 17px;
  font-size: 1rem;
  line-height: 1.75;
  resize: vertical;
}
#ai-passage-panel input#ai-passage-question {
  min-height: 52px;
  padding: 13px 16px;
  font: inherit;
  font-size: .94rem;
}
#ai-passage-panel textarea:focus,
#ai-passage-panel input:focus {
  outline: none;
  border-color: color-mix(in srgb, var(--accent) 70%, var(--line));
  background: var(--sheet);
  box-shadow: 0 0 0 4px color-mix(in srgb, var(--accent) 12%, transparent), 0 5px 18px rgba(30,58,46,.06);
}
#ai-passage-panel textarea::placeholder,
#ai-passage-panel input::placeholder {
  color: var(--muted);
  opacity: .78;
}
#ai-passage-panel .ai-passage-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 14px;
  padding-top: 2px;
}
#ai-passage-count {
  display: inline-flex;
  align-items: center;
  gap: 7px;
  color: var(--muted);
  font-size: .77rem;
  font-weight: 600;
  font-variant-numeric: tabular-nums;
}
#ai-passage-count::before {
  content: "";
  width: 6px;
  height: 6px;
  border-radius: 50%;
  background: var(--ai-gold, #d9a65f);
}
#ai-passage-submit.btn {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 10px;
  min-height: 50px;
  padding: 12px 20px;
  border: 1px solid rgba(255,255,255,.16);
  border-radius: 15px;
  background: linear-gradient(135deg, #315f4e, #203f35);
  color: #fff;
  box-shadow: 0 7px 18px rgba(31,75,58,.22), inset 0 1px 0 rgba(255,255,255,.15);
  font-size: .9rem;
  font-weight: 760;
  letter-spacing: -.01em;
  transition: transform .18s ease, box-shadow .18s ease, filter .18s ease;
}
#ai-passage-submit.btn::after {
  content: "↗";
  font-size: 1.05rem;
  line-height: 1;
  transition: transform .18s ease;
}
#ai-passage-submit.btn:hover {
  transform: translateY(-1px);
  filter: brightness(1.07);
  box-shadow: 0 11px 25px rgba(31,75,58,.27), inset 0 1px 0 rgba(255,255,255,.17);
}
#ai-passage-submit.btn:hover::after { transform: translate(2px,-2px); }
#ai-passage-submit.btn:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--accent) 42%, transparent);
  outline-offset: 3px;
}
#ai-passage-submit.btn:disabled {
  cursor: wait;
  transform: none;
  filter: saturate(.65);
  opacity: .76;
}
[data-theme="dark"] #ai-passage-submit.btn {
  background: linear-gradient(135deg, #477c66, #2d5b49);
  box-shadow: 0 8px 22px rgba(0,0,0,.24), inset 0 1px 0 rgba(255,255,255,.13);
}
#ai-passage-panel .ai-passage-answer {
  position: relative;
  margin-top: 2px;
  padding: clamp(16px, 2.3vw, 24px);
  border: 1px solid color-mix(in srgb, var(--accent) 24%, var(--line));
  border-radius: 19px;
  background:
    linear-gradient(135deg, color-mix(in srgb, var(--accent) 8%, transparent), transparent 75%),
    color-mix(in srgb, var(--sheet) 88%, transparent);
  box-shadow: inset 0 1px 0 rgba(255,255,255,.3);
}
#ai-passage-panel .ai-passage-answer[hidden] { display: none !important; }
#ai-passage-panel .ai-passage-response {
  color: var(--ink);
  font-size: .98rem;
  line-height: 1.85;
  letter-spacing: .002em;
  white-space: pre-wrap;
  overflow-wrap: anywhere;
}
#ai-passage-panel .ai-passage-answer small {
  margin-top: 15px;
  padding-top: 11px;
  border-top: 1px solid color-mix(in srgb, var(--line) 75%, transparent);
  font-size: .77rem;
}
#ai-passage-panel .ai-passage-disclaimer {
  display: flex;
  align-items: flex-start;
  gap: 8px;
  margin: -2px 0 0;
  color: var(--muted);
  font-size: .76rem;
  line-height: 1.55;
}
#ai-passage-panel .ai-passage-disclaimer::before {
  content: "ⓘ";
  flex: 0 0 auto;
  color: var(--accent);
  font-size: .9rem;
}
@media (max-width: 700px) {
  #ai-passage-panel.ai-passage-panel {
    top: 100px;
    gap: 13px;
    margin: 8px 0 16px;
    padding: 17px;
    border-radius: 21px;
  }
  #ai-passage-panel .ai-passage-heading { gap: 10px; padding-bottom: 14px; }
  #ai-passage-panel .ai-passage-heading h3 { font-size: 1.45rem; }
  #ai-passage-panel .ai-passage-heading p:not(.eyebrow) { font-size: .87rem; }
  #ai-passage-close.icon-btn { width: 38px; height: 38px; border-radius: 12px; }
  #ai-passage-panel textarea#ai-passage-text { min-height: 108px; padding: 13px 14px; }
  #ai-passage-panel .ai-passage-footer { align-items: stretch; flex-direction: column; gap: 10px; }
  #ai-passage-submit.btn { width: 100%; min-height: 52px; }
}
@media (prefers-reduced-motion: reduce) {
  #ask-ai-toggle.ai-passage-toggle,
  #ai-passage-close.icon-btn,
  #ai-passage-submit.btn,
  #ai-passage-submit.btn::after { transition: none; }
  #ask-ai-toggle.ai-passage-toggle:hover,
  #ai-passage-close.icon-btn:hover,
  #ai-passage-submit.btn:hover { transform: none; }
}


/* Persistent Ask AI shortcut: stays reachable while moving through the book */
.ask-ai-float {
  position: fixed;
  z-index: 45;
  right: max(24px, env(safe-area-inset-right));
  bottom: max(24px, env(safe-area-inset-bottom));
  display: inline-flex;
  align-items: center;
  justify-content: center;
  gap: 9px;
  min-height: 52px;
  padding: 0 18px 0 12px;
  border: 1px solid rgba(255,255,255,.2);
  border-radius: 999px;
  background: linear-gradient(135deg, #315f4e, #203f35);
  color: #fff;
  box-shadow: 0 12px 32px rgba(24,58,44,.27), inset 0 1px 0 rgba(255,255,255,.18);
  font: 750 .9rem/1 var(--ui, system-ui, sans-serif);
  letter-spacing: -.01em;
  cursor: pointer;
  transition: transform .18s ease, box-shadow .18s ease, opacity .18s ease, background .18s ease;
}
.ask-ai-float-icon {
  display: grid;
  place-items: center;
  width: 29px;
  height: 29px;
  border: 1px solid rgba(255,255,255,.24);
  border-radius: 50%;
  background: linear-gradient(145deg, rgba(255,255,255,.2), rgba(255,255,255,.06));
  color: #f2d29a;
  font-size: 1rem;
}
.ask-ai-float:hover {
  transform: translateY(-3px);
  box-shadow: 0 16px 36px rgba(24,58,44,.34), inset 0 1px 0 rgba(255,255,255,.2);
}
.ask-ai-float:focus-visible {
  outline: 3px solid color-mix(in srgb, var(--accent) 45%, transparent);
  outline-offset: 4px;
}
.ask-ai-float[aria-expanded="true"] {
  background: linear-gradient(135deg, #467b68, #315f4e);
  box-shadow: 0 8px 24px rgba(24,58,44,.23), inset 0 1px 0 rgba(255,255,255,.18);
}
[data-theme="dark"] .ask-ai-float {
  background: linear-gradient(135deg, #477c66, #2d5b49);
  box-shadow: 0 12px 32px rgba(0,0,0,.35), inset 0 1px 0 rgba(255,255,255,.15);
}
@media (max-width: 700px) {
  .ask-ai-float {
    right: max(14px, env(safe-area-inset-right));
    bottom: calc(104px + env(safe-area-inset-bottom));
    min-height: 48px;
    padding-right: 15px;
    gap: 8px;
  }
  body.bar-away .ask-ai-float { opacity: 1; pointer-events: auto; }
}
@media (prefers-reduced-motion: reduce) {
  .ask-ai-float { transition: none; }
  .ask-ai-float:hover { transform: none; }
}


/* Ask AI behaves as a movable dialog, not a sticky block in the document flow. */
#ai-passage-panel.ai-passage-panel {
  position: fixed;
  top: 50%;
  left: 50%;
  right: auto;
  bottom: auto;
  width: min(720px, calc(100vw - 32px));
  max-width: 720px;
  max-height: calc(100vh - 32px);
  max-height: calc(100dvh - 32px);
  margin: 0;
  overflow-y: auto;
  overscroll-behavior: contain;
  transform: translate(-50%, -50%);
  z-index: 2147483647;
  box-sizing: border-box;
}
#fullscreen-dictionary-layer #ai-passage-panel {
  position: fixed;
  top: 50%;
  left: 50%;
  z-index: 2147483647 !important;
  pointer-events: auto;
}
/* Ask AI is a clear dialog; the document behind it is never dimmed or blurred. */
#fullscreen-dictionary-layer:has(#ai-passage-panel)::before,
body.ask-ai-open::before { content: none !important; }
body.ask-ai-open #ai-passage-panel { z-index: 1001; }
@media (max-width: 700px) {
  #ai-passage-panel.ai-passage-panel {
    width: calc(100vw - 20px);
    max-height: calc(100vh - 24px);
    max-height: calc(100dvh - 24px);
    padding: 15px;
    border-radius: 18px;
  }
}


/* Controls that remain reachable inside the browser's fullscreen subtree. */
#fullscreen-dictionary-layer { pointer-events: none; }
#fullscreen-dictionary-layer #ai-passage-panel,
#fullscreen-dictionary-layer #popup,
#fullscreen-dictionary-layer #fullscreen-reader-controls { pointer-events: auto; }
.fullscreen-reader-controls {
  position: fixed;
  z-index: 2147483647;
  top: max(12px, env(safe-area-inset-top));
  right: max(12px, env(safe-area-inset-right));
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 7px;
  padding: 7px;
  border: 1px solid var(--line);
  border-radius: 14px;
  background: color-mix(in srgb, var(--sheet) 96%, transparent);
  box-shadow: 0 8px 28px rgba(0,0,0,.18);
}
.fullscreen-reader-controls .btn {
  min-height: 42px;
  padding: 8px 13px;
  white-space: nowrap;
}
#fullscreen-ask-ai { background: linear-gradient(135deg,#315f4e,#203f35); color: #fff; border-color: transparent; }
@media(max-width:600px) {
  .fullscreen-reader-controls {
    top: max(8px, env(safe-area-inset-top));
    right: 8px;
    left: 8px;
    gap: 5px;
    padding: 5px;
  }
  .fullscreen-reader-controls .btn {
    flex: 1 1 auto;
    min-width: 0;
    min-height: 42px;
    padding: 7px 9px;
    font-size: .8rem;
  }
}


/* Mobile: keep the floating Ask AI shortcut clear of the reader's move/scroll controls. */
@media (max-width: 700px) {
  .ask-ai-float {
    right: max(14px, env(safe-area-inset-right));
    bottom: calc(164px + env(safe-area-inset-bottom));
    min-height: 46px;
    padding: 0 14px 0 10px;
    gap: 7px;
  }
  .ask-ai-float-icon {
    width: 26px;
    height: 26px;
  }
  /* Keep the move/scroll controls in their own lower lane, below Ask AI. */
  body .scroll-nav {
    bottom: calc(92px + env(safe-area-inset-bottom)) !important;
  }
}
@media (max-width: 380px) {
  .ask-ai-float {
    bottom: calc(158px + env(safe-area-inset-bottom));
    right: max(10px, env(safe-area-inset-right));
  }
  body .scroll-nav {
    bottom: calc(82px + env(safe-area-inset-bottom)) !important;
  }
}


/* Clear, touch-friendly controls instead of squeezing every tool into one mobile row. */
@media (max-width: 900px) {
  .bar {
    display: grid;
    grid-template-columns: minmax(0, 1fr);
    gap: 9px;
    overflow: visible;
    align-items: stretch;
    padding: 9px;
  }
  .bar-primary {
    display: grid;
    grid-template-columns: repeat(3, minmax(0, 1fr));
    gap: 6px;
    width: 100%;
    min-width: 0;
  }
  .bar-primary .btn {
    width: 100%;
    min-width: 0;
    min-height: 42px;
    padding: 8px 5px;
    justify-content: center;
    text-align: center;
    white-space: normal;
    overflow-wrap: anywhere;
    font-size: .78rem;
    line-height: 1.25;
  }
  .bar-end {
    display: flex;
    flex-wrap: wrap;
    align-items: center;
    gap: 7px;
    width: 100%;
    min-width: 0;
  }
  .bar-end .toolbar-more { margin-left: auto; }
  .page-jump-inline { flex: 0 0 auto; }
  .toolbar-more summary { min-height: 42px; }
  .reader-tools {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: 7px;
    overflow: visible;
    margin: 0 0 14px;
    padding: 0;
  }
  .reader-tools label {
    grid-column: 1 / -1;
    width: 100%;
    min-width: 0;
    flex: initial;
  }
  .reader-tools #search-count {
    grid-column: 1 / -1;
    min-width: 0;
    overflow-wrap: anywhere;
  }
  .reader-tools .btn {
    width: 100%;
    min-width: 0;
    min-height: 42px;
    padding: 8px 6px;
    white-space: normal;
    overflow-wrap: anywhere;
    justify-content: center;
    font-size: .8rem;
  }
}
.auth-photo-field small {
  color: var(--muted);
  font-size: .76rem;
  line-height: 1.4;
}
.auth-photo-preview {
  width: 68px;
  height: 68px;
  border: 2px solid var(--line);
  border-radius: 50%;
  object-fit: cover;
}
.profile-photo-action {
  display: flex;
  position: relative;
  align-items: center;
  justify-content: center;
  text-align: center;
  cursor: pointer;
}
.profile-photo-action input[type="file"] {
  position: absolute;
  width: 1px;
  height: 1px;
  padding: 0;
  margin: -1px;
  overflow: hidden;
  clip: rect(0, 0, 0, 0);
  white-space: nowrap;
  border: 0;
}
@media (max-width: 420px) {
  .bar-primary { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  .bar-primary .btn { font-size: .82rem; }
}


/* Keep the AI translation directly beneath the dictionary word heading. */
#popup > .translation-result[hidden] { display: none; }
#popup > .translation-result {
  margin: 9px 0 12px;
  padding: 10px 12px;
  border: 1px solid rgba(226,196,139,.28);
  border-radius: 10px;
  background: rgba(226,196,139,.09);
  color: #f6e8c8;
  font-size: .86rem;
  line-height: 1.5;
  overflow-wrap: anywhere;
}
#popup > .translation-result:empty { display: none; }
