/* Only the project section changes. The production hero and sword scene stay intact. */
.projects.epic-book-ready { padding-top:55px;padding-bottom:90px;scroll-margin-top:90px; }
.epic-library [hidden] { display:none!important; }
.projects.epic-book-ready .section-header { margin-bottom:18px; }
.projects.epic-book-ready .section-header .section-kicker { display:none; }
.projects.epic-book-ready .section-header .section-title { font-size:38px; }
.epic-library { --paper:#e7ddc5;--ink:#292820;--brass:#bba073; color:#e8dec9; margin-top:36px; }
.projects.epic-book-ready:not(.epic-list-mode) :is(.project-ledger,.featured-project,.showcase-rail) { display:none!important; }
.epic-library-top { display:flex;align-items:center;justify-content:space-between;gap:20px;margin-bottom:30px; }
.epic-library-top h3 { font:400 32px/1.3 'Songti SC',Georgia,serif;color:#dfcda7;margin:0 0 8px; }
.epic-library-top h3 { display:none; }
.epic-library-top p { font-size:14px;color:#a99c83;margin:0; }
.epic-view-tools { display:flex;gap:12px; }
.epic-library button,.epic-details button { font-family:inherit;cursor:pointer; }
.epic-view-tools button,.epic-chapter-controls button { padding:9px 14px;background:#28241c;color:#d6c59e;border:1px solid #514731;border-radius:3px;font-size:13px; }
.epic-library-layout { display:grid;grid-template-columns:182px minmax(0,1fr);gap:32px;align-items:start; }
.epic-catalog { padding-top:12px; }
.epic-search-label { display:block;font-size:12px;color:#a99c83; }
.epic-search-label input { display:block;width:100%;background:#13120f;border:1px solid #514731;border-radius:2px;color:#e8dec9;padding:12px 10px;margin-top:10px;font:13px inherit; }
.epic-chapters { display:grid;gap:3px;margin-top:20px;max-height:min(640px,calc(100svh - 330px));overflow-y:auto;overscroll-behavior:contain;scrollbar-width:thin;scrollbar-color:#7c6b49 #15130f; }
.epic-chapter-group { min-width:0;margin:0 0 20px; }
.epic-chapter-group h4 { display:flex;justify-content:space-between;align-items:baseline;gap:12px;font:400 17px/1.5 'Songti SC',Georgia,serif;color:#dfcda7;margin:0 0 7px;padding:0 7px; }
.epic-chapter-group h4 span { color:#aa9a7e;font:12px/1.5 inherit;font-variant-numeric:tabular-nums; }
.epic-chapter-items { display:grid;gap:3px; }
.epic-chapter-group .epic-chapter { width:100%; }
.pet-representatives { display:flex;gap:16px;align-items:end;margin:22px 0; }
.pet-representatives figure { flex:1;min-width:0;margin:0;text-align:center; }
.pet-representatives img { width:100%;height:180px;object-fit:contain; }
.pet-representatives figcaption { margin-top:10px;font-size:13px;color:#c6bba6; }
@media(max-width:1024px){.epic-chapters{max-height:none;overflow:visible;}}
.epic-chapter { display:flex;gap:10px;align-items:baseline;text-align:left;background:transparent;border:0;border-left:2px solid transparent;color:#b7b0a0;font-size:13px;line-height:1.6;padding:10px 7px;transition:color .2s,background .2s; }
.epic-chapter span { color:#7d735f;font-size:10px;font-variant-numeric:tabular-nums; }
.epic-chapter[aria-current='true'] { color:#f1ddaf;border-left-color:#c7aa73;background:#b89a5b15; }
.epic-chapter:hover { color:#f1ddaf;background:#b89a5b15; }
.epic-catalog-note,.epic-no-results { font-size:12px;line-height:1.8;color:#8e826c;margin:24px 8px; }
.epic-catalog-toggle { display:none; }
.epic-desk { min-width:0;position:relative; }
.epic-book-wrap { padding:16px 8px 20px;position:relative;isolation:isolate; }
.epic-book-wrap::before { content:'';position:absolute;z-index:-1;inset:24px 1px 12px;background:#302b22;border-radius:4px 8px 9px 4px;box-shadow:0 8px 0 #aba087,0 11px 0 #534a3b,0 25px 38px #000a; }
.epic-book { margin:auto;max-width:100%;display:grid;grid-template-columns:1fr 1fr;min-height:510px; }
.epic-paper[hidden] { display:none; }
.epic-3d-active .epic-book { position:absolute!important;width:1px!important;height:1px!important;overflow:hidden;clip-path:inset(50%);pointer-events:none; }
.epic-3d-active::before { display:none; }
.epic-3d-active { padding:0; }
.epic-webgl { display:block;width:100%;height:auto;touch-action:pan-y;cursor:grab;border-radius:4px; }
.epic-webgl:active { cursor:grabbing; }
/* 读模式（默认）纵向手势交还浏览器滚动页面，只有横滑才翻页，避免手指落在书上时上下滑被卡住。
   旋转/移动模式时由 JS 把 canvas 的 touch-action 临时设为 none 以接管全部手势。 */
.epic-spatial .epic-webgl { touch-action:pan-y; }
.epic-model-tools { display:flex;align-items:center;justify-content:space-between;gap:12px;margin:0 4px 10px;color:#aa9a7e;font-size:12px; }
.epic-model-tools>div { display:flex;gap:4px; }
.epic-model-tools button { color:#b9aa8c;border:0;background:transparent;padding:8px 10px;font-size:12px; }
.epic-model-tools button[aria-pressed=true] { color:#f0dbb4;background:#b9a2751a; }
.epic-crisp-page,.epic-crisp-page :is(h4,p,a,button,span) { font-family:'Songti SC','Noto Serif CJK SC',Georgia,serif!important;font-weight:400!important; }
.epic-spatial .epic-book-controls { position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%); }
.epic-spatial :is(.epic-live-actions,.epic-chapter-controls) { display:none; }
.epic-crisp-layer { position:absolute;inset:0;pointer-events:none;overflow:hidden; }
.epic-crisp-page { position:absolute;left:0;top:0;width:768px;height:1056px;transform-origin:0 0;background:#eee5d2;color:#30372f;overflow:hidden;font-family:-apple-system,'PingFang SC',sans-serif; }
.epic-crisp-page p,.epic-crisp-page h4 { margin:0;position:absolute;left:58px;width:648px; }
.epic-crisp-page h4 { top:178px;font:500 54px/66px 'Songti SC',Georgia,serif;max-height:132px;overflow:hidden; }
.crisp-running { top:50px;font-size:25px;line-height:34px;color:#7c7057; }
.crisp-kind { display:none; }
.crisp-intro { top:350px;font-size:40px;line-height:62px;display:-webkit-box;-webkit-box-orient:vertical;-webkit-line-clamp:8;overflow:hidden; }
.crisp-visual { display:none; }
.crisp-notes { display:none; }
.epic-crisp-page.is-visual { background:#1b1916;color:#e5d9bd; }
.epic-crisp-page.is-visual h4 { top:124px;left:54px;width:660px;font-size:54px; }
.is-visual .crisp-running { color:#b9aa8d; }
.is-visual .crisp-kind { display:block;top:265px;left:54px;color:#c8baa0;font-size:25px;line-height:36px; }
.is-visual .crisp-intro { display:none; }
.is-visual .crisp-notes { display:-webkit-box;top:849px;left:56px;width:620px;font-size:24px;line-height:34px;-webkit-box-orient:vertical;-webkit-line-clamp:2;overflow:hidden; }
.is-visual .crisp-actions { bottom:64px; }
.is-visual .crisp-visual { display:block;position:absolute;left:48px;top:338px;width:670px;height:466px; }
.crisp-visual img { display:block;position:absolute;width:100%;height:100%;object-fit:contain; }
.crisp-visual img.crisp-image-detail { top:395px;left:26px;width:620px;height:98px;object-fit:contain;background:#0c1110; }
.crisp-visual img.crisp-icon-only { top:42px;left:157px;width:358px;height:358px; }
.crisp-actions { position:absolute;left:58px;right:58px;bottom:82px;display:flex;align-items:center;gap:32px;flex-wrap:wrap; }
.crisp-actions :is(button,a),.crisp-open { pointer-events:auto;background:none;border:0;color:#72572c;padding:8px 0;font:28px/40px -apple-system,'PingFang SC',sans-serif;text-decoration:none; }
.is-visual .crisp-actions button { color:#dfcda5; }
.crisp-folio { position:absolute;bottom:30px;right:58px;color:#9b8b6b;font-size:24px; }
.epic-crisp-page .crisp-page-edge { position:absolute;top:120px;bottom:100px;width:44px;padding:0;border:0;background:transparent;color:inherit;pointer-events:auto;opacity:0;transition:opacity .18s; }
.crisp-page-edge.prev { left:0; }.crisp-page-edge.next { right:0; }
.crisp-page-edge span { display:block;font:80px/1 Georgia,serif; }
.epic-crisp-page:hover .crisp-page-edge,.crisp-page-edge:focus-visible { opacity:.7; }
.epic-crisp-page.is-cover { background:#1b1916;color:#dfcda5; }
.epic-crisp-page:not(.is-cover),.epic-crisp-page.is-visual { background:#eee5d2 url('../images/book/laid-paper-v1.webp') center/100% 100%;color:#353025; }
.is-visual .crisp-running,.is-visual .crisp-kind { color:#786b52; }
.is-visual .crisp-actions button { color:#72572c; }
.crisp-visual img:not(.crisp-icon-only):not(.crisp-image-detail) { border:12px solid #faf4e7;box-sizing:border-box; }
.epic-crisp-page:not(.is-cover)::after { content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(90deg,#37291c25,transparent 8%); }
.epic-crisp-page.is-visual::after { background:linear-gradient(270deg,#37291c25,transparent 8%); }
/* Semantic links stay native; all visible paper and ink remain on the same lit 3D surface. */
.epic-crisp-page.is-hit-surface { background:none!important;color:transparent!important; }
.epic-crisp-page.is-hit-surface::after { display:none; }
.is-hit-surface > :not(.crisp-actions):not(.crisp-page-edge) { opacity:0; }
.is-hit-surface .crisp-actions :is(a,button),.is-hit-surface .crisp-page-edge { color:transparent!important; }
.is-hit-surface :is(a,button):focus-visible { outline:4px solid #806b43;outline-offset:4px; }
.epic-crisp-layer:not([data-mode='read']) .crisp-page-edge { pointer-events:none; }
.epic-return-cover { background:none;border:0;color:#cdb78e;padding:12px 0;text-align:left;font-size:13px; }
@media(max-width:480px) { .epic-model-tools { flex-wrap:wrap;gap:4px; }.epic-model-tools>div { margin-left:auto; } }
.is-cover h4 { top:510px;left:0;width:100%;text-align:center;font-size:76px;line-height:1.4; }
.crisp-cover-author { top:130px;text-align:center;font-size:28px; }
.crisp-cover-line { top:650px;text-align:center;font-size:30px; }
.crisp-open { position:absolute;top:820px;left:250px;width:268px;color:#dfcda5; }
.crisp-cover-blade { position:absolute;left:382px;top:290px;width:5px;height:170px;background:#b8a073; }
.crisp-cover-blade::after { content:'';position:absolute;top:38px;left:-35px;width:75px;height:5px;background:inherit; }
.epic-live-actions { display:flex;justify-content:center;align-items:center;flex-wrap:wrap;gap:10px 20px;margin:18px 0 0; }
.epic-live-actions :is(button,a) { color:#d2b581;font-size:12px;padding:8px 0;background:none;border:0;border-bottom:1px solid #bca37055;text-decoration:none; }
.epic-live-actions button { color:#f2e2bf; }
.epic-paper { color:var(--ink);background:var(--paper);overflow:hidden; }
.epic-paper-inner { height:100%;position:relative;padding:30px 34px 40px;display:flex;flex-direction:column;box-sizing:border-box; }
.epic-paper.--left .epic-paper-inner { background:linear-gradient(90deg,transparent 89%,#58462618); }
.epic-paper.--right .epic-paper-inner { background:linear-gradient(90deg,#58462622,transparent 12%); }
.epic-paper::after { content:'';position:absolute;inset:8px;border:1px solid #78654433;pointer-events:none; }
.epic-running-head { font-size:10px;letter-spacing:.08em;color:#756950;padding-bottom:16px;border-bottom:1px solid #78654433;display:block; }
.epic-project-face .epic-paper-inner { align-items:center;text-align:center; }
.epic-project-face .epic-running-head { width:100%;text-align:left; }
.epic-project-icon { width:132px;height:132px;object-fit:contain;margin:36px auto 22px;filter:drop-shadow(0 8px 8px #382a1920);border-radius:25px;flex-shrink:0; }
.epic-project-kind { font-size:11px;line-height:1.7;letter-spacing:.03em;color:#786747;margin:0 0 12px; }
.epic-project-title { font:500 clamp(25px,3vw,43px)/1.13 'Cormorant Garamond','Songti SC',Georgia,serif;letter-spacing:-.02em;color:#292820;margin:0;overflow-wrap:anywhere; }
.epic-project-notes { font-size:11px;line-height:1.8;color:#766b56;margin:18px 0 14px;max-width:27em; }
.epic-read { background:none;border:0;border-bottom:1px solid #7c68473b;padding:5px 0;color:#69512c;font-size:12px;line-height:1.7;align-self:flex-start; }
.epic-project-face .epic-read { margin:auto auto 12px;align-self:center; }
.epic-folio { position:absolute;bottom:18px;left:34px;color:#80745e;font-size:10px;font-variant-numeric:tabular-nums; }
.epic-project-story .epic-folio { left:auto;right:34px; }
.epic-story-heading { font:400 27px/1.3 'Songti SC',Georgia,serif;color:#3b3528;margin:25px 0 18px; }
.epic-project-intro { font-size:14px;line-height:1.95;color:#373327;margin:0 0 20px; }
.epic-project-excerpt { font-size:12px;line-height:1.9;color:#77674f;border-top:1px solid #78654433;padding-top:16px;margin:0 0 16px; }
.epic-project-links { display:flex;flex-wrap:wrap;gap:8px 16px;margin-top:auto;padding-top:6px; }
.epic-project-link { color:#69512c;font-size:12px;text-underline-offset:4px;text-decoration:underline; }
.epic-project-links + .epic-read { margin-top:10px; }
.epic-paper :is(a,button) * { pointer-events:none; }
.epic-cover { background:#171b18;color:#d0b27a;border:4px solid #302e23; }
.epic-cover .epic-paper-inner { padding:35px;align-items:center;justify-content:center;text-align:center;background:linear-gradient(100deg,#080b09,transparent 10%,#ffffff03 40%,transparent 80%,#0004)!important; }
.epic-cover::after { inset:14px;border-color:#bda06b80; }
.epic-cover-author { font-size:12px;letter-spacing:.08em;color:#b3a184;margin-bottom:25px; }
.epic-cover h4 { font:400 46px/1.4 'Songti SC',Georgia,serif;letter-spacing:.06em;color:#c7ac78;margin:22px 0; }
.epic-cover p { font-size:12px;color:#b0a187;line-height:1.8;margin:0 0 25px; }
.epic-cover :is(button,a) { color:#d4bc8b;border:1px solid #877044;padding:10px 18px;background:transparent;font-size:12px; }
.epic-cover-bottom { position:absolute;bottom:40px;font-size:11px;color:#9d8d6d; }
.epic-cover-sword { width:5px;height:95px;background:#a38a59;position:relative;clip-path:polygon(40% 0,60% 0,60% 26%,100% 26%,100% 31%,70% 31%,70% 88%,50% 100%,30% 88%,30% 31%,0 31%,0 26%,40% 26%);transform:scaleX(5); }
.epic-book-controls { display:flex;justify-content:center;align-items:center;gap:24px;margin-top:16px; }
.epic-book-controls > button { width:46px;height:46px;border:1px solid #81704b;background:#1c1a15;color:#e5c995;font-size:24px;border-radius:50%;transition:background .2s,transform .2s; }
.epic-book-controls > button:hover { background:#4b3e29;transform:translateY(-2px); }
.epic-book-controls > div { text-align:center;min-width:180px; }
.epic-page-status { display:block;font-size:13px;color:#d6c59e; }
.epic-book-controls span { display:block;font-size:10px;color:#8f826a;margin-top:5px; }
.epic-chapter-controls { display:flex;justify-content:center;gap:12px;margin-top:18px; }
.epic-chapter-controls button { border:0;background:none;color:#a99c83;font-size:11px; }
.epic-library button:disabled { opacity:.3;cursor:default; }
.epic-library :is(a,button,input):focus-visible,.epic-details :is(a,button):focus-visible { outline:2px solid #af8c42;outline-offset:4px; }
.epic-list-mode .epic-library-layout { display:none; }
.epic-list-mode .project-ledger { display:grid; }
.epic-details { background:#e7ddc5;color:#292820;width:min(780px,calc(100% - 28px));max-height:88dvh;padding:0;border:0;border-radius:3px;box-shadow:0 20px 90px #000a; }
.epic-details::backdrop { background:#050604d9; }
.epic-dialog-open { overflow:hidden; }
.epic-details-bar { position:sticky;top:0;display:flex;align-items:center;justify-content:space-between;gap:15px;padding:17px 30px;background:#d6c9ac;color:#645232;z-index:1;font-size:13px; }
.epic-details-bar button { background:none;border:0;color:inherit;font:inherit; }
.epic-details-content { padding:35px 44px; }
.epic-details-content h3 { font:500 42px/1.2 'Cormorant Garamond','Songti SC',Georgia,serif;color:#292820;margin:20px 0; }
.epic-details-content p,.epic-details-content strong { font-size:16px;line-height:1.9;color:#393327; }
.epic-details-content p { margin:18px 0; }
.epic-details-content img { max-width:100%;max-height:260px;object-fit:contain;margin:12px 0; }
.epic-details-content > :first-child > :first-child img { width:96px;height:96px; }
.epic-details-content a { display:inline-block;color:#70521d;text-decoration:underline;text-underline-offset:4px;margin:8px 16px 8px 0;font-size:15px; }
.epic-details-content div > span { font-size:13px;color:#77674f;display:inline-block;margin:5px 12px 5px 0; }
@media(min-width:1100px) { .epic-desk { padding-bottom:12px; } }
@media(max-width:1000px) { .epic-library-layout { grid-template-columns:150px minmax(0,1fr);gap:20px; }.epic-paper-inner { padding:25px 25px 40px; }.epic-project-icon { width:110px;height:110px;margin-top:28px; }.epic-project-intro { font-size:13px; }.epic-project-excerpt { font-size:11px; } }
@media(max-width:760px) {
 .epic-book { grid-template-columns:1fr; }
 .epic-library { margin-top:20px; }.epic-library-top { gap:10px;margin-bottom:15px; }.epic-library-top h3 { font-size:24px; }.epic-library-top p { font-size:11px; }
 .epic-view-tools { gap:7px; }.epic-view-tools button { font-size:11px;padding:8px 9px; }.epic-catalog-toggle { display:block; }
 .epic-library-layout { display:block;position:relative; }.epic-catalog { display:none;background:#151712;border:1px solid #70603d;padding:18px;position:absolute;inset:0 0 auto;z-index:8;max-height:70vh;overflow:auto;box-shadow:0 15px 45px #000a; }
 .epic-catalog-open .epic-catalog { display:block; }.epic-chapters { grid-template-columns:1fr 1fr;gap:3px 12px; }.epic-catalog-note { display:none; }
 .epic-book-wrap { padding:12px 4px 15px; }.epic-paper-inner { padding:25px 28px 40px; }.epic-project-icon { width:128px;height:128px;margin:32px auto 24px; }
 .epic-project-title { font-size:34px; }.epic-story-heading { font-size:26px; }.epic-project-intro { font-size:14px; }.epic-project-excerpt { font-size:12px; }
 .epic-book-controls { gap:14px; }.epic-page-status { font-size:12px; }.epic-book-controls > div { min-width:150px; }.epic-book-controls > button { width:40px;height:40px; }
 .epic-details-content { padding:25px; }.epic-details-content h3 { font-size:34px; }.epic-details-bar { padding:16px 22px; }
}
@media(prefers-reduced-motion:reduce) { .epic-library *, .epic-library *::before,.epic-library *::after { transition:none!important;animation:none!important; } }
@media(max-width:1050px) {
 .epic-library-layout { display:block;position:relative; }
 .epic-catalog-toggle { display:block; }
 .epic-catalog { display:none;position:absolute;left:0;top:0;width:min(420px,100%);max-height:70vh;overflow:auto;padding:18px;background:#171512;z-index:8; }
 .epic-catalog-open .epic-catalog { display:block; }
 .epic-chapters { grid-template-columns:1fr 1fr;gap:4px 12px; }
 .epic-catalog-note { display:none; }
 .epic-3d-active { padding:0; }
}

/* One deliberate loading state instead of flashing the source list and the flat fallback book. */
.projects.epic-book-pending :is(.project-ledger,.featured-project,.showcase-rail),
.projects.epic-book-loading :is(.project-ledger,.featured-project,.showcase-rail) { display:none!important; }
.epic-book-boot { display:none; min-height:620px; align-items:center; justify-content:center; flex-direction:column; gap:18px; text-align:center; color:#a99c83; }
.projects.epic-book-pending .epic-book-boot { display:flex; }
.epic-book-boot-mark { width:22px;height:22px;border:1px solid #5d4f36;border-top-color:#d9bd86;border-radius:50%;animation:epic-book-spin 1s linear infinite; }
.epic-book-boot p { margin:0;font:13px/1.6 'Inter',system-ui,sans-serif;letter-spacing:.08em;color:#a99c83; }
.epic-book-loading .epic-book { visibility:hidden; }
.epic-book-loading :is(.epic-book-controls,.epic-chapter-controls,.epic-live-actions) { visibility:hidden; }
.epic-book-loading :is(.epic-view-tools,.epic-catalog) { opacity:.55;pointer-events:none; }
.epic-book-loading .epic-book-wrap::before { display:none; }
.epic-book-loading-boot { transition:opacity .28s ease;position:absolute;left:0;right:0;top:20px;bottom:8px;margin:0 auto;width:min(100%,760px);z-index:2;display:flex;align-items:center;justify-content:center;flex-direction:column;gap:16px;background:radial-gradient(120% 90% at 30% 15%,#3a3025 0%,#241d16 45%,#15120e 100%);border:1px solid #4a3c28;border-radius:5px 9px 10px 5px;box-shadow:inset 0 0 0 1px #ffffff08,inset 0 0 90px #0009,0 20px 44px #000b;color:#a99c83;text-align:center; }
.epic-book-loading-boot::before { content:'';position:absolute;inset:14px;border:1px solid #ffffff0d;border-radius:2px;pointer-events:none; }
.epic-book-loading-boot.is-done { opacity:0;pointer-events:none; }
.epic-book-loading-title { font:400 34px/1.4 'Songti SC',Georgia,serif;letter-spacing:.22em;text-indent:.22em;color:#dcc79e; }
@keyframes epic-book-spin { to { transform:rotate(360deg); } }
@media(max-width:900px){ .epic-book-boot { min-height:520px; } }
@media(prefers-reduced-motion:reduce){ .epic-book-boot-mark { animation:none; } }
