/* Double Vision: the approved carved-walnut cabinet, with real game controls. */
.pv-game.pv-match{
  --ink:#f8e4b4;--ink-2:#d9caa9;--card:#162d30;--line:#8c6635;--bg:#10282b;
  max-width:560px;height:100%;min-height:100%;gap:9px;
  padding:0 clamp(15px,4.2vw,26px) max(74px,12.5dvh);
  color:#f8e4b4;background:#142e31 url('./game-art/double-vision-board-v1.png') center / 100% 100% no-repeat;
  font-family:Arial,Helvetica,sans-serif;isolation:isolate;overflow:hidden;
}
.pv-game.pv-match .pv-header{flex:0 0 clamp(62px,10.5dvh,94px);grid-template-columns:44px minmax(0,1fr) 44px;gap:4px;align-items:center;color:#f8e4b4}
.pv-game.pv-match .pv-header h1{margin:0;text-align:center;white-space:nowrap;color:#f4d591;font:700 clamp(25px,7.1vw,39px)/1.03 Georgia,'Times New Roman',serif;letter-spacing:-1px;text-shadow:0 1px 0 #fff0bc,0 3px 0 #3e220c,0 4px 5px #000}
.pv-game.pv-match .pv-header>button{width:44px;height:44px;border:2px solid #b78b4c;border-radius:50%;color:#fde4ad;background:radial-gradient(circle at 40% 25%,#8b6535,#4c3019 65%,#211609);box-shadow:inset 0 2px 2px #fbe2a477,inset 0 -3px 2px #1b1008,0 0 0 2px #291b10,0 3px 5px #0008;font:700 35px/1 Georgia,serif;text-shadow:0 2px 2px #281406;transition:transform .12s,filter .12s}
.pv-game.pv-match .pv-header>button:last-child{font-size:25px}
.pv-game.pv-match button{touch-action:manipulation;-webkit-tap-highlight-color:transparent}
.pv-game.pv-match button:focus-visible{outline:3px solid #ffe6a1;outline-offset:3px}
.pv-game.pv-match button:active:not(:disabled){transform:translateY(2px);filter:brightness(1.12)}
.pv-game.pv-match .dv-stats{display:flex;justify-content:space-around;align-items:center;gap:0;min-height:38px;padding:7px 2px;border:1px solid #886b42;border-radius:9px;background:linear-gradient(#142e30ed,#092023e8);box-shadow:inset 0 1px 4px #0008,0 1px 0 #e2bc7744}
.pv-game.pv-match .dv-stats>span{display:flex;align-items:baseline;justify-content:center;gap:5px;flex:1;color:#d9cba6;font-size:10px;letter-spacing:.5px;white-space:nowrap}
.pv-game.pv-match .dv-stats>span+span{border-left:1px solid #866f4555}
.pv-game.pv-match .dv-stats b{display:inline;color:#ffe5a5;font:700 21px/1 Georgia,serif;font-variant-numeric:tabular-nums;text-shadow:0 2px 3px #000}
.pv-game.pv-match .dv-stats i{font-size:11px;color:#c3bda5}
.pv-game.pv-match .pv-memory{flex:1 1 0;min-height:0;gap:8px;grid-template-columns:repeat(4,minmax(0,1fr));grid-template-rows:repeat(var(--pv-rows,5),minmax(0,1fr));perspective:1000px;padding:2px 0 4px}
.pv-game.pv-match .pv-card{aspect-ratio:auto;min-height:0;border:1px solid #b58a50;border-radius:8px;background:#654224 url('./game-art/double-vision-tile-v1.png') center / 100% 100%;box-shadow:inset 0 2px 2px #ffe3a14d,inset 0 -3px 1px #291708,0 3px 0 #2a1c11,0 5px 7px #0009;overflow:hidden;transform-style:preserve-3d;transition:box-shadow .18s,border-color .18s}
.pv-game.pv-match .dv-wood-back{position:absolute;inset:0;width:100%;height:100%;object-fit:fill;pointer-events:none;user-select:none}
.pv-game.pv-match .pv-card:nth-child(3n+2) .dv-wood-back{filter:brightness(1.06)}
.pv-game.pv-match .pv-card:nth-child(4n) .dv-wood-back{filter:brightness(.96)}
.pv-game.pv-match .pv-card.is-open{border-color:#d5ac68;background-color:#674524}
.pv-game.pv-match .pv-card .pv-photo{position:absolute;inset:5px;width:calc(100% - 10px);height:calc(100% - 10px);border:1px solid #d4b78388;border-radius:4px;background:#142c30;box-shadow:0 1px 3px #120d09;overflow:hidden}
.pv-game.pv-match .pv-card .pv-photo img{object-fit:contain;object-position:center;width:100%;height:100%}
.pv-game.pv-match .pv-name{inset:auto 6px 6px;min-height:0;padding:15px 2px 4px;border-radius:0 0 4px 4px;background:linear-gradient(transparent,#071b21e6 55%,#05151af7);color:#fff9e7;font:700 11px/1.15 Arial,sans-serif;text-shadow:0 1px 3px #000,0 0 5px #000;overflow-wrap:normal;word-break:normal;align-items:flex-end;pointer-events:none}
.pv-game.pv-match .pv-card.is-matched{border:1px solid #98bf91;box-shadow:inset 0 0 0 1px #98bf91,0 3px 0 #293326,0 0 9px #62b69a3d}
.pv-game.pv-match .pv-check{top:7px;right:7px;width:18px;height:18px;font-size:12px;border:1px solid #f1e4b8;background:#295c48;color:#fff8de;box-shadow:0 2px 4px #0008}
.pv-game.pv-match .pv-card.is-turning{animation:dv-turn .22s ease-out both}
.pv-game.pv-match .pv-card.is-new-match{animation:dv-pair .65s ease-out both}
@keyframes dv-turn{from{transform:rotateY(-75deg);filter:brightness(.7)}to{transform:rotateY(0);filter:brightness(1)}}
@keyframes dv-pair{30%{box-shadow:inset 0 0 0 2px #c7efc2,0 0 16px #b2dfaa;filter:brightness(1.12)}}
.pv-game.pv-match .pv-help{position:fixed;width:auto;max-width:none;inset:0;padding:max(24px,env(safe-area-inset-top)) 24px max(24px,env(safe-area-inset-bottom));background:#0b252af5;color:#f9e5b9;align-items:safe center}
.pv-game.pv-match .pv-help>div{padding:22px;border:1px solid #967847;border-radius:14px;background:linear-gradient(150deg,#223c3d,#10272c);box-shadow:inset 0 1px 0 #edce8244,0 12px 36px #0007}
.pv-game.pv-match .pv-help h2{color:#f6d491;font:700 32px/1.1 Georgia,serif;margin:6px 0 20px}
.pv-game.pv-match .pv-help p{color:#e4dbc4;font-size:15px;line-height:1.6}.pv-game.pv-match .pv-help small{color:#d6ba86}
.pv-game.pv-match .pv-button,.pv-game.pv-match .pv-next{min-height:48px;border:2px solid #b88c4d;border-radius:10px;background:linear-gradient(#8c6334,#54351d);color:#fff0c7!important;box-shadow:inset 0 2px 1px #f7dea377,inset 0 -3px 2px #321d10,0 4px 0 #1d140d,0 6px 9px #0006;font:700 19px/1.2 Georgia,serif;text-shadow:0 2px 2px #34200d;padding:12px 20px}
.pv-game.pv-match .dv-result{flex:1 1 auto;min-height:0;overflow:auto;padding:0 2px 10px;scrollbar-width:thin;scrollbar-color:#8c6635 #142e31}
.pv-game.pv-match .dv-result h2{color:#ffe4a5;font:700 30px/1.15 Georgia,serif;text-shadow:0 2px 3px #000;margin:8px 0 18px}
.pv-game.pv-match .dv-result .pv-team{gap:10px 8px;margin:18px 0}.pv-game.pv-match .pv-team .pv-photo{border-radius:7px;border:3px solid #987344;box-shadow:0 3px 5px #0008;background:#183538}.pv-game.pv-match .pv-team .pv-photo img{object-fit:contain}.pv-game.pv-match .pv-team b{color:#f3e4c2;font-size:11px;text-shadow:0 1px 3px #000}
.pv-game.pv-match .dv-result>.pv-button{max-width:270px;margin:16px auto 10px}.pv-game.pv-match .pv-error{color:#ffd1a4}
.pv-game.pv-match .dv-result .pv-team .pv-photo{height:auto;aspect-ratio:1}
.pv-game.pv-match .dv-result .pv-team b{min-height:2.4em;margin-bottom:0}
@media(max-height:700px){.pv-game.pv-match{gap:7px;padding-bottom:max(65px,12dvh)}.pv-game.pv-match .pv-memory{gap:6px}.pv-game.pv-match .dv-stats{min-height:32px;padding:6px 2px}.pv-game.pv-match .dv-stats b{font-size:19px}.pv-game.pv-match .pv-name{font-size:10px;padding-top:12px}}
@media(max-width:370px){.pv-game.pv-match .pv-header h1{font-size:25px;letter-spacing:-1.1px}.pv-game.pv-match .dv-stats>span{font-size:9px;gap:4px}}
@media(prefers-reduced-motion:reduce){.pv-game.pv-match .pv-card{animation:none!important;transition:none}.pv-game.pv-match button{transition:none!important}}

/* Double Vision cabinet polish. Tile color depends on board position only;
   all subject snapshots, card indexes, rules and results remain unchanged. */
.pv-game.pv-match {
  container-type:size;
  --dv-stack-gap:9px;
  --dv-card-gap:8px;
  --dv-header-height:clamp(62px,10.5dvh,94px);
  --dv-stats-height:38px;
  gap:var(--dv-stack-gap);
}
.pv-game.pv-match .pv-header {flex-basis:var(--dv-header-height)}
.pv-game.pv-match .dv-stats {height:var(--dv-stats-height);min-height:var(--dv-stats-height)}
.pv-game.pv-match .pv-memory {
  --dv-square:min(calc((100cqw - 3 * var(--dv-card-gap)) / 4),calc((100cqh - var(--dv-header-height) - var(--dv-stats-height) - 2 * var(--dv-stack-gap) - var(--dv-extra-height,0px) - 6px - (var(--pv-rows,5) - 1) * var(--dv-card-gap)) / var(--pv-rows,5)));
  flex:0 0 auto;
  width:calc(4 * var(--dv-square) + 3 * var(--dv-card-gap));
  height:calc(var(--pv-rows,5) * var(--dv-square) + (var(--pv-rows,5) - 1) * var(--dv-card-gap) + 6px);
  max-width:100%;
  margin:auto;
  gap:var(--dv-card-gap);
  grid-template-columns:repeat(4,var(--dv-square));
  grid-template-rows:repeat(var(--pv-rows,5),var(--dv-square));
}
.pv-game.pv-match .pv-card {
  --dv-wood:url('./game-art/double-vision-tile-dark-v2.webp');
  aspect-ratio:1;
  border:0;
  border-radius:8px;
  background:#654224 var(--dv-wood) center / 100% 100% no-repeat;
  box-shadow:0 3px 0 #281a10,0 5px 5px #000b,0 8px 10px #0006;
  overflow:hidden;
}
/* These fixed positions repeat every eight cards. No identity or state selectors. */
.pv-game.pv-match .pv-card:nth-child(8n+2),
.pv-game.pv-match .pv-card:nth-child(8n+4),
.pv-game.pv-match .pv-card:nth-child(8n+5),
.pv-game.pv-match .pv-card:nth-child(8n+7) {
  --dv-wood:url('./game-art/double-vision-tile-light-v2.webp');
}
/* The original decorative IMG stays in the DOM; the position-colored cabinet
   background supplies its identical carved motif without changing game markup. */
.pv-game.pv-match .dv-wood-back {visibility:hidden}
.pv-game.pv-match .pv-card.is-open {
  background:#50371e;
  box-shadow:inset 0 0 0 1px #382214,0 3px 0 #291a11,0 5px 7px #000a;
}
.pv-game.pv-match .pv-card .pv-photo {
  inset:3px;
  width:calc(100% - 6px);
  height:calc(100% - 6px);
  border:2px solid #dfc18a;
  border-radius:6px;
  background:#142c30;
  box-shadow:inset 0 0 0 1px #49301d,0 0 0 1px #67492b,0 1px 1px #fff2bc99;
}
.pv-game.pv-match .pv-card .pv-photo::after {
  content:'';
  position:absolute;
  inset:1px;
  border:1px solid #f8e4b877;
  border-radius:3px;
  pointer-events:none;
}
.pv-game.pv-match .pv-card .pv-photo img {object-fit:contain;object-position:center}
.pv-game.pv-match .pv-name {
  inset:auto 6px 6px;
  padding:4px 2px 3px;
  border-radius:0 0 3px 3px;
  font-size:10px;
}
.pv-game.pv-match .pv-card.is-matched {
  border:0;
  box-shadow:0 3px 0 #233b2e,0 5px 6px #0008,0 0 9px #6fb7a54d;
}
.pv-game.pv-match .pv-card.is-matched .pv-photo {
  border-color:#ead6a8;
  box-shadow:inset 0 0 0 1px #39786a,0 0 0 1px #467b70,0 0 5px #5caf994d;
}
.pv-game.pv-match .pv-check {top:7px;right:7px}
/* Save-error recovery keeps its message and existing Next pair action visible. */
.pv-game.pv-match:has(.pv-feedback.pv-error) {--dv-extra-height:96px}
@media(max-height:700px) {
  .pv-game.pv-match {--dv-stack-gap:7px;--dv-card-gap:6px;--dv-stats-height:32px}
  .pv-game.pv-match .pv-name {font-size:9px;padding-top:4px}
}
@media(min-width:700px) and (hover:hover) and (pointer:fine) {
  .gs-portal .pv-game.pv-match {--dv-header-height:62px}
  .gs-portal .pv-game.pv-match .pv-header {flex-basis:var(--dv-header-height)}
}

/* Source-specific staff framing. Frozen photos/IDs remain unchanged. The renderer creates
   a photo IMG only for open cards and applies dv-object only when open, so none
   of these selectors can reveal hidden identity or alter decorative tile backs.
   Office/logo cards retain their complete original picture. Phone layout verified. */
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img {object-fit:cover;object-position:center top;transform:none;}
.pv-game.pv-match .pv-card.is-open.dv-object .pv-photo img {object-fit:contain;object-position:center;transform:none;}

.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/alexandra-potter.jpg"],[src="photos/alexandra-potter.jpg"]) {object-position:center 22%;transform:scale(1.450000);transform-origin:50% 38.363636%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/daniel-daroszewski.jpg"],[src="photos/daniel-daroszewski.jpg"]) {object-position:center 22%;transform:scale(1.568627);transform-origin:50% 33.344828%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/david-b-beckett.jpg"],[src="photos/david-b-beckett.jpg"]) {object-position:center 22%;transform:scale(1.751825);transform-origin:50% 22.805825%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/emma-reynolds.jpg"],[src="photos/emma-reynolds.jpg"]) {object-position:center 22%;transform:scale(1.379310);transform-origin:50% 38.454545%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/sandra-travaglianti.jpg"],[src="photos/sandra-travaglianti.jpg"]) {object-position:center 22%;transform:scale(1.379310);transform-origin:50% 38.454545%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/jenna-bernard.jpg"],[src="photos/jenna-bernard.jpg"]) {object-position:center 22%;transform:scale(1.518987);transform-origin:50% 40.682927%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/matthew-c-willett.jpg"],[src="photos/matthew-c-willett.jpg"]) {object-position:center 22%;transform:scale(1.432203);transform-origin:50% 40.862745%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/katie-l-greiner.jpg"],[src="photos/katie-l-greiner.jpg"]) {object-position:center 22%;transform:scale(1.227273);transform-origin:50% 54.126316%;}
.pv-game.pv-match .pv-card.is-open:not(.dv-object) .pv-photo img:is([src="./photos/cynthia-lenhoff.jpg"],[src="photos/cynthia-lenhoff.jpg"]) {object-position:center 22%;transform:scale(1.500000);transform-origin:50% 12.600000%;}

/* Header controls for the new active-time version. The approved wood tones,
   exact square geometry and source-specific full-head framing above are shared. */
.pv-game.pv-match.pv-active{--dv-header-height:82px;--dv-extra-height:26px;--dv-stack-gap:8px}
.pv-game.pv-match.pv-active .pv-header{flex-basis:var(--dv-header-height);grid-template-columns:44px 104px 44px 44px;grid-template-rows:30px 44px;gap:5px 8px;justify-content:center}
.pv-game.pv-match.pv-active .pv-header h1{font-size:27px}
.pv-game.pv-match.pv-active .pv-header>button{width:44px;height:44px;font-size:28px}
.pv-game.pv-match.pv-active .pv-header>.pv-play{width:104px;font:700 15px/1 Arial,sans-serif}
.pv-game.pv-match.pv-active .pv-play-area .pv-memory{margin:auto}
.pv-game.pv-match.pv-active:has(.pv-feedback.pv-error){--dv-extra-height:104px}
.pv-game.pv-match.pv-active .dv-result{overflow:hidden;display:flex;flex-direction:column;justify-content:center}
.pv-game.pv-match.pv-active .dv-result h2{font-size:25px;margin:4px 0 12px}
.pv-game.pv-match.pv-active .dv-result .pv-team{grid-template-columns:repeat(5,minmax(0,1fr));gap:8px 6px;margin:14px 0 0}
.pv-game.pv-match.pv-active .dv-result>[data-action="replay"]{display:none}
.pv-game.pv-match.pv-active .pv-card.dv-streak{animation:dv-streak .65s ease-out both}
@keyframes dv-streak{35%{box-shadow:0 3px 0 #233b2e,0 0 18px #efcf80;filter:brightness(1.13)}}
@media(min-width:700px) and (hover:hover) and (pointer:fine){
  .gs-portal .pv-game.pv-match.pv-active .pv-header{flex-basis:82px}
  .gs-portal .pv-game.pv-match.pv-active .pv-header h1{font-size:27px}
}
