:root{--bg:#1b5d3f;--bg-deep:#174f36;--fg:#f8fbf9;--muted:rgba(255,255,255,.65);--border-soft:rgba(255,255,255,.16);--surface-soft:rgba(255,255,255,.08);--gold:#efd59a;--account-border:rgba(255,255,255,.2);--account-surface:#16482f;--account-inset:#123c28;--account-muted:rgba(255,255,255,.7);--ofb-brand:#a91419;--accent:#efd59a;--account-on-accent:#183924;--text:#f8fbf9}*{box-sizing:border-box}html{height:100%}body{margin:0;height:100dvh;overflow:hidden;color:var(--fg);background-color:#236847;background-image:radial-gradient(ellipse at 50% 0,rgba(255,255,255,.09),transparent 50%),repeating-linear-gradient(0deg,rgba(255,255,255,.025) 0 1px,transparent 1px 14px),linear-gradient(180deg,var(--bg),var(--bg-deep));font-family:Segoe UI,Avenir Next,Helvetica Neue,Arial,sans-serif;font-size:15px;line-height:1.5;-webkit-tap-highlight-color:transparent}a,button{touch-action:manipulation}button{font:inherit;color:inherit;cursor:pointer}button:disabled{cursor:default}a:focus-visible,button:focus-visible,textarea:focus-visible{outline:3px solid var(--gold);outline-offset:4px}a{color:inherit}.container{width:min(100%,1180px);height:100dvh;margin:0 auto;display:flex;flex-direction:column;padding:22px 28px max(16px,env(safe-area-inset-bottom))}.header{display:grid;grid-template-columns:1fr auto 1fr;gap:18px;flex-shrink:0;padding-bottom:18px}.brand,.header{align-items:center}.brand{display:flex;gap:10px}.brand h1{font-size:25px;line-height:1;margin:0;letter-spacing:-.045em;font-weight:700}.brandTile{display:block;width:26px;height:35px;padding:1px;background:#f6f1e7;border-radius:4px;box-shadow:0 3px 0 #c7bca4,0 5px 9px #102e2850;transform:rotate(-7deg)}.tileFace{width:100%;height:100%;display:block;pointer-events:none}.dateNav{display:inline-flex;align-items:center;gap:6px;justify-self:center}.dateTrigger{appearance:none;border:0;background:transparent;border-radius:999px;min-height:24px;padding:0;color:rgba(255,255,255,.9)}.dateTrigger time{display:block;white-space:nowrap;font-size:15px;font-weight:700;line-height:1;padding-bottom:2px;text-align:center}.dateTrigger:hover{color:#fff}.dateArrow{appearance:none;border:0;background:transparent;width:24px;height:24px;display:inline-flex;align-items:center;justify-content:center;padding:0;color:rgba(255,255,255,.82);opacity:.9}.dateArrow>svg{width:18px;height:18px}.dateArrow:not(:disabled):hover{color:#fff;opacity:1}.dateArrow:disabled{opacity:.34}.dateArrowPlaceholder{visibility:hidden;pointer-events:none}.calendarBackdrop{position:fixed;inset:0;z-index:90}.calendarPopover{position:fixed;z-index:91;overflow-y:auto;border:1px solid rgba(255,255,255,.18);border-radius:20px;padding:14px 14px 22px;background:linear-gradient(180deg,rgba(11,53,35,.96),rgba(18,66,45,.98)),rgba(15,23,42,.36);box-shadow:0 22px 48px rgba(3,18,12,.38),inset 0 1px 0 rgba(255,255,255,.06);-webkit-backdrop-filter:blur(14px);backdrop-filter:blur(14px)}.calendarMonthHeader{display:grid;grid-template-columns:32px 1fr 32px;align-items:center;gap:8px;margin-bottom:12px}.calendarMonthHeader>strong{text-align:center;font-size:14px;letter-spacing:.01em}.calendarMonthArrow{width:32px;height:32px;border-radius:999px;background:rgba(255,255,255,.08);border:1px solid rgba(255,255,255,.08)}.calendarMonthArrow:not(:disabled):hover{background:rgba(255,255,255,.14)}.calendarGrid,.calendarWeekdays{display:grid;grid-template-columns:repeat(7,minmax(0,1fr));gap:6px}.calendarWeekdays{margin-bottom:6px;text-align:center;font-size:11px;font-weight:700;color:rgba(255,255,255,.56);letter-spacing:.08em}.calendarDay{appearance:none;min-height:40px;border-radius:12px;border:1px solid rgba(255,255,255,.08);background:rgba(255,255,255,.06);color:rgba(255,255,255,.92);display:grid;place-items:center;padding:4px;font-size:13px;font-weight:700;line-height:1}.calendarDay:not(:disabled):hover{border-color:rgba(255,255,255,.26)}.calendarOutsideMonth{opacity:.56}.calendarUnplayed{background:rgba(255,255,255,.1);border-color:rgba(255,255,255,.2)}.calendarFuture{background:rgba(255,255,255,.02);color:rgba(255,255,255,.28);border-style:dashed;opacity:.72}.calendarInProgress{background:rgba(59,130,246,.2);border-color:rgba(96,165,250,.44);box-shadow:inset 0 0 0 1px rgba(147,197,253,.12)}.calendarComplete{background:rgba(34,197,94,.28);border-color:rgba(74,222,128,.48)}.calendarSelected{border-color:rgba(255,255,255,.86);box-shadow:0 0 0 1px rgba(255,255,255,.46)}.headerActions,.headerZoom{display:flex;align-items:center;gap:3px}.headerActions{justify-self:end}.headerZoom{border-left:1px solid var(--border-soft);margin-left:5px;padding-left:5px}.iconButton{display:inline-grid;place-items:center;width:32px;height:34px;padding:0;border:0;border-radius:6px;background:transparent;font-size:19px}.iconButton:not(:disabled):hover{background:var(--surface-soft)}.accountLink{text-decoration:none}.iconButton:disabled{opacity:.3}.undoButton{color:#fff}.hintUndoButton{color:var(--gold)}.iconButton.hintUndoButton,.iconButton.hintUndoButton:hover,.iconButton.undoButton,.iconButton.undoButton:hover{background:transparent;box-shadow:none}.hintUndoIcon{position:relative;display:inline-flex}.hintUndoIcon>svg{width:19px;height:19px}.hintUndoIcon>.hintUndoSparkle{position:absolute;width:11px;height:11px;right:-5px;top:-4px}.gameSurface{display:flex;flex:1 1;min-height:0;margin-top:14px}.gameSurface.recapSurface{flex-direction:column;align-items:center;overflow-y:auto;overflow-x:hidden;padding:24px 12px 12px;overscroll-behavior:contain}.recapCard{width:min(100%,480px);flex-shrink:0;padding-bottom:16px}.recapCard h2{margin:0;text-align:center;font-size:28px;line-height:1.2;letter-spacing:-.04em}.recapCard h2:focus{outline:none}.recapCard p{color:rgba(255,255,255,.78);font-size:13px}.dayLoadedContent.isExiting,.dayPreparing{opacity:0;pointer-events:none}.boardViewport{position:relative;flex:1 1;min-width:0;min-height:0;overflow:hidden;touch-action:none;-webkit-user-select:none;user-select:none;isolation:isolate}.footer{flex-shrink:0;flex-direction:column;gap:4px;margin-top:8px;padding-top:6px}.footer,.footerMeta{display:flex;align-items:center}.footerMeta{justify-content:center;flex-wrap:wrap;gap:4px 12px;color:rgba(255,255,255,.68);font-size:11px;line-height:1.35;text-align:center}.footerMeta a{min-height:28px;color:inherit}.footerBrand,.footerMeta a{display:inline-flex;align-items:center;font-weight:700;text-decoration:none}.footerBrand{gap:5px;min-height:36px;color:#fff;font-size:13px}.footerBrandCrest{width:36px;height:36px;object-fit:contain}.footerBrand:hover,.footerMeta a:hover{color:#fff;text-decoration:underline;text-underline-offset:3px}.srOnly{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip-path:inset(50%);white-space:nowrap;border:0}.controlButton{border:1px solid rgba(255,255,255,.24);border-radius:8px;padding:10px 17px;min-height:42px;background:rgba(255,255,255,.04);display:inline-flex;gap:7px;align-items:center;justify-content:center;font-size:12px;font-weight:600}.controlButton svg{font-size:16px}.controlButton:not(:disabled):hover{background:rgba(255,255,255,.12)}.primaryButton{background:#f3ecdc;color:#214831;border-color:#f3ecdc}.primaryButton:not(:disabled):hover{background:#fff8e8}.tilePlane{position:absolute;top:0;left:0;transform-origin:top left}.mahjongTile{position:absolute;width:60px;height:80px;padding:2px 3px;margin:0;border:1px solid #d9d2c1;border-radius:5px;color:#1d251e;background:linear-gradient(135deg,#fffaf0,#f0e8d8);box-shadow:0 4px 0 #b9aa8c,1px 5px 0 #a39272,0 7px 8px #091b1650,inset 0 1px 0 #fffdf7}.mahjongTile:not(:disabled).freeTile:hover{background:#fff9eb;border-color:#f0d99d;box-shadow:0 4px 0 #beae89,1px 5px 0 #a39272,0 7px 10px #06181070,inset 0 0 0 2px #ead39b}.mahjongTile:disabled{opacity:1}.mahjongTile.blockedTile{cursor:default}.mahjongTile.selectedTile{background:#fff0c7;border-color:#f1d28b;box-shadow:0 4px 0 #ae996b,1px 5px 0 #95825a,0 7px 12px #091b1670,inset 0 0 0 3px #d5a84c}.mahjongTile.hintedTile{background:#fff5d6;box-shadow:0 4px 0 #baa779,1px 5px 0 #a39272,0 7px 10px #091b1670,inset 0 0 0 3px #d9b358}.mahjongTile:focus-visible{outline-offset:-4px;outline-width:3px}.dialog{width:min(500px,calc(100vw - 32px));max-height:calc(100dvh - 48px);overflow-y:auto;padding:26px;border-radius:16px;border:1px solid rgba(255,255,255,.22);background:#16482f;color:var(--fg);box-shadow:0 25px 100px rgba(0,0,0,.3)}.dialog::backdrop{background:rgba(5,22,13,.65);-webkit-backdrop-filter:blur(4px);backdrop-filter:blur(4px)}.dialogHeader{display:flex;align-items:center;justify-content:space-between;gap:12px}.dialogHeader h2{font-size:24px;letter-spacing:-.04em;margin:0}.dialogHeader .iconButton{flex-shrink:0;width:30px;height:30px;font-size:18px}.dialog p{color:rgba(255,255,255,.78);font-size:13px}.recoveryConfirmation{width:min(420px,calc(100vw - 32px))}.helpSteps{display:grid;gap:19px;margin:24px 0 20px}.helpStep{display:flex;align-items:center;gap:13px}.helpStep>svg{flex-shrink:0;width:22px;height:22px;color:var(--gold)}.helpStep h3{margin:0;font-size:14px;font-weight:600}.helpStep p{margin:0}.dialog .dialogNote{font-size:12px;color:rgba(255,255,255,.6)}.dialogActions{display:flex;justify-content:flex-end;gap:10px;margin-top:24px}.dialogAction{width:100%;margin-top:12px}.winMark{display:flex;justify-content:center;margin:28px 0 21px}.winTile{width:43px;height:58px;display:block;border-radius:6px;padding:2px;background:#faf2e1;box-shadow:0 4px 0 #c7bca4;transform:rotate(-7deg)}.winDescription{text-align:center}.winStats{display:flex;justify-content:space-around;border-block:1px solid var(--border-soft);padding:18px 0;margin:20px 0}.winStats>div{display:flex;flex-direction:column;align-items:center}.winStats strong{font-size:25px;font-weight:600;font-feature-settings:"tnum";font-variant-numeric:tabular-nums}.winStats span{font-size:11px;color:var(--muted)}.copyLabel{display:block;font-size:12px;margin-top:12px}.shareFallback{width:100%;min-height:110px;margin-top:5px;resize:vertical;font:inherit;font-size:12px;background:#0f3825;border:1px solid var(--border-soft);border-radius:6px;color:var(--fg);padding:10px}.copyToast{position:fixed;left:50%;bottom:max(24px,calc(env(safe-area-inset-bottom) + 12px));z-index:100;transform:translateX(-50%);max-width:min(calc(100vw - 32px),420px);padding:11px 16px;border-radius:999px;border:1px solid rgba(255,255,255,.16);background:rgba(8,16,12,.92);color:#fff;text-align:center;font-size:13px;font-weight:700;letter-spacing:.01em;box-shadow:0 16px 32px rgba(0,0,0,.24);pointer-events:none}.loadingScreen{display:grid;justify-items:center;align-content:center;gap:12px;min-height:100dvh;padding:24px;text-align:center}.loadingTile{width:56px;height:74px;display:block;padding:3px;border-radius:7px;background:#f6f1e7;box-shadow:0 4px 0 #c7bca4;transform:rotate(-7deg)}.loadingScreen h1{font-size:36px;margin:0;letter-spacing:-.04em}.loadingScreen a,.loadingScreen p{font-size:13px;color:var(--muted)}.mahjongIntro{position:fixed;inset:0;z-index:1000;display:grid;place-items:center;width:100%;height:100dvh;max-width:none;max-height:none;margin:0;padding:24px;border:0;color:var(--fg);background:radial-gradient(ellipse at 50% 40%,#2b7952,#174f36 80%);overflow:hidden}.mahjongIntro::backdrop{background:transparent}.mahjongIntroContents{width:min(100%,360px);text-align:center;transform:translateY(-12px)}.mahjongIntroStage{position:relative;height:160px}.mahjongIntroTile{position:absolute;left:50%;top:22px;width:84px;height:112px;margin-left:-42px;padding:3px;border:1px solid #d9d2c1;border-radius:7px;background:linear-gradient(135deg,#fffaf0,#f0e8d8);box-shadow:0 5px 0 #b9aa8c,1px 6px 0 #a39272,0 14px 20px #091b1650;opacity:0}.mahjongIntroTile.isLeft{--tile-entry:-150px;--tile-rest:-46px;--tile-clear:-8px;--tile-angle:-7deg}.mahjongIntroTile.isRight{--tile-entry:150px;--tile-rest:46px;--tile-clear:8px;--tile-angle:7deg}.mahjongIntroCrest{width:28px;height:28px;flex:0 0 28px;object-fit:contain;filter:drop-shadow(0 2px 5px #09271b50)}.mahjongIntroTitle{margin:8px 0 0;font-size:clamp(36px,9vw,48px);line-height:1.15;font-weight:700;letter-spacing:-.045em}.mahjongIntroAttribution{position:absolute;bottom:max(20px,calc(env(safe-area-inset-bottom) + 20px));left:50%;transform:translateX(-50%);display:flex;align-items:center;justify-content:center;gap:7px;width:max-content;max-width:calc(100vw - 32px);font-size:12px;font-weight:650;letter-spacing:.01em;color:rgba(255,255,255,.84)}.mahjongIntroAttribution>span{padding-top:1px}@media (prefers-reduced-motion:no-preference){.mahjongIntro.isPlaying{animation:mahjongIntroExit .3s ease-in 1.1s both}.isPlaying .mahjongIntroTile{animation:mahjongIntroMatch 1.1s cubic-bezier(.22,1,.36,1) both}@keyframes mahjongIntroMatch{0%{opacity:0;transform:translateX(var(--tile-entry)) translateY(14px) rotate(var(--tile-angle))}30%,60%{opacity:1;transform:translateX(var(--tile-rest)) translateY(0) rotate(var(--tile-angle))}85%,to{opacity:0;transform:translateX(var(--tile-clear)) translateY(-8px) rotate(0) scale(.8)}}@keyframes mahjongIntroExit{to{opacity:0}}}@media (min-width:761px){.gameSurface.recapSurface{padding-top:64px}.recapSurface .footer{margin-top:48px}}@media (max-width:760px){.container{padding:16px 12px max(12px,env(safe-area-inset-bottom))}.header{grid-template-columns:1fr auto;gap:10px;padding-bottom:12px}.brand h1{font-size:22px}.brandTile{width:22px;height:30px}.dateNav{gap:3px;justify-self:end}.dateTrigger time{font-size:14px}.dateArrow{width:30px;height:34px}.headerActions{grid-column:1/-1;justify-self:center;max-width:100%;flex-wrap:wrap;justify-content:center}.iconButton{width:36px;height:36px}.gameSurface{margin-top:8px}.dialog{padding:22px}.dialogHeader h2{font-size:22px}.winStats strong{font-size:21px}}@media (max-width:480px){.header{grid-template-columns:1fr;gap:6px}.brand,.dateNav{justify-self:center}}@media (prefers-reduced-motion:no-preference){.copyToast{animation:copyToastIn .22s ease-out both}@keyframes copyToastIn{0%{opacity:0;transform:translate(-50%,10px)}to{opacity:1;transform:translate(-50%)}}.dayLoadedContent{opacity:1;transition:opacity .12s ease-out;animation:dayContentFadeIn .2s ease-out}.dayLoadedContent.isExiting{opacity:0;animation:none}@keyframes dayContentFadeIn{0%{opacity:0}}.iconButton{transition:background-color .12s ease}.undoNudge>svg{animation:undoWiggle .65s ease-in-out 3;transform-origin:center}@keyframes undoWiggle{0%,to{transform:rotate(0)}20%,60%{transform:rotate(-15deg)}40%,80%{transform:rotate(15deg)}}.hintedTile .tileFace{animation:hintGlow .9s ease-in-out 3}@keyframes hintGlow{50%{opacity:.65}}}