/* 島嶼開封：演出層。所有稀有度、卡牌資料與控制仍由程式決定。 */
.nav .sound-toggle{border:1px solid #bda37488;border-radius:5px;color:#f4d498;background:#153747;min-height:38px}
.sound-help{padding:15px;margin-top:14px;border:1px solid #b5a07066;border-radius:8px;background:#0a2633}
.sound-status{font-size:.95rem;line-height:1.7;color:#e7d4aa;margin:0 0 12px}
.sound-help audio{display:block;width:100%;max-width:390px;min-height:44px;margin:12px 0}
.sound-help summary{font-size:.95rem;cursor:pointer;color:#bfe0e3;min-height:34px}
.sound-help>small{display:block;font-size:.8rem;margin-top:14px}
.modal.ritual-modal{padding:0;max-width:1180px;width:calc(100% - 32px);max-height:94dvh;background:#081b27;overflow:auto;overscroll-behavior:contain}
.ritual-modal>.modal-head{padding:16px 24px 8px;margin:0;border:0}
.ritual-modal>.modal-head h2{font-size:1.1rem;margin:0}
.ritual-modal>.modal-actions{position:sticky;bottom:0;padding:15px 24px;margin:0;background:#071c29f5;border-top:1px solid #b9975e55;backdrop-filter:blur(14px);z-index:15}
.ritual-toolbar{position:relative;z-index:16;display:flex;justify-content:space-between;align-items:center;gap:12px;padding:10px 24px 15px;background:#081b27}
.ritual-toolbar .select{font-size:.875rem;padding:7px 10px}
.ritual-toolbar .mini{min-height:36px}
.ritual-shell{--glow:#c8d6cf;--glow-rgb:180,210,200;position:relative;isolation:isolate;min-height:540px;overflow:hidden;padding:24px;background:#061420;perspective:1100px}
.ritual-shell.rarity-1{--glow:#95ecd5;--glow-rgb:120,224,194}
.ritual-shell.rarity-2{--glow:#f5bd68;--glow-rgb:247,188,95}
.ritual-shell.rarity-3{--glow:#ffdc93;--glow-rgb:255,214,139}
.ritual-scene{position:absolute;inset:0;background-position:center;background-size:cover;z-index:-3;opacity:.18;transform:scale(1.02);transition:opacity .65s ease,transform 3s ease}
.ritual-haze{position:absolute;inset:0;z-index:-2;background:linear-gradient(0deg,#03121ded,transparent 38%,#0416229e),radial-gradient(ellipse at 50% 35%,transparent,#020e1acc 90%);pointer-events:none}
.phase-reveal.rarity-2 .ritual-scene{opacity:.55;animation:scene-arrival 2.4s ease-out both}
.phase-reveal.rarity-3 .ritual-scene,.phase-variant.rarity-3 .ritual-scene{opacity:.88;animation:scene-arrival 3.3s ease-out both}
.phase-register .ritual-scene{opacity:.36}
.phase-suspense .ritual-haze{background:radial-gradient(ellipse at center,#0a1a25a0,#010a13f5)}
.phase-reveal.rarity-3 .ritual-haze{background:linear-gradient(0deg,#03121de8,transparent 45%,#04111ed9),radial-gradient(ellipse at center,transparent 20%,#03131a85)}
.theme-silicon,.theme-tech{--theme-light:#83eaff}.theme-mountain,.theme-nature{--theme-light:#b0e1df}.theme-temple,.theme-culture{--theme-light:#ffae70}.theme-tea,.theme-life{--theme-light:#f6d69a}
.ritual-particles{position:absolute;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
.ritual-particles i{position:absolute;left:var(--x);top:var(--y);width:var(--s);height:var(--s);border-radius:50%;background:var(--glow);opacity:0;box-shadow:0 0 10px var(--glow);animation:drifting-light 4s ease-in-out var(--d) infinite}
.rarity-0 .ritual-particles{display:none}.rarity-1 .ritual-particles{opacity:.35}
.phase-suspense .ritual-particles{opacity:.3}
.sealed-scene{display:flex;flex-direction:column;align-items:center;gap:18px;text-align:center;min-height:530px;position:relative}
.omen-words{font:500 1.1rem/1.7 'Noto Serif TC',serif;color:#edd6ae;letter-spacing:.2em;min-height:30px;margin:0;animation:words-arrive .6s ease-out}
.packet-shell{position:relative;width:246px;height:324px;margin:4px 0 6px;filter:drop-shadow(0 22px 25px #0009);transform:rotate(-3deg);transition:transform .4s ease}
.packet-face{position:absolute;inset:0;display:flex;align-items:center;flex-direction:column;justify-content:space-between;padding:22px 20px;background:repeating-linear-gradient(80deg,#97764109 0 1px,transparent 1px 4px),linear-gradient(120deg,#dad0ab,#aca076);color:#303b36;border:1px solid #f5dfb4;border-radius:4px 4px 10px 10px;box-shadow:inset 0 0 0 8px #272e2833,inset 0 0 0 10px #b6a876;overflow:hidden}
.packet-face:after{content:'';position:absolute;inset:0;pointer-events:none;background:linear-gradient(120deg,transparent 30%,#ffffff15 50%,transparent 65%)}
.packet-face h2{font-size:1.9rem;color:inherit;letter-spacing:.2em;margin:8px 0}
.packet-edition{letter-spacing:.3em;font-size:.875rem}.packet-subtitle{font-size:.875rem;letter-spacing:.1em}.packet-footer{font-size:.75rem;letter-spacing:.15em}
.packet-seal{font:700 2rem/1 'Noto Serif TC',serif;color:#edd4a0;background:#8e3c2e;border:3px double #ddbe87;padding:10px;box-shadow:0 3px 12px #20281950;border-radius:50%}
.packet-strip{position:absolute;left:-8px;right:-8px;top:26px;padding:7px;background:#932f29;color:#f5cf89;font-size:.8rem;letter-spacing:.7em;border-top:1px solid #e2b273;border-bottom:1px solid #e2b273;box-shadow:0 3px 5px #0006;transform:rotate(3deg);transform-origin:left}
.packet-inside{position:absolute;inset:12px;background:linear-gradient(#164658,#061b29);border:1px solid #e3c17e;border-radius:8px}
.packet-tech .packet-face{background:repeating-linear-gradient(45deg,#95dbea0c 0 1px,transparent 1px 14px),linear-gradient(135deg,#203c51,#15202c);color:#c6e5e9;border-color:#829fb1;box-shadow:inset 0 0 0 7px #183442,inset 0 0 0 8px #72909a}.packet-tech .packet-strip{background:#277483}.packet-tech .packet-seal{background:#174757;border-color:#95d0d7}
.packet-culture .packet-face{background:linear-gradient(135deg,#8d3f2e,#4e1e23);color:#f4d4a1;box-shadow:inset 0 0 0 8px #672b27,inset 0 0 0 10px #a6804f}
.packet-nature .packet-face{background:linear-gradient(135deg,#9aaf9f,#d3d8bb);color:#214640}.packet-nature .packet-strip{background:#346055}
.phase-omen .packet-shell{animation:packet-breathe 2s ease-in-out infinite}
.phase-opening .packet-strip{animation:tear-seal .48s ease-in both}.phase-opening .packet-face{animation:packet-part .6s ease-in both}
.phase-dealing .packet-shell{animation:packet-away .34s ease-in both}
.seal-controls{min-height:88px;display:flex;align-items:center;gap:20px;flex-wrap:wrap;justify-content:center}
.seal-controls label{display:grid;gap:12px;font-size:.875rem;color:#e5d0ad}
.seal-controls input[type=range]{width:232px;height:22px;accent-color:#edc57e;cursor:ew-resize;background:linear-gradient(90deg,#d8b26b var(--seal),#183847 var(--seal));border-radius:12px}
.reveal-spotlight{position:relative;min-height:615px;display:flex;align-items:center;flex-direction:column;gap:16px;text-align:center}
.spotlight-heading{min-height:105px;text-shadow:0 2px 15px #000}
.spotlight-heading h2{font-size:clamp(1.65rem,4vw,2.8rem);letter-spacing:.18em;color:var(--glow);margin:9px 0}
.spotlight-heading p{margin:4px 0;color:#ead7b5;font-size:.95rem}
.spotlight-card{position:relative;width:232px;max-width:80vw;z-index:2;transform-style:preserve-3d}
.spotlight-card:before{content:'';position:absolute;inset:10%;border-radius:50%;background:radial-gradient(ellipse,rgba(var(--glow-rgb),.2),transparent 72%);transform:scale(2);z-index:-1;pointer-events:none}
.spotlight-card .card{box-shadow:0 14px 40px #000c,0 0 30px rgba(var(--glow-rgb),.25);text-align:left}
.spotlight-card .card:hover{transform:none}
.spotlight-card .card-picture .art{aspect-ratio:1.15}
.spotlight-card .card-context,.spotlight-card .card-mystery,.spotlight-card .card-tags{display:none}
.spotlight-card .card-brief{min-height:90px;font-size:.875rem}
.spotlight-card .card-name{font-size:1.1rem;min-height:44px}
.spotlight-card .pack-back{width:100%;min-height:363px;margin:0}
.spotlight-card.face-up{animation:reveal-card .52s cubic-bezier(.16,.7,.3,1) both}
.rarity-2 .spotlight-card.face-down,.rarity-3 .spotlight-card.face-down{animation:rare-rustle .36s ease-in-out infinite alternate}
.rarity-2 .spotlight-card.face-down .pack-back{border-color:#edbd6f;box-shadow:0 0 25px #edbd6f40}
.rarity-3 .spotlight-card.face-down .pack-back{border:2px solid #ffe3a4;box-shadow:0 0 40px #edc37165,inset 0 0 30px #edc37120}
.phase-reveal.rarity-3 .spotlight-card{animation:island-arrival 1.15s cubic-bezier(.1,.7,.25,1) both}
.phase-reveal.rarity-3 .spotlight-heading{animation:words-arrive .8s .15s ease-out both}
.signature-line{font-family:'Noto Serif TC',serif;letter-spacing:.08em;color:#e9cf9b;font-size:.95rem;margin:0;text-shadow:0 2px 8px #000}
.receipt-label{display:flex;align-items:center;justify-content:center;gap:5px;flex-wrap:wrap;flex-direction:column;line-height:1.6;font-size:.875rem;color:#bdd5d8;margin:12px 0 0;text-align:center}
.receipt-label.new b{color:#f1d38e}.receipt-label>span{color:#a8e2cf;font-size:.8rem}
.pack-table-heading{position:relative;text-align:center;margin:0 0 28px}.pack-table-heading h2{font-size:1.45rem;letter-spacing:.08em}
.ritual-shell .pack-reveal{position:relative;align-items:start;perspective:1000px;gap:14px;z-index:2}
.ritual-shell .pack-back{min-height:386px;border-radius:9px;background:repeating-linear-gradient(45deg,#bda87309 0 1px,transparent 1px 12px),radial-gradient(ellipse at center,#244d53,#09232f 70%);border:1px solid #ac905e;box-shadow:inset 0 0 0 5px #051f2b,inset 0 0 0 6px #a5844a55,0 12px 30px #0008;animation:deal-card .45s calc(var(--i,0)*.08s) both}
.ritual-shell .pack-back:not(.still):hover{border-color:#f4d198;transform:translateY(-6px);box-shadow:0 10px 35px #000b,0 0 24px #eacb7733}
.pack-back.still{animation:none}.ritual-shell .pack-back b{font:700 1.2rem 'Noto Serif TC';letter-spacing:.18em}.ritual-shell .pack-back small{font-size:.875rem}.ritual-shell .pack-back span{writing-mode:vertical-rl;font:700 1.45rem 'Noto Serif TC';letter-spacing:.4em;color:#cfb680}
.ritual-shell .pack-revealed{animation:words-arrive .28s ease-out}
.pack-receipt{position:relative;display:flex;gap:24px;flex-wrap:wrap;justify-content:center;border-top:1px solid #cbb2784a;padding:20px 10px 3px;margin-top:24px;color:#c8d8d9;font-size:.875rem}.pack-receipt b{font-size:1.1rem;color:#f3d29a;margin-left:8px}
.pack-anomaly{max-width:620px;padding:18px 25px;margin:24px auto 0;text-align:center;background:linear-gradient(120deg,#194657de,#303431ce);border:1px solid #d7bd77;border-radius:8px}.pack-anomaly p{font-size:.875rem;margin-bottom:0}
.registration-scene{min-height:610px;display:flex;align-items:center;justify-content:center;gap:55px}
.registration-card{width:200px;animation:into-journal .82s cubic-bezier(.3,.1,.3,1) both}.registration-card .card-context,.registration-card .card-mystery,.registration-card .card-tags{display:none}
.registration-journal{padding:25px 34px;max-width:340px;background:#071f2cda;border:1px solid #d0ae6c;border-radius:12px;text-align:center;box-shadow:0 14px 45px #0008}
.registration-journal .journal-map{max-height:285px}.registration-journal p{font-size:.95rem;color:#d1d9d2}
.journal-map{width:100%;max-width:245px;overflow:visible}.island-silhouette{fill:#18474e;stroke:#b79a61;stroke-width:1.1}.map-point circle{fill:#456c73}.map-point .map-halo{fill:none;stroke:#547278;opacity:.5}.map-point text{fill:#93b3b7;font:12px system-ui,sans-serif}.map-point.lit circle{fill:#efd098}.map-point.lit .map-halo{fill:#ddb36e12;stroke:#e5c27a}.map-point.lit text{fill:#f1d29a}.map-point.focus .map-halo{animation:map-ripple 1.4s ease-out infinite;transform-box:fill-box;transform-origin:center}
.journal-layout{display:grid;grid-template-columns:270px minmax(0,1fr);gap:25px;align-items:start}.journal-overview{padding:25px;text-align:center;position:sticky;top:20px}.journal-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(200px,1fr));gap:24px}.journal-entry{min-width:0}.journal-location{color:#eac78c;font:.95rem 'Noto Serif TC';padding:8px 0 12px;letter-spacing:.12em}.journal-entry>p{font-size:.875rem;color:#b9cace;margin-top:10px}.empty-journal{padding:40px}
.collection-mastery{border-top:1px solid #b9a57455;margin:24px 0;padding-top:22px}.mastery-milestones{display:flex;gap:8px;flex-wrap:wrap}.mastery-milestones span{border:1px solid #576e754d;padding:6px 9px;font-size:.875rem;color:#a6b8b9;border-radius:5px}.mastery-milestones span.unlocked{color:#e8ce9b;border-color:#bd9d606e;background:#b8954520}.island-story{padding:20px;border:1px solid #bda36c66;border-radius:5px;margin:20px 0;background:#18303be0}.island-story p{font:.95rem/1.8 'Noto Serif TC',serif;color:#d8d9c8}.island-story small{color:#9eb5b8}
.card.frame-unlocked{outline:1px solid #b6d9c690;outline-offset:2px;box-shadow:0 5px 18px #0006,0 0 12px #b7daba26}
.card.finish-night .card-picture:after,.card.finish-gold .card-picture:after{content:'';pointer-events:none;position:absolute;inset:0;z-index:3;background:linear-gradient(125deg,transparent 18%,#69b0ea44 30%,#d5a5eb44 37%,#c9f9e620 43%,transparent 53%);background-size:230% 100%;mix-blend-mode:screen;opacity:.7;animation:foil-sheen 7s ease-in-out infinite}
.card.finish-gold .card-picture:after{background-image:linear-gradient(125deg,transparent 18%,#f0b43155 30%,#ffffbc70 36%,#cc964320 43%,transparent 53%)}
.card.finish-night{border-color:#acc7f3}.card.finish-gold{border-color:#f5cf7d}
.foil-bloom{animation:foil-unfold .65s ease-out both}.foil-bloom .card-picture:after{opacity:1;animation:foil-sheen 1.3s ease-out both}
.hand .card{animation:none}.hand .card.drawn{animation:hand-arrival .42s ease-out both}.hand .card.drawn.returned{animation:hand-arrival .42s ease-out both,glow 1.7s ease-out}
.island-meter.crossing{animation:cross-center .9s .5s ease-out both}
@keyframes scene-arrival{from{transform:scale(1.08);filter:brightness(.4)}to{transform:scale(1);filter:brightness(1)}}
@keyframes drifting-light{0%,100%{opacity:0;transform:translateY(20px)}35%,65%{opacity:.65}80%{transform:translateY(-35px)}}
@keyframes words-arrive{from{opacity:0;transform:translateY(7px)}to{opacity:1;transform:translateY(0)}}
@keyframes packet-breathe{50%{transform:translateY(-5px) rotate(-1deg);filter:drop-shadow(0 20px 32px rgba(var(--glow-rgb),.25))}}
@keyframes tear-seal{to{transform:translate(90px,-35px) rotate(-23deg);opacity:0}}
@keyframes packet-part{to{transform:translateY(20px) scale(.97);opacity:.3}}
@keyframes packet-away{to{transform:translateY(50px) scale(.7);opacity:0}}
@keyframes reveal-card{from{opacity:.2;transform:rotateY(-78deg) translateY(12px)}to{opacity:1;transform:rotateY(0) translateY(0)}}
@keyframes rare-rustle{from{transform:rotate(-.65deg)}to{transform:rotate(.65deg) translateY(-2px)}}
@keyframes island-arrival{from{opacity:0;transform:translateY(45px) scale(.9)}to{opacity:1;transform:translateY(0) scale(1)}}
@keyframes deal-card{from{opacity:0;transform:translate(90px,-25px) rotate(9deg) scale(.85)}to{opacity:1;transform:translate(0,0) rotate(0) scale(1)}}
@keyframes into-journal{0%,18%{opacity:1;transform:translateX(0) scale(1)}100%{opacity:.15;transform:translateX(160px) scale(.2)}}
@keyframes map-ripple{from{transform:scale(.8);opacity:.9}to{transform:scale(1.5);opacity:.1}}
@keyframes foil-sheen{0%,20%{background-position:100% 0}65%,100%{background-position:-100% 0}}
@keyframes foil-unfold{from{filter:brightness(1.4);transform:scale(.97)}to{filter:brightness(1);transform:scale(1)}}
@keyframes hand-arrival{from{opacity:0;transform:translate(55px,-12px) rotate(4deg)}to{opacity:1;transform:translate(0,0) rotate(0)}}
@keyframes cross-center{40%{box-shadow:inset 0 0 15px #d4ddb033,0 0 18px #f2ce7870}100%{box-shadow:inset 0 2px 10px #0009}}
@media(max-width:900px){.modal.ritual-modal{width:calc(100% - 20px)}.ritual-shell{padding:22px 18px}.ritual-shell .pack-reveal{grid-template-columns:repeat(3,minmax(0,1fr));gap:16px}.ritual-shell .pack-back{min-height:365px}.journal-layout{grid-template-columns:220px minmax(0,1fr)}.journal-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.registration-scene{gap:15px}.registration-card{width:180px}.registration-journal{padding:20px;max-width:300px}}
@media(max-width:600px){.modal.ritual-modal{width:calc(100% - 12px);max-height:96dvh}.ritual-modal>.modal-head{padding:14px 16px 7px}.ritual-toolbar{padding:8px 14px 12px;align-items:start;gap:8px}.ritual-toolbar>div:first-child{display:flex;flex-direction:column;gap:3px}.ritual-toolbar .eyebrow{font-size:.8rem}.ritual-toolbar .small{font-size:.8rem}.ritual-toolbar .actions{gap:6px}.ritual-toolbar .select{max-width:108px;font-size:.8rem}.ritual-shell{padding:22px 12px;min-height:480px}.ritual-modal>.modal-actions{padding:12px 14px}.ritual-modal>.modal-actions button{font-size:.9rem;min-height:42px}.packet-shell{width:218px;height:286px}.packet-face h2{font-size:1.55rem}.packet-face{padding:18px}.packet-seal{font-size:1.65rem}.sealed-scene{min-height:500px;gap:20px}.omen-words{font-size:1rem}.seal-controls{gap:16px}.seal-controls input[type=range]{width:200px}.reveal-spotlight{min-height:610px;gap:12px}.spotlight-heading h2{font-size:1.85rem}.spotlight-card{width:222px}.signature-line{max-width:290px;line-height:1.6;font-size:.875rem}.ritual-shell .pack-reveal{grid-template-columns:repeat(2,minmax(0,1fr));gap:16px 10px}.ritual-shell .pack-back{min-height:340px}.ritual-shell .pack-back span{font-size:1.3rem}.pack-table-heading{margin-bottom:20px}.pack-table-heading h2{font-size:1.15rem}.pack-receipt{gap:14px;padding:18px 0 4px}.pack-receipt span{min-width:36%;text-align:center}.receipt-label{font-size:.8rem}.registration-scene{min-height:570px;position:relative;display:grid;place-items:center}.registration-journal{width:280px;max-width:90%;margin:auto}.registration-card{position:absolute;width:160px;left:12px;top:130px;z-index:2}.registration-journal .journal-map{max-height:300px}.journal-layout{grid-template-columns:1fr}.journal-overview{position:static;display:grid;grid-template-columns:1fr 1fr;text-align:left;align-items:center;gap:0 16px;padding:20px}.journal-overview .journal-map{grid-row:span 3;max-height:245px}.journal-overview h3{font-size:1rem}.journal-overview p{font-size:.8rem;line-height:1.6;margin:5px 0}.journal-grid{gap:18px 12px;grid-template-columns:repeat(2,minmax(0,1fr))}.journal-location{font-size:.875rem;letter-spacing:.04em}.journal-entry>p{font-size:.8rem}.collection-mastery .select{max-width:160px}.mastery-milestones span{font-size:.8rem}.empty-journal{padding:25px}}
@media(prefers-reduced-motion:reduce){.ritual-shell *,.card.finish-night .card-picture:after,.card.finish-gold .card-picture:after,.hand .card.drawn,.island-meter.crossing{animation:none!important;transition:none!important}.registration-card{display:none}}
.nomotion .ritual-shell *,.nomotion .card-picture:after,.nomotion .hand .card.drawn,.nomotion .island-meter.crossing{animation:none!important;transition:none!important}.nomotion .registration-card{display:none}
