Improve authentication recovery and mobile gameplay

This commit is contained in:
2026-10-07 11:10:29 +05:00
parent 233e4d57f0
commit ce26e6fdbc
22 changed files with 763 additions and 97 deletions

192
app/mobile-game.css Normal file
View File

@@ -0,0 +1,192 @@
.mobile-map-toggle,
.report-icon {
display: none;
}
@media (max-width: 700px) {
.game-page {
min-height: 0;
}
.game-header {
display: grid;
grid-template-columns: minmax(0, 1fr) 44px;
gap: 8px;
padding: max(10px, env(safe-area-inset-top))
max(10px, env(safe-area-inset-right)) 12px
max(10px, env(safe-area-inset-left));
}
.game-header .brand {
font-size: 17px;
white-space: nowrap;
gap: 6px;
}
.game-header .brand-cube {
flex-shrink: 0;
}
.game-header .report-trigger {
width: 44px;
height: 44px;
padding: 0;
}
.game-header .report-trigger > span {
display: none;
}
.game-header .report-icon {
display: block;
}
.game-info {
grid-column: 1 / -1;
display: grid;
grid-template-columns: repeat(3, minmax(0, 1fr));
width: 100%;
gap: 8px;
padding: 8px;
border-radius: 10px;
}
.game-info > div {
min-width: 0;
}
.game-info small {
white-space: nowrap;
font-size: 8px;
letter-spacing: 0;
}
.game-info strong {
white-space: nowrap;
font-size: 17px;
line-height: 1.4;
}
.panorama-controls {
top: calc(max(10px, env(safe-area-inset-top)) + 112px);
left: max(10px, env(safe-area-inset-left));
gap: 6px;
}
.panorama-controls button {
width: 44px;
height: 44px;
padding: 0;
}
.game-page .game-map,
.game-page .game-map.expanded {
right: max(8px, env(safe-area-inset-right));
left: max(8px, env(safe-area-inset-left));
bottom: max(10px, env(safe-area-inset-bottom));
width: auto;
max-width: none;
box-shadow: 0 8px 24px #0006;
}
.game-map:not(.expanded) .game-map-content {
position: absolute;
bottom: 100%;
left: 0;
right: 0;
visibility: hidden;
pointer-events: none;
}
.mobile-map-toggle {
display: flex;
align-items: center;
justify-content: center;
gap: 10px;
width: 100%;
min-height: 56px;
padding: 12px;
border: 0;
color: #fff1d0;
background: #241e18;
font: 14px var(--font-pixel, monospace);
}
.mobile-map-toggle small {
font: 11px monospace;
}
.game-map.expanded .mobile-map-toggle {
display: none;
}
.game-map .map-topline {
min-height: 44px;
padding: 0 8px 0 12px;
}
.game-map .map-topline button {
display: grid;
place-items: center;
width: 44px;
height: 44px;
}
.game-page .game-map .map-surface {
height: min(46dvh, 360px);
border-width: 12px;
border-image-width: 12px;
}
.game-map .map-actions {
padding: 8px 10px 10px;
}
.game-map .map-actions .button {
min-height: 48px;
padding: 10px 12px;
font-size: 13px;
white-space: nowrap;
}
.game-map .map-actions small {
margin-bottom: 8px;
}
.game-map .leaflet-bar a {
width: 40px;
height: 40px;
line-height: 40px;
}
.look-help {
display: none;
}
.round-result {
max-width: calc(100% - 24px);
max-height: calc(100dvh - 140px);
overflow-y: auto;
padding: 20px;
}
html[lang] .round-result h2 {
font-size: 21px;
}
.round-result .score {
font-size: 42px;
}
}
@media (max-height: 500px) and (max-width: 950px) {
.game-page {
min-height: 0;
}
.game-header {
display: flex;
padding: 8px 12px;
gap: 10px;
}
.game-header .brand {
font-size: 16px;
}
.game-header .report-trigger {
order: 3;
}
.game-info {
width: auto;
flex: 1;
max-width: 300px;
margin-left: auto;
gap: 16px;
padding: 6px 10px;
}
.panorama-controls {
top: 72px;
left: 12px;
}
.game-page .game-map,
.game-page .game-map.expanded {
left: auto;
width: min(440px, calc(100vw - 80px));
right: 8px;
bottom: max(8px, env(safe-area-inset-bottom));
}
.game-page .game-map .map-surface {
height: max(100px, calc(100dvh - 190px));
}
.round-result {
max-height: calc(100dvh - 80px);
}
}