/* Hallmark · macrostructure: Bento Grid · theme: Carnival / Diner Sign · tone: playful poster · anchor hue: red + navy · nav: N7 · footer: Ft8 · pre-emit critique: P4 H4 E4 S4 R4 V5 */
*{box-sizing:border-box}html,body{margin:0;overflow-x:clip}html{scroll-behavior:smooth}body{background:var(--color-paper);color:var(--color-ink);font-family:var(--font-body);font-size:15px}button,input{font:inherit}button{cursor:pointer}button:disabled{opacity:.55;cursor:not-allowed}a{color:inherit;text-decoration:none}:focus-visible{outline:3px solid var(--color-focus);outline-offset:4px}.shell{width:min(100%,1320px);margin-inline:auto;padding-inline:clamp(1rem,4vw,3rem)}.header{background:var(--color-paper);color:var(--color-ink);border-bottom:3px solid var(--color-ink)}.header-inner{display:flex;align-items:center;gap:1rem;min-height:76px}.brand{display:inline-flex;align-items:center;font:900 1.8rem/1 var(--font-display);letter-spacing:.015em;white-space:nowrap}.brand-symbol{font-family:var(--font-body);font-size:1.6rem;color:var(--color-red-dark);margin-right:.35rem}.brand-dot{color:var(--color-red-dark)}.nav{display:none;align-items:center;gap:2rem;margin-left:auto;font-size:.76rem;font-weight:700;letter-spacing:.07em}.nav a,.header-link,.button,.text-link,.footer-links a{white-space:nowrap}.nav a{padding-block:1rem}.header-link{margin-left:auto;background:var(--color-navy);color:var(--color-paper);border:2px solid var(--color-ink);font-size:.72rem;font-weight:700;letter-spacing:.03em;min-height:44px;padding:.8rem 1rem;display:inline-flex;align-items:center;gap:.75rem}.intro{background:var(--color-red);color:var(--color-paper);border-bottom:3px solid var(--color-ink)}.intro-inner{display:flex;align-items:center;justify-content:space-between;gap:2rem;padding-block:clamp(3.5rem,6vw,6rem)}.label{font-size:.68rem;font-weight:700;letter-spacing:.13em;line-height:1.5}.intro .label{display:flex;align-items:center;gap:.5rem}.intro .label span{font-size:1.1rem}h1,h2,h3,p{margin:0}h1,h2,h3{font-family:var(--font-display);font-weight:900;overflow-wrap:anywhere;min-width:0;letter-spacing:.005em;line-height:1;text-transform:uppercase}h1{font-size:clamp(4.2rem,9vw,8.7rem);margin-top:1.1rem}h1 span{color:var(--color-ink)}.intro-text{margin-top:1.25rem;font-size:1.05rem;line-height:1.5;max-width:30rem;font-weight:600}.button{display:inline-flex;align-items:center;justify-content:center;gap:1.5rem;min-height:48px;padding:.8rem 1.2rem;border:2px solid var(--color-ink);font-weight:700;font-size:.76rem;letter-spacing:.04em;box-shadow:4px 4px 0 var(--color-ink);transition:transform var(--dur-short) var(--ease-out),box-shadow var(--dur-short) var(--ease-out)}.button:active{transform:translate(3px,3px);box-shadow:1px 1px 0 var(--color-ink)}.button-light{margin-top:2rem;background:var(--color-paper);color:var(--color-ink)}.button-red{background:var(--color-red-dark);color:var(--color-paper)}.route-art{display:none;position:relative;flex:none;width:310px;height:250px}.route-line{position:absolute;inset:22px 48px;border:3px dashed var(--color-paper);border-radius:50%;transform:rotate(-25deg)}.route-dot{position:absolute;width:18px;height:18px;background:var(--color-paper);border:3px solid var(--color-ink);border-radius:50%}.route-dot-one{top:25px;left:90px}.route-dot-two{right:54px;top:82px}.route-dot-three{bottom:25px;left:85px}.route-star{position:absolute;font-size:3rem;left:22px;top:80px}.route-sign{position:absolute;right:32px;bottom:38px;transform:rotate(8deg);border:3px solid var(--color-ink);background:var(--color-paper);color:var(--color-ink);padding:1rem 1.3rem;box-shadow:5px 5px 0 var(--color-ink);font:900 2.6rem/.9 var(--font-display)}.route-sign span{color:var(--color-red-dark)}.strip{border-bottom:3px solid var(--color-ink);background:var(--color-navy);color:var(--color-paper);overflow:hidden}.strip div{padding:.8rem 0;white-space:nowrap;font-weight:700;font-size:.68rem;letter-spacing:.13em;text-align:center}.strip span{margin-inline:1.5rem;color:var(--color-paper)}.section{padding-block:5rem}.section-head{display:flex;flex-wrap:wrap;justify-content:space-between;align-items:end;gap:1rem;margin-bottom:1.5rem}.section-head h2{font-size:clamp(2.8rem,5vw,4.5rem);margin-top:.45rem}.accent{color:var(--color-red-dark)}.text-link{min-height:44px;display:inline-flex;align-items:center;gap:1rem;font-size:.75rem;font-weight:700;letter-spacing:.04em;border-bottom:2px solid var(--color-ink)}.discover-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:1.5rem 1rem}.game-card{min-width:0}.game-button{width:100%;display:block;border:0;padding:0;background:transparent;color:var(--color-ink);text-align:left}.art{background-image:url('assets/game-covers.png');background-size:200% 200%;background-repeat:no-repeat;background-color:var(--color-paper-2)}.cat{background-position:0 0}.blocks{background-position:100% 0}.race{background-position:0 100%}.frog{background-position:100% 100%}.card-art{aspect-ratio:1;border:3px solid var(--color-ink);box-shadow:4px 4px 0 var(--color-ink);position:relative}.card-number{position:absolute;top:-3px;left:-3px;background:var(--color-navy);color:var(--color-paper);padding:.55rem .7rem;border-right:2px solid var(--color-ink);border-bottom:2px solid var(--color-ink);font-size:.63rem;font-weight:700;letter-spacing:.05em}.card-arrow{position:absolute;right:0;bottom:0;display:grid;place-items:center;width:40px;height:40px;border-left:2px solid var(--color-ink);border-top:2px solid var(--color-ink);background:var(--color-paper);color:var(--color-ink);font-size:1.2rem}.card-info{padding:.9rem .1rem 0}.card-meta{font-size:.66rem;font-weight:700;letter-spacing:.06em;color:var(--color-red-dark)}.card-title{font:900 clamp(1.35rem,2vw,1.9rem)/1 var(--font-display);text-transform:uppercase;margin-top:.4rem}.index-note{margin-top:1.5rem;font-size:.75rem;color:var(--color-ink-2)}.featured-band{background:var(--color-paper-2);color:var(--color-ink);border-block:3px solid var(--color-ink);padding-block:5rem}.featured-band .section-head>p{max-width:20rem;line-height:1.5}.feature-grid{display:grid;grid-template-columns:1fr;gap:1.5rem}.feature-card{display:grid;grid-template-columns:1fr;min-width:0;padding:0;text-align:left;background:var(--color-card);color:var(--color-ink);border:3px solid var(--color-ink);box-shadow:5px 5px 0 var(--color-ink)}.feature-art{aspect-ratio:1.3}.feature-copy{padding:1.5rem;display:flex;flex-direction:column;align-items:start;justify-content:center}.feature-title{font:900 2.3rem/1 var(--font-display);text-transform:uppercase;margin-top:.65rem}.feature-copy p{line-height:1.55;margin-top:.8rem;max-width:25rem}.feature-more{font-size:.72rem;font-weight:700;letter-spacing:.04em;margin-top:1.2rem;color:var(--color-red-dark)}.section-desc{margin-top:.8rem}.search{min-height:48px;width:100%;display:flex;align-items:center;gap:.6rem;border:2px solid var(--color-ink);background:var(--color-card);color:var(--color-ink);padding:0 .9rem}.search:focus-within{outline:3px solid var(--color-focus);outline-offset:3px}.search span:first-child{font-size:1.5rem}.search input{width:100%;min-width:0;border:0;outline:0;background:transparent;color:var(--color-ink)}.filters-row{display:flex;justify-content:space-between;align-items:center;gap:1rem;flex-wrap:wrap;margin:2rem 0 1rem}.filters{display:flex;flex-wrap:wrap;gap:.5rem}.filter{border:2px solid var(--color-ink);background:transparent;color:var(--color-ink);padding:.65rem .85rem;min-height:44px;font-size:.7rem;font-weight:700;letter-spacing:.03em;white-space:nowrap}.filter.active{background:var(--color-ink);color:var(--color-paper)}#count{font-size:.75rem;color:var(--color-ink-2)}.directory-grid{display:grid;grid-template-columns:repeat(1,minmax(0,1fr));gap:.8rem}.compact{display:flex;width:100%;gap:1rem;align-items:center;text-align:left;padding:.6rem;border:2px solid var(--color-ink);background:var(--color-card);color:var(--color-ink)}.compact-art{width:68px;aspect-ratio:1;border:2px solid var(--color-ink);flex:none}.compact-copy{flex:1;min-width:0}.compact-name{font:800 1.25rem/1 var(--font-display);text-transform:uppercase}.compact-meta{display:block;margin-top:.45rem;font-size:.72rem}.compact-arrow{font-size:1.2rem;padding:.25rem}.empty{border:2px dashed var(--color-ink);padding:2rem;text-align:center}.empty strong{font:900 2rem var(--font-display)}.empty p{margin:.7rem 0 1.4rem}.notice{border-top:2px solid var(--color-ink);display:flex;align-items:start;gap:1rem;padding:1.5rem 0 3rem;font-size:.8rem;line-height:1.6}.notice>span{color:var(--color-red-dark);font-size:1.3rem}.footer{background:var(--color-navy);color:var(--color-paper);border-top:3px solid var(--color-ink)}.footer-inner{display:flex;justify-content:space-between;align-items:center;gap:2rem;flex-wrap:wrap;padding-block:3rem}.footer .brand-symbol,.footer .brand-dot{color:var(--color-paper)}.footer p{font-size:.68rem;font-weight:700;letter-spacing:.08em;margin-top:.8rem}.footer-links{display:flex;gap:1.5rem;flex-wrap:wrap;font-size:.72rem;font-weight:700}.footer-links a{display:flex;align-items:center;min-height:44px}.footer-tape{border-top:2px solid var(--color-paper);padding:1rem;white-space:nowrap;text-align:center;font:800 1rem var(--font-display);letter-spacing:.13em;overflow:hidden}dialog{border:3px solid var(--color-ink);padding:0;width:calc(100% - 2.5rem);max-width:760px;max-height:90dvh;overflow:auto;background:var(--color-card);color:var(--color-ink);box-shadow:6px 6px 0 var(--color-ink)}dialog::backdrop{background:var(--color-overlay)}.detail-layout{position:relative;display:grid}.detail-art{aspect-ratio:1}.detail-copy{padding:2rem}.detail-copy h2{font-size:3rem;margin:.75rem 0}.detail-copy>p:not(.label){line-height:1.6}.close{position:absolute;right:10px;top:10px;width:44px;height:44px;border:2px solid var(--color-ink);background:var(--color-paper);color:var(--color-ink);font-size:1.6rem}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border:0}@media(hover:hover){.button:hover{transform:translate(-2px,-2px);box-shadow:6px 6px 0 var(--color-ink)}.game-button:hover .card-art,.feature-card:hover,.compact:hover{outline:3px solid var(--color-red-dark);outline-offset:3px}.text-link:hover{text-decoration:underline}}@media(min-width:40rem){.discover-grid,.directory-grid{grid-template-columns:repeat(2,minmax(0,1fr))}.feature-card{grid-template-columns:minmax(0,1fr) minmax(0,1fr)}.feature-art{aspect-ratio:1}.search{width:260px}.detail-layout{grid-template-columns:repeat(2,minmax(0,1fr))}.detail-art{height:100%}}@media(min-width:60rem){.header-inner{gap:2rem}.nav{display:flex}.header-link{margin-left:1rem}.route-art{display:block}.discover-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.directory-grid{grid-template-columns:repeat(4,minmax(0,1fr))}.feature-grid{grid-template-columns:minmax(0,1.25fr) minmax(0,1fr)}}@media(max-width:25rem){.header-link{padding:.7rem;font-size:.64rem;gap:.3rem}h1{font-size:3.7rem}.section-head{display:block}.text-link{margin-top:.5rem}.section{padding-block:3.75rem}.featured-band{padding-block:3.75rem}}@media(prefers-reduced-motion:reduce){html{scroll-behavior:auto}*,*::before,*::after{transition-duration:.01ms!important;animation-duration:.01ms!important}}
/* Original games and third-party player */
.external-player{position:fixed;inset:0;margin:auto;width:min(96%,1100px);height:100dvh;max-width:none;max-height:none;padding:0;border:0;background:#fff;color:#182033;overflow:hidden}.external-player::backdrop{background:rgba(0,0,0,.85)}.player-bar{height:58px;display:flex;align-items:center;gap:1rem;padding:0 1rem;background:#182033;color:#fff}.player-title{min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1}.player-source{font-size:.75rem;color:#fff;text-decoration:underline;white-space:nowrap}.player-close{min-height:44px;border:0;background:#fff;color:#182033;padding:0 1rem;font-weight:700;white-space:nowrap}.player-help{margin:0;padding:.5rem 1rem;font-size:.75rem;line-height:1.4}.external-player iframe{display:block;width:100%;height:calc(100% - 100px);border:0;background:#fff}@media(max-width:25rem){.player-bar{gap:.4rem;padding:0 .5rem}.player-source{font-size:.68rem}.player-close{padding:0 .55rem}}

.external-player[open]{display:flex;flex-direction:column}.player-bar,.player-help{flex-shrink:0}.external-player iframe{flex:1;min-height:0;height:auto}

/* Responsive game details */
:is(#game-dialog, #details) :is(.dialog-inner, .detail-wrap, .detail-layout) { min-width: 0; }
:is(#game-dialog, #details) :is(.dialog-art, .detail-art) { width: 100%; min-width: 0; aspect-ratio: 16 / 10; max-height: 32dvh; }
:is(#game-dialog, #details) :is(.dialog-copy, .detail-copy, .detail-content) { min-width: 0; padding: 1.25rem; overflow-wrap: anywhere; }
:is(#game-dialog, #details) h2 { font-size: clamp(1.8rem, 6vw, 2.5rem); line-height: 1.1; }
:is(#game-dialog, #details) :is(.close, .dialog-close) { z-index: 1; }
@media (min-width: 40rem) {
  :is(#game-dialog, #details) :is(.dialog-inner, .detail-wrap, .detail-layout) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
  :is(#game-dialog, #details) :is(.dialog-art, .detail-art) { height: 100%; min-height: 260px; max-height: none; aspect-ratio: auto; }
  :is(#game-dialog, #details) :is(.dialog-copy, .detail-copy, .detail-content) { padding: 4rem 2rem 2rem; }
}
@media (max-width: 20rem) {
  .player-bar { height: auto; min-height: 58px; flex-wrap: wrap; padding-block: .5rem; }
  .player-title { flex-basis: 100%; }
}

/* Game loading feedback */
.player-stage { position: relative; flex: 1; min-height: 0; background: #f3f5f9; }
.external-player .player-stage iframe { width: 100%; height: 100%; border: 0; }
.player-loading { position: absolute; inset: 0; display: grid; align-content: center; justify-items: center; gap: .85rem; padding: 1.5rem; color: #182033; background: #f3f5f9; text-align: center; line-height: 1.5; }
.player-loading[hidden] { display: none; }
.player-loading-note { max-width: 22rem; font-size: .85rem; color: #536077; }
.player-spinner { width: 38px; height: 38px; border: 4px solid #d2d9e6; border-top-color: #3659a3; border-radius: 50%; animation: player-spin .85s linear infinite; }
@keyframes player-spin { to { transform: rotate(360deg); } }
@media (prefers-reduced-motion: reduce) { .player-spinner { animation: none; } }
.player-loading.is-slow { inset: auto 1rem 1rem; width: min(24rem, calc(100% - 2rem)); margin: auto; gap: .35rem; padding: 1rem; border: 1px solid #d2d9e6; border-radius: 12px; background: #fff; box-shadow: 0 6px 24px #18203326; }
.player-loading.is-slow .player-spinner { width: 24px; height: 24px; border-width: 3px; }
.player-loading-dismiss { padding: .4rem .75rem; border: 1px solid #c4ccda; border-radius: 6px; color: #182033; background: #fff; font-size: .8rem; }
.player-loading-dismiss[hidden] { display: none; }

/* Player close control */
.player-close { display: inline-flex; align-items: center; justify-content: center; gap: .65rem; min-height: 44px; padding: .25rem .25rem .25rem .75rem; border: 0; border-radius: 999px; background: rgba(255, 255, 255, .1); color: #fff; font-size: .8rem; line-height: 1; }
.player-close-icon { display: grid; place-items: center; width: 34px; height: 34px; flex: none; border-radius: 50%; background: #c52b3e; color: #fff; font-size: 1.45rem; font-weight: 400; line-height: 1; }
@media (hover: hover) { .player-close:hover { background: rgba(255, 255, 255, .18); } .player-close:hover .player-close-icon { background: #a91f31; } }
@media (max-width: 20rem) { .player-bar { flex-wrap: nowrap; } .player-title { flex-basis: 0; } }

/* Space between the game description and its action. */
#start-game { margin-top: 1.5rem; }

/* Keep long descriptions within the game details dialog. */
:is(#dialog-description, #detail-description) { max-height: 12rem; overflow-y: auto; }

/* Wider game preview on large screens. */
@media (min-width: 58rem) {
  #details { max-width: 1012px; }
  #details :is(.dialog-inner, .detail-wrap, .detail-layout) { grid-template-columns: repeat(2, minmax(0, 1fr)); }
}

/* Keep the game image at its native 4:3 ratio and align the details header. */
:is(#game-dialog, #details) :is(.dialog-art, .detail-art) { height: auto; min-height: 0; max-height: none; aspect-ratio: 4 / 3; }
:is(#game-dialog, #details) :is(.dialog-copy, .detail-copy, .detail-content) { position: relative; padding-top: 12px; }
:is(#dialog-category, #detail-category) { display: flex; align-items: center; min-height: 44px; padding-right: 3rem; }
:is(#game-dialog, #details) :is(.close, .dialog-close) { top: 12px; }
@media (min-width: 40rem) {
  :is(#game-dialog, #details) :is(.dialog-copy, .detail-copy, .detail-content) { height: 0; min-height: 100%; overflow-y: auto; display: flex; flex-direction: column; align-items: flex-start; }
  :is(#dialog-category, #detail-category) { width: 100%; flex-shrink: 0; }
  :is(#game-dialog, #details) h2, :is(#game-dialog, #details) #start-game { flex-shrink: 0; }
  :is(#dialog-description, #detail-description) { min-height: 0; max-height: none; flex: 1 1 auto; align-self: stretch; }
  :is(#game-dialog, #details) :is(.dialog-copy, .detail-copy, .detail-content) { padding-bottom: 1rem; }
  :is(#game-dialog, #details) #start-game { margin-top: .75rem; }
}

@media (min-width: 40rem) and (max-width: 54.99rem) {
  :is(#game-dialog, #details) h2 { font-size: 1.25rem; margin: .25rem 0; }
  :is(#dialog-description, #detail-description) { margin-bottom: .25rem; }
  :is(#game-dialog, #details) #start-game { margin-top: .5rem; }
}

@media (min-width: 40rem) and (max-width: 44rem) {
  :is(#game-dialog, #details) h2 { font-size: 1rem; }
}
