@font-face{font-family:OpenDyslexic;src:url("fonts/OpenDyslexic-Regular.woff") format("woff");font-style:normal;font-weight:400;font-display:swap}
:root{color-scheme:dark;font-family:OpenDyslexic,Arial,sans-serif;font-size:14px;line-height:1.16;background:#08161c;color:#f6f2e4;--gold:#e8bf63;--river:#4de3ed;--rail:#ffcb5a;--panel:#17303a;--line:#385661}
*{box-sizing:border-box}body{margin:0;min-height:100vh}button,select{font:inherit}button{cursor:pointer}button:disabled{opacity:.42;cursor:not-allowed}button:focus-visible,select:focus-visible{outline:3px solid #fff;outline-offset:3px}[hidden]{display:none!important}
html,html *{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
html,body{touch-action:pan-x pan-y}
#setup-modal .setup-card:focus{outline:none}
.app{max-width:1500px;margin:auto;padding:18px clamp(12px,2vw,30px) 35px}.masthead{display:flex;align-items:center;justify-content:space-between;gap:18px;padding:4px 0 20px;border-bottom:1px solid #36515b}.brand{display:flex;align-items:center;gap:13px}.brand-mark{display:grid;place-items:center;width:51px;height:51px;border-radius:14px;background:linear-gradient(135deg,#f9d875,#9b692d);box-shadow:0 0 26px #c7903255;color:#18303a;font-size:2rem}.brand h1{font-family:Georgia,serif;font-size:clamp(1.6rem,3vw,2.45rem);line-height:1;margin:0;color:#f6d985;letter-spacing:.03em}.brand p{margin:5px 0 0;color:#b2c8cb;font-size:.8rem;letter-spacing:.07em;text-transform:uppercase}.header-actions{display:flex;gap:8px;flex-wrap:wrap}.header-actions button,.action-card button,.modal button{border:1px solid #6c8990;border-radius:9px;background:#29444d;color:#f7f4e7;padding:10px 13px;font-weight:700}.header-actions button:hover,.action-card button:hover:not(:disabled),.modal button:hover:not(:disabled){background:#3a5d65}.primary,.action-card button.primary,.modal button.primary{background:linear-gradient(135deg,#d9ad51,#a8752e);border-color:#ffda82;color:#18282c;box-shadow:0 4px 15px #0004}.primary:hover,.action-card button.primary:hover:not(:disabled),.modal button.primary:hover:not(:disabled){background:linear-gradient(135deg,#f4d47c,#bf893e)}
.game-layout{display:grid;grid-template-columns:minmax(0,1fr) 290px;gap:22px;margin-top:22px}.table-panel{display:flex;flex-direction:column;gap:16px;min-width:0}.player-tray{background:linear-gradient(130deg,#172f38,#1d3940);border:2px solid #4c6971;border-radius:15px;min-height:124px;padding:12px 16px;box-shadow:0 9px 25px #0003}.player-tray.active{border-color:var(--gold);box-shadow:0 0 0 2px #b8893544,0 12px 30px #0004}.player-heading{display:flex;justify-content:space-between;gap:12px;align-items:center;margin-bottom:8px}.player-heading strong{font-size:1.1rem}.player-heading span{font-weight:800;color:#f0cf7a}.tray-row{display:flex;align-items:center;gap:12px}.entrance-card{min-width:74px;border-radius:7px;background:#0d2028;border:1px solid #708b92;padding:5px 7px;font-size:.7rem;text-align:center;color:#bcd0d2}.entrance-card img{display:block;width:40px;height:56px;object-fit:cover;margin:auto auto 3px;border-radius:3px}.gem-collection{display:flex;gap:9px;overflow-x:auto;align-items:center;min-height:69px;flex:1}.empty-collection{color:#819fa5;font-size:.83rem}.gem-group{display:flex;align-items:center;gap:2px;background:#0f252d;border:1px solid #9a7842;border-radius:8px;padding:4px 5px;min-height:67px}.gem-group img,.reward-slot{width:42px;height:58px;object-fit:cover;border-radius:3px;box-shadow:0 3px 8px #0008}.gem-group small{align-self:end;font-size:.65rem;color:#efd189;padding-left:3px}.reward-slot{display:inline-block;border:2px dashed #efd189}
.board-frame{background:radial-gradient(circle,#25423c,#152f31 72%);border:2px solid #50756e;border-radius:18px;padding:14px 15px 10px;box-shadow:inset 0 0 55px #071816aa,0 15px 35px #0004}.board-caption{display:flex;justify-content:space-between;gap:15px;align-items:center;font-size:.85rem;color:#bdcfca;margin:0 auto 12px;max-width:650px}.board-caption span:first-child{background:#2e4f4c;border:1px solid #7aa398;border-radius:20px;padding:5px 13px;font-weight:800;color:#ecf6dd}.board{position:relative;display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:clamp(6px,1.3vw,13px);width:min(100%,650px);margin:auto}.board-cell{position:relative;display:block;width:100%;aspect-ratio:300/419;background:#1b3436;border:2px dashed #627d7a;border-radius:9px;padding:0;color:#c1d6d1;overflow:hidden;text-align:center}.board-cell.card{border:2px solid #6b8584;background:#12252b;box-shadow:0 5px 12px #0008}.board-cell.empty{display:grid;place-items:center}.board-cell.occupied-entrance{display:grid;place-items:center;border-style:solid;border-color:#d4bd78;background:#26454b;font-size:clamp(.7rem,1.6vw,1rem);font-weight:900}.board-cell.center{display:grid;place-items:center;background:#11282d;color:#9eb6b5;font-weight:900;letter-spacing:.04em}.board-cell.center img{width:100%;height:100%;object-fit:fill;opacity:1}.board-cell.center .center-label{position:absolute;inset:auto 3px 10%;background:#10242bd9;padding:5px;border-radius:5px}.board-cell.target{border-color:#a9f7ec;box-shadow:inset 0 0 25px #55e4d655}.board-cell.source{outline:4px solid #fff1a3;outline-offset:2px}.board-cell.claimable{outline:4px solid #ffe178;outline-offset:3px;box-shadow:0 0 20px #e9c054aa;animation:glimmer 1.5s ease-in-out infinite}.board-cell.tool-claim{outline-color:#b78bff;box-shadow:0 0 20px #a570eeaa}.board-cell.flippable.hint{outline:4px solid #82f4ed;outline-offset:2px;animation:glimmer 1s ease-in-out infinite}.board-cell .card-image{width:100%;height:100%;object-fit:fill;display:block}.board-cell .card-image.rotated{transform:rotate(180deg)}.board-cell .back{filter:brightness(.94)}.board-cell .card-label{position:absolute;bottom:4px;left:4px;right:4px;padding:4px;background:#0b1c25d9;border-radius:5px;font-size:.66rem;font-weight:900;z-index:3}.board-cell .card-route{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}.route-glow,.route-line,.bridge-glow,.bridge-line{fill:none;stroke:var(--color);stroke-linecap:round;stroke-linejoin:round}.route-glow,.bridge-glow{stroke-width:17;opacity:.42;filter:blur(4px)}.route-line,.bridge-line{stroke-width:7;stroke-dasharray:20 12;filter:drop-shadow(0 0 5px var(--color));animation:flow 1.15s linear infinite}.bridge-layer{position:absolute;inset:0;width:100%;height:100%;pointer-events:none;z-index:5;overflow:visible}.advance-arrow{position:absolute;z-index:7;inset:15%;border:3px solid #ffe17c;border-radius:50%;background:#826122ee;color:#fff8cd;font-size:clamp(2rem,4vw,4rem);font-weight:900;box-shadow:0 0 18px 8px #ffe06099;animation:glimmer 1.4s infinite}.board-footnote{text-align:center;color:#9cb9b4;font-size:.77rem;margin-top:11px}
.sidebar{display:flex;flex-direction:column;gap:12px}.status-card,.action-card{background:linear-gradient(160deg,#203d45,#132b33);border:1px solid #44646b;border-radius:13px;padding:16px;box-shadow:0 8px 20px #0003}.status-card{border-color:#af9052}.eyebrow{color:#e7c77b;font-size:.7rem;font-weight:900;letter-spacing:.18em}.status-card h2{margin:5px 0 7px;font-family:Georgia,serif;font-size:1.6rem}.status-card p{margin:0;color:#c3d5d3;line-height:1.4;font-size:.9rem;min-height:2.5em}.action-card h3{margin:0 0 11px;color:#f0d08a;font-size:1rem}.action-card button{width:100%;margin:0 0 7px}.action-card .tiny{font-size:.75rem;color:#a8c1c2;line-height:1.45;margin:5px 0 0}.help-card p{font-size:.82rem;line-height:1.5;color:#b9cfcc;margin:0}
.modal-backdrop{position:fixed;inset:0;background:#071319d9;display:grid;place-items:center;z-index:50;padding:20px;overflow:auto}.modal{width:min(100%,520px);max-height:min(90vh,850px);overflow:auto;background:linear-gradient(145deg,#25434a,#132a34);border:2px solid #c29d56;border-radius:18px;padding:24px;box-shadow:0 25px 90px #000a}.modal h2{font-family:Georgia,serif;color:#f8dc91;margin:4px 0 12px;font-size:clamp(1.5rem,4vw,2rem)}.modal p{color:#c8d8d5;line-height:1.5}.modal label{display:block;font-weight:800;color:#e6e8da;margin:16px 0 0;font-size:.86rem}.modal select{width:100%;margin-top:7px;padding:11px;border-radius:8px;background:#0d252c;color:#fff;border:1px solid #729195}.setup-grid{display:grid;grid-template-columns:1fr 1fr;gap:14px}.large{width:100%;margin-top:24px;padding:14px!important;font-size:1.05rem!important}.modal-actions{display:flex;justify-content:flex-end;gap:9px;flex-wrap:wrap;margin-top:18px}.choice-list{display:grid;gap:9px;margin:12px 0}.choice-list button{text-align:left}.choice-list button strong{display:block;color:#f5d483}.choice-list button span{display:block;font-size:.78rem;color:#c5d8d4;margin-top:4px}.rules-card{width:min(100%,620px)}.rules-card p{margin:10px 0}.shovel-fan{display:flex;align-items:flex-start;gap:9px;overflow-x:auto;padding:15px 2px 22px;min-height:180px}.shovel-fan button{padding:3px;background:#0b2228;min-width:95px;border:2px solid #718c8d}.shovel-fan button.selected{border-color:#ffe58b;transform:translateY(-8px)}.shovel-fan img{display:block;width:90px;height:126px;object-fit:cover;border-radius:5px}.shovel-controls{display:flex;gap:9px}.shovel-controls button{flex:1}.warning{color:#ffe39b!important;background:#574224;border:1px solid #bd9141;border-radius:9px;padding:11px}.reward-overlay{position:fixed;inset:0;z-index:100;background:#060c14db;overflow:hidden}.reward-card{position:fixed;z-index:102;display:block;object-fit:fill;border-radius:12px;outline:1px solid #fff;box-shadow:0 0 26px 6px #00000099}.confetti{position:fixed;z-index:101;width:9px;height:18px;animation:confetti-burst 1.5s ease-out forwards}
@keyframes glimmer{50%{box-shadow:0 0 27px 11px #e7c96a80}}@keyframes flow{to{stroke-dashoffset:-64}}@keyframes confetti-burst{to{transform:translate(var(--dx),var(--dy)) rotate(var(--spin));opacity:0}}
@media(max-width:850px){.game-layout{grid-template-columns:1fr}.sidebar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr))}.status-card{grid-column:1/-1}.board{width:min(100%,570px)}}
@media(max-width:560px){.masthead{align-items:flex-start;flex-direction:column}.header-actions button{padding:7px 9px;font-size:.8rem}.game-layout{margin-top:12px}.player-tray{min-height:98px;padding:9px}.entrance-card{min-width:58px}.entrance-card img{width:31px;height:43px}.gem-group img,.reward-slot{width:34px;height:47px}.board-frame{padding:9px}.board-caption{font-size:.7rem}.board-cell .card-label{font-size:.54rem}.sidebar{grid-template-columns:1fr 1fr;gap:8px}.action-card,.status-card{padding:10px}.action-card button{padding:7px;font-size:.77rem}.help-card{grid-column:1/-1}.setup-grid{grid-template-columns:1fr}}
@media(prefers-reduced-motion:reduce){.board-cell.claimable,.board-cell.flippable.hint,.advance-arrow,.route-line,.bridge-line{animation:none}.route-line,.bridge-line{stroke-dasharray:none}}
.board-cell .card-route.rotated{transform:rotate(180deg)}
.board-cell.target{border:4px solid #a9f7ec;box-shadow:0 0 0 3px #0a3436,0 0 22px 6px #55e4d699;cursor:copy}.board-cell.target .card-label{display:none}
.move-preview-card{display:block;width:min(160px,45vw);height:auto;aspect-ratio:300/419;object-fit:cover;border-radius:9px;margin:15px auto;box-shadow:0 10px 25px #0009}.move-preview-card.rotated{transform:rotate(180deg)}
.entrance-row{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));width:min(100%,650px);margin:9px auto;place-items:center}.entrance-row .entrance-card{grid-column:2;width:min(78%,118px);padding:5px;font-weight:800;color:#f5e2a0;border:2px solid #d6b365;box-shadow:0 0 18px #e3b05255}.entrance-row .entrance-card img{display:block;width:100%;height:auto;aspect-ratio:300/419;object-fit:fill;margin:0 auto 5px;border-radius:4px}.entrance-top{margin-bottom:12px}.entrance-bottom{margin-top:12px}.board-cell.occupied-entrance:disabled{opacity:1;cursor:default}.board-cell.occupied-entrance img{width:100%;height:100%;object-fit:fill}.board-cell .entrance-label{position:absolute;bottom:5px;left:5px;right:5px;background:#10242bd9;padding:5px;border-radius:5px;font-size:.72rem}
.shovel-fan{gap:0;min-height:195px}.shovel-fan button{margin-left:-19px;transform:translateY(13px) rotate(var(--tilt));transform-origin:50% 110%;transition:transform .15s}.shovel-fan button:first-child{margin-left:2px}.shovel-fan button.selected{transform:translateY(-8px) rotate(var(--tilt));z-index:2}
.advance-arrow{pointer-events:none}

/* Keep the table in the viewport while the collections and controls use its sides. */
body{background:transparent;overflow-x:hidden}
body::before,body::after{content:"";position:fixed;inset:-60vmax;z-index:0;pointer-events:none;opacity:0;transition:opacity .55s ease}
body::before{background:radial-gradient(ellipse 78vw 72dvh at 50% calc(50% - 50dvh),#c3973677 0%,#28596955 48%,transparent 100%)}
body::after{background:radial-gradient(ellipse 78vw 72dvh at 50% calc(50% + 50dvh),#37c9d677 0%,#28596955 48%,transparent 100%)}
body[data-turn="2"]::before,body[data-turn="1"]::after{opacity:1}
.app{position:relative;z-index:1;max-width:none;min-height:var(--game-visible-height,100dvh);padding:0 clamp(10px,1.2vw,22px)}
.masthead{position:fixed;z-index:15;top:8px;left:clamp(10px,1.2vw,22px);right:clamp(10px,1.2vw,22px);padding:0;border:0;pointer-events:none}
.masthead>*{pointer-events:auto}
.brand-mark{width:39px;height:39px;font-size:1.4rem}
.brand h1{font-size:clamp(1.2rem,2vw,1.7rem)}
.brand p{font-size:.64rem}
.header-actions button{padding:7px 10px;font-size:.82rem}
.game-layout{display:grid;grid-template-columns:minmax(180px,1fr) minmax(0,calc((100dvh - 170px)*.716)) minmax(255px,1fr);grid-template-rows:1fr 1fr;gap:0 clamp(10px,1.2vw,22px);height:100dvh;min-height:480px;margin:0}
.table-panel{display:contents}
.board-frame{grid-column:2;grid-row:1 / 3;position:relative;display:flex;align-items:center;justify-content:center;min-width:0;height:100%;padding:0;overflow:hidden;border:0;border-radius:0;background:transparent;box-shadow:none}
.board{width:min(100%,calc((100dvh - 170px)*.716))}
.board-caption{position:absolute;top:8px;left:0;right:0;max-width:none;margin:0;font-size:.72rem}
.board-caption span:first-child{padding:4px 8px}
.board-footnote{display:none}
.entrance-row{position:absolute;left:0;right:0;width:100%;margin:0;z-index:6}
.entrance-top{top:-70px}
.entrance-bottom{bottom:-70px}
.entrance-row .entrance-card{width:min(70%,104px);padding:3px;font-size:.65rem}
.entrance-row .entrance-card img{margin-bottom:2px}
.player-tray{min-width:0;min-height:0;max-height:calc(50dvh - 75px);overflow:auto;margin-top:64px}
.player-two{grid-column:1;grid-row:1;align-self:start}
.player-one{grid-column:1;grid-row:2;align-self:end;margin-top:0;margin-bottom:12px}
.gem-collection{flex:0 1 auto;min-width:0;flex-wrap:wrap;overflow-x:visible;overflow-y:auto;align-content:flex-start}
.sidebar{grid-column:3;grid-row:1 / 3;align-self:center;display:flex;max-height:calc(100dvh - 80px);overflow-y:auto;margin-top:60px;padding:0 3px 10px}
.status-card,.action-card{padding:12px}
.action-card button{padding:8px 10px}
.tool-collection{display:flex;align-items:center;align-content:flex-start;flex-wrap:wrap;gap:8px;flex:none;max-width:108px;min-height:69px;padding-left:10px;border-left:1px solid #6b8584}
.tool-card{display:block;flex:none;width:42px;height:58px;padding:0;border:0;border-radius:4px;background:transparent;box-shadow:0 3px 8px #0008}
.tool-card img{display:block;width:100%;height:100%;object-fit:cover;border-radius:4px}
.tool-card:disabled{opacity:1;cursor:default}
.tool-card.playable{outline:3px solid #b78bff;outline-offset:3px;animation:tool-glimmer 1.5s ease-in-out infinite}
@keyframes tool-glimmer{50%{box-shadow:0 0 22px 9px #a570eeaa}}
@media(max-width:560px){.tool-collection{gap:6px;min-height:57px;padding-left:7px}.tool-card{width:34px;height:47px}}
@media(prefers-reduced-motion:reduce){.tool-card.playable,.tool-card.playable img{animation:none}}
#end-turn-button{position:relative;overflow:hidden;isolation:isolate}
#end-turn-button span{position:relative;z-index:1}
#end-turn-button.auto-ending::before{content:"";position:absolute;z-index:0;inset:0 auto 0 0;width:0;background:#fff0a6;animation:auto-turn-fill 4.5s linear forwards;pointer-events:none}
#end-turn-button.auto-ending-slow::before{animation-duration:9s}
.turn-tool-actions{display:grid;gap:7px;margin-bottom:7px}
.turn-tool-actions button{margin:0;border-color:#b78bff;background:#42345c;color:#fff2ff}
.turn-tool-actions button:hover:not(:disabled){background:#5c467d}
@keyframes auto-turn-fill{to{width:100%}}

@media(max-width:1999px){
  .game-layout{display:flex;flex-direction:column;gap:12px;height:auto;min-height:0}
  .table-panel{display:flex;flex-direction:column;gap:12px}
  .board-frame{order:0;flex:none;height:100dvh;min-height:480px}
  .board{width:min(calc(100% - 4px),calc((100dvh - 170px)*.716))}
  .player-tray{max-height:none;margin:0;overflow:visible}
  .player-two{order:1;align-self:stretch}.player-one{order:2;align-self:stretch}
  .sidebar{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));max-height:none;overflow:visible;margin:0;padding:0 0 18px}
  .status-card{grid-column:1 / -1}
}
@media(max-width:560px){
  .masthead{flex-direction:row;align-items:center;gap:6px}
  .brand{gap:5px}.brand-mark{width:29px;height:29px;font-size:1rem;border-radius:8px}
  .brand h1{font-size:1rem}.brand p{display:none}
  .header-actions{justify-content:flex-end;gap:3px}
  .header-actions button{padding:5px 6px;font-size:.64rem}
  .board-caption{top:44px;font-size:.64rem}
  .entrance-row .entrance-card{width:min(70%,88px)}
  .entrance-top{top:-57px}.entrance-bottom{bottom:-57px}
  .sidebar{grid-template-columns:repeat(2,minmax(0,1fr))}
}
@media(prefers-reduced-motion:reduce){body::before,body::after{transition:none}#end-turn-button.auto-ending::before{animation:none;width:100%;opacity:.35}}
.game-logs-card{width:min(100%,650px);position:relative}
.game-logs-card .action-close{position:absolute;top:14px;right:14px}
.logs-list{display:grid;gap:9px;max-height:55vh;overflow:auto}
.game-log-row{display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid #527078;border-radius:10px;background:#132d35}
.game-log-row div{display:grid;gap:4px;min-width:0}
.game-log-row strong{font-size:.84rem;color:#f5dc9a}
.game-log-row span{font-size:.74rem;color:#b8d0d0}
.game-log-row button{flex:none}
@media(max-width:560px){.game-log-row{align-items:stretch;flex-direction:column}.game-log-row button{align-self:flex-start}}
@keyframes gem-anticipation{
  0%,33%,100%{transform:translateX(0) rotate(0)}
  5%,15%,25%{transform:translateX(-3px) rotate(-1.5deg)}
  10%,20%,30%{transform:translateX(3px) rotate(1.5deg)}
}
.shovel-order-legend{display:flex;justify-content:space-between;gap:12px;margin:12px 2px 0;color:#f4d47c;font-size:.7rem;font-weight:900;letter-spacing:.07em}
.shovel-order-legend span:last-child{text-align:right}
.shovel-fan .shovel-end-label{display:block;margin-top:4px;padding:4px 2px;border-radius:4px;background:#705629;color:#fff0ba;font-size:.62rem;font-weight:900;letter-spacing:.03em;white-space:nowrap}
.shovel-fan .shovel-end-label.top{background:#7f5930;color:#fff1c2}
.placement-overlay{position:fixed;inset:0;z-index:60;background:#071319a8}
.modal-backdrop{--overlay-shade:#071319d9}
.placement-overlay{--overlay-shade:#071319a8}
.reward-overlay{--overlay-shade:#060c14db}
.modal-backdrop,.placement-overlay,.reward-overlay{background-color:var(--overlay-shade);animation:overlay-dim-in .32s ease-out both}
@keyframes overlay-dim-in{from{background-color:transparent}to{background-color:var(--overlay-shade)}}
@media(prefers-reduced-motion:reduce){.modal-backdrop,.placement-overlay,.reward-overlay{animation:none}}
.placement-screen-reader{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}
.placement-card{position:fixed;display:block;object-fit:fill;border-radius:9px;outline:4px solid #ffe18a;box-shadow:0 0 0 8px #0d2429,0 18px 45px #000b}
.card-flip-animation{position:absolute;inset:0;z-index:12;border-radius:9px;background:url("cards/web-original/backs/Xa-Card-Back.jpg") center/100% 100% no-repeat;pointer-events:none;perspective:700px}
.card-flip-animation.fixed{position:fixed;inset:auto;z-index:3;box-shadow:0 0 0 8px #0d2429,0 18px 45px #000b}
.card-flip-animation img{display:block;width:100%;height:100%;object-fit:fill;border-radius:9px;backface-visibility:hidden;animation:card-flip-reveal var(--card-flip-duration) ease-in-out both}
@keyframes card-flip-reveal{0%{transform:scaleX(1)}48%,52%{transform:scaleX(.025)}100%{transform:scaleX(1)}}
.placement-card[draggable="true"]{cursor:grab}
.placement-card[draggable="true"]:active{cursor:grabbing}
.placement-card.ai-dragging{z-index:3;transition:left 1.05s cubic-bezier(.25,.7,.3,1),top 1.05s cubic-bezier(.25,.7,.3,1)}
.placement-drop-target{position:fixed;z-index:2;border:3px dashed #f2f3ec;border-radius:9px;box-shadow:0 0 19px #fff9;pointer-events:none}
.placement-card.rotated{transform:rotate(180deg)}
.placement-rotate,.placement-confirm,.placement-cancel{position:fixed;z-index:1;display:grid;place-items:center;border:2px solid #ffe18a;color:#fff8df;font-weight:900;box-shadow:0 7px 22px #000b,0 0 22px #e9b95288}
.placement-rotate{border-radius:50%;background:#18343de8;font-size:clamp(2.5rem,5vw,3.7rem);line-height:1}
.placement-rotate:hover,.placement-cancel:hover{background:#315660}
.placement-confirm{height:68px;border-radius:36px;background:linear-gradient(135deg,#f5d376,#b77d2e);color:#16262a;font-size:1.18rem;text-transform:uppercase;letter-spacing:.06em}
.placement-confirm:hover{background:linear-gradient(135deg,#ffe59b,#d89c46)}
.placement-cancel{width:48px;height:48px;border-radius:50%;background:#18343d;padding:0}
.placement-cancel::before,.placement-cancel::after{content:"";position:absolute;left:50%;top:50%;width:23px;height:3px;border-radius:2px;background:currentColor;transform:translate(-50%,-50%) rotate(45deg)}
.placement-cancel::after{transform:translate(-50%,-50%) rotate(-45deg)}
.reward-card{overflow:hidden}
.reward-card img{position:absolute;inset:0;display:block;width:100%;height:100%;object-fit:fill}

.drag-source-preview{position:absolute;inset:0;z-index:10;display:block;background:#12252b;pointer-events:none}
.drag-source-preview .card-image{width:100%;height:100%;object-fit:fill}
.drag-source-preview.empty{display:grid;place-items:center;background:#1b3436;color:#c1d6d1;font-weight:800}
.board-cell.pointer-draggable,.placement-card.pointer-draggable,.placement-rotate{touch-action:none}
.touch-drag-ghost{position:fixed;z-index:80;display:block;object-fit:fill;border-radius:9px;box-shadow:0 15px 38px #000b,0 0 18px #ffe18a99;pointer-events:none}
.placement-card.touch-dragging{z-index:3;pointer-events:none}
.board-cell.source,.placement-card{outline:none}
.shovel-fan button.selected{border-color:#718c8d}
.app.shovel-picking{z-index:30}
.shovel-picker-overlay{position:fixed;inset:0;z-index:20;--overlay-shade:#071319d9;background-color:var(--overlay-shade);animation:overlay-dim-in .32s ease-out both}
.shovel-picking .board-frame{z-index:21}
.shovel-picking .board-caption,.shovel-picking .entrance-row{opacity:.2}
.shovel-picking .board-cell:not(.shovel-choice){opacity:.2;pointer-events:none}
.shovel-picking .board-cell.shovel-choice{cursor:pointer}
.shovel-picking .board-cell .card-label{display:none}
.shovel-picking .board-cell.claimable{outline:none;animation:none}
.shovel-choice-label{position:absolute;left:8%;right:8%;bottom:10%;z-index:8;padding:7px 4px;border-radius:7px;background:#12343ce8;color:#fff;font-weight:900;font-size:clamp(.8rem,1.5vw,1.2rem);text-transform:uppercase;letter-spacing:.04em;box-shadow:0 3px 12px #000b;pointer-events:none}
.shovel-picker-cancel{position:fixed;right:18px;top:70px;z-index:22;padding:10px 14px;border:1px solid #8baaad;border-radius:9px;background:#29444d;color:#fff;font-weight:800}
.shovel-picker-cancel:hover{background:#3a5d65}
@media(prefers-reduced-motion:reduce){.shovel-picker-overlay{animation:none}}
.game-layout{grid-template-columns:minmax(180px,1fr) minmax(0,calc((100dvh - 170px)*.716)) minmax(180px,1fr)}
.board-status{position:absolute;bottom:8px;right:calc(50% + 60px);width:calc(50% - 68px);max-height:4.5em;overflow:hidden;margin:0;color:#c6d8d6;font-size:.72rem;line-height:1.25;text-align:right;text-shadow:0 2px 4px #000;z-index:7}
.turn-controls{position:absolute;bottom:9px;left:calc(50% + 60px);z-index:8;display:grid;gap:6px;width:min(170px,calc(50% - 68px))}
.turn-controls button{width:100%;min-height:34px;margin:0;padding:7px 9px;border-radius:8px;font-weight:800;font-size:.78rem}
.turn-controls button:not(.primary){border:1px solid #8b73b9;background:#42345c;color:#fff2ff}
.turn-controls button:not(.primary):hover:not(:disabled){background:#5c467d}
.turn-controls .turn-tool-actions{display:grid;gap:6px;margin:0}
@media(max-width:1999px){.game-layout{display:flex;flex-direction:column}}
@media(max-width:560px){.board-status{right:calc(50% + 50px);width:calc(50% - 55px);font-size:.62rem}.turn-controls{left:calc(50% + 50px);width:calc(50% - 55px)}.turn-controls button{padding:5px;font-size:.68rem}}
.board-cell.claimable{outline:none;box-shadow:0 0 20px #a9f7ec77;animation:none}
.board-cell.tool-claim{box-shadow:0 0 20px #a570eeaa}
.entrance-row .entrance-card{border-color:#708b92;box-shadow:0 0 18px #6b858455}
.board-cell.occupied-entrance{border-color:#6b8584}
.gem-group{border-color:#516d73}
.reward-slot{border-color:#708b92}
.entrance-row{grid-template-columns:repeat(3,minmax(0,1fr));height:auto}
.entrance-row .entrance-card{position:relative;grid-column:2;width:100%;aspect-ratio:300/419;height:auto;min-width:0;padding:0;overflow:hidden;border:2px solid #6b8584;border-radius:9px;background:#12252b;box-shadow:0 5px 12px #0008}
.entrance-row .entrance-card img{position:absolute;inset:0;display:block;width:100%;height:100%;aspect-ratio:auto;margin:0;border-radius:0;object-fit:fill}
.entrance-card .card-route{position:absolute;inset:0;width:100%;height:100%;pointer-events:none}
.entrance-route.facing-board{transform:rotate(180deg)}
.entrance-top .entrance-card img,.board-cell.occupied-entrance img.facing-board{transform:rotate(180deg)}
.board-cell.claimable.reward-claim{animation:gem-anticipation 1.2s ease-in-out infinite}
/* Keep the stack still until the newly revealed reward finishes flipping. */
.board-cell.reward-claim:has(> .card-flip-animation){animation:none}
.shovel-picking .board-cell.claimable.reward-claim{animation:none}
@media(prefers-reduced-motion:reduce){.board-cell.claimable.reward-claim{animation:none}}
.board-frame{--entrance-clearance:60px}
.board-status{right:calc(50% + var(--entrance-clearance));width:min(170px,calc(50% - var(--entrance-clearance) - 8px))}
.turn-controls{left:calc(50% + var(--entrance-clearance));width:min(170px,calc(50% - var(--entrance-clearance) - 8px))}
@media(max-width:560px){.board-status{right:calc(50% + var(--entrance-clearance));width:calc(50% - var(--entrance-clearance) - 4px)}.turn-controls{left:calc(50% + var(--entrance-clearance));width:calc(50% - var(--entrance-clearance) - 4px)}}
.board-slot{position:relative;min-width:0;aspect-ratio:300/419}
.board-slot.stacked::before{content:"";position:absolute;z-index:0;inset:0;border:2px solid var(--stack-color);border-radius:9px;background:#122c35;box-shadow:0 4px 10px #0008;transform:translate(var(--stack-x),var(--stack-y)) rotate(var(--stack-angle));pointer-events:none}
.board-slot .board-cell{position:relative;z-index:1;width:100%;height:100%;aspect-ratio:auto}
.board-cell{border-color:#828580}
.board-cell.card,.board-cell.occupied-entrance,.entrance-row .entrance-card{border-color:#828580}
.shovel-fan button,.shovel-fan button.selected{border-color:#828580}
.board-cell.target{border:2px solid #b2afa3;box-shadow:0 0 0 2px #222722,0 0 22px #f4f3db88;filter:brightness(1.08)}
.reward-slot,.gem-group{border-color:#828580}
.board-cell.flippable.hint{outline:none;box-shadow:0 0 15px #f2f2df88;animation:flip-reminder-shake .65s ease-in-out both}
.board-cell.claimable{box-shadow:0 0 20px #f4f0e099}
.board-cell.claimable.tool-claim{box-shadow:0 0 20px #a570eeaa}
@keyframes flip-reminder-shake{0%,100%{transform:none}18%,54%{transform:translateX(-2px) rotate(-1deg)}36%,72%{transform:translateX(2px) rotate(1deg)}}
.idle-hint{position:absolute;inset:0;z-index:10;display:grid;place-items:center;pointer-events:none;opacity:0}
.idle-hint span{max-width:90%;color:#fff4cf;font-size:clamp(2.7rem,7.5vw,7rem);font-weight:1000;line-height:.95;letter-spacing:.025em;text-align:center;text-shadow:0 5px 0 #1b292c,0 0 28px #fff2bd}
.idle-hint.show{animation:idle-pop 2.4s ease-in-out both}
@keyframes idle-pop{0%{opacity:0;transform:scale(.55)}18%{opacity:1;transform:scale(1.13)}30%{transform:scale(1)}70%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(1.05)}}
@media(prefers-reduced-motion:reduce){.board-cell.flippable.hint,.idle-hint.show{animation:none}.idle-hint.show{opacity:1}}
.turn-decision-shade{position:fixed;inset:0;z-index:40;background:#101419a8;opacity:0;pointer-events:none;transition:opacity .32s ease,background-color .32s ease}
.game-layout.turn-decision .turn-decision-shade{opacity:1}
.turn-controls{position:fixed;top:50%;bottom:auto;left:50%;width:min(320px,calc(100% - 28px));transform:translate(-50%,-50%);z-index:41;gap:10px}
.turn-controls button{min-height:52px;padding:11px 16px;font-size:clamp(.9rem,1.6vw,1.1rem);box-shadow:0 10px 28px #000a}
.turn-controls .turn-tool-actions{gap:10px}
#turn-tool-actions{display:flex;justify-content:center;align-items:stretch;gap:14px;margin-top:16px}
#turn-tool-actions .turn-tool-button{display:flex;flex:0 1 145px;flex-direction:column;align-items:center;justify-content:center;gap:11px;width:auto;min-width:0;min-height:188px;padding:12px 8px;text-align:center}
.turn-tool-button span{display:block;line-height:1.1}
.turn-tool-image{display:block;width:min(80px,100%);aspect-ratio:300/419;object-fit:fill;border-radius:5px;box-shadow:0 6px 16px #000b;transform:rotate(-7deg);pointer-events:none}
.turn-advance-icon{display:grid;place-items:center;width:min(80px,100%);aspect-ratio:300/419;border:3px solid #ffe17c;border-radius:7px;background:#826122ee;color:#fff8cd;font-family:Arial,sans-serif;font-size:clamp(3.2rem,7vw,4.5rem);line-height:1;box-shadow:0 6px 16px #000b,0 0 18px #ffe06077;transform:rotate(-7deg);pointer-events:none}
body[data-turn="2"] .turn-advance-icon{transform:rotate(173deg)}
@media(max-width:560px){.turn-controls{left:50%;width:min(280px,calc(100% - 24px))}.turn-controls button{min-height:48px;padding:10px 13px;font-size:.9rem}}
@media(prefers-reduced-motion:reduce){.turn-decision-shade{transition:none}}
.board{max-width:calc(100% - 24px)}
.board-slot.shaking{z-index:6}
.brand h1,.status-card h2,.modal h2{font-family:OpenDyslexic,Arial,sans-serif}
.idle-hint{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:clamp(.35rem,1.2vw,.85rem)}
.idle-hint-panel{display:flex;flex-direction:column;align-items:center;gap:clamp(.35rem,1.2vw,.85rem);max-width:calc(100% - 16px);padding:clamp(14px,2vw,22px) clamp(14px,2.5vw,26px);border-radius:22px;background:linear-gradient(145deg,#0a1b24ee,#1b343eea);box-shadow:0 16px 42px #000a,0 0 28px #f3dc8450;backdrop-filter:blur(8px)}
.idle-hint span{max-width:none;font-size:clamp(2rem,5.2vw,5rem);font-weight:700;letter-spacing:0;line-height:1.1;color:#fff3d4;text-shadow:0 3px 10px #071418cc,0 0 16px #fff2bd88}
.idle-hint .idle-hint-prefix{font-size:clamp(1rem,1.8vw,1.5rem);font-weight:400;color:#e6dfc4;text-shadow:0 2px 7px #071418cc}
#idle-hint-text{white-space:nowrap}
.board-status{max-height:none;overflow:visible;font-size:.72rem;line-height:1.2}
.center-discard-notice{position:fixed;top:50%;left:50%;z-index:2000;max-width:min(84vw,360px);padding:14px 20px;border:2px solid #f4d787;border-radius:16px;background:#102c2ae8;box-shadow:0 12px 32px #000a;color:#fff6d5;font-family:OpenDyslexic,Arial,sans-serif;font-size:clamp(1rem,2.2vw,1.35rem);font-weight:700;line-height:1.25;text-align:center;pointer-events:none;transform:translate(-50%,-50%)}
.center-discard-notice[hidden]{display:none}
body[data-turn="2"]:not(.player-two-view) .center-discard-notice{transform:translate(-50%,-50%) rotate(180deg)}
.player-tray,.player-tray.active{min-height:0;max-height:none;overflow:visible;padding:0;background:none;border:0;border-radius:0;box-shadow:none}
.player-heading{margin-bottom:14px;text-shadow:0 2px 8px #000a}
.player-tray.active .player-heading strong{color:#ffdc89}
.player-two{transform:rotate(180deg)}
.tray-row{align-items:flex-start;flex-wrap:wrap;gap:12px 20px}
.gem-collection{flex:1 1 250px;align-items:flex-start;align-content:flex-start;gap:12px 16px;min-height:0;overflow:visible;padding:4px 7px}
.gem-fan{--fan-card-width:clamp(38px,4vw,56px);--fan-card-height:clamp(53px,5.6vw,78px);position:relative;flex:none;width:var(--fan-card-width);height:calc(var(--fan-card-height) + 10px)}
.gem-fan.pair{width:calc(var(--fan-card-width) + 24px)}
.gem-fan img{position:absolute;top:4px;display:block;width:var(--fan-card-width);height:var(--fan-card-height);object-fit:fill;border-radius:4px;box-shadow:0 5px 12px #000b;transform-origin:50% 85%}
.gem-fan.single img{left:0;transform:rotate(calc(var(--collection-view-rotation,0deg) - 3deg))}
.gem-fan.single:nth-child(even) img{transform:rotate(calc(var(--collection-view-rotation,0deg) + 3deg))}
.gem-fan.pair img:first-child{left:1px;transform:rotate(calc(var(--collection-view-rotation,0deg) - 11deg))}
.gem-fan.pair img:last-child{right:1px;transform:rotate(calc(var(--collection-view-rotation,0deg) + 11deg))}
.tool-collection{align-items:flex-start;gap:10px;max-width:none;min-height:0;padding:4px 7px;border:0}
.tool-card{width:clamp(38px,4vw,56px);height:auto;aspect-ratio:300/419;transform:rotate(calc(var(--collection-view-rotation,0deg) + 4deg))}
.tool-card.playable{outline:none;box-shadow:0 0 16px #a570eeaa,0 5px 12px #000b}
@media(max-width:560px){.player-tray,.player-tray.active{padding:0 12px}.gem-collection{gap:10px 12px}.tool-card{width:38px}}
.modal p,.rules-card p,.status-card p,.action-card .tiny,.help-card p{line-height:1.26}
#status{width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
html,html *{cursor:url("cartoon-hand-pointer.svg") 16 2,default!important}
#rotation-stage{position:relative;min-height:var(--game-visible-height,100dvh);transition:transform 1.6s cubic-bezier(.42,0,.2,1)}
body.player-two-view #rotation-stage{transform:rotate(180deg);transform-origin:50% calc(var(--game-visible-height,100dvh) / 2)}
/* The optional screen rotation is selected before dealing a game. */
#setup-modal{z-index:210;align-items:center;padding:8px;background:#000;isolation:isolate}
.setup-card{width:min(100%,660px);max-height:calc(100dvh - 16px);text-align:center}
#setup-modal .setup-card{position:relative;z-index:1}
.setup-card:has(#setup-close:not([hidden])){padding-top:58px}
.setup-card.setup-mode-step .eyebrow,.setup-card.setup-mode-step #setup-description{visibility:hidden}
.setup-card #setup-description{margin:0 auto 22px;max-width:38rem}
.setup-choices{display:grid;gap:14px}
.setup-choice{display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;min-height:100px;width:100%;padding:16px;background:linear-gradient(145deg,#42636a,#1b3842);border:2px solid #ccab65;border-radius:16px;color:#fff3cb;box-shadow:0 9px 20px #0005;transition:transform .16s ease,box-shadow .16s ease,background .16s ease}
.setup-choice:hover,.setup-choice:focus-visible{transform:translateY(-3px);background:linear-gradient(145deg,#567a7d,#234a52);box-shadow:0 13px 25px #0007,0 0 18px #e7c77766}
.setup-choice strong{font-size:clamp(1.25rem,3vw,1.8rem);line-height:1.15}
.setup-choice span{font-size:.82rem;color:#d7e5de}
.setup-type-choices{grid-template-columns:repeat(2,minmax(0,1fr))}
.setup-type-choice{min-height:0;padding:12px}
.setup-type-choice img{display:block;width:min(100%,190px);aspect-ratio:300/419;object-fit:fill;border-radius:9px;box-shadow:0 8px 20px #0009}
@media(max-width:560px){.setup-card{padding:16px}.setup-card #setup-description{margin-bottom:12px}.setup-choice{min-height:78px;padding:10px}.setup-type-choice img{width:min(100%,120px)}.setup-choice strong{font-size:1.1rem}}
.setup-player-choices{gap:20px;text-align:center}
.setup-card #setup-description:empty{display:none}
.setup-rotation-choice{width:min(100%,320px);min-height:230px;margin:auto;gap:14px}
.setup-choice .setup-rotation-icon{display:block;width:clamp(110px,25vw,150px);height:clamp(110px,25vw,150px);object-fit:contain;filter:drop-shadow(0 0 15px #ffe39188)}
.setup-rotation-icon path{fill:none;stroke:#ffe391;stroke-width:9;stroke-linecap:round;stroke-linejoin:round}
.setup-rotation-icon .no-rotation-slash{display:none}
.setup-rotation-icon.no-rotation .no-rotation-slash{display:block}
.setup-rotation-icon .slash-outline{stroke:#203c43;stroke-width:18}
.setup-player-section{padding:0 12px}
.setup-player-section h3{margin:0;color:#f8dc91;font-size:1.15rem}
.modal .setup-name-label{display:block;margin:8px 0 14px;font-size:1rem}
.setup-player-name{display:block;width:100%;min-height:66px;margin-top:8px;padding:10px 18px;border:0;border-radius:12px;background:#0d252c;color:#fff;font:800 clamp(1.35rem,3.5vw,2.2rem) OpenDyslexic,Arial,sans-serif;text-align:center;-webkit-user-select:text;user-select:text}
.setup-player-types{display:flex;justify-content:center;gap:clamp(14px,4vw,32px)}
#setup-modal .setup-player-type,#setup-modal .setup-player-type:is(:hover,:focus-visible){width:auto;min-height:0;padding:0;border:0;background:transparent;box-shadow:none;transform:none;transition:none}
.setup-player-type img{width:clamp(96px,min(23vw,18dvh),168px);min-width:0;box-shadow:none}
.setup-player-type strong{position:absolute;width:1px;height:1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap}
.setup-player-type.not-selected{opacity:.38;filter:grayscale(1)}
.setup-player-type[aria-pressed="true"] img{filter:drop-shadow(0 0 16px #f8dc91b0)}
.setup-two-players{gap:10px}
.setup-two-players .setup-player-name{min-height:52px;font-size:clamp(1.3rem,3vw,1.8rem)}
.setup-two-players .setup-player-type img{width:clamp(82px,min(16vw,12dvh),108px)}
.setup-actions{display:flex;gap:12px;margin-top:10px}
.setup-actions button{flex:1;min-width:0;min-height:46px;font-size:1rem}
.setup-start{display:block;width:100%}
.setup-card:has(.setup-rotation-choice) .setup-actions{margin-top:30px}
.setup-two-players~.setup-actions{margin-top:2px}
.setup-start:disabled{opacity:.42;cursor:default}
@media(max-width:560px){.setup-player-section{padding:0}.setup-player-choices{gap:14px}.setup-player-name{min-height:58px}}
html.turn-announcement .turn-announcement-shade,html.turn-announcement .turn-announcement-message{position:fixed;inset:0;display:grid;place-items:center;animation:turn-announcement 2.3s ease-in-out both}
.turn-announcement-shade{display:none;pointer-events:none}
html.turn-announcement .turn-announcement-shade{display:block;z-index:5000;background:#07151bb8;animation-name:turn-rotation-shade}
.turn-announcement-message{display:none;pointer-events:none}
html.turn-announcement .turn-announcement-message{z-index:6000;display:flex;flex-direction:column;justify-content:center;gap:.25em;padding:24px;color:#fff0b2;font-family:OpenDyslexic,Arial,sans-serif;font-size:clamp(2.2rem,7vw,6rem);font-weight:800;line-height:1.1;text-align:center;text-shadow:0 5px 20px #000,0 0 35px #ffd66b}
html.turn-announcement:not(.computer-turn-announcement) body[data-turn="2"]:not(.player-two-view) .turn-announcement-message{transform:rotate(180deg)}
.turn-announcement-subtitle{font-size:.38em;line-height:1.2}
@keyframes turn-announcement{0%{opacity:0}12%,88%{opacity:1}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){#rotation-stage{transition:none}html.turn-announcement .turn-announcement-shade,html.turn-announcement .turn-announcement-message{animation-duration:.5s}}
.ai-pointer{position:fixed;z-index:2000;width:44px;height:44px;transform-origin:16px 2px;pointer-events:none;transition:left .7s cubic-bezier(.25,.7,.3,1),top .7s cubic-bezier(.25,.7,.3,1)}
.ai-pointer img{display:block;width:44px;height:44px;filter:drop-shadow(0 4px 4px #000b)}
.opponent-input-shield{position:fixed;inset:0;z-index:120;background:transparent;touch-action:none}
html.computer-turn,html.computer-turn *{cursor:url("cartoon-hand-pointer-dim.svg") 16 2,default!important}
/* Face Player 2's controls toward the current viewer in either screen mode. */
body:not(.player-two-view)[data-turn="2"] .ai-pointer,body[data-turn="2"] .modal-backdrop .modal,body[data-turn="2"] .idle-hint-panel,body[data-turn="2"] .shovel-picker-cancel,body[data-turn="2"] .shovel-choice-label,body[data-turn="2"] .board-caption span,body[data-turn="2"] .board-cell .entrance-label,body[data-turn="2"] .board-cell .center-label{transform:rotate(180deg)}
/* Screen-level dialogs face the device even while the table faces Player 2. */
body[data-turn="2"] .modal-backdrop.screen-upright-dialog .modal{transform:none}
body.player-two-view .modal-backdrop.screen-upright-dialog{transform:rotate(180deg);transform-origin:50% 50%}
body:not(.screen-rotation-enabled)[data-turn="2"] #action-modal.outcome-modal .modal{transform:none}
#action-modal.outcome-modal{grid-template-columns:minmax(0,1fr);padding:12px;overflow:hidden}
body:has(#action-modal.outcome-modal:not([hidden])){height:100dvh;min-height:0;overflow:hidden}
#action-modal.outcome-modal .modal{display:flex;flex-direction:column;width:100%;height:calc(100dvh - 24px);min-width:0;max-height:none;overflow:hidden;padding:clamp(12px,2vw,24px);text-align:center}
#action-modal.outcome-modal h2{flex:none;font-family:OpenDyslexic,Arial,sans-serif;font-size:clamp(1.55rem,4.5vmin,3.2rem);margin:0 0 6px}
#action-modal.outcome-modal #action-description{flex:none;margin:0 0 8px}
#action-modal.outcome-modal #action-content{display:flex;flex:1;min-height:0;min-width:0}
#action-modal.outcome-modal .modal-actions{flex:none;justify-content:center;margin-top:8px}
#action-modal.outcome-modal .modal-actions button{min-width:min(220px,100%);font-size:1.1rem}
.winning-gem-gallery{display:grid;flex:1;grid-template-columns:repeat(var(--winning-columns,4),minmax(0,1fr));grid-template-rows:repeat(var(--winning-rows,1),minmax(0,1fr));align-items:center;justify-items:center;min-width:0;min-height:0;gap:clamp(8px,1.5vmin,20px);margin:0;padding:clamp(8px,1.5vmin,20px);overflow:hidden;background:radial-gradient(ellipse at center,#e7be5530 0%,transparent 72%)}
.winning-gem-gallery .gem-fan{--fan-card-width:var(--winning-card-width,86px);--fan-card-height:calc(var(--fan-card-width) * 1.397);height:calc(var(--fan-card-height) + 12px);animation:winning-gem-enter .65s cubic-bezier(.2,.8,.2,1) both;animation-delay:calc(var(--winning-index) * .1s)}
.winning-gem-gallery .gem-fan.pair{width:calc(var(--fan-card-width) * 1.55)}
.winning-gem-gallery .gem-fan img{top:6px;border-radius:7px;box-shadow:0 12px 24px #000b,0 0 20px #f4d26e55}
@keyframes winning-gem-enter{from{opacity:0;transform:translateY(22px) scale(.86)}to{opacity:1;transform:none}}
@media(prefers-reduced-motion:reduce){.winning-gem-gallery .gem-fan{animation:none}}
body[data-turn="2"] .board-caption span{display:inline-block}
body[data-turn="2"] .turn-controls{transform:translate(-50%,-50%) rotate(180deg)}
body[data-turn="2"]:not(.player-two-view) .placement-overlay .placement-card{transform:rotate(180deg)}
body[data-turn="2"]:not(.player-two-view) .placement-overlay .placement-card.rotated{transform:none}
/* Path previews keep the board card's rotation; rewards face the physical screen. */
body.player-two-view .placement-overlay .placement-card.upright-reward{transform:rotate(180deg)}
body[data-turn="2"]:not(.player-two-view) .placement-controls .placement-rotate,body[data-turn="2"]:not(.player-two-view) .placement-controls .placement-confirm,body[data-turn="2"]:not(.player-two-view) .placement-controls .placement-cancel{transform:rotate(180deg)}
.ai-pointer.clicking img{animation:ai-click .28s ease-in-out}
.ai-pointer.dragging img{transform:scale(.82)}
@keyframes ai-click{50%{transform:scale(.78)}}
@media(prefers-reduced-motion:reduce){.ai-pointer{transition:none}.ai-pointer.clicking img{animation:none!important}.placement-card.ai-dragging{transition:none}}
.player-two{grid-column:3;grid-row:1 / 3;align-self:center;width:100%;margin:0}
.steal-gem-prompt{display:block;width:max-content;max-width:100%;margin:0 auto 18px;padding:12px 24px;border:2px solid #fff0b5;border-radius:999px;background:linear-gradient(135deg,#ffe89b,#e6a844);color:#18272a;font-size:clamp(1rem,1.55vw,1.35rem);font-weight:800;line-height:1.15;text-align:center;box-shadow:0 7px 18px #0009,0 0 24px #ffd46b99;animation:steal-prompt-shake 1.45s ease-in-out infinite}
.steal-gem-prompt:hover,.steal-gem-prompt:focus-visible{background:linear-gradient(135deg,#fff1bb,#f6bb60);box-shadow:0 9px 23px #000a,0 0 32px #ffe082cc}
@keyframes steal-prompt-shake{0%,28%,100%{transform:translateX(0) rotate(0);box-shadow:0 7px 18px #0009,0 0 24px #ffd46b99}5%,15%,25%{transform:translateX(-3px) rotate(-2deg)}10%,20%{transform:translateX(3px) rotate(2deg)}55%{box-shadow:0 9px 23px #000a,0 0 34px #ffe082cc}}
@media(prefers-reduced-motion:reduce){.steal-gem-prompt{animation:none}}
.gem-fan.stealable-gem{display:block;padding:0;border:0;background:none;animation:stealable-gem-buzz 1.45s ease-in-out infinite}
.gem-fan.stealable-gem:hover{filter:drop-shadow(0 0 14px #fff2b0)}
.gem-fan.stealable-gem:focus-visible{outline:2px solid #fff2b0;outline-offset:6px}
@keyframes stealable-gem-buzz{0%,28%,100%{transform:translateX(0) rotate(0);filter:drop-shadow(0 0 5px #ffeaa3)}5%,15%,25%{transform:translateX(-3px) rotate(-2deg)}10%,20%{transform:translateX(3px) rotate(2deg)}55%{filter:drop-shadow(0 0 16px #fff2b0) brightness(1.15)}}
@media(max-width:1999px){.player-two{align-self:stretch;width:auto;margin:0 12px}}
@media(prefers-reduced-motion:reduce){.gem-fan.stealable-gem{animation:none;filter:drop-shadow(0 0 10px #ffeaa3)}}
.game-layout{grid-template-columns:minmax(0,1fr) minmax(0,calc((100dvh - 170px)*.716)) minmax(0,1fr)}
html{height:100%;overflow:hidden;scrollbar-gutter:auto}
body{height:100dvh;overflow:hidden}
.player-one,.player-two{grid-row:1 / 3;align-self:center;width:100%;margin:0}
.player-one{grid-column:3}
.player-two{grid-column:1}
.player-tray{transition:filter .5s ease,opacity .5s ease}
.player-tray:not(.active){filter:grayscale(1) brightness(.55);opacity:.72}
.player-heading{display:grid;grid-template-columns:clamp(52px,5.5vw,78px) minmax(0,1fr);grid-template-rows:auto auto;justify-content:start;align-items:center;gap:2px clamp(10px,1.1vw,18px);margin-bottom:20px}
.player-heading .tray-type-card{grid-column:1;grid-row:1 / 3;display:block;width:100%;aspect-ratio:300 / 419;object-fit:fill;border-radius:6px;box-shadow:0 6px 16px #0009}
.player-heading strong{grid-column:2;grid-row:1;font-size:clamp(1.65rem,2.8vw,2.6rem);line-height:1.08}
.player-heading span{grid-column:2;grid-row:2;justify-self:start;font-size:clamp(.85rem,1.2vw,1rem)}
.player-heading .player-turn-label{font-size:clamp(1rem,1.6vw,1.35rem);color:#ffda82}
.gem-collection{flex:1 1 0;min-width:0}
@media(max-width:1999px){.game-layout{display:flex}.player-one,.player-two{align-self:stretch;width:auto;margin:0 12px}.player-heading{grid-template-columns:clamp(48px,9vw,66px) minmax(0,1fr)}}
.masthead{top:0;left:0;right:0;z-index:200;min-height:58px;padding:7px clamp(12px,1.2vw,22px);border-bottom:1px solid #36515b;background:#081b23ee;box-shadow:0 5px 20px #0007;pointer-events:auto}
.board-caption{top:64px}
.board-caption{justify-content:flex-end}
.board-caption span:first-child{padding:0;border:0;border-radius:0;background:none;color:inherit;font-weight:400}
@media(max-width:560px){.masthead{min-height:52px;padding:6px 8px}.masthead .brand-mark{display:none}.masthead .brand h1{font-size:clamp(.72rem,3.2vw,1rem)}.masthead .header-actions button{padding:5px 4px;font-size:.58rem}.board-caption{top:56px}}
:root{--computer-cyan:#70dce9}
.player-tray.computer-tray .player-heading strong,.player-tray.computer-tray .player-turn-label{color:var(--computer-cyan);text-shadow:0 0 18px #70dce97a,0 2px 8px #000a}
html.computer-turn-announcement.turn-announcement .turn-announcement-message{color:var(--computer-cyan);text-shadow:0 5px 20px #000,0 0 35px #70dce9}
.modal:has(.action-close:not([hidden])){position:relative;padding-top:34px}
.modal .action-close{position:absolute;top:12px;right:12px;z-index:2;width:40px;height:40px;padding:0;border:2px solid #ffe18a;border-radius:50%;background:#18343d}
.modal .action-close:hover{background:#315660}
.pickax-pair-choices{display:flex;flex-wrap:wrap;justify-content:center;gap:20px;margin:22px 0 4px}
#action-modal:has(.pickax-pair-choices) .modal{width:min(100%,720px)}
.modal .pickax-pair-choice{display:flex;flex-direction:column;align-items:center;gap:10px;min-width:148px;min-height:178px;padding:12px;border:0;background:none;color:#f8dc91;cursor:pointer;touch-action:manipulation}
.modal .pickax-pair-choice:hover{background:none}
.pickax-pair-choice .gem-fan{--fan-card-width:100px;--fan-card-height:140px;display:block;width:130px;height:152px;transition:transform .18s,filter .18s}
.modal .steal-gem-choice{min-width:0}
.steal-gem-choice .gem-fan{width:var(--fan-card-width);height:calc(var(--fan-card-height) + 4px)}
@media(max-width:560px){.modal .pickax-pair-choice{min-width:120px;min-height:144px;padding:8px}.pickax-pair-choice .gem-fan{--fan-card-width:78px;--fan-card-height:109px;width:104px;height:121px}}
.howto-card{position:relative;padding-top:42px}
.howto-options{display:grid;gap:12px;margin:20px 0 8px}
.modal .howto-options button{min-height:62px;border:2px solid #e8bf63;border-radius:999px;background:linear-gradient(135deg,#35515a,#1c333e);color:#ffedbc;font-size:clamp(1.1rem,2.5vw,1.45rem);text-align:center;box-shadow:0 8px 20px #0007}
.modal .howto-options button:hover,.modal .howto-options button:focus-visible{background:linear-gradient(135deg,#496a72,#294651);box-shadow:0 8px 24px #0008,0 0 18px #e8bf6380}
.howto-content strong{color:#ffdf91}
.modal #howto-back{position:absolute;top:12px;left:12px;z-index:2;display:grid;place-items:center;width:40px;height:40px;margin:0;padding:0;border:2px solid #ffe18a;border-radius:50%;background:#18343d;font-family:Arial,sans-serif;font-size:1.5rem;line-height:1}
.modal #howto-back:hover{background:#315660}
.howto-card:has(#howto-back:not([hidden])) h2{margin-left:44px}
.howto-card:has(#howto-card-insert:not([hidden])){overflow:hidden}
#howto-card-insert{text-align:center}
#insert-instruction{margin:6px 0 12px}
.modal .insert-booklet{--panel-w:max(100px,min(calc((100vw - 88px)/2),calc((100dvh - 260px)*.698324),270px));--panel-h:calc(var(--panel-w) * 1.432);--insert-radius:12px;position:relative;display:block;width:var(--panel-w);height:calc(var(--panel-h) / 2);margin:12px auto 18px;padding:0;border:0;border-radius:0 var(--insert-radius) 0 0;background:transparent;box-shadow:none;perspective:1200px;transition:width .9s ease,height .9s ease,border-radius .9s ease}
.modal button.insert-booklet:hover:not(:disabled){background:transparent;box-shadow:none}
.insert-booklet[data-fold="cover"],.insert-booklet[data-fold="spread"]{height:var(--panel-h);border-bottom-right-radius:var(--insert-radius)}
.insert-booklet[data-fold="spread"]{width:calc(2 * var(--panel-w));border-radius:var(--insert-radius)}
.insert-flip-surface,.insert-inside,.insert-exterior{position:absolute;inset:0;display:block;transform-style:preserve-3d;backface-visibility:hidden}
.insert-flip-surface{transition:transform .9s ease}
.insert-booklet.show-exterior .insert-flip-surface{transform:rotateY(180deg)}
.insert-exterior{border-radius:var(--insert-radius);background:url("rules/web/insert-front.webp") center/100% 100% no-repeat;transform:rotateY(180deg);box-shadow:0 8px 28px #0009}
.insert-inside-right,.insert-cover{position:absolute;top:0;left:0;display:block;width:var(--panel-w);height:var(--panel-h);transition:left .9s ease}
.insert-inside-right{border-radius:0 var(--insert-radius) var(--insert-radius) 0;background:url("rules/web/insert-back.webp") right center/200% 100% no-repeat;opacity:0}
.insert-booklet[data-fold="spread"] .insert-inside-right{opacity:1}
.insert-booklet[data-fold="spread"] .insert-inside-right,.insert-booklet[data-fold="spread"] .insert-cover{left:var(--panel-w)}
.insert-cover{transform-origin:left center;transform-style:preserve-3d;transition:left .9s ease,transform .9s ease}
.insert-booklet[data-fold="spread"] .insert-cover{transform:rotateY(-180deg)}
.insert-cover-top,.insert-cover-bottom,.insert-cover-inside{position:absolute;display:block;backface-visibility:hidden;box-shadow:inset 0 0 1px #3338}
.insert-cover-top,.insert-cover-bottom{left:0;width:var(--panel-w);height:calc(var(--panel-h) / 2);background-image:url("rules/web/insert-front.webp");background-size:200% 200%}
.insert-cover-top{top:0;z-index:1;border-top-right-radius:var(--insert-radius);background-position:right top}
.insert-cover-bottom{top:calc(var(--panel-h) / 2);border-bottom-right-radius:var(--insert-radius);background-position:right bottom;transform-origin:center top;transform:rotateX(-180deg);transition:transform .9s ease}
.insert-booklet[data-fold="cover"] .insert-cover-bottom,.insert-booklet[data-fold="spread"] .insert-cover-bottom{transform:rotateX(0)}
.insert-cover-inside{inset:0;border-radius:var(--insert-radius) 0 0 var(--insert-radius);background:url("rules/web/insert-back.webp") left center/200% 100% no-repeat;transform:rotateY(180deg)}
.modal #insert-flip-button{display:block;margin:0 auto 12px;padding:12px 24px;border:2px solid #f4d47c;border-radius:999px;background:#314b54;color:#ffedbc;font-weight:800}
.modal #insert-flip-button:hover{background:#47646d}
@media(prefers-reduced-motion:reduce){.modal .insert-booklet,.insert-flip-surface,.insert-inside-right,.insert-cover,.insert-cover-bottom{transition:none}}
#action-modal:has(.shovel-fan),#action-modal:has(.shovel-fan) .modal{overflow:hidden}
#action-modal:has(.shovel-fan) .modal{width:min(100%,760px);max-height:calc(100dvh - 20px)}
#action-modal:has(.shovel-fan) .modal p{margin:8px 0}
.shovel-fan{justify-content:center;gap:0;min-height:0;overflow:visible;padding:10px 0 18px}
.shovel-fan button{flex:0 0 var(--shovel-card-width);width:var(--shovel-card-width);min-width:0;margin-left:calc(-1 * var(--shovel-overlap));padding:2px;touch-action:none;user-select:none;-webkit-user-select:none}
.shovel-fan button.touch-reordering{z-index:5;transition:none;filter:drop-shadow(0 10px 14px #000a)}
.shovel-fan button:first-child{margin-left:0}
.shovel-fan img{width:100%;height:auto;aspect-ratio:300/419;object-fit:fill}
.shovel-fan .shovel-end-label{font-size:.55rem;white-space:normal}
.shovel-fan button.ai-shovel-source img{opacity:.18}
.ai-shovel-card{position:fixed;z-index:110;display:block;object-fit:fill;border-radius:5px;box-shadow:0 12px 25px #000c,0 0 15px #f4d47caa;pointer-events:none}
body[data-turn="2"] .ai-shovel-card{transform:rotate(180deg)}
.ai-shovel-card.moving{transition:left 1.05s cubic-bezier(.25,.7,.3,1),top 1.05s cubic-bezier(.25,.7,.3,1)}
@media(prefers-reduced-motion:reduce){.ai-shovel-card.moving{transition:none}}
.pickax-pair-choice:hover .gem-fan,.pickax-pair-choice:focus-visible .gem-fan{transform:translateY(-5px) scale(1.07);filter:drop-shadow(0 0 10px #ffe49b)}
.pickax-pair-choice:focus-visible{outline:2px solid #fff2b0;outline-offset:3px;border-radius:8px}
.pickax-pair-label{font-size:.9rem;font-weight:800}
#action-buttons:empty{display:none}
/* Reserve collection space so claiming cards does not move either player's heading. */
.player-tray .tray-row{height:clamp(96px,26dvh,208px);align-content:flex-start;overflow:auto;scrollbar-width:thin;scrollbar-color:#6b8584 transparent}
.board-frame{overflow:visible}
/* Keep card faces oriented to the physical screen when the table turns. */
body.screen-rotation-enabled:not(.player-two-view) .player-two,
body.screen-rotation-enabled.player-two-view .player-one{--collection-view-rotation:180deg}
/* Counter-rotated collected cards must pivot in place at the screen edge. */
body.screen-rotation-enabled:not(.player-two-view) .player-two :is(.gem-fan img,.tool-card),
body.screen-rotation-enabled.player-two-view .player-one :is(.gem-fan img,.tool-card){transform-origin:50% 50%}
body.screen-rotation-enabled .board-cell .card-image.screen-upright-reward{transform:none}
body.screen-rotation-enabled.player-two-view .board-cell .card-image.screen-upright-reward{transform:rotate(180deg)}
.empty-pile-label{display:block}
body.screen-rotation-enabled.player-two-view .empty-pile-label{transform:rotate(180deg)}
/* On a stationary table, rewards face the player whose turn it is. */
body:not(.screen-rotation-enabled) .board-cell .card-image.screen-upright-reward,
body:not(.screen-rotation-enabled) .drag-source-preview .card-image.screen-upright-reward{transform:none}
body:not(.screen-rotation-enabled)[data-turn="2"] .board-cell .card-image.screen-upright-reward,
body:not(.screen-rotation-enabled)[data-turn="2"] .drag-source-preview .card-image.screen-upright-reward{transform:rotate(180deg)}
/* Path previews retain the board's actual placement rotation. */
body:not(.screen-rotation-enabled)[data-turn="2"] .placement-overlay .placement-card{transform:none}
body:not(.screen-rotation-enabled)[data-turn="2"] .placement-overlay .placement-card.rotated{transform:rotate(180deg)}
body:not(.screen-rotation-enabled)[data-turn="2"] .placement-overlay .placement-card.upright-reward{transform:rotate(180deg)}
/* Turn the table only while the turn announcement fully covers the cards. */
html.turn-announcement #rotation-stage{transition-delay:.28s}
/* Let the table turn through a clear center while the soft felt vignette hides its corners. */
html.turn-announcement:has(body.screen-rotation-enabled) .turn-announcement-shade{background:radial-gradient(circle farthest-side at center,transparent 0%,transparent 25%,#071c1610 42%,#071c1647 60%,#071c168c 80%,#071c16c4 100%)}
html.turn-announcement:has(body.screen-rotation-enabled) #rotation-stage{-webkit-mask-image:radial-gradient(circle closest-side at center,#000 0%,#000 55%,transparent 84%);mask-image:radial-gradient(circle closest-side at center,#000 0%,#000 55%,transparent 84%);-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;animation:rotation-iris 2.3s ease-in-out both}
@keyframes rotation-iris{0%,84%{-webkit-mask-size:100% 100%;mask-size:100% 100%}100%{-webkit-mask-size:600% 600%;mask-size:600% 600%}}
@keyframes turn-rotation-shade{0%{opacity:0}12%,88%{opacity:1}100%{opacity:0}}
@media(prefers-reduced-motion:reduce){html.turn-announcement #rotation-stage{transition-delay:0s}}
@media(prefers-reduced-motion:reduce){html.turn-announcement:has(body.screen-rotation-enabled) #rotation-stage{animation:none;-webkit-mask-image:none;mask-image:none}}
/* Keep the player trays above and below the board at every viewport width. */
@media all{
  body{--narrow-header-height:38px;--edge-height:clamp(92px,calc(var(--game-visible-height,100dvh) * .12),116px);--narrow-tray-height:calc(2 * (var(--edge-height) - var(--narrow-header-height) - 6px));--top-edge-height:0px;--bottom-edge-height:0px;--narrow-card-gap:clamp(6px,1.3vw,13px);--narrow-board-width:min(calc(100vw - 20px),calc((var(--game-visible-height,100dvh) - var(--top-edge-height) - var(--bottom-edge-height)) * .535));--narrow-card-width:calc((var(--narrow-board-width) - 2 * var(--narrow-card-gap)) / 3);--narrow-card-height:calc(var(--narrow-card-width) * 419 / 300);--narrow-stack-height:calc(4 * var(--narrow-card-height) + 2 * var(--narrow-card-gap) + 8px);--tray-fade-reach:max(40px,calc(20px + (var(--game-visible-height,100dvh) - var(--top-edge-height) - var(--bottom-edge-height) - var(--narrow-stack-height)) / 2))}
  .game-layout{position:relative;display:grid;grid-template-columns:minmax(0,1fr);grid-template-rows:var(--top-edge-height) minmax(0,1fr) var(--bottom-edge-height);gap:0;height:var(--game-visible-height,100dvh);min-height:0}
  .masthead{gap:6px;height:var(--narrow-header-height);min-height:0;padding:3px 6px;background:#081b23ee;border:0;box-shadow:none;pointer-events:auto}
  .masthead .brand{flex:none;min-width:0;gap:0}
  .masthead .brand-mark,.masthead .brand p{display:none}
  .masthead .brand h1{font-size:clamp(.75rem,2vw,.95rem);white-space:nowrap}
  .masthead .header-actions{display:flex;flex:none;flex-wrap:nowrap;justify-content:flex-end;gap:3px;min-width:0}
  .masthead .header-actions button{min-width:0;min-height:30px;padding:3px 4px;font-size:clamp(.5rem,1.25vw,.65rem);line-height:1.05;white-space:nowrap}
  .table-panel{display:contents}
  .board-frame{grid-column:1;grid-row:2;order:initial;flex-direction:column;gap:4px;height:100%;min-height:0}
  .board,.entrance-row{width:var(--narrow-board-width)}
  .board{flex:none;max-width:none;gap:var(--narrow-card-gap);margin:0}
  .entrance-row{position:relative;display:block;top:auto;bottom:auto;left:auto;right:auto;flex:none;height:calc(var(--narrow-card-height) / 2);margin:0;overflow:hidden;-webkit-mask-image:linear-gradient(to bottom,transparent 0%,#000 35%,#000 100%);mask-image:linear-gradient(to bottom,transparent 0%,#000 35%,#000 100%)}
  .entrance-bottom{-webkit-mask-image:linear-gradient(to top,transparent 0%,#000 35%,#000 100%);mask-image:linear-gradient(to top,transparent 0%,#000 35%,#000 100%)}
  .entrance-row .entrance-card{position:absolute;left:50%;grid-column:auto;width:var(--narrow-card-width);height:var(--narrow-card-height);aspect-ratio:auto;transform:translateX(-50%)}
  .entrance-top .entrance-card{bottom:0}
  .entrance-bottom .entrance-card{top:0}
  .player-one,.player-two{position:absolute;left:0;right:0;z-index:7;isolation:isolate;display:grid;grid-template-columns:clamp(180px,21vw,240px) minmax(0,1fr);align-items:end;gap:14px;width:100%;max-width:1000px;min-width:0;height:var(--narrow-tray-height);min-height:0;margin:0 auto;padding:0 6px;overflow:visible}
  .player-tray.player-one,.player-tray.player-two{padding-bottom:0}
  .player-one::before,.player-two::before{content:"";position:absolute;top:calc(-1 * var(--tray-fade-reach));bottom:0;left:50%;width:100vw;transform:translateX(-50%);z-index:-1;pointer-events:none;background:linear-gradient(to top,#081b23 0%,#081b23d9 10%,#081b2366 28%,#081b2329 55%,transparent 82%)}
  .player-two{top:0}
  .player-one{bottom:0}
  .player-tray .steal-gem-prompt{position:absolute;left:0;right:0;bottom:calc(100% + 8px);z-index:2;margin:0 auto}
  .player-heading{grid-column:1;grid-template-columns:clamp(60px,calc((var(--narrow-tray-height) - 16px) / 1.397),86px) minmax(0,1fr);gap:2px 8px;margin:0;min-width:0}
  .player-heading .tray-type-card{grid-column:1;grid-row:1 / 3;width:100%}
  .player-heading strong,.player-heading span,.player-heading .player-turn-label{grid-column:2;min-width:0;line-height:1.1;overflow-wrap:anywhere}
  .player-heading strong{font-size:clamp(1.1rem,2.2vw,1.6rem)}
  .player-heading .player-turn-label{font-size:clamp(.9rem,1.8vw,1.3rem)}
  .player-tray .tray-row{grid-column:2;justify-content:flex-start;height:100%;min-width:0;overflow-x:auto;overflow-y:hidden;flex-wrap:nowrap;align-items:center;scrollbar-width:none;touch-action:pan-x}
  .player-tray .tray-row::-webkit-scrollbar,.gem-collection::-webkit-scrollbar{display:none}
  .player-tray .gem-collection{min-width:0;min-height:0;flex:0 0 auto;flex-direction:row-reverse;flex-wrap:nowrap;overflow:visible;align-items:center;margin-left:auto;padding:0 12px 0 18px}
  .gem-collection .empty-collection{display:none}
  .gem-fan{--fan-card-width:clamp(52px,calc((var(--narrow-tray-height) - 20px) / 1.397),80px);--fan-card-height:calc(var(--fan-card-width) * 1.397)}
  .player-tray .tool-collection{flex-direction:row-reverse;flex-wrap:nowrap;min-height:0}
  .tool-card{width:clamp(52px,calc((var(--narrow-tray-height) - 20px) / 1.397),80px)}
}
@media(max-width:360px){.player-heading strong{font-size:1rem}.player-heading .player-turn-label{font-size:.8rem}}
.player-heading{grid-template-rows:auto auto auto}
.player-heading .tray-type-card{grid-row:1 / 4}
.player-heading .player-move-status{grid-column:2;grid-row:2;justify-self:start;display:flex;align-items:center;gap:9px;width:max-content;max-width:100%;min-width:0;color:#e8eee8;font-size:clamp(.8rem,1.1vw,1rem);font-weight:800;line-height:1.15;white-space:nowrap;transform-origin:center center}
.player-heading .player-move-status[aria-hidden="true"]{visibility:hidden}
.player-heading .move-check{position:relative;display:inline-block;flex:none;width:27px;height:27px;border:2px solid #c7d6d0;border-radius:6px;background:#10272c;box-shadow:inset 0 2px 5px #0007}
.player-heading .player-move-status.complete .move-check{border-color:#5bf182;background:#143c27;box-shadow:0 0 13px #4ced7e88,inset 0 2px 5px #0005}
.player-heading .player-move-status.complete .move-check::after{content:"✓";position:absolute;left:0;top:-9px;color:#60f486;font-family:Arial,sans-serif;font-size:35px;font-weight:900;line-height:1;text-shadow:0 0 10px #3cfa70;animation:move-check-pop .3s ease-out both}
.player-heading .player-move-status{height:27px;padding:2px}
.player-heading .player-move-status:not(.complete){overflow:clip;contain:layout paint}
.player-heading .move-reminder-content{display:flex;align-items:center;gap:inherit;width:max-content;height:23px;transform-origin:center center}
.player-heading .player-move-status:not(.complete)[aria-hidden="false"] .move-reminder-content{animation:move-reminder-pivot 9s ease-in-out infinite}
.player-heading .player-turn-label{grid-row:3}
@keyframes move-reminder-pivot{0%,18%,100%{transform:rotate(0)}3%,9%,15%{transform:rotate(-1.4deg)}6%,12%{transform:rotate(1.4deg)}}
@keyframes move-check-pop{from{transform:scale(.35);opacity:0}to{transform:scale(1);opacity:1}}
.player-heading .player-move-status{gap:6px;font-size:clamp(.72rem,1.5vw,.95rem)}.player-heading .move-check{width:23px;height:23px}.player-heading .player-move-status.complete .move-check::after{top:-7px;font-size:29px}
@media(prefers-reduced-motion:reduce){.player-heading .player-move-status.complete .move-check::after,.player-heading .player-move-status:not(.complete)[aria-hidden="false"] .move-reminder-content{animation:none}}
/* Card artwork supplies its own edge; keep button frames off the cards. */
.board-cell.card,.board-cell.center:has(.card-image),.board-cell.occupied-entrance,.entrance-row .entrance-card{border:0}
.board-cell.card.target,.board-cell.center:has(.card-image).target,.board-cell.occupied-entrance.target{border:0}
.shovel-fan button,.shovel-fan button.selected{border:0;padding:0;background:transparent}
:is(.board-cell.card,.board-cell.center:has(.card-image),.board-cell.occupied-entrance,.tool-card,.gem-fan.stealable-gem,.pickax-pair-choice,.shovel-fan button,.setup-type-choice):focus-visible{outline:none}
.player-heading .player-turn-label{font-size:clamp(.7rem,.7vw,.85rem);white-space:nowrap;overflow-wrap:normal}
@media(max-width:560px){.player-one,.player-two{grid-template-columns:190px minmax(0,1fr)}.player-heading .player-turn-label{font-size:.8rem}}
@media(max-width:480px){
  .player-one,.player-two{grid-template-columns:clamp(138px,38vw,160px) minmax(0,1fr)}
  .player-heading{grid-template-columns:minmax(0,1fr)}
  .player-heading .tray-type-card{display:none}
  .player-heading strong,.player-heading .player-move-status,.player-heading .player-turn-label{grid-column:1}
}
@media(max-width:560px){
  .player-one,.player-two{grid-template-columns:minmax(0,1fr);grid-template-rows:auto minmax(0,1fr);align-items:stretch;gap:0;height:clamp(126px,16dvh,150px);padding:0 8px}
  .player-heading{grid-column:1;grid-row:1;display:grid;grid-template-columns:minmax(0,1fr) var(--narrow-card-width) minmax(0,1fr);grid-template-rows:auto auto;align-items:center;gap:2px 4px;min-height:42px;margin:0}
  .player-heading .tray-type-card{display:none}
  .player-heading strong{grid-column:1;grid-row:1;font-size:1rem}
  .player-heading .player-move-status{grid-column:1;grid-row:2;gap:4px;font-size:.63rem}
  .player-heading .move-check{width:19px;height:19px}
  .player-heading .player-turn-label{grid-column:3;grid-row:1 / 3;justify-self:end;font-size:.72rem;text-align:right}
  .player-tray .tray-row{grid-column:1;grid-row:2;width:100%;height:100%;min-height:0;align-items:center}
  .player-tray .gem-collection{margin-left:0;padding:0 12px 0 4px}
  .gem-fan{--fan-card-width:clamp(48px,14vw,58px);--fan-card-height:calc(var(--fan-card-width) * 1.397)}
  .tool-card{width:clamp(48px,14vw,58px)}
}
/* Keep both collected tools separately playable while sharing one fanned space. */
.player-tray .tool-collection{--tool-fan-card-width:clamp(52px,calc((var(--narrow-tray-height) - 20px) / 1.397),80px);gap:0;overflow:visible}
.player-tray .tool-card{position:relative;width:var(--tool-fan-card-width);transform-origin:50% 85%}
.player-tray .tool-card + .tool-card{margin-right:calc(var(--tool-fan-card-width) * -.45)}
.player-tray .tool-collection:has(> .tool-card + .tool-card) .tool-card:first-child{z-index:2;transform:rotate(calc(var(--collection-view-rotation,0deg) + 11deg))}
.player-tray .tool-collection:has(> .tool-card + .tool-card) .tool-card:last-child{z-index:1;transform:rotate(calc(var(--collection-view-rotation,0deg) - 11deg))}
@media(max-width:560px){.player-tray .tool-collection{--tool-fan-card-width:clamp(48px,14vw,58px)}}
/* Let neighboring collected gems tuck under each other inside the player bars. */
.player-tray .gem-collection{column-gap:0}
.player-tray .gem-fan + .gem-fan{margin-right:-10px}
@media(max-width:560px){.player-tray .gem-fan + .gem-fan{margin-right:-7px}}
@media(max-width:560px){
  .player-one,.player-two{left:-10px;right:-10px;display:block;width:calc(100% + 20px);max-width:none;height:clamp(108px,14dvh,124px);margin:0}
  .player-tray .player-heading{position:absolute;z-index:2;top:0;bottom:0;left:0;display:flex;flex-direction:column;align-items:flex-start;justify-content:center;gap:3px;width:100%;padding:8px;background:linear-gradient(90deg,#0a281bf2 0%,#0a281bd9 62%,transparent 100%) left center / min(47%,170px) 100% no-repeat;pointer-events:none}
  .player-heading strong{max-width:100%;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
  .player-heading strong,.player-heading .player-move-status,.player-heading .player-turn-label{grid-column:auto;grid-row:auto}
  .player-heading .player-turn-label{justify-self:auto;text-align:left;white-space:normal}
  .player-tray .tray-row{position:absolute;inset:0;z-index:1;display:flex;flex-direction:row;direction:rtl;justify-content:flex-start;align-items:center;width:100%;height:100%;padding:0 10px;overflow-x:auto;overflow-y:hidden}
  .player-tray .gem-collection{flex-direction:row;direction:rtl;flex:0 0 auto;align-items:center;margin:0;padding:0 3px}
  .player-tray .gem-collection:not(:has(.gem-fan)){display:none}
  .player-tray .tool-collection{flex-direction:row;direction:rtl;flex:0 0 auto;padding:0 3px}
}
/* Use the splash artwork as the fixed game surface while the board rotates. */
:root{background-color:#102c16;background-image:radial-gradient(ellipse at 50% 48%,#2c692a33 0%,#0b220a7a 95%),url("splash/green-background.gif");background-position:center;background-size:cover;background-repeat:no-repeat;background-attachment:fixed}
/* Paint the same artwork on the viewport-sized body; iPad Safari can offset a fixed root background. */
body{position:fixed;inset:0;width:100%;height:var(--game-visible-height,100dvh);background:inherit;background-attachment:scroll}
body::before{background:radial-gradient(ellipse 78vw 72dvh at 50% calc(50% + 50dvh),#a4d47755 0%,#28744b40 48%,transparent 100%)}
body::after{background:radial-gradient(ellipse 78vw 72dvh at 50% calc(50% + 50dvh),#39ba9b66 0%,#28744b40 48%,transparent 100%)}
body[data-game-mode="local"]:not(.screen-rotation-enabled)::before{background:radial-gradient(ellipse 90vw 86dvh at 50% calc(50% - 50dvh),#c7bb70a0 0%,#5f854f70 38%,transparent 78%)}
body[data-game-mode="local"]:not(.screen-rotation-enabled)::after{background:radial-gradient(ellipse 90vw 86dvh at 50% calc(50% + 50dvh),#4bc9bca0 0%,#307d6670 38%,transparent 78%)}
.game-overlay-controls{position:fixed;z-index:220;top:60%;right:max(8px,env(safe-area-inset-right));display:flex;flex-direction:column;align-items:center;gap:8px;width:72px;transform:translateY(-50%)}
.controls-tray-handle{display:none}
html.computer-turn .game-overlay-controls{z-index:1300}
.game-overlay-controls > button{border:1px solid #6c8990;border-radius:9px;background:#29444d;color:#f7f4e7;font-weight:700;box-shadow:0 4px 15px #0008}
.game-overlay-controls > button:hover{background:#3a5d65}
.game-overlay-controls #shop-link{display:grid;place-items:center;width:38px;height:38px;min-width:38px;min-height:38px;padding:6px;border:1px solid #6c8990;border-radius:9px;background:#29444d;box-shadow:0 4px 15px #0008}
.game-overlay-controls #shop-link:hover,.game-overlay-controls #shop-link:focus-visible{background:#3a5d65}
.game-overlay-controls #shop-link img{display:block;width:23px;height:26px;object-fit:contain}
.game-overlay-controls #new-button{width:72px;min-height:38px;padding:5px 8px;font-size:.75rem}
.game-overlay-controls #sound-button,.game-overlay-controls #about-button{display:grid;place-items:center;width:38px;height:38px;min-width:38px;min-height:38px;padding:6px}
#sound-button svg,#about-button svg{width:23px;height:23px;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round}
#sound-button[aria-pressed="true"]{border:2px solid currentColor;background:#31525b;color:#f5d67d;box-shadow:0 0 0 2px currentColor,0 0 20px currentColor}
#sound-button[aria-pressed="true"] .sound-off-icon,#sound-button[aria-pressed="false"] .sound-on-icon{display:none}
body:has(#setup-modal:not([hidden])) #new-button{display:none}
body:has(#setup-modal:not([hidden])) .player-tray,
body:has(#setup-modal:not([hidden])) .collection-spotlight{visibility:hidden}
@media(max-width:560px){.game-overlay-controls #sound-button,.game-overlay-controls #about-button,.game-overlay-controls #shop-link{width:36px;height:36px;min-width:36px;min-height:36px;padding:6px}.game-overlay-controls #new-button{min-height:32px;padding:4px 8px;font-size:.7rem}}
.music-controls{display:flex;flex-direction:column;align-items:center;gap:8px;width:100%}
.music-track{display:grid;place-items:center;width:42px;height:42px;padding:8px;border:2px solid currentColor;border-radius:12px;background:#102b32e8;box-shadow:0 5px 18px #0009;cursor:pointer}
.music-track svg{width:24px;height:24px;fill:none;stroke:currentColor;stroke-width:1.8;stroke-linecap:round;stroke-linejoin:round}
.music-track ellipse{fill:currentColor;stroke:none}
.music-calm{color:#f5d67d}.music-spelunk{color:#8ce6f2}.music-frog{color:#d7a4f4}
.music-track:hover,.music-track:focus-visible{background:#29444d}
.music-track[aria-pressed="true"]{background:#31525b;box-shadow:0 0 0 2px currentColor,0 0 20px currentColor}
@media(max-width:560px){.music-track{width:36px;height:36px;padding:6px}.music-track svg{width:21px;height:21px}}
.board-cell.empty{background:#123a29}
.board-cell.center{background:transparent}
.board-cell.center > .card-image{filter:grayscale(.72) brightness(.78)}
.player-one::before,.player-two::before{background:linear-gradient(to top,#0a281b 0%,#0a281bd9 10%,#0a281b66 28%,#0a281b29 55%,transparent 82%)}
.ai-fast-dimmer{position:fixed;inset:0;z-index:9;background:#2c3335cc;opacity:0;pointer-events:none;transition:opacity .25s ease}
html.computer-turn .ai-fast-dimmer{opacity:1}
html.computer-turn .player-two.active{z-index:10;filter:none;opacity:1}
.ai-fast-forward{position:absolute;top:calc(100% + 8px);left:50%;z-index:1;display:grid;place-items:center;width:42px;height:42px;min-width:42px;min-height:42px;padding:0;border:2px solid #8ef5ff;border-radius:12px;background:#102b32e8;color:#8ef5ff;font-family:OpenDyslexic,Arial,sans-serif;font-size:1rem;font-weight:800;line-height:1;box-shadow:0 5px 18px #0009;transform:translateX(-50%);touch-action:manipulation}
.ai-fast-forward[hidden]{display:none}
.ai-fast-forward[aria-pressed="true"]{background:#31525b;box-shadow:0 0 0 2px #8ef5ff,0 0 20px #7af8ff}
@media(max-width:560px){.ai-fast-forward{width:36px;height:36px;min-width:36px;min-height:36px;font-size:.85rem}}
@media(max-width:560px), (max-width:932px) and (max-height:500px) and (pointer:coarse){
  .game-overlay-controls{right:env(safe-area-inset-right);width:84px;max-height:calc(100dvh - 20px);padding:12px 6px;background:linear-gradient(145deg,#25434af2,#10272feF);border:2px solid #8aa9a7;border-right:0;border-radius:18px 0 0 18px;box-shadow:-8px 8px 26px #0009;transform:translate(100%,-50%);transition:transform .26s ease-out}
  .game-overlay-controls.expanded{transform:translateY(-50%)}
  .game-overlay-controls:not(.expanded)>:not(.controls-tray-handle){visibility:hidden}
  .game-overlay-controls .controls-tray-handle{position:absolute;top:50%;left:-38px;display:grid;place-items:center;width:38px;height:76px;padding:0;border:2px solid #8aa9a7;border-right:0;border-radius:14px 0 0 14px;background:linear-gradient(145deg,#31545b,#17343c);color:#ffe5a0;box-shadow:-5px 5px 16px #0008;transform:translateY(-50%);touch-action:manipulation}
  .controls-tray-handle svg{width:25px;height:25px;fill:none;stroke:currentColor;stroke-width:3;stroke-linecap:round;stroke-linejoin:round;transition:transform .26s ease-out}
  .game-overlay-controls.expanded .controls-tray-handle svg{transform:rotate(180deg)}
  .game-overlay-controls .ai-fast-forward{position:static;transform:none;margin-top:2px}
}
@media(max-width:560px) and (prefers-reduced-motion:reduce), (max-width:932px) and (max-height:500px) and (pointer:coarse) and (prefers-reduced-motion:reduce){.game-overlay-controls,.controls-tray-handle svg{transition:none}}
html.computer-turn .ai-fast-forward{cursor:pointer!important}
html.ai-fast .ai-pointer{transition-duration:.16s!important}
html.ai-fast .placement-card.ai-dragging,html.ai-fast .ai-shovel-card.moving{transition-duration:.18s!important}
html.ai-fast #end-turn-button.auto-ending::before{animation-duration:.28s}
html.ai-fast.turn-announcement .turn-announcement-shade,html.ai-fast.turn-announcement .turn-announcement-message{animation-duration:.55s}
html.ai-fast #rotation-stage{transition-duration:.45s;transition-delay:0s}
html.ai-fast.turn-announcement:has(body.screen-rotation-enabled) #rotation-stage{transition-delay:.08s}
html.computer-turn:not(.ai-fast) .ai-pointer{transition-duration:.47s}
html.computer-turn:not(.ai-fast) .ai-pointer.clicking img{animation-duration:.19s}
html.computer-turn:not(.ai-fast) .placement-card.ai-dragging,html.computer-turn:not(.ai-fast) .ai-shovel-card.moving{transition-duration:.7s}
html.computer-turn:not(.ai-fast) #end-turn-button.auto-ending::before{animation-duration:3s}
html.computer-turn:not(.ai-fast) #end-turn-button.auto-ending-slow::before{animation-duration:6s}
html.computer-turn-announcement.turn-announcement:not(.ai-fast) .turn-announcement-shade,html.computer-turn-announcement.turn-announcement:not(.ai-fast) .turn-announcement-message{animation-duration:1.55s}
html.computer-turn-announcement.turn-announcement:not(.ai-fast) #rotation-stage{transition-duration:1.07s;transition-delay:.18s;animation-duration:1.55s}
@media(prefers-reduced-motion:reduce){html.computer-turn-announcement.turn-announcement .turn-announcement-shade,html.computer-turn-announcement.turn-announcement .turn-announcement-message{animation-duration:.5s}html.computer-turn-announcement.turn-announcement #rotation-stage{transition:none;animation:none}}
@media(prefers-reduced-motion:reduce){.ai-fast-dimmer{transition:none}}
/* Tutorial framing stays in its own color and never rotates with the table. */
body.tutorial-active .board{border-radius:10px}
body.before-deal .board{background:#090d0f;box-shadow:0 0 0 9px #090d0f}
body.before-deal .board-slot,body.before-deal .board .bridge-layer{visibility:hidden}
.tutorial-frame{position:fixed;z-index:1450;border:4px solid #ef82ca;border-radius:23px;box-shadow:0 0 24px #ef82ca88;pointer-events:none}
body.tutorial-active:has(.tutorial-deal-stage,.reward-overlay) .tutorial-frame{z-index:0}
.tutorial-close{position:fixed;z-index:1500;display:block;width:48px;height:48px;padding:0;border:3px solid #ffd7f0;border-radius:50%;background:#ad377f;color:white;box-shadow:0 5px 18px #0009,0 0 20px #ef82caaa}
.tutorial-close::after{content:"×";display:block;font-family:Arial,sans-serif;font-size:36px;font-weight:400;line-height:40px;text-align:center}
.tutorial-prompt{position:fixed;inset:0;z-index:1400;--overlay-shade:#071b1933;background-color:var(--overlay-shade);animation:overlay-dim-in .3s ease-out both}
.tutorial-prompt::before{content:"";position:absolute;left:var(--tutorial-frame-left);top:var(--tutorial-frame-top);width:var(--tutorial-frame-width);height:var(--tutorial-frame-height);border-radius:19px;background:#05080a4d;pointer-events:none}
.tutorial-prompt[hidden],.tutorial-close[hidden]{display:none}
.tutorial-card{position:absolute;display:flex;flex-direction:column;align-items:center;justify-content:center;overflow:auto;padding:clamp(18px,3vw,30px);border:0;border-radius:0;background:linear-gradient(150deg,#54264c,#243439 75%);box-shadow:0 18px 54px #000b;text-align:center}
.tutorial-prompt[data-placement="top"] .tutorial-card{border-radius:19px 19px 0 0}
.tutorial-prompt[data-placement="bottom"] .tutorial-card{border-radius:0 0 19px 19px}
.tutorial-prompt[data-placement="full"] .tutorial-card{border-radius:19px}
body.tutorial-active:has(#tutorial-prompt:not([hidden])) .board-slot:has(.card-image){filter:grayscale(1) brightness(.85)}
body.tutorial-active:has(#tutorial-prompt:not([hidden])) .board-slot:has(.card-image)::after{content:"";position:absolute;z-index:8;inset:0;border-radius:9px;background:#777d8340;pointer-events:none}
body.tutorial-active:has(#tutorial-prompt:not([hidden])) .entrance-row .entrance-card{filter:grayscale(1) brightness(.85)}
body.tutorial-active:has(#tutorial-prompt:not([hidden])) .entrance-row .entrance-card::after{content:"";position:absolute;z-index:8;inset:0;border-radius:9px;background:#777d8340;pointer-events:none}
body.tutorial-active:has(#tutorial-prompt:not([hidden])) .player-tray img{filter:grayscale(1) brightness(.8)}
.tutorial-card h2{margin:8px 0 14px;color:#ffe3f4;font-size:clamp(1.45rem,4vw,2.3rem);line-height:1.16}
.tutorial-card p{margin:0 0 20px;color:#fff5fb;font-size:clamp(.95rem,2.4vw,1.2rem);line-height:1.3}
.tutorial-card img{display:block;width:min(155px,38vw);height:auto;margin:0 auto 22px;border-radius:9px;box-shadow:0 9px 24px #0009}
.tutorial-prompt[data-placement="center"] .tutorial-card img{width:min(155px,20dvh,38vw)}
.tutorial-card img[hidden]{display:none}
.tutorial-special-cards{display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:clamp(3px,.8vw,8px);width:100%;max-width:430px;margin:0 auto 18px}
.tutorial-special-cards[hidden]{display:none}
.tutorial-card .tutorial-special-cards img{display:block;width:100%;height:auto;margin:0;border-radius:5px;box-shadow:0 5px 12px #0008}
.tutorial-prompt[data-placement="center"] .tutorial-card .tutorial-special-cards img{width:100%;max-height:min(17dvh,125px);object-fit:contain}
.tutorial-special-cards #tutorial-qr-card{touch-action:manipulation;cursor:pointer}
.tutorial-special-cards #tutorial-qr-card:focus-visible{outline:3px solid #ffe0f2;outline-offset:4px}
.modal-backdrop.thank-you-backdrop{z-index:1600;--overlay-shade:#000e}
.thank-you-card{position:relative;width:min(100%,520px);max-height:calc(100dvh - 24px);padding:clamp(26px,5vw,42px);text-align:left}
.thank-you-card .eyebrow{margin-bottom:10px;color:#e9b7d8;letter-spacing:.18em}
.thank-you-card h2{margin-bottom:18px}
.thank-you-card p{font-size:clamp(1rem,2.5vw,1.12rem)}
.thank-you-card .thank-you-signature{margin:20px 0 0;text-align:right;color:#f8dc91;font-family:Georgia,serif;font-size:1.3rem}
.about-backdrop{z-index:1600;--overlay-shade:#071319e8}
#about-modal .modal{transform:none}
.about-card{position:relative;width:min(100%,660px);max-height:calc(100dvh - 24px);text-align:left}
.about-logo-frame{width:min(300px,calc(100% - 46px));margin:0 0 16px;padding:12px 16px;border-radius:12px;background:#f8f0e3;box-shadow:inset 0 0 0 1px #bda783}
.about-logo-frame img{display:block;width:100%;height:auto}
.about-card h3{margin:22px 0 10px;color:#f8dc91;font-family:Georgia,serif;font-size:1.25rem}
.about-card a{color:#ffe3a3;text-decoration:underline}
.about-rights{margin-top:16px;padding:16px 18px;border:1px solid #d9ba7180;border-radius:12px;background:#f1ca7630;color:#e9f2e9;line-height:1.55}
.about-rights p{margin:0}
.about-rights p+p{margin-top:10px}
.about-rights strong{color:#fff1be}
.collection-spotlight{position:fixed;inset:0;z-index:1800;pointer-events:none}
.collection-spotlight-item{position:fixed;transform-origin:center;pointer-events:none}
.action-dimmer{position:fixed;inset:0;z-index:50;--overlay-shade:#071319d9;background-color:var(--overlay-shade);animation:overlay-dim-in .32s ease-out both;pointer-events:none}
body:has(#action-modal[hidden]) .action-dimmer{display:none}
#action-modal{z-index:1850;background:transparent;animation:none}
.placement-controls{position:fixed;inset:0;z-index:1900;pointer-events:none}
.placement-controls>button{pointer-events:auto}
body:has(#placement-overlay[hidden]) .placement-controls{display:none}
body:has(#action-modal.outcome-modal:not([hidden])) .collection-spotlight{display:none}
body:has(#action-modal.outcome-modal:not([hidden])) .player-tray .gem-collection,
body:has(#action-modal.outcome-modal:not([hidden])) .player-tray .tool-collection{visibility:hidden}
.audio-references{display:grid;gap:10px;margin:0;padding-left:26px}
.audio-references li{padding-left:3px;color:#dce8df;line-height:1.5}
.audio-references strong{color:#fff1be}
.tutorial-pair{--pair-card-width:clamp(76px,17vw,126px);position:relative;flex:none;width:calc(var(--pair-card-width) + 42px);height:calc(var(--pair-card-width) * 1.397 + 18px);margin:0 auto 22px}
.tutorial-pair[hidden]{display:none}
.tutorial-card .tutorial-pair img{position:absolute;top:8px;width:var(--pair-card-width);height:calc(var(--pair-card-width) * 1.397);margin:0;object-fit:fill;border-radius:7px;box-shadow:0 12px 25px #000b,0 0 18px #dba8ff66;transform-origin:50% 85%}
.tutorial-pair img:first-child{left:0;transform:rotate(-11deg)}
.tutorial-pair img:last-child{right:0;transform:rotate(11deg)}
.tutorial-tool-cards{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:clamp(10px,3vw,26px);width:min(100%,450px);margin:0 auto 18px}
.tutorial-tool-cards[hidden]{display:none}
.tutorial-tool{display:flex;flex-direction:column;align-items:center;gap:5px;min-width:0;color:#fff5fb;font-size:clamp(.74rem,1.8vw,.95rem);line-height:1.2}
.tutorial-tool strong{color:#ffe3f4;font-size:clamp(.95rem,2.4vw,1.2rem)}
.tutorial-card .tutorial-tool img{width:clamp(70px,13vw,110px);height:auto;max-height:20dvh;object-fit:contain;margin:0 auto 5px;border-radius:7px}
.tutorial-deal-stage{position:absolute;inset:0;z-index:10;overflow:visible;background:#090d0f;border-radius:9px;box-shadow:0 0 0 9px #090d0f;pointer-events:none}
body.before-deal:not(.tutorial-active) .board,body:not(.tutorial-active) .tutorial-deal-stage{background:transparent;box-shadow:none}
.tutorial-deal-stage img{position:absolute;display:block;object-fit:fill;border-radius:7px;box-shadow:0 4px 9px #0009}
.tutorial-deal-stage .tutorial-deck-card{position:absolute;z-index:6;transform:rotate(-17deg);filter:drop-shadow(-12px 16px 12px #000c)}
.tutorial-deck-card::before,.tutorial-deck-card::after{content:"";position:absolute;inset:0;border:2px solid #eee;border-radius:7px;background:#27323a}
.tutorial-deck-card::before{z-index:0;transform:translate(-8px,9px)}
.tutorial-deck-card::after{z-index:1;transform:translate(-4px,5px)}
.tutorial-deal-stage .tutorial-deck-card img{position:relative;z-index:2;width:100%;height:100%;border:2px solid #eee}
.tutorial-deal-stage .tutorial-flying-card{z-index:7;transition:transform 125ms ease-out}
.tutorial-deal-stage .tutorial-flying-card.from-under-deck{z-index:5}
.tutorial-deal-stage .tutorial-dealt-card{z-index:1}
.tutorial-card button{min-width:180px;min-height:55px;padding:10px 24px;border:2px solid #ffe0f2;border-radius:999px;background:#dc65ae;color:#1c1320;font-size:1.1rem;font-weight:800;box-shadow:0 7px 18px #0008}
.tutorial-card button:hover,.tutorial-card button:focus-visible{background:#f59ed0}
.tutorial-card button[hidden]{display:none}
.setup-tutorial-divider{margin:0;color:#e8ddd9;font-size:1rem;font-weight:800;line-height:1;text-align:center}
#setup-modal .setup-tutorial-choice{min-height:76px;border-color:#ef82ca;background:linear-gradient(145deg,#7d416e,#4b2b52);color:#ffe4f5}
#setup-modal .setup-tutorial-choice:hover,#setup-modal .setup-tutorial-choice:focus-visible{background:linear-gradient(145deg,#95517f,#623567);box-shadow:0 9px 20px #0006,0 0 20px #ef82ca77}

/* Opening screen: the supplied artwork sits above the game and its setup dialog. */
.splash-screen{position:fixed;inset:0;z-index:3000;background:#163c1d url("splash/green-background.gif") center / cover no-repeat;overflow:hidden}
.splash-screen::before{content:"";position:absolute;inset:0;background:radial-gradient(ellipse at 50% 48%,#2c692a33 0%,#0b220a7a 95%);pointer-events:none}
.splash-start{position:relative;display:block;width:100%;height:100%;height:100dvh;margin:0;padding:0;border:0;border-radius:0;background:transparent;color:#fff;cursor:pointer;touch-action:manipulation}
.splash-start:focus-visible{outline:none}
.splash-logo-wrap{position:absolute;left:50%;top:10%;width:min(60vw,780px);transform:translateX(-50%);filter:drop-shadow(0 9px 4px #071607bb) drop-shadow(0 0 24px #d1e69f66)}
.splash-game-logo{display:block;width:100%;height:auto;aspect-ratio:164.53 / 40.91;object-fit:contain}
.splash-minecart-frame{position:absolute;left:50%;top:55%;display:block;width:min(55vw,470px,70dvh);aspect-ratio:591 / 699;transform:translate(-50%,-50%)}
.splash-minecart{display:block;width:100%;height:auto;filter:drop-shadow(-18px 18px 18px #071607aa);transform-origin:center;animation:cart-rail-rumble 10s ease-in-out infinite}
@keyframes cart-rail-rumble{
  0%,14%,28%,42%,72%,88%,100%{transform:translateY(0) rotate(0)}
  7%,35%,80%{transform:translateY(-3px) rotate(0)}
  21%,94%{transform:translateY(-2px) rotate(0)}
  48%{transform:translateY(-2px) rotate(-1.1deg)}
  54%{transform:translateY(0) rotate(.9deg)}
  60%{transform:translateY(-2px) rotate(-.45deg)}
  66%{transform:translateY(0) rotate(.2deg)}
}
.splash-bottom{position:absolute;inset:auto 0 max(8%,env(safe-area-inset-bottom));display:grid;align-items:center;pointer-events:none}
.splash-prompt{grid-area:1/1;justify-self:center;font-size:clamp(.95rem,2vw,1.25rem);font-weight:800;letter-spacing:.18em;text-transform:uppercase;white-space:nowrap;text-shadow:0 2px 8px #071607}
.splash-orbit-logo{grid-area:1/1;justify-self:end;margin-right:7%;display:block;width:clamp(115px,18vw,190px);height:auto;filter:drop-shadow(0 3px 5px #061407)}
@media(max-width:600px){.splash-logo-wrap{top:6%;width:min(86vw,45dvh)}.splash-minecart-frame{top:52%;width:min(92vw,55dvh)}.splash-bottom{bottom:max(6%,env(safe-area-inset-bottom))}.splash-prompt{font-size:clamp(.72rem,3vw,.85rem);letter-spacing:.12em}.splash-orbit-logo{width:min(85px,24vw);margin-right:5%}}
@media(max-height:500px) and (max-width:932px){.splash-logo-wrap{top:4%;width:min(50vw,40dvh)}.splash-minecart-frame{top:52%;width:min(45vw,52dvh)}.splash-bottom{bottom:max(4%,env(safe-area-inset-bottom))}}
@media(prefers-reduced-motion:reduce){.splash-minecart{animation:none}}

/* Keep the artwork in its centered column and the outer sides black. */
:root,body{background:#000}
body::before,body::after{inset:0 auto 0 50%;width:min(100vw,1000px);transform:translateX(-50%)}
#rotation-stage{width:min(100%,1000px);margin-inline:auto}
.app{background:#102c16 url("splash/green-background.gif") center / cover no-repeat}
.player-one::before,.player-two::before{width:min(100vw,1000px)}
.game-overlay-controls{right:max(8px,calc((100vw - 1000px)/2 + 8px),env(safe-area-inset-right))}
.splash-screen{left:50%;width:min(100%,1000px);transform:translateX(-50%)}
@media(max-width:560px), (max-width:932px) and (max-height:500px) and (pointer:coarse){.game-overlay-controls{right:env(safe-area-inset-right)}}

/* The moving opening reveals only part of the artwork; the rest stays black. */
.app,.splash-screen{background-color:#000;background-image:radial-gradient(ellipse 24% 75% at 50% 50%,transparent 0%,#0004 28%,#000c 64%,#000 100%),url("splash/green-background.gif");background-size:180% 100%,cover;background-position:0% center,center;background-repeat:no-repeat;animation:background-searchlight 40s ease-in-out infinite alternate}
@keyframes background-searchlight{to{background-position:100% center,center}}
@media(prefers-reduced-motion:reduce){.app,.splash-screen{animation:none;background-position:50% center,center}}

/* Dimmed states use neutral black so the green artwork does not tint them. */
.modal-backdrop,.shovel-picker-overlay,.action-dimmer{--overlay-shade:#000d}
.placement-overlay{--overlay-shade:#000a}
.reward-overlay{--overlay-shade:#0008}
.confetti-layer{position:fixed;inset:0;z-index:5001;overflow:hidden;pointer-events:none}
.reward-card-layer{position:fixed;inset:0;z-index:5002;pointer-events:none}
.tutorial-prompt{--overlay-shade:#000d}
.tutorial-prompt::before{background:#0006}
.about-backdrop{--overlay-shade:#000e}
.turn-decision-shade{background:#000a}
html.turn-announcement .turn-announcement-shade{background:#000b}
html.turn-announcement:has(body.screen-rotation-enabled) .turn-announcement-shade{background:radial-gradient(circle farthest-side at center,transparent 0%,transparent 25%,#0001 42%,#0005 60%,#0009 80%,#000c 100%)}
.ai-fast-dimmer{background:#0007}
html.computer-turn .turn-decision-shade{background:#0008}
html.computer-turn .modal-backdrop,html.computer-turn .shovel-picker-overlay,html.computer-turn .action-dimmer{--overlay-shade:#0008}

/* Keep one shade in place as a turn prompt changes to a card or action prompt. */
body:has(.placement-overlay:not([hidden])) .turn-decision-shade,
body:has(#action-modal:not([hidden]):not(.outcome-modal)) .turn-decision-shade,
body:has(.shovel-picker-overlay:not([hidden])) .turn-decision-shade,
body.reward-shade-active .turn-decision-shade{opacity:1}
body:has(.placement-overlay:not([hidden])) .placement-overlay,
body:has(#action-modal:not([hidden]):not(.outcome-modal)) :is(#action-modal,.action-dimmer),
body:has(.shovel-picker-overlay:not([hidden])) .shovel-picker-overlay,
.reward-overlay{background:transparent;animation:none}
html.computer-turn .turn-decision-shade{background:#0002}
body.reward-shade-active .turn-decision-shade{background:#0008}
html.computer-turn body.reward-shade-active .turn-decision-shade{background:#0001}
.shovel-picking .board-frame{z-index:41}
.shovel-picking .shovel-picker-cancel{z-index:42}
/* Let the computer shade take over as the turn announcement fades away. */
@keyframes announcement-ai-dimmer{0%,88%{opacity:0}100%{opacity:1}}
html.computer-turn.turn-announcement .ai-fast-dimmer{animation:announcement-ai-dimmer 1.55s linear both;transition:none}
html.computer-turn.ai-fast.turn-announcement .ai-fast-dimmer{animation-duration:.55s}
@media(prefers-reduced-motion:reduce){html.computer-turn.turn-announcement .ai-fast-dimmer{animation-duration:.5s}}

/* Transfer the existing dim level into the turn overlay without a clear frame. */
html.turn-announcement .turn-decision-shade{opacity:0;transition:none}
html.turn-announcement-from-computer.turn-announcement .ai-fast-dimmer{opacity:0;transition:none;animation:none}
html.turn-announcement-from-shade.turn-announcement .turn-announcement-shade{animation-name:turn-shade-from-prompt}
html.turn-announcement-from-computer.turn-announcement .turn-announcement-shade{animation-name:turn-shade-from-computer}
html.turn-announcement-from-reward.turn-announcement .turn-announcement-shade{animation-name:turn-shade-from-reward}
@keyframes turn-shade-from-prompt{0%{opacity:1;background:#000a}12%,88%{opacity:1;background:#000b}100%{opacity:0;background:#000b}}
@keyframes turn-shade-from-computer{0%{opacity:1;background:#0007}12%,88%{opacity:1;background:#000b}100%{opacity:0;background:#000b}}
@keyframes turn-shade-from-reward{0%{opacity:1;background:#0008}12%,88%{opacity:1;background:#000b}100%{opacity:0;background:#000b}}
html.turn-announcement-from-shade.turn-announcement:has(body.screen-rotation-enabled) .turn-announcement-shade,
html.turn-announcement-from-computer.turn-announcement:has(body.screen-rotation-enabled) .turn-announcement-shade,
html.turn-announcement-from-reward.turn-announcement:has(body.screen-rotation-enabled) .turn-announcement-shade{animation-name:turn-shade-from-rotation}
@keyframes turn-shade-from-rotation{0%,88%{opacity:1}100%{opacity:0}}

/* Player row fades follow each player's selected minecart path. */
.player-one::before,.player-two::before{-webkit-mask-image:linear-gradient(to right,transparent 0%,#000 7%,#000 93%,transparent 100%);mask-image:linear-gradient(to right,transparent 0%,#000 7%,#000 93%,transparent 100%)}
.player-tray[data-route="river"]::before{background:linear-gradient(to top,#0b304d 0%,#0b304dd9 10%,#0b304d66 28%,#0b304d29 55%,transparent 82%)}
.player-tray[data-route="rail"]::before{background:linear-gradient(to top,#3d2819 0%,#3d2819d9 10%,#3d281966 28%,#3d281929 55%,transparent 82%)}
@media(max-width:560px){
  .player-tray[data-route="river"] .player-heading{background:linear-gradient(90deg,#0b304df2 0%,#0b304dd9 62%,transparent 100%) left center / min(47%,170px) 100% no-repeat}
  .player-tray[data-route="rail"] .player-heading{background:linear-gradient(90deg,#3d2819f2 0%,#3d2819d9 62%,transparent 100%) left center / min(47%,170px) 100% no-repeat}
}

/* Rotate only the artwork; the moving black mask and all UI stay upright. */
.app,.splash-screen{isolation:isolate;background:#000;animation:none}
.splash-screen::before{display:none}
.rotating-background{position:absolute;inset:0;z-index:-1;overflow:hidden;pointer-events:none}
#setup-modal .setup-background{left:50%;width:min(100%,1000px);transform:translateX(-50%)}
@media(min-width:1001px){.rotating-background{-webkit-mask-image:linear-gradient(to right,transparent,#000 64px,#000 calc(100% - 64px),transparent);mask-image:linear-gradient(to right,transparent,#000 64px,#000 calc(100% - 64px),transparent)}}
.rotating-background::before{content:"";position:absolute;top:50%;left:50%;width:max(135%,135dvh);height:auto;aspect-ratio:1;background:url("splash/green-background.gif") center / cover no-repeat;filter:brightness(.7);transform:translate(-50%,-50%) rotate(0deg);transform-origin:center;animation:rotate-green-background 450s linear infinite}
.rotating-background::after{content:"";position:absolute;inset:0;background:radial-gradient(ellipse 24% 75% at 50% 50%,transparent 0%,#0004 28%,#000c 64%,#000 100%) 0% center / 180% 100% no-repeat;animation:background-searchlight 40s ease-in-out -20s infinite alternate}
.splash-background::after{background-image:radial-gradient(ellipse 24% 75% at 50% 50%,transparent 0%,#0004 28%,#000c 64%,#000 100%),radial-gradient(ellipse at 50% 48%,#2c692a33 0%,#0b220a7a 95%);background-size:180% 100%,100% 100%;background-position:0% center,center;background-repeat:no-repeat}
@keyframes rotate-green-background{to{transform:translate(-50%,-50%) rotate(360deg)}}
@media(prefers-reduced-motion:reduce){.rotating-background::before,.rotating-background::after{animation:none}.rotating-background::after{background-position:50% center}.splash-background::after{background-position:50% center,center}}
/* Mobile Chrome can leave stale GPU tiles while rotating the oversized filtered splash image. */
@media(max-width:600px), (max-width:932px) and (max-height:500px) and (pointer:coarse){
  .splash-screen .rotating-background{background:linear-gradient(#0005,#0005),url("splash/green-background.gif") center / cover no-repeat}
  .splash-screen .rotating-background::before{display:none;animation:none}
  .splash-screen .rotating-background::after{animation:none;background-position:50% center,center}
}

/* Gameplay uses one continuous felt color across the table and outer sides. */
html:has(#game-layout:not([hidden])):has(#setup-modal[hidden]),
body:has(#game-layout:not([hidden])):has(#setup-modal[hidden]),
body:has(#game-layout:not([hidden])):has(#setup-modal[hidden]) .app{background:#16442d}
body:has(#game-layout:not([hidden])):has(#setup-modal[hidden]) .app > .rotating-background,
body:has(#game-layout:not([hidden])):has(#setup-modal[hidden])::before,
body:has(#game-layout:not([hidden])):has(#setup-modal[hidden])::after{display:none}

/* A rotated table makes fixed descendants relative to its 1000px column. */
body.player-two-view :is(.modal-backdrop,.placement-overlay,.reward-overlay,.shovel-picker-overlay,.turn-decision-shade,.ai-fast-dimmer,.action-dimmer){
  inset:auto;
  top:0;
  left:calc(50% - 50vw);
  width:100vw;
  height:100dvh;
}
