@import url('https://fonts.googleapis.com/css2?family=Noto+Serif+TC:wght@400;500;600;700;900&display=swap'); :root{ --paper: #ead9b6; --paper-dark: #3a2a1a; --ink: #2b1d10; --amber: #c98a3c; --amber-dark: #8a5a20; --gold: #e0b053; --success: #4a7c3f; --danger: #a33a2c; --panel-bg: #f3e4c2; --shadow: rgba(0,0,0,.5); } *{ box-sizing: border-box; } html,body{ margin:0; padding:0; width:100%; height:100%; font-family:"Noto Serif TC", serif; background:#0d0906; color: var(--ink); overflow:hidden; } .hidden{ display:none !important; } /* ---------------- 全螢幕開場/結局 ---------------- */ .fullscreen-overlay{ position:fixed; inset:0; z-index:100; background: radial-gradient(ellipse at center, rgba(60,40,20,.2), rgba(10,6,3,.92) 75%), url('assets/scenes/scene_A_desk.png') center/cover no-repeat; display:flex; align-items:center; justify-content:center; padding: 24px; } .intro-content{ max-width: 720px; background: linear-gradient(180deg, rgba(243,228,194,.97), rgba(234,217,182,.97)); border: 3px solid var(--amber-dark); border-radius: 12px; padding: 36px 40px; box-shadow: 0 20px 60px var(--shadow), inset 0 0 40px rgba(139,90,32,.15); text-align:center; max-height: 88vh; overflow-y:auto; } .intro-title{ font-family:"Noto Serif TC", serif; font-weight:900; font-size: 2.6em; color: var(--amber-dark); margin: 0 0 4px; letter-spacing: 4px; } .intro-sub{ color:#6b4a26; font-size:1.05em; margin-bottom:20px; letter-spacing:2px; } .intro-story{ text-align:left; line-height:1.9; font-size:1.02em; color: var(--ink); margin-bottom: 24px; white-space: pre-line; } .intro-story b{ color: var(--amber-dark); } .btn-primary{ background: linear-gradient(180deg, var(--gold), var(--amber-dark)); color:#2b1d10; border: none; padding: 12px 32px; font-size: 1.05em; font-weight:700; border-radius: 8px; cursor:pointer; box-shadow: 0 4px 0 #6b4114, 0 8px 16px rgba(0,0,0,.4); font-family:"Noto Serif TC", serif; letter-spacing: 2px; transition: transform .1s; } .btn-primary:hover{ transform: translateY(-2px); } .btn-primary:active{ transform: translateY(2px); box-shadow: 0 2px 0 #6b4114; } .btn-secondary{ background: rgba(139,90,32,.15); border: 1.5px solid var(--amber-dark); color: var(--amber-dark); padding: 8px 18px; border-radius: 6px; cursor:pointer; font-family:"Noto Serif TC", serif; font-weight:600; } .btn-secondary:hover{ background: rgba(139,90,32,.28); } /* ---------------- 遊戲主畫面 ---------------- */ #game-screen{ position:fixed; inset:0; display:flex; flex-direction:column; } #top-bar{ height:56px; flex-shrink:0; display:flex; align-items:center; justify-content:space-between; background: linear-gradient(180deg,#241a10,#150e08); border-bottom: 2px solid var(--amber-dark); padding: 0 16px; color: var(--gold); gap: 12px; z-index: 50; } #game-title{ font-family:"Noto Serif TC", serif; font-weight:900; font-size:1.18em; letter-spacing:1.5px; white-space: nowrap; flex-shrink: 0; } #lock-progress{ font-size:.92em; color:#e6d4ac; white-space: nowrap; flex-shrink: 1; } #lock-progress span{ color: var(--gold); font-weight:700; } /* 40 分鐘倒數計時器 */ .timer-wrap{ display:flex; align-items:center; gap:6px; background: rgba(0,0,0,.45); border: 1.5px solid var(--amber); padding: 4px 12px; border-radius: 18px; box-shadow: inset 0 0 8px rgba(0,0,0,.6), 0 2px 6px rgba(0,0,0,.5); flex-shrink: 0; } .timer-wrap .timer-icon{ font-size: 1.1em; } .timer-wrap .timer-label{ font-size: .82em; color: #d4ba8a; font-family:"Noto Serif TC", serif; } .timer-digits{ font-family: "Courier New", monospace, sans-serif; font-size: 1.15em; font-weight: 900; color: #ffeaa7; letter-spacing: 1px; min-width: 54px; text-align: center; } .timer-wrap.warning{ border-color: #ff5252; background: rgba(60, 10, 10, .6); animation: timerWarningPulse 1.2s infinite alternate ease-in-out; } .timer-wrap.warning .timer-digits{ color: #ff7675; } @keyframes timerWarningPulse{ 0%{ box-shadow: 0 0 4px rgba(255,82,82,.4); } 100%{ box-shadow: 0 0 14px rgba(255,82,82,.9); border-color: #ff7675; } } #top-bar-actions{ display:flex; align-items:center; gap:10px; flex-shrink: 0; } /* 音樂控制器 */ .music-controls{ display:flex; align-items:center; gap:8px; background: rgba(0,0,0,.35); border: 1px solid rgba(224,176,83,.3); padding: 4px 10px; border-radius: 20px; } .music-controls .btn-icon{ background: transparent; border: none; padding: 2px 4px; box-shadow: none; font-size: .85em; } .music-controls .btn-icon:hover{ background: rgba(224,176,83,.2); transform: none; } .volume-slider-wrap{ display:flex; align-items:center; gap:4px; color: var(--gold); } .volume-slider-wrap .vol-icon{ font-size: 11px; opacity: .85; } #volume-slider{ width: 60px; height: 5px; -webkit-appearance: none; appearance: none; background: rgba(224,176,83,.25); border-radius: 3px; outline: none; cursor: pointer; } #volume-slider::-webkit-slider-thumb{ -webkit-appearance: none; appearance: none; width: 13px; height: 13px; border-radius: 50%; background: var(--gold); border: 1.5px solid #241a10; box-shadow: 0 0 6px rgba(224,176,83,.9); cursor: pointer; } #volume-slider::-moz-range-thumb{ width: 13px; height: 13px; border-radius: 50%; background: var(--gold); border: 1.5px solid #241a10; box-shadow: 0 0 6px rgba(224,176,83,.9); cursor: pointer; } .btn-icon{ position:relative; background: linear-gradient(180deg, rgba(224,176,83,.25), rgba(139,90,32,.25)); border: 1.5px solid var(--amber); border-radius: 8px; padding: 6px 12px; cursor:pointer; display:flex; align-items:center; gap:6px; color: var(--gold); font-family:"Noto Serif TC", serif; font-weight:700; font-size:.9em; transition: all .15s ease; flex-shrink: 0; height: 36px; box-sizing: border-box; } .btn-icon:hover{ background: linear-gradient(180deg, rgba(224,176,83,.45), rgba(139,90,32,.45)); transform: translateY(-1px); box-shadow: 0 4px 12px rgba(224,176,83,.25); } .btn-icon-emoji{ font-size:1.15em; line-height:1; } .btn-icon img{ width:20px !important; height:20px !important; max-width:20px !important; max-height:20px !important; object-fit:contain !important; border-radius:3px; display:inline-block !important; flex-shrink:0 !important; } .btn-icon-label{ font-size:.9em; white-space:nowrap; } .badge{ position:absolute; top:-6px; right:-6px; background: var(--danger); color:#fff; font-size:.7em; font-weight:700; border-radius: 50%; width:18px; height:18px; display:flex; align-items:center; justify-content:center; box-shadow: 0 2px 4px rgba(0,0,0,.5); } #stage{ flex:1; position:relative; overflow:hidden; background:#000; } #scene-container{ position:absolute; inset:0; background-size: cover; background-position:center; transition: opacity .4s ease; } #scene-container.fading{ opacity: 0; } #hotspot-layer{ position:absolute; inset:0; } .hotspot{ position:absolute; cursor:pointer; border-radius: 50%; display:flex; align-items:center; justify-content:center; transform: translate(-50%, -50%); z-index: 10; box-sizing: border-box !important; width: 48px; height: 48px; max-width: 48px; max-height: 48px; flex-shrink: 0; padding: 0; } .hotspot:hover{ z-index: 25; } .hotspot.locked-node{ width: 54px; height: 54px; max-width: 54px; max-height: 54px; filter: drop-shadow(0 4px 10px rgba(0,0,0,.85)); } .hotspot.locked-node.final-vault{ width: 76px; height: 76px; max-width: 76px; max-height: 76px; } .hotspot .hotspot-dot{ width: 100% !important; height: 100% !important; max-width: 100% !important; max-height: 100% !important; border-radius: 50%; background: rgba(255,255,255,.08); border: 1.5px dashed rgba(224,176,83,.4); transition: transform .2s cubic-bezier(0.34, 1.56, 0.64, 1), background .2s, border-color .2s, box-shadow .2s; display:flex; align-items:center; justify-content:center; transform: scale(1); box-sizing: border-box; position: relative; overflow: hidden; flex-shrink: 0; } .hotspot:hover .hotspot-dot{ background: rgba(224,176,83,.25); border-color: var(--gold); box-shadow: 0 0 14px rgba(224,176,83,.6); transform: scale(1.15); } .hotspot.found .hotspot-dot{ background: rgba(120,200,120,.12); border: 1.5px solid rgba(120,200,120,.45); } /* 機關鎖專屬物件化樣式 */ .hotspot.locked-node .hotspot-dot{ background: radial-gradient(circle, rgba(139,90,32,.95), rgba(40,25,10,.98)); border: 2.5px solid var(--gold); box-shadow: 0 0 14px rgba(224,176,83,.65), inset 0 0 8px rgba(0,0,0,.8); animation: lockGlow 2.5s infinite alternate ease-in-out; } .hotspot-lock-img{ width: 100% !important; height: 100% !important; max-width: 100% !important; max-height: 100% !important; object-fit: cover !important; border-radius: 50% !important; display: block !important; opacity: .92; pointer-events: none; flex-shrink: 0; transition: transform .2s ease, opacity .2s; } .hotspot.locked-node:hover .hotspot-lock-img{ transform: scale(1.08); opacity: 1; } .hotspot.locked-node .hotspot-lock-badge{ position:absolute; bottom: 0px; right: 0px; background: #241a10; border: 1.5px solid var(--gold); border-radius: 50%; width: 18px; height: 18px; display:flex; align-items:center; justify-content:center; font-size: 10px; box-shadow: 0 2px 4px rgba(0,0,0,.7); z-index: 5; pointer-events: none; } @keyframes lockGlow{ 0%{ box-shadow: 0 0 8px rgba(224,176,83,.4), inset 0 0 4px rgba(224,176,83,.2); } 100%{ box-shadow: 0 0 18px rgba(224,176,83,.9), inset 0 0 10px rgba(224,176,83,.5); border-color:#ffe8a3; } } /* 已解開的機關 */ .hotspot.solved .hotspot-dot{ background: radial-gradient(circle, rgba(40,100,50,.9), rgba(15,40,20,.95)); border: 2px solid #6cd975; box-shadow: 0 0 12px rgba(108,217,117,.5); } .hotspot.solved .hotspot-lock-badge{ background: #143018; border: 1.5px solid #6cd975; color:#6cd975; } /* 隱藏印璽碎片:微微發光的小碎片圖案,拾取後才散發璀璨仙光 */ .hotspot.seal-node{ width: 32px; height: 32px; max-width: 32px; max-height: 32px; } .hotspot.seal-node .hotspot-dot{ border: 1.5px dashed rgba(224, 176, 83, 0.45); background: radial-gradient(circle, rgba(255, 235, 170, 0.35), rgba(180, 130, 40, 0.15) 60%, transparent 85%); box-shadow: 0 0 8px rgba(224, 176, 83, 0.35); opacity: 0.72; animation: subtleSealGlow 3s infinite alternate ease-in-out; transition: opacity .25s, transform .25s, box-shadow .25s; position: relative; } /* 碎片內嵌的微光碎玉圖案 */ .hotspot.seal-node .hotspot-dot::before{ content: '🔶'; font-size: 13px; line-height: 1; filter: drop-shadow(0 0 3px rgba(255,215,0,0.6)); opacity: 0.85; transform: scale(0.9); transition: transform .2s ease; } .hotspot.seal-node:hover .hotspot-dot{ opacity: 1; border-color: var(--gold); background: radial-gradient(circle, rgba(255, 240, 180, 0.55), rgba(200, 140, 40, 0.25) 70%, transparent 90%); box-shadow: 0 0 14px rgba(224, 176, 83, 0.75); transform: scale(1.15); } .hotspot.seal-node:hover .hotspot-dot::before{ transform: scale(1.05); } @keyframes subtleSealGlow{ 0%{ transform: scale(0.94); box-shadow: 0 0 5px rgba(224, 176, 83, 0.25); border-color: rgba(224, 176, 83, 0.35); } 100%{ transform: scale(1.05); box-shadow: 0 0 11px rgba(224, 176, 83, 0.55), 0 0 18px rgba(255, 215, 0, 0.2); border-color: rgba(255, 235, 150, 0.75); } } /* 找到/拾取後:散發強烈金綠璀璨光芒 */ .hotspot.seal-node.found .hotspot-dot{ opacity: 1 !important; border: 2px solid #6cd975; background: radial-gradient(circle, rgba(255,230,130,.75), rgba(108,217,117,.5) 50%, rgba(30,80,40,.3) 80%); box-shadow: 0 0 16px rgba(108,217,117,.9), 0 0 28px rgba(255,215,0,.75), inset 0 0 10px rgba(255,255,200,.9); animation: sealFoundShimmer 2.2s infinite alternate ease-in-out; } .hotspot.seal-node.found .hotspot-dot::before{ content: '✨'; font-size: 14px; } .hotspot.seal-node.found:hover .hotspot-dot{ transform: scale(1.2); box-shadow: 0 0 24px rgba(108,217,117,1), 0 0 38px rgba(255,225,50,1), inset 0 0 14px rgba(255,255,255,1); } @keyframes sealFoundShimmer{ 0%{ transform: scale(0.95); box-shadow: 0 0 12px rgba(108,217,117,.8), 0 0 20px rgba(255,215,0,.5); border-color: #6cd975; } 50%{ box-shadow: 0 0 22px rgba(108,217,117,1), 0 0 32px rgba(255,230,100,.95), inset 0 0 12px rgba(255,255,220,.9); border-color: #ffe066; } 100%{ transform: scale(1.1); box-shadow: 0 0 28px rgba(108,217,117,1), 0 0 45px rgba(255,215,0,1), inset 0 0 16px rgba(255,255,240,1); border-color: #ffffff; } } /* 最終機關題目前置與 132 重磅登場特效 */ .final-lock-stage-box{ background: rgba(24, 16, 10, 0.85); border: 2px solid var(--amber); border-radius: 12px; padding: 16px 18px; margin-bottom: 16px; box-shadow: inset 0 0 12px rgba(0,0,0,.6); text-align: center; } .final-equation-title{ color: #e6d4ac; font-size: .95em; margin-bottom: 8px; font-family: "Noto Serif TC", serif; } .final-main-equation{ font-size: 1.24em; color: #fff4d1; font-weight: 700; margin: 10px 0; line-height: 1.8; display: flex; align-items: center; justify-content: center; gap: 8px; flex-wrap: wrap; } /* 封印未解開時的未知符號 */ .sealed-constant-mystery{ display: inline-flex; align-items: center; gap: 4px; background: linear-gradient(180deg, #3d2612, #1f1208); border: 1.5px dashed var(--gold); color: #ffd166; padding: 2px 10px; border-radius: 6px; font-size: .9em; letter-spacing: 1px; animation: mysteryPulse 2s infinite alternate ease-in-out; box-shadow: 0 0 8px rgba(224,176,83,.4); } @keyframes mysteryPulse{ 0%{ border-color: var(--amber); box-shadow: 0 0 4px rgba(224,176,83,.3); } 100%{ border-color: #fff0aa; box-shadow: 0 0 14px rgba(255,215,0,.8); color: #fff; } } /* 132 重磅登場時的金色閃耀爆發樣式 */ .revealed-constant-132{ display: inline-flex; align-items: center; background: linear-gradient(180deg, #d4af37, #8b5a20); color: #fffef0; padding: 3px 12px; border-radius: 8px; font-size: 1.25em; font-weight: 900; border: 2px solid #fff2a8; text-shadow: 0 0 10px rgba(255,215,0,.9), 0 2px 4px rgba(0,0,0,.8); box-shadow: 0 0 22px rgba(255,215,0,1), 0 0 38px rgba(255,180,0,.7); animation: heavy132Reveal .9s cubic-bezier(0.175, 0.885, 0.32, 1.275); } @keyframes heavy132Reveal{ 0%{ transform: scale(0.2) rotate(-15deg); opacity: 0; filter: brightness(3); } 60%{ transform: scale(1.35) rotate(4deg); opacity: 1; } 100%{ transform: scale(1) rotate(0deg); opacity: 1; } } .verify-stage-guide{ font-size: .95em; line-height: 1.8; color: #e0d0b0; margin-bottom: 12px; text-align: left; background: rgba(0,0,0,.3); padding: 10px 14px; border-radius: 8px; border-left: 3px solid var(--amber); } .hotspot-label{ position:absolute; bottom: 125%; left:50%; transform: translateX(-50%); background: rgba(20,14,8,.94); color:#f3e4c2; padding:4px 10px; border-radius:6px; font-size:.82em; font-weight:600; white-space:nowrap; opacity:0; pointer-events:none !important; transition: opacity .18s ease, transform .18s ease; border:1px solid var(--amber); box-shadow: 0 4px 12px rgba(0,0,0,.7); z-index: 30; } .hotspot:hover .hotspot-label{ opacity:1; transform: translateX(-50%) translateY(-4px); } .nav-arrow{ position:absolute; top:50%; transform: translateY(-50%); width:56px; height:56px; border-radius:50%; background: rgba(20,14,8,.55); border: 2px solid var(--gold); color: var(--gold); font-size:1.4em; cursor:pointer; display:flex; align-items:center; justify-content:center; transition: background .15s, transform .15s; z-index: 5; } .nav-arrow:hover{ background: rgba(224,176,83,.35); transform: translateY(-50%) scale(1.08); } .nav-left{ left:18px; } .nav-right{ right:18px; } .nav-arrow.disabled{ opacity:.25; pointer-events:none; } #scene-label{ position:absolute; top:16px; left:50%; transform: translateX(-50%); background: rgba(20,14,8,.7); color: var(--gold); padding: 6px 20px; border-radius: 20px; border: 1px solid var(--amber); font-size: 1.05em; letter-spacing: 3px; font-family:"Noto Serif TC", serif; font-weight:900; } #scene-dots{ flex-shrink:0; height:44px; display:flex; align-items:center; justify-content:center; gap:14px; background: linear-gradient(0deg,#241a10,#150e08); border-top: 1px solid var(--amber-dark); } .scene-dot{ width:12px; height:12px; border-radius:50%; background: rgba(224,176,83,.25); border: 1.5px solid var(--amber); cursor:pointer; } .scene-dot.active{ background: var(--gold); box-shadow:0 0 8px var(--gold); } .scene-dot.locked{ opacity:.4; cursor:not-allowed; } /* ---------------- 側邊面板(背包 & 機關紀錄) ---------------- */ .side-panel{ position:fixed; top:0; right:0; height:100%; width:400px; max-width:92vw; background: linear-gradient(180deg, #f3e4c2, #e6d1a0); border-left: 3px solid var(--amber-dark); box-shadow: -10px 0 30px var(--shadow); z-index: 60; display:flex; flex-direction:column; padding: 18px 20px; overflow-y:auto; animation: slideIn .25s ease; } @keyframes slideIn{ from{ transform: translateX(100%);} to{ transform: translateX(0);} } .panel-header{ display:flex; align-items:center; justify-content:space-between; } .panel-header h2{ font-family:"Noto Serif TC", serif; font-weight:900; color: var(--amber-dark); margin:0; font-size:1.45em; } .panel-hint{ font-size:.85em; color:#6b4a26; margin: 6px 0 16px; line-height: 1.5; } .btn-close{ background:none; border:none; font-size:1.6em; color: var(--amber-dark); cursor:pointer; line-height:1; } #clue-list, #solved-lock-list{ display:flex; flex-direction:column; gap:12px; } .clue-section-title{ font-weight:900; color: var(--amber-dark); font-size:1em; margin: 14px 0 2px; padding-bottom:4px; border-bottom: 1.5px solid rgba(139,90,32,.3); } .clue-section-title:first-child{ margin-top:0; } .clue-card{ background: rgba(255,255,255,.45); border: 1.5px solid var(--amber-dark); border-radius: 8px; padding: 10px 12px; cursor:pointer; display:flex; align-items:center; gap:10px; transition: all .15s ease; } .clue-card:hover{ background: rgba(255,255,255,.75); transform: translateX(-2px); } .clue-card .clue-emoji{ font-size:1.6em; } .clue-card .clue-title{ font-weight:700; color: var(--ink); font-size:.95em; } .clue-card .clue-loc{ font-size:.78em; color:#8a5a20; } .clue-card.seal-card{ border-color: #b5842f; background: rgba(224,176,83,.18); } .clue-empty, .solved-empty{ color:#8a5a20; text-align:center; margin-top:36px; font-size:.95em; line-height:1.7; } /* 已解機關卡片 */ .solved-card{ background: rgba(255,255,255,.55); border: 1.5px solid #8a5a20; border-left: 5px solid #4a7c3f; border-radius: 8px; padding: 12px 14px; display:flex; flex-direction:column; gap:6px; box-shadow: 0 2px 8px rgba(0,0,0,.08); } .solved-card-header{ display:flex; align-items:center; justify-content:space-between; } .solved-card-title{ font-weight:900; color: var(--amber-dark); font-size:1em; } .solved-badge-pill{ background: rgba(74,124,63,.15); color: #3b6832; border: 1px solid rgba(74,124,63,.4); border-radius: 12px; padding: 2px 8px; font-size: .75em; font-weight:700; } .solved-formula{ font-size: .88em; color: #5a3d1c; line-height: 1.5; } .solved-result{ font-size: .95em; font-weight:700; color: var(--ink); background: rgba(224,176,83,.2); padding: 6px 10px; border-radius: 6px; margin-top: 2px; } .solved-keynote{ font-size: .85em; font-weight:700; color: #9c4819; display:flex; align-items:center; gap:4px; } .solved-keynote.highlight{ color: #b33918; background: rgba(217,83,79,.12); border: 1px dashed rgba(217,83,79,.4); padding: 4px 8px; border-radius: 4px; } /* ---------------- Modal ---------------- */ .modal-overlay{ position:fixed; inset:0; z-index:80; background: rgba(10,6,3,.75); display:flex; align-items:center; justify-content:center; padding: 20px; } .modal-box{ position:relative; background: linear-gradient(180deg, #f6ecd4, #ecdab3); border: 3px solid var(--amber-dark); border-radius: 14px; max-width: 640px; width:100%; max-height: 86vh; overflow-y:auto; padding: 28px 30px; box-shadow: 0 20px 60px var(--shadow); } .modal-close{ position:absolute; top:12px; right:16px; } .clue-modal-header, .lock-modal-header{ display:flex; align-items:center; gap:10px; margin-bottom:14px; } .clue-modal-header h3, .lock-modal-header h3{ margin:0; color: var(--amber-dark); font-family:"Noto Serif TC", serif; font-weight:900; font-size:1.4em; } #clue-modal-image-wrap, .lock-modal-image-wrap{ text-align:center; margin-bottom:14px; } #clue-modal-image-wrap img, .lock-modal-image-wrap img{ max-width:100%; max-height:220px; border-radius:8px; border:2px solid var(--amber-dark); box-shadow: 0 6px 16px rgba(0,0,0,.35); } /* 線索不足提示盒 */ .lock-locked-box{ background: rgba(163,58,44,.08); border: 2px dashed #a33a2c; border-radius: 10px; padding: 16px 20px; margin: 12px 0 16px; text-align: center; } .lock-locked-badge{ font-size: 1.05em; font-weight:900; color: #a33a2c; margin-bottom: 10px; } .latex-content{ line-height:1.9; font-size:1.02em; color: var(--ink); margin-bottom: 16px; white-space: pre-line; } .latex-content b{ color: var(--amber-dark); } .modal-ok-btn{ width:100%; } #lock-modal-hint-toggle{ margin-bottom: 16px; } #lock-modal-hint{ margin-top:10px; padding:12px 14px; background: rgba(224,176,83,.18); border-left: 4px solid var(--amber); border-radius: 6px; font-size:.95em; } #lock-input-area{ margin-bottom: 14px; } .lock-feedback{ min-height: 24px; font-weight:700; margin-bottom: 12px; text-align:center; } .lock-feedback.correct{ color: var(--success); } .lock-feedback.wrong{ color: var(--danger); } /* 轉盤 / 分段輸入樣式 */ .dial-row{ display:flex; gap:12px; justify-content:center; flex-wrap:wrap; margin: 14px 0; } .dial-group{ display:flex; flex-direction:column; align-items:center; gap:6px; } .dial-group label{ font-size:.8em; color:#6b4a26; } .dial-input{ width: 84px; padding: 10px 6px; text-align:center; font-size:1.2em; font-weight:700; border: 2px solid var(--amber-dark); border-radius: 8px; background:#fffaf0; color: var(--ink); font-family:"Noto Serif TC", serif; } .dial-input:focus{ outline:2px solid var(--gold); } .single-input{ width: 100%; max-width:220px; display:block; margin: 14px auto 0; padding: 12px; text-align:center; font-size:1.3em; font-weight:700; border: 2px solid var(--amber-dark); border-radius: 8px; background:#fffaf0; color: var(--ink); } .success-modal-box{ text-align:center; max-width: 420px; } .success-icon{ font-size:3em; margin-bottom:6px; } #success-title{ color: var(--success); font-family:"Noto Serif TC", serif; font-weight:900; font-size:1.6em; margin:6px 0; } #success-reward{ line-height:1.7; margin-bottom:20px; } #ending-stats{ background: rgba(224,176,83,.18); border: 1.5px solid var(--amber); border-radius:10px; padding: 16px 20px; margin-bottom:20px; font-size:.96em; line-height:1.9; box-shadow: inset 0 0 10px rgba(139,90,32,.1); } .time-stat-grid{ display:flex; gap: 12px; margin-top: 10px; flex-wrap: wrap; } .time-stat-card{ flex: 1; min-width: 200px; background: rgba(255,255,255,.6); border: 1px solid var(--amber); border-radius: 8px; padding: 8px 14px; display:flex; flex-direction:column; gap: 2px; } .time-stat-label{ font-size: .85em; color: #7a4f21; font-weight:700; } .time-stat-val{ font-size: 1.15em; font-weight: 900; color: var(--ink); font-family: "Courier New", monospace, sans-serif; } .time-stat-card.hidden-time{ background: linear-gradient(180deg, rgba(255,245,210,.9), rgba(240,220,160,.9)); border-color: #d4af37; box-shadow: 0 0 10px rgba(212,175,55,.35); } .time-stat-card.hidden-time .time-stat-val{ color: #9c6500; } .intro-btns{ display:flex; flex-direction:column; align-items:center; gap:8px; } .ending-actions{ display:flex; gap:12px; justify-content:center; flex-wrap:wrap; margin-top:16px; } /* 五關通關震撼轉場層 */ .door-reveal-overlay{ position:fixed; inset:0; z-index:150; background: radial-gradient(circle at center, rgba(139,90,32,.9), rgba(15,10,5,.98) 70%); display:flex; align-items:center; justify-content:center; padding:24px; animation: revealFadeIn .6s cubic-bezier(0.16, 1, 0.3, 1); } @keyframes revealFadeIn{ from{ opacity:0; transform: scale(1.08); } to{ opacity:1; transform: scale(1); } } .door-reveal-box{ max-width: 620px; background: linear-gradient(180deg, rgba(246,236,212,.98), rgba(230,210,165,.98)); border: 4px solid var(--gold); border-radius: 16px; padding: 36px 32px; text-align: center; box-shadow: 0 0 60px rgba(224,176,83,.6), 0 20px 60px rgba(0,0,0,.9); animation: boxShake .5s ease-out; } @keyframes boxShake{ 0%, 100%{ transform: translate(0,0); } 20%{ transform: translate(-4px, 2px); } 40%{ transform: translate(4px, -2px); } 60%{ transform: translate(-2px, 1px); } 80%{ transform: translate(2px, -1px); } } .door-reveal-icon{ font-size:3.6em; margin-bottom:8px; animation: glowPulse 2s infinite alternate ease-in-out; } @keyframes glowPulse{ from{ filter: drop-shadow(0 0 10px rgba(224,176,83,.5)); } to{ filter: drop-shadow(0 0 30px rgba(224,176,83,.95)); } } .door-reveal-title{ color: var(--amber-dark); font-family:"Noto Serif TC", serif; font-weight:900; font-size:1.8em; margin: 6px 0 14px; letter-spacing: 2px; } .door-reveal-text{ font-size:1.05em; line-height:1.9; color: var(--ink); margin-bottom:24px; } .pulse-btn{ animation: pulseBtn 1.8s infinite ease-in-out; } @keyframes pulseBtn{ 0%, 100%{ transform: scale(1); box-shadow: 0 4px 0 #6b4114, 0 8px 16px rgba(0,0,0,.4); } 50%{ transform: scale(1.05); box-shadow: 0 4px 0 #6b4114, 0 12px 28px rgba(224,176,83,.8); } } .toast{ position:fixed; bottom: 70px; left:50%; transform: translateX(-50%); background: rgba(20,14,8,.92); color: var(--gold); border: 1.5px solid var(--amber); padding: 10px 22px; border-radius: 24px; font-size:.95em; z-index: 200; animation: toastIn .2s ease; } @keyframes toastIn{ from{ opacity:0; transform: translate(-50%, 10px);} to{ opacity:1; transform: translate(-50%,0);} } /* 結局立繪與對白視覺專區 */ .ending-content-box{ max-width: 720px !important; max-height: 92vh; overflow-y: auto; } .ending-visual-wrap{ display:flex; justify-content:center; margin: 12px 0 16px; } .ending-portrait-card{ display:inline-flex; flex-direction:column; align-items:center; background: linear-gradient(180deg, rgba(40,25,12,.95), rgba(20,12,6,.98)); border: 3px solid var(--gold); border-radius: 14px; padding: 12px; box-shadow: 0 8px 30px rgba(0,0,0,.7), 0 0 25px rgba(224,176,83,.4); position:relative; animation: portraitFadeIn .7s ease; } @keyframes portraitFadeIn{ from{ opacity:0; transform: translateY(12px) scale(.95); } to{ opacity:1; transform: translateY(0) scale(1); } } .ending-portrait-img{ width: 220px; height: 220px; object-fit: cover; border-radius: 10px; border: 1.5px solid var(--amber); box-shadow: 0 4px 12px rgba(0,0,0,.8); } .ending-portrait-card.jade-seal .ending-portrait-img{ border-color: #7ce890; box-shadow: 0 0 24px rgba(120,230,140,.6), 0 0 40px rgba(255,215,0,.5); } .ending-role-tag{ margin-top: 8px; background: linear-gradient(90deg, #8b5a20, #4a2808, #8b5a20); color: var(--gold); font-family: "Noto Serif TC", serif; font-weight: 900; font-size: .92em; letter-spacing: 2px; padding: 4px 14px; border-radius: 20px; border: 1px solid var(--amber); box-shadow: 0 2px 6px rgba(0,0,0,.6); } .ending-dialog-box{ background: rgba(246,236,212,.95); border: 2px solid var(--amber-dark); border-radius: 10px; padding: 18px 22px; box-shadow: inset 0 0 15px rgba(139,90,32,.12); margin-bottom: 16px; } /* KaTeX 微調 */ .katex{ font-size: 1.05em; } @media (max-width: 640px){ #game-title{ font-size:1.0em; } #lock-progress{ display:none; } .music-controls{ padding: 2px 6px; } #volume-slider{ width: 45px; } .nav-arrow{ width:44px; height:44px; font-size:1.1em; } .intro-content{ padding: 20px 16px; } .modal-box{ padding: 18px 16px; } .door-reveal-title{ font-size:1.35em; } .ending-portrait-img{ width: 160px; height: 160px; } }