@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+SC:wght@400;500;600;700&family=Noto+Serif+SC:wght@600;700&display=swap');
:root{color-scheme:dark;--bg:#171a19;--surface:#202422;--paper:#edf0e5;--muted:#a4aca1;--line:#3c433c;--green:#c0d899;font-family:"Noto Sans SC",system-ui,sans-serif;font-size:16px}*{box-sizing:border-box}body{margin:0;background:var(--bg);color:var(--paper)}a{color:inherit;text-decoration:none}button{font:inherit}button,a{-webkit-tap-highlight-color:transparent}button:focus-visible,a:focus-visible{outline:2px solid var(--green);outline-offset:5px}svg{width:22px;height:22px;fill:none;stroke:currentColor;stroke-width:1.6;stroke-linecap:round;stroke-linejoin:round;flex-shrink:0}.skip{position:fixed;top:8px;left:8px;padding:12px;background:var(--paper);color:var(--bg);z-index:100;transform:translateY(-160%)}.skip:focus{transform:none}.masthead{max-width:1376px;margin:auto;min-height:112px;padding:28px 48px;display:flex;align-items:center;justify-content:space-between;border-bottom:1px solid var(--line)}.brand{display:flex;align-items:center;gap:14px;font-family:"Noto Serif SC",serif;font-size:24px;font-weight:700;letter-spacing:.06em}.brand-mark{display:grid;place-items:center;width:46px;height:46px;border:1px solid #78846d;color:var(--green);font-size:28px;transform:rotate(-4deg)}.brand small{display:block;margin-top:5px;font:12px/1.5 system-ui,sans-serif;letter-spacing:.21em;color:var(--muted)}.test-badge{display:flex;align-items:center;gap:8px;font-size:13px;letter-spacing:.04em;color:#bcc4b7;border:1px solid #46503f;border-radius:4px;padding:9px 12px}.test-badge svg{width:15px;height:15px}main{max-width:1376px;margin:auto;padding:0 48px}.intro{padding:44px 0 34px;display:flex;align-items:end;justify-content:space-between;gap:24px}.eyebrow{color:var(--green);font:600 12px/1.5 system-ui,sans-serif;letter-spacing:.19em;margin:0 0 12px}h1{font-family:"Noto Serif SC",serif;font-size:clamp(28px,3.1vw,44px);line-height:1.45;letter-spacing:.04em;margin:0;font-weight:600}.intro-note{font-size:14px;line-height:1.9;margin:0 0 4px;color:var(--muted)}.library{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:24px}.game-card{min-width:0;overflow:hidden;border:1px solid var(--line);border-radius:6px;background:var(--surface);transition:border-color .2s,transform .2s}.game-card:hover{border-color:#7a876c;transform:translateY(-3px)}.cover{display:block;position:relative;overflow:hidden;background:#2f3630;aspect-ratio:16/11;border-bottom:1px solid var(--line)}.cover:after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,rgba(0,0,0,.05) 25%,rgba(0,0,0,.5))}.cover img{width:100%;height:100%;object-fit:cover;display:block;transition:transform .5s}.game-card:hover img{transform:scale(1.035)}.edition{position:absolute;top:16px;left:16px;color:#e8eddf;background:#182018eb;border:1px solid #6a765b;border-radius:3px;padding:6px 10px;font-size:12px;z-index:1}.cover-play{position:absolute;bottom:20px;left:20px;display:flex;align-items:center;gap:10px;z-index:1;font-size:14px;color:white;opacity:0;transform:translateY(5px);transition:.2s}.cover-play svg{width:38px;height:38px;fill:currentColor;border:1px solid #ffffff7a;border-radius:100%;padding:8px}.game-card:hover .cover-play,.cover:focus-visible .cover-play{opacity:1;transform:none}.card-body{padding:23px 24px 22px}.game-meta{display:flex;justify-content:space-between;align-items:center;color:var(--accent);font-size:13px}.game-number{font:13px/1.5 ui-monospace,monospace;color:#86927d}.game-card h2{font-family:"Noto Serif SC",serif;font-size:30px;line-height:1.5;letter-spacing:.06em;font-weight:600;margin:12px 0 4px}.english-name{margin:0;color:#939d8f;font:12px/1.5 system-ui,sans-serif;letter-spacing:.17em}.description{margin:21px 0 24px;color:#bcc4b7;font-size:16px;line-height:1.7}.card-bottom{border-top:1px solid var(--line);padding-top:18px;display:flex;align-items:center;justify-content:space-between;gap:12px}.card-bottom>span{font-size:14px;color:#adb8a4}.play-button{display:inline-flex;align-items:center;justify-content:center;gap:6px;border:1px solid #6a795c;border-radius:3px;padding:9px 14px;background:#c0d899;color:#20291b;font-size:14px;font-weight:600}.play-button:hover{background:#d2e9b1}.play-button svg{width:16px;height:16px;fill:currentColor;stroke:none}.play-notes{margin:34px 0 46px;padding:24px 0;border-bottom:1px solid var(--line);display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:28px}.play-notes>div{display:flex;gap:13px}.play-notes svg{color:#b2c39d;width:23px;height:23px;margin-top:2px}.play-notes strong{font-size:14px;font-weight:500;color:#d2d9c9}.play-notes p{font-size:12px;line-height:1.8;color:var(--muted);margin:6px 0 0}.other-games{display:flex;gap:48px;align-items:start;margin-bottom:58px}.other-games h2{font-size:21px;font-weight:500;margin:0;white-space:nowrap}.other-games .eyebrow{margin-bottom:7px;font-size:12px;color:#929f86}.other-links{display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:28px;flex:1;padding-top:4px}.other-links a{font-size:14px;line-height:1.7}.other-links a:hover{color:var(--green)}.other-links span{display:block;font-size:12px;margin-top:6px;color:var(--muted)}footer{max-width:1280px;margin:0 auto;border-top:1px solid var(--line);padding:22px 0 30px;font-size:12px;letter-spacing:.12em;color:#8c9587;display:flex;justify-content:space-between}.footer-divider{margin:0 12px;color:#5c6854}.error{padding:30px;color:#e6c98c}.player-page{height:100dvh;display:flex;flex-direction:column;overflow:hidden;background:#0b0e0b}.player-bar{height:70px;flex-shrink:0;padding:0 24px;display:flex;align-items:center;gap:28px;background:#1b201b;border-bottom:1px solid var(--line)}.back-link{display:flex;gap:8px;align-items:center;font-size:14px;color:#c3cebb;white-space:nowrap}.back-link svg{width:17px;height:17px}.player-title{display:flex;gap:15px;align-items:center;border-left:1px solid var(--line);padding-left:26px;flex:1}.player-title h1{font-family:"Noto Sans SC",sans-serif;font-size:18px;letter-spacing:.03em;font-weight:500}.player-title span{font-size:12px;color:var(--muted)}.player-actions{display:flex;gap:10px}.toolbar-button{display:inline-flex;align-items:center;gap:7px;color:#dbe4d2;padding:9px 12px;border:1px solid #4a5542;background:#252c23;border-radius:4px;font-size:13px;cursor:pointer}.toolbar-button:hover{background:#35402d}.toolbar-button svg{width:17px;height:17px}.play-area{position:relative;width:100%;max-width:none;flex:1;margin:0;padding:0;min-height:0;background:#080b08}#game-frame{border:0;width:100%;height:100%;display:block}.game-loading{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;flex-direction:column;z-index:2;background:#121812;color:#dce7d2}.game-loading[hidden]{display:none}.game-loading p{font-size:18px;margin:22px 0 12px}.game-loading small{font-size:13px;color:var(--muted)}.loader{width:32px;height:32px;border:2px solid #394b30;border-top-color:#bfda9d;border-radius:50%;animation:spin 1s linear infinite}@keyframes spin{to{transform:rotate(360deg)}}.player-help{min-height:39px;display:flex;align-items:center;justify-content:space-between;gap:20px;padding:8px 24px;background:#1b201b;border-top:1px solid var(--line);font-size:12px;color:#abb6a1;flex-shrink:0}.player-help button{background:none;color:#d4dfca;border:0;padding:0;cursor:pointer;font-size:12px;white-space:nowrap}.player-help button:hover{text-decoration:underline}dialog{max-width:min(480px,calc(100vw - 32px));background:#242b22;color:var(--paper);border:1px solid #59654e;border-radius:8px;padding:30px}dialog::backdrop{background:#000a;backdrop-filter:blur(3px)}dialog h2{font-family:"Noto Serif SC",serif;font-size:26px;font-weight:600;margin:10px 0 24px}dialog ul{padding-left:20px;line-height:1.9;font-size:14px;color:#c2cdb8}dialog li{margin-bottom:10px}.close{position:absolute;right:14px;top:9px;background:none;border:0;color:#c2cdb8;font-size:29px;cursor:pointer}.dialog-done{width:100%;border:0;padding:12px;background:var(--green);border-radius:4px;margin-top:12px;cursor:pointer;color:#202a19}.toast{position:fixed;bottom:60px;left:50%;max-width:calc(100vw - 32px);transform:translate(-50%,8px);background:#dcebcf;color:#20291b;padding:13px 18px;border-radius:6px;font-size:14px;opacity:0;pointer-events:none;transition:.2s;z-index:99}.toast.visible{opacity:1;transform:translate(-50%,0)}@media(min-width:1600px){.masthead{padding-top:35px;padding-bottom:35px}.intro{padding-top:52px;padding-bottom:40px}.cover{aspect-ratio:16/10}.card-body{padding:28px}.play-notes{margin-top:42px}}@media(max-width:1050px){.masthead{padding:22px 28px}main{padding:0 28px}.library{gap:16px}.card-body{padding:19px 18px}.game-card h2{font-size:26px}.card-bottom{flex-wrap:wrap;gap:14px}.description{font-size:16px}.other-games{gap:32px}.other-links{grid-template-columns:repeat(2,minmax(0,1fr));gap:24px}footer{margin:0 28px}.player-title span{display:none}}@media(max-width:720px){.masthead{min-height:86px;padding:20px}.brand{font-size:20px;gap:11px}.brand-mark{width:38px;height:38px;font-size:25px}.brand small{font-size:12px;letter-spacing:.04em}.test-badge{padding:7px 8px;font-size:12px;gap:5px}.test-badge svg{width:13px;height:13px}main{padding:0 20px}.intro{padding:32px 0 24px;align-items:start}.intro h1{font-size:28px}.intro-note{display:none}.eyebrow{font-size:12px;margin-bottom:8px}.library{grid-template-columns:1fr;gap:24px}.cover{aspect-ratio:16/9}.card-body{padding:20px}.game-card h2{font-size:29px;margin-top:8px}.description{font-size:16px;margin:17px 0 21px}.card-bottom{flex-wrap:nowrap}.card-bottom>span{font-size:14px}.play-button{padding:10px 18px}.cover-play{opacity:1;font-size:13px;bottom:17px}.cover-play svg{width:31px;height:31px}.play-notes{grid-template-columns:1fr;gap:22px;margin:30px 0;padding:0 0 30px}.play-notes strong{font-size:14px}.play-notes p{font-size:13px}.other-games{display:block;margin-bottom:34px}.other-games h2{font-size:20px}.other-links{margin-top:24px;gap:20px}.other-links a{font-size:14px}footer{margin:0 20px;font-size:12px;gap:14px;flex-wrap:wrap}.player-bar{height:59px;padding:0 12px;gap:14px}.back-link{font-size:12px;gap:3px}.back-link svg{width:14px}.player-title{padding-left:13px}.player-title h1{font-size:16px;white-space:nowrap}.player-title{min-width:0}.player-title h1{overflow:hidden;text-overflow:ellipsis}.player-actions{gap:7px}.toolbar-button{padding:9px}.toolbar-button span{display:none}.player-help{padding:7px 12px;font-size:12px}.player-help>span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.player-help button{font-size:12px}.game-loading small{max-width:80%;text-align:center;line-height:1.8}}@media(max-height:500px)and(orientation:landscape){.player-bar{height:44px}.player-help{min-height:28px;padding-top:5px;padding-bottom:5px}.toolbar-button{padding:5px 9px}.player-title h1{font-size:15px}}@media(prefers-reduced-motion:reduce){*{animation:none!important;transition:none!important;scroll-behavior:auto!important}}

.exit-fullscreen{display:none;position:absolute;top:max(10px,env(safe-area-inset-top));right:max(10px,env(safe-area-inset-right));padding:9px 14px;border:1px solid #819473;background:#1b241be8;color:#e1ebd7;font:inherit;font-size:14px;line-height:1.5;border-radius:5px;z-index:4;cursor:pointer}.play-area:fullscreen .exit-fullscreen{display:block}

/* A desktop window needs at least 560px of iframe height for the native
   1280x720 Mahjong stage. Keep 40px of chrome in short desktop windows;
   at 600px viewport height the iframe still receives exactly 560px. */
.compact-tips{display:none}
@media (min-width: 960px) and (max-height: 700px){
 .mahjong-player .player-bar{height:40px;padding:0 16px;gap:16px}
 .mahjong-player .player-title{min-width:0;padding-left:16px}
 .mahjong-player .player-title h1{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px}
 .mahjong-player .player-title span{display:none}
 .mahjong-player .player-actions{flex-shrink:0;gap:8px}
 .mahjong-player .player-bar .toolbar-button{min-height:32px;padding:5px 10px;line-height:20px;white-space:nowrap}
 .mahjong-player .player-bar .back-link{min-height:32px}
 .mahjong-player .player-bar .toolbar-button:focus-visible,.mahjong-player .player-bar .back-link:focus-visible{outline-offset:2px}
 .mahjong-player .compact-tips{display:inline-flex}
 .mahjong-player .player-help{display:none}
}
