.page { height: 100vh; position: relative; overflow: hidden; background: #dbeed4; color: #163020; } .app-edge-glow { position: absolute; inset: 0; border-radius: 0; pointer-events: none; z-index: 40; } .app-edge-glow--orange { animation: app-edge-breathe-orange 1.55s ease-in-out infinite; } .app-edge-glow--red { animation: app-edge-breathe-red 1.15s ease-in-out infinite; } .map-stage { position: absolute; inset: 0; overflow: hidden; background: #dbeed4; } .map-content { position: absolute; inset: 0; } .map-canvas { position: absolute; inset: 0; width: 100%; height: 100%; display: block; } .map-canvas--base { z-index: 1; } .map-canvas--labels { z-index: 2; pointer-events: none; } .map-stage__crosshair { position: absolute; left: 50%; top: 50%; width: 44rpx; height: 44rpx; transform: translate(-50%, -50%); border: 3rpx solid rgba(255, 255, 255, 0.95); border-radius: 50%; box-shadow: 0 0 0 4rpx rgba(22, 48, 32, 0.2); pointer-events: none; z-index: 3; } .map-stage__crosshair::before, .map-stage__crosshair::after { content: ''; position: absolute; background: rgba(255, 255, 255, 0.95); } .map-stage__crosshair::before { left: 50%; top: -18rpx; width: 2rpx; height: 76rpx; transform: translateX(-50%); } .map-stage__crosshair::after { left: -18rpx; top: 50%; width: 76rpx; height: 2rpx; transform: translateY(-50%); } .map-stage__map-pulse { position: absolute; width: 44rpx; height: 44rpx; margin-left: -22rpx; margin-top: -22rpx; border-radius: 50%; pointer-events: none; z-index: 6; } .map-stage__map-pulse--control { animation: map-pulse-control 0.82s ease-out 1; } .map-stage__map-pulse--ready { animation: map-pulse-ready 0.72s ease-out 1; } .map-stage__map-pulse--finish { animation: map-pulse-finish 0.82s ease-out 1; } .map-stage__stage-fx { position: absolute; inset: 0; pointer-events: none; z-index: 5; } .map-stage__stage-fx--finish { animation: stage-fx-finish 0.76s ease-out 1; } .map-stage__overlay { position: absolute; inset: 0; display: flex; flex-direction: column; justify-content: flex-end; padding: 0 24rpx 248rpx; box-sizing: border-box; pointer-events: none; z-index: 4; } .map-stage__topbar { display: flex; align-items: flex-start; justify-content: flex-start; } .map-stage__meta { max-width: 68%; padding: 18rpx 20rpx 20rpx; border-radius: 28rpx; background: rgba(248, 251, 244, 0.92); box-shadow: 0 14rpx 36rpx rgba(22, 48, 32, 0.12); backdrop-filter: blur(12rpx); } .map-stage__eyebrow { font-size: 20rpx; letter-spacing: 4rpx; color: #5f7a65; } .map-stage__title { margin-top: 8rpx; font-size: 38rpx; font-weight: 600; } .map-stage__badge { display: inline-flex; margin-top: 14rpx; padding: 8rpx 18rpx; border-radius: 999rpx; background: rgba(22, 48, 32, 0.9); color: #f7fbf2; font-size: 22rpx; } .screen-button-layer { position: absolute; width: 116rpx; min-height: 116rpx; padding: 18rpx 0 14rpx; border-radius: 30rpx; background: rgba(248, 251, 244, 0.96); box-shadow: 0 14rpx 36rpx rgba(22, 48, 32, 0.14); display: flex; flex-direction: column; align-items: center; justify-content: center; box-sizing: border-box; z-index: 20; } .screen-button-layer__icon { position: relative; width: 54rpx; height: 32rpx; margin: 0 auto; border: 4rpx solid #163020; border-radius: 8rpx; box-sizing: border-box; } .screen-button-layer__line { position: absolute; left: 8rpx; right: 8rpx; bottom: 6rpx; height: 4rpx; border-radius: 999rpx; background: rgba(22, 48, 32, 0.3); } .screen-button-layer__stand { position: absolute; left: 50%; bottom: -12rpx; width: 18rpx; height: 4rpx; margin-left: -9rpx; border-radius: 999rpx; background: #163020; } .screen-button-layer__text { margin-top: 18rpx; text-align: center; font-size: 22rpx; font-weight: 600; color: #163020; line-height: 1.2; } .map-stage__bottom { display: flex; align-items: flex-end; justify-content: center; width: 100%; } .screen-button-layer--bottom-left { left: 24rpx; bottom: 244rpx; } .screen-button-layer--start-left { left: 24rpx; bottom: 378rpx; min-height: 96rpx; padding: 0 18rpx; background: rgba(255, 226, 88, 0.96); box-shadow: 0 14rpx 36rpx rgba(120, 89, 0, 0.2), 0 0 0 3rpx rgba(255, 246, 186, 0.38); } .screen-button-layer__text--start { margin-top: 0; font-size: 30rpx; font-weight: 800; color: #6d4b00; letter-spacing: 2rpx; } .map-side-toggle { position: absolute; left: 24rpx; z-index: 19; } .map-side-column { position: absolute; display: flex; flex-direction: column; gap: 16rpx; padding-top: 12rpx; z-index: 18; } .map-side-column--left { left: 24rpx; } .map-side-column--left-group { padding-top: 106rpx; } .map-side-column--right-main { right: 118rpx; } .map-side-column--right-sub { right: 24rpx; } .map-side-button { width: 78rpx; height: 78rpx; border-radius: 22rpx; background: rgba(248, 251, 244, 0.96); box-shadow: 0 10rpx 26rpx rgba(22, 48, 32, 0.14); display: flex; align-items: center; justify-content: center; box-sizing: border-box; } .map-side-button--default { background: rgba(248, 251, 244, 0.96); } .map-side-button--icon { width: 90rpx; height: 90rpx; padding: 0; background: transparent; box-shadow: none; border-radius: 0; } .map-side-button__image { width: 100%; height: 100%; } .map-side-button__rotate-image { width: 100%; height: 100%; border-radius: 16rpx; box-sizing: border-box; } .map-side-button__rotate-image--active { border: 1px solid rgba(231, 54, 33, 0.98); } .map-side-button--muted { background: rgba(229, 233, 230, 0.92); } .map-side-button--muted .map-side-button__action-image { opacity: 0.46; filter: grayscale(1); } .map-side-button--active { background: rgba(255, 226, 88, 0.98); box-shadow: 0 0 0 4rpx rgba(255, 241, 158, 0.18), 0 12rpx 28rpx rgba(120, 89, 0, 0.2); } .map-side-button__text { font-size: 18rpx; line-height: 1.1; font-weight: 700; color: #163020; text-align: center; letter-spacing: 1rpx; } .map-side-button__action-image { width: 100%; height: 100%; border-radius: 22rpx; } .map-side-button--active .map-side-button__action-image { opacity: 1; } .compass-widget { display: flex; flex-direction: column; align-items: center; gap: 6rpx; flex-shrink: 0; } .compass-widget__heading { font-size: 14rpx; line-height: 1; font-weight: 600; color: rgba(32, 42, 34, 0.72); text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.35); } .compass-widget__dial { position: relative; width: 196rpx; height: 196rpx; border-radius: 50%; background: radial-gradient(circle at 48% 44%, rgba(255, 255, 255, 0.3) 0%, rgba(242, 241, 214, 0.32) 46%, rgba(183, 188, 159, 0.4) 72%, rgba(64, 68, 58, 0.62) 100%); border: 2rpx solid rgba(18, 24, 18, 0.48); box-shadow: 0 6rpx 14rpx rgba(0, 0, 0, 0.14), inset 0 0 0 2rpx rgba(255, 255, 255, 0.24); overflow: hidden; } .compass-widget__dial--active { border-color: rgba(250, 252, 187, 0.98); box-shadow: 0 0 0 2rpx rgba(253, 255, 214, 0.92), 0 0 18rpx rgba(247, 255, 173, 0.46), 0 6rpx 14rpx rgba(0, 0, 0, 0.14), inset 0 0 0 2rpx rgba(255, 255, 255, 0.28); } .compass-widget__glass, .compass-widget__inner-shadow { position: absolute; inset: 0; border-radius: 50%; pointer-events: none; } .compass-widget__glass { background: radial-gradient(circle at 38% 30%, rgba(255, 255, 255, 0.24) 0%, rgba(255, 255, 255, 0.1) 24%, rgba(255, 255, 255, 0) 52%); } .compass-widget__inner-shadow { box-shadow: inset 0 0 0 12rpx rgba(0, 0, 0, 0.07), inset 0 0 18rpx rgba(255, 255, 255, 0.22); } .compass-widget__card { position: absolute; inset: 0; transform-origin: center; } .compass-widget__north-arrow { position: absolute; left: 50%; top: 50%; width: 54rpx; height: 176rpx; transform: translate(-50%, -52%); display: block; pointer-events: none; z-index: 1; opacity: 0.42; } .compass-widget__north-arrow-outline, .compass-widget__north-arrow-fill, .compass-widget__north-arrow-tail-outline, .compass-widget__north-arrow-tail-fill { display: none; } .compass-widget__tick-anchor, .compass-widget__mark-anchor, .compass-widget__needle-anchor { position: absolute; left: 50%; top: 50%; } .compass-widget__tick { position: absolute; left: 50%; top: 50%; width: 2rpx; border-radius: 999rpx; transform: translate(-50%, -90rpx); background: rgba(28, 33, 28, 0.72); } .compass-widget__tick--short { height: 8rpx; } .compass-widget__tick--long { height: 12rpx; } .compass-widget__tick--major { width: 3rpx; height: 18rpx; background: rgba(18, 22, 18, 0.88); } .compass-widget__mark { position: absolute; left: 50%; top: 50%; line-height: 1; color: rgba(40, 42, 37, 0.88); text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.22); white-space: nowrap; transform-origin: center; } .compass-widget__mark--cardinal { font-size: 26rpx; font-weight: 700; } .compass-widget__mark--intermediate { font-size: 14rpx; font-weight: 600; } .compass-widget__mark--north { color: #d62323; } .compass-widget__mark--northeast, .compass-widget__mark--northwest { color: #577347; } .compass-widget__needle-anchor { width: 0; height: 0; } .compass-widget__needle-north, .compass-widget__needle-south { position: absolute; left: 50%; top: 50%; } .compass-widget__needle-north { width: 0; height: 0; border-left: 8rpx solid transparent; border-right: 8rpx solid transparent; border-bottom: 64rpx solid #ef2f2f; transform: translate(-50%, -74rpx); filter: drop-shadow(0 2rpx 3rpx rgba(96, 0, 0, 0.24)); } .compass-widget__needle-south { width: 7rpx; height: 72rpx; border-radius: 999rpx; background: linear-gradient(180deg, rgba(236, 238, 232, 0.98) 0%, rgba(146, 151, 143, 0.98) 100%); transform: translate(-50%, 2rpx); box-shadow: 0 1rpx 3rpx rgba(32, 34, 31, 0.18); } .compass-widget__hub { position: absolute; left: 50%; top: 50%; width: 26rpx; height: 26rpx; transform: translate(-50%, -52%); border-radius: 50%; background: radial-gradient(circle at 34% 32%, #f4f3e7 0%, #d7d2bd 40%, #928b78 72%, #5a554b 100%); box-shadow: inset 0 0 0 2rpx rgba(255, 255, 255, 0.32), 0 2rpx 5rpx rgba(0, 0, 0, 0.16); } .compass-widget__hub-core { position: absolute; left: 50%; top: 50%; width: 10rpx; height: 10rpx; transform: translate(-50%, -52%); border-radius: 50%; background: rgba(173, 170, 156, 0.92); box-shadow: inset 0 0 0 2rpx rgba(255, 255, 255, 0.2); } .compass-widget__edge-arrow { width: 0; height: 0; margin-top: -2rpx; margin-bottom: -4rpx; border-left: 8rpx solid transparent; border-right: 8rpx solid transparent; border-top: 14rpx solid rgba(58, 49, 37, 0.72); filter: drop-shadow(0 1rpx 1rpx rgba(255, 255, 255, 0.18)); } .compass-widget__hint { max-width: 196rpx; font-size: 14rpx; line-height: 1.3; color: #d62828; text-align: center; font-weight: 700; text-shadow: 0 1rpx 0 rgba(255, 255, 255, 0.24); } .race-panel-swiper { position: absolute; left: 0; right: 0; bottom: 0; height: 216rpx; z-index: 15; } .race-panel { position: relative; height: 100%; background: linear-gradient(180deg, #1d8fd2 0%, #197dba 100%); box-shadow: 0 -10rpx 24rpx rgba(18, 101, 150, 0.2); overflow: hidden; } .race-panel--tone-blue { background: linear-gradient(180deg, #1d8fd2 0%, #197dba 100%); box-shadow: 0 -10rpx 24rpx rgba(18, 101, 150, 0.22); } .race-panel--tone-purple { background: linear-gradient(180deg, #5317d4 0%, #4310b7 100%); box-shadow: 0 -10rpx 24rpx rgba(58, 16, 145, 0.24); } .race-panel--tone-green { background: linear-gradient(180deg, #08c805 0%, #05ab03 100%); box-shadow: 0 -10rpx 24rpx rgba(6, 112, 9, 0.24); } .race-panel--tone-yellow { background: linear-gradient(180deg, #ffbf1f 0%, #ffad0f 100%); box-shadow: 0 -10rpx 24rpx rgba(163, 105, 0, 0.24); } .race-panel--tone-yellow .race-panel__cell, .race-panel--tone-yellow .race-panel__tag, .race-panel--tone-orange .race-panel__tag, .race-panel--tone-red .race-panel__tag { color: #fff; } .race-panel--tone-orange { background: linear-gradient(180deg, #ff7b12 0%, #ff6500 100%); box-shadow: 0 -10rpx 24rpx rgba(156, 68, 0, 0.26); } .race-panel--tone-red { background: linear-gradient(180deg, #e1122c 0%, #c90e27 100%); box-shadow: 0 -10rpx 24rpx rgba(141, 16, 38, 0.28); } @keyframes app-edge-breathe-orange { 0%, 100% { box-shadow: inset 0 0 22rpx 6rpx rgba(255, 123, 18, 0.12), inset 0 0 54rpx 14rpx rgba(255, 148, 46, 0.06); } 50% { box-shadow: inset 0 0 34rpx 12rpx rgba(255, 133, 36, 0.24), inset 0 0 78rpx 24rpx rgba(255, 160, 78, 0.12); } } @keyframes app-edge-breathe-red { 0%, 100% { box-shadow: inset 0 0 24rpx 7rpx rgba(225, 18, 44, 0.14), inset 0 0 58rpx 16rpx rgba(233, 44, 67, 0.07); } 50% { box-shadow: inset 0 0 38rpx 14rpx rgba(233, 44, 67, 0.28), inset 0 0 86rpx 26rpx rgba(241, 82, 104, 0.14); } } .race-panel-pager { position: absolute; left: 50%; bottom: 18rpx; transform: translateX(-50%); display: flex; align-items: center; gap: 10rpx; z-index: 16; pointer-events: none; } .race-panel-pager__dot { width: 12rpx; height: 12rpx; border-radius: 50%; background: rgba(255, 255, 255, 0.35); box-shadow: 0 0 0 2rpx rgba(255, 255, 255, 0.08); } .race-panel-pager__dot--active { background: rgba(255, 255, 255, 0.92); box-shadow: 0 0 0 4rpx rgba(255, 255, 255, 0.12); } .race-panel__grid { position: relative; z-index: 2; display: grid; grid-template-columns: 1fr 1fr 1fr; grid-template-rows: 1fr 1fr; width: 100%; height: 100%; } .race-panel__cell { position: relative; display: flex; align-items: center; justify-content: center; color: #ffffff; box-sizing: border-box; } .race-panel__cell--action, .race-panel__cell--timer, .race-panel__cell--mileage { padding-top: 10rpx; } .race-panel__cell--distance, .race-panel__cell--progress, .race-panel__cell--speed { padding-top: 2rpx; } .race-panel__cell--action { justify-content: center; padding-left: 0; } .race-panel__cell--timer { padding-left: 0; padding-right: 0; } .race-panel__cell--mileage { justify-content: center; padding-right: 0; } .race-panel__cell--distance { justify-content: center; padding-left: 0; } .race-panel__cell--progress { padding-left: 0; padding-right: 0; } .race-panel__cell--speed { justify-content: center; padding-right: 0; } .race-panel__play { width: 0; height: 0; margin-left: 2rpx; border-top: 20rpx solid transparent; border-bottom: 20rpx solid transparent; border-left: 30rpx solid #ffffff; filter: drop-shadow(0 2rpx 0 rgba(255, 255, 255, 0.25)); transform: translateX(16rpx); } .race-panel__timer { max-width: 100%; box-sizing: border-box; font-size: 50rpx; line-height: 1; letter-spacing: 2rpx; font-family: 'Courier New', monospace; text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.2); } .race-panel__mileage { max-width: 100%; box-sizing: border-box; font-size: 40rpx; line-height: 1; font-weight: 300; text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.16); } .race-panel__mileage-wrap { display: flex; align-items: center; justify-content: center; gap: 10rpx; transform: translateX(-16rpx); } .race-panel__metric-group { max-width: 100%; box-sizing: border-box; display: flex; align-items: baseline; color: #ffffff; } .race-panel__metric-group--left { justify-content: center; transform: translateX(16rpx); } .race-panel__metric-group--right { justify-content: center; transform: translateX(-16rpx); } .race-panel__metric-value { line-height: 1; text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.16); } .race-panel__metric-value--distance { font-size: 54rpx; font-weight: 700; } .race-panel__metric-value--speed { font-size: 48rpx; font-weight: 400; } .race-panel__metric-value--telemetry { font-size: 46rpx; font-weight: 600; } .race-panel__metric-value--telemetry-secondary { font-size: 42rpx; font-weight: 500; } .race-panel__metric-unit { line-height: 1; margin-left: 6rpx; opacity: 0.95; } .race-panel__metric-unit--distance { font-size: 24rpx; font-weight: 600; } .race-panel__metric-unit--speed { font-size: 18rpx; font-weight: 500; } .race-panel__metric-unit--telemetry { font-size: 18rpx; font-weight: 600; } .race-panel__progress { max-width: 100%; box-sizing: border-box; font-size: 50rpx; line-height: 1; font-weight: 400; text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.16); } .race-panel__zone { display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 6rpx; max-width: calc(100% - 12rpx); text-align: center; } .race-panel__zone-name { font-size: 32rpx; line-height: 1.08; font-weight: 700; color: #ffffff; text-shadow: 0 2rpx 0 rgba(255, 255, 255, 0.14); } .race-panel__zone-range { font-size: 20rpx; line-height: 1; color: rgba(255, 255, 255, 0.86); letter-spacing: 1rpx; } .race-panel__tag { position: absolute; z-index: 3; min-width: 56rpx; height: 32rpx; padding: 0 10rpx; background: #000000; color: #ffffff; font-size: 16rpx; line-height: 32rpx; text-align: center; letter-spacing: 2rpx; } .race-panel__tag--top-left { top: 0; left: 0; } .race-panel__tag--top-right { top: 0; right: 0; } .race-panel__tag--bottom-left { left: 0; bottom: 0; } .race-panel__tag--bottom-right { right: 0; bottom: 0; } .map-punch-button { position: absolute; right: 24rpx; bottom: 244rpx; width: 92rpx; height: 92rpx; border-radius: 50%; background: rgba(78, 92, 106, 0.82); box-shadow: 0 12rpx 28rpx rgba(22, 34, 46, 0.22), inset 0 0 0 2rpx rgba(255, 255, 255, 0.08); z-index: 18; } .map-punch-button__text { font-size: 20rpx; line-height: 92rpx; font-weight: 800; text-align: center; color: rgba(236, 241, 246, 0.88); } .map-punch-button--active { background: rgba(92, 255, 237, 0.96); box-shadow: 0 0 0 5rpx rgba(149, 255, 244, 0.18), 0 0 30rpx rgba(92, 255, 237, 0.5); animation: punch-button-ready 1s ease-in-out infinite; } .map-punch-button--active .map-punch-button__text { color: #064d46; } .map-punch-button--fx-ready-a, .map-punch-button--fx-ready-b { animation: punch-button-burst 0.92s ease-out 1; } .map-punch-button--fx-warning-a, .map-punch-button--fx-warning-b { animation: punch-button-warning 0.56s ease-in-out 1; } .race-panel__line { position: absolute; z-index: 1; height: 2rpx; box-shadow: 0 0 6rpx rgba(255, 255, 255, 0.2); } .race-panel__line--center { left: 33.3333%; right: 33.3333%; top: 50%; transform: translateY(-50%); background: rgba(255, 255, 255, 0.86); } .race-panel__line--left-mid { left: 0; width: 33.3333%; top: 50%; transform: translateY(-50%); background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.78) 100%); } .race-panel__line--right-mid { right: 0; width: 33.3333%; top: 50%; transform: translateY(-50%); background: linear-gradient(90deg, rgba(255, 255, 255, 0.78) 0%, rgba(255, 255, 255, 0.08) 100%); } .race-panel__line--left-top, .race-panel__line--left-bottom, .race-panel__line--right-top, .race-panel__line--right-bottom { width: 23%; top: 50%; } .race-panel__line--left-top { right: 66.6667%; transform-origin: right center; transform: translateY(-50%) rotate(70deg); background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.82) 100%); } .race-panel__line--left-bottom { right: 66.6667%; transform-origin: right center; transform: translateY(-50%) rotate(-70deg); background: linear-gradient(90deg, rgba(255, 255, 255, 0.08) 0%, rgba(255, 255, 255, 0.82) 100%); } .race-panel__line--right-top { left: 66.6667%; transform-origin: left center; transform: translateY(-50%) rotate(-70deg); background: linear-gradient(90deg, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.08) 100%); } .race-panel__line--right-bottom { left: 66.6667%; transform-origin: left center; transform: translateY(-50%) rotate(70deg); background: linear-gradient(90deg, rgba(255, 255, 255, 0.82) 0%, rgba(255, 255, 255, 0.08) 100%); } .race-panel__chevrons { position: relative; width: 24rpx; height: 24rpx; opacity: 0.5; flex-shrink: 0; } .race-panel__chevron { position: absolute; right: 6rpx; top: 50%; width: 10rpx; height: 10rpx; border-top: 3rpx solid rgba(255, 255, 255, 0.78); border-right: 3rpx solid rgba(255, 255, 255, 0.78); transform: translateY(-50%) rotate(45deg); } .race-panel__chevron--offset { right: 0; } .game-info-modal { position: absolute; inset: 0; display: flex; align-items: flex-end; justify-content: center; padding: 0 20rpx 28rpx; box-sizing: border-box; background: rgba(7, 18, 12, 0.34); z-index: 31; } .game-info-modal__dialog { width: 100%; max-height: 72vh; border-radius: 36rpx; background: rgba(248, 251, 244, 0.98); box-shadow: 0 20rpx 60rpx rgba(7, 18, 12, 0.24); overflow: hidden; } .game-info-modal__header { display: flex; align-items: center; justify-content: space-between; gap: 24rpx; padding: 22rpx 28rpx 18rpx; border-bottom: 1rpx solid rgba(22, 48, 32, 0.08); } .game-info-modal__header-main { flex: 1; min-width: 0; } .game-info-modal__header-actions { flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; } .game-info-modal__eyebrow { font-size: 22rpx; font-weight: 800; letter-spacing: 4rpx; color: #5f7a65; line-height: 1; } .game-info-modal__title { margin-top: 12rpx; font-size: 42rpx; line-height: 1.08; font-weight: 700; color: #163020; } .game-info-modal__subtitle { margin-top: 10rpx; font-size: 22rpx; line-height: 1.3; color: #5f7a65; } .game-info-modal__close { flex-shrink: 0; min-width: 108rpx; padding: 14rpx 22rpx; border-radius: 999rpx; background: #163020; color: #f7fbf2; font-size: 24rpx; text-align: center; } .game-info-modal__content { max-height: calc(72vh - 132rpx); padding: 12rpx 24rpx 30rpx; box-sizing: border-box; } .debug-section--info { margin-top: 14rpx; } .debug-modal { position: absolute; inset: 0; display: flex; align-items: flex-end; justify-content: center; padding: 0 20rpx 28rpx; box-sizing: border-box; background: rgba(7, 18, 12, 0.34); z-index: 30; } .debug-modal__dialog { width: 100%; max-height: 72vh; border-radius: 36rpx; background: rgba(248, 251, 244, 0.98); box-shadow: 0 20rpx 60rpx rgba(7, 18, 12, 0.24); overflow: hidden; } .debug-modal__header { display: flex; align-items: center; justify-content: space-between; gap: 24rpx; padding: 22rpx 28rpx 18rpx; border-bottom: 1rpx solid rgba(22, 48, 32, 0.08); } .debug-modal__header-main { flex: 1; min-width: 0; } .debug-modal__header-actions { flex-shrink: 0; display: flex; align-items: center; justify-content: flex-end; } .debug-modal__eyebrow { font-size: 22rpx; font-weight: 800; letter-spacing: 4rpx; color: #5f7a65; line-height: 1; flex-shrink: 0; } .debug-modal__build { margin-top: 10rpx; display: inline-flex; padding: 8rpx 14rpx; border-radius: 999rpx; background: rgba(22, 48, 32, 0.08); color: #45624b; font-size: 20rpx; line-height: 1; letter-spacing: 1rpx; flex-shrink: 0; } .debug-modal__close { flex-shrink: 0; min-width: 108rpx; padding: 14rpx 22rpx; border-radius: 999rpx; background: #163020; color: #f7fbf2; font-size: 24rpx; text-align: center; } .debug-modal__content { max-height: calc(72vh - 108rpx); padding: 12rpx 24rpx 30rpx; box-sizing: border-box; } .debug-section { margin-top: 16rpx; padding: 18rpx 20rpx 22rpx; border-radius: 24rpx; background: rgba(242, 247, 239, 0.98); box-shadow: inset 0 0 0 1rpx rgba(22, 48, 32, 0.05); } .debug-section:first-child { margin-top: 0; } .debug-section__header { margin-bottom: 12rpx; } .debug-section__title { font-size: 24rpx; line-height: 1.2; font-weight: 800; letter-spacing: 2rpx; color: #163020; text-transform: uppercase; } .debug-section__desc { margin-top: 6rpx; font-size: 20rpx; line-height: 1.45; color: #6a826f; } .info-panel__row { display: flex; align-items: flex-start; justify-content: space-between; gap: 24rpx; padding: 10rpx 0; border-bottom: 1rpx solid rgba(22, 48, 32, 0.08); } .info-panel__row--stack { align-items: flex-start; } .info-panel__row:last-of-type { border-bottom: none; } .info-panel__label { width: 148rpx; flex-shrink: 0; font-size: 22rpx; letter-spacing: 2rpx; color: #5f7a65; text-align: left; text-transform: uppercase; } .info-panel__value { flex: 1; min-width: 0; font-size: 25rpx; line-height: 1.45; color: #163020; text-align: right; word-break: break-all; } .info-panel__row--stack .info-panel__value { margin-top: 0; text-align: right; color: #45624b; } .debug-input { flex: 1; min-height: 72rpx; padding: 0 22rpx; border-radius: 18rpx; background: rgba(255, 255, 255, 0.92); box-shadow: inset 0 0 0 2rpx rgba(22, 48, 32, 0.08); font-size: 24rpx; color: #244132; text-align: left; } .debug-inline-stack { flex: 1; display: flex; flex-direction: column; gap: 14rpx; } .debug-device-list { display: flex; flex-direction: column; gap: 12rpx; margin-top: 16rpx; } .debug-device-card { display: flex; align-items: center; justify-content: space-between; gap: 16rpx; padding: 16rpx 18rpx; border-radius: 18rpx; background: rgba(255, 255, 255, 0.82); box-shadow: inset 0 0 0 2rpx rgba(22, 48, 32, 0.06); } .debug-device-card__main { flex: 1; min-width: 0; } .debug-device-card__title-row { display: flex; align-items: center; gap: 10rpx; } .debug-device-card__name { flex: 1; min-width: 0; font-size: 24rpx; line-height: 1.3; font-weight: 700; color: #163020; word-break: break-all; } .debug-device-card__badge { flex-shrink: 0; padding: 4rpx 10rpx; border-radius: 999rpx; background: rgba(45, 106, 79, 0.14); color: #2d6a4f; font-size: 18rpx; line-height: 1; font-weight: 700; } .debug-device-card__meta { margin-top: 8rpx; font-size: 20rpx; line-height: 1.2; color: #6a826f; } .debug-device-card__action { flex-shrink: 0; min-width: 96rpx; padding: 16rpx 18rpx; border-radius: 999rpx; background: #eef6ea; color: #2d6a4f; font-size: 22rpx; line-height: 1; text-align: center; font-weight: 700; } .debug-device-card__action--active { background: #2d6a4f; color: #f7fbf2; } .control-row { display: flex; gap: 14rpx; margin-top: 18rpx; } .control-row--compact { margin-top: 0; } .control-row--compact .control-chip { padding: 16rpx 10rpx; font-size: 22rpx; } .control-row--single .control-chip { flex: none; width: 100%; } .debug-section .control-row:last-child { margin-bottom: 0; } .control-row--triple .control-chip { font-size: 23rpx; } .control-chip { flex: 1; min-width: 0; padding: 20rpx 16rpx; border-radius: 999rpx; background: #d7e8da; color: #163020; font-size: 26rpx; text-align: center; box-sizing: border-box; } .control-chip--primary { background: #2d6a4f; color: #f7fbf2; } .control-chip--secondary { background: #eef6ea; color: #45624b; } .control-chip--active { background: #2d6a4f; color: #f7fbf2; } .race-panel__cell--action { justify-content: flex-start; padding-left: 44rpx; } .race-panel__cell--timer { padding-left: 12rpx; padding-right: 12rpx; } .race-panel__cell--mileage { justify-content: flex-end; padding-right: 56rpx; } .race-panel__cell--distance { justify-content: flex-start; padding-left: 28rpx; } .race-panel__cell--progress { padding-left: 8rpx; padding-right: 8rpx; } .race-panel__cell--speed { justify-content: flex-end; padding-right: 32rpx; } .race-panel__timer, .race-panel__progress, .race-panel__mileage, .race-panel__metric-group { max-width: 100%; box-sizing: border-box; } .race-panel__metric-group--panel { max-width: calc(100% - 8rpx); } .game-punch-hint { position: absolute; left: 50%; bottom: 280rpx; transform: translateX(-50%); max-width: 72vw; padding: 14rpx 24rpx; border-radius: 999rpx; background: rgba(18, 33, 24, 0.78); color: #f7fbf2; font-size: 24rpx; line-height: 1.2; text-align: center; z-index: 16; pointer-events: none; } .game-punch-feedback { position: absolute; left: 50%; top: 18%; transform: translateX(-50%); min-width: 240rpx; padding: 20rpx 28rpx; border-radius: 24rpx; color: #ffffff; font-size: 24rpx; font-weight: 700; text-align: center; box-shadow: 0 16rpx 36rpx rgba(0, 0, 0, 0.18); z-index: 17; pointer-events: none; } .game-punch-feedback--neutral { background: rgba(27, 109, 189, 0.92); } .game-punch-feedback--success { background: rgba(37, 134, 88, 0.94); } .game-punch-feedback--warning { background: rgba(196, 117, 18, 0.94); } .game-punch-feedback--fx-pop { animation: feedback-toast-pop 0.42s ease-out; } .game-punch-feedback--fx-success { animation: feedback-toast-success 0.58s ease-out; } .game-punch-feedback--fx-warning { animation: feedback-toast-warning 0.56s ease-out; } .game-content-card { position: absolute; left: 50%; top: 26%; width: 440rpx; max-width: calc(100vw - 72rpx); transform: translateX(-50%); padding: 28rpx 28rpx 24rpx; border-radius: 28rpx; background: rgba(248, 251, 244, 0.96); box-shadow: 0 18rpx 48rpx rgba(22, 48, 32, 0.18); box-sizing: border-box; z-index: 17; } .game-content-card__title { font-size: 34rpx; line-height: 1.2; font-weight: 700; color: #163020; } .game-content-card__body { margin-top: 12rpx; font-size: 24rpx; line-height: 1.5; color: #45624b; } .game-content-card__hint { margin-top: 16rpx; font-size: 20rpx; color: #809284; } .game-content-card--fx-pop { animation: content-card-pop 0.5s cubic-bezier(0.18, 0.88, 0.2, 1); } .game-content-card--fx-finish { animation: content-card-finish 0.68s cubic-bezier(0.18, 0.88, 0.2, 1); } .race-panel__action-button { display: flex; align-items: center; justify-content: center; min-width: 116rpx; min-height: 72rpx; padding: 0 20rpx; border-radius: 999rpx; background: rgba(78, 92, 106, 0.54); border: 2rpx solid rgba(210, 220, 228, 0.18); box-sizing: border-box; box-shadow: inset 0 0 0 2rpx rgba(255, 255, 255, 0.06); } .race-panel__action-button--active { background: rgba(255, 226, 88, 0.98); border-color: rgba(255, 247, 194, 0.98); box-shadow: 0 0 0 4rpx rgba(255, 241, 158, 0.18), 0 0 28rpx rgba(255, 239, 122, 0.42); animation: punch-button-ready 1s ease-in-out infinite; } .race-panel__action-button-text { font-size: 24rpx; line-height: 1; font-weight: 700; color: rgba(236, 241, 246, 0.86); } .race-panel__action-button--active .race-panel__action-button-text { color: #775000; } @keyframes punch-button-ready { 0% { transform: scale(1); box-shadow: 0 0 0 0 rgba(255, 241, 158, 0.22), 0 0 18rpx rgba(255, 239, 122, 0.28); } 50% { transform: scale(1.06); box-shadow: 0 0 0 8rpx rgba(255, 241, 158, 0.08), 0 0 34rpx rgba(255, 239, 122, 0.52); } 100% { transform: scale(1); box-shadow: 0 0 0 0 rgba(255, 241, 158, 0.22), 0 0 18rpx rgba(255, 239, 122, 0.28); } } @keyframes punch-button-burst { 0% { transform: scale(1); box-shadow: 0 12rpx 28rpx rgba(22, 34, 46, 0.22); } 34% { transform: scale(1.12); box-shadow: 0 0 0 9rpx rgba(149, 255, 244, 0.18), 0 0 34rpx rgba(92, 255, 237, 0.58); } 100% { transform: scale(1); box-shadow: 0 12rpx 28rpx rgba(22, 34, 46, 0.22); } } @keyframes punch-button-warning { 0%, 100% { transform: translateX(0); } 20% { transform: translateX(-6rpx) scale(1.02); } 40% { transform: translateX(6rpx) scale(1.04); } 60% { transform: translateX(-4rpx) scale(1.02); } 80% { transform: translateX(4rpx); } } @keyframes feedback-toast-pop { 0% { opacity: 0; transform: translateX(-50%) translateY(18rpx) scale(0.88); } 100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); } } @keyframes feedback-toast-success { 0% { opacity: 0; transform: translateX(-50%) translateY(18rpx) scale(0.88); } 55% { opacity: 1; transform: translateX(-50%) translateY(-6rpx) scale(1.04); } 100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); } } @keyframes feedback-toast-warning { 0% { opacity: 0; transform: translateX(-50%) translateY(12rpx) scale(0.92); } 30% { opacity: 1; transform: translateX(calc(-50% - 6rpx)) translateY(0) scale(1.02); } 60% { transform: translateX(calc(-50% + 6rpx)) translateY(0) scale(1.02); } 100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); } } @keyframes content-card-pop { 0% { opacity: 0; transform: translateX(-50%) translateY(30rpx) scale(0.92); } 100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); } } @keyframes content-card-finish { 0% { opacity: 0; transform: translateX(-50%) translateY(34rpx) scale(0.9); box-shadow: 0 18rpx 48rpx rgba(22, 48, 32, 0.18); } 45% { opacity: 1; transform: translateX(-50%) translateY(-6rpx) scale(1.03); box-shadow: 0 0 0 6rpx rgba(255, 232, 147, 0.18), 0 22rpx 52rpx rgba(22, 48, 32, 0.2); } 100% { opacity: 1; transform: translateX(-50%) translateY(0) scale(1); box-shadow: 0 18rpx 48rpx rgba(22, 48, 32, 0.18); } } @keyframes map-pulse-control { 0% { opacity: 0.94; transform: scale(0.28); border: 6rpx solid rgba(92, 255, 237, 0.98); box-shadow: 0 0 0 0 rgba(92, 255, 237, 0.42); } 70% { opacity: 0.32; transform: scale(3.4); border: 4rpx solid rgba(92, 255, 237, 0.52); box-shadow: 0 0 0 10rpx rgba(92, 255, 237, 0.08); } 100% { opacity: 0; transform: scale(4.1); border: 2rpx solid rgba(92, 255, 237, 0); box-shadow: 0 0 0 0 rgba(92, 255, 237, 0); } } @keyframes map-pulse-ready { 0% { opacity: 0.92; transform: scale(0.22); border: 5rpx solid rgba(255, 248, 184, 0.98); box-shadow: 0 0 0 0 rgba(255, 248, 184, 0.28); } 68% { opacity: 0.22; transform: scale(2.4); border: 3rpx solid rgba(255, 248, 184, 0.46); box-shadow: 0 0 0 8rpx rgba(255, 248, 184, 0.08); } 100% { opacity: 0; transform: scale(3); border: 2rpx solid rgba(255, 248, 184, 0); box-shadow: 0 0 0 0 rgba(255, 248, 184, 0); } } @keyframes map-pulse-finish { 0% { opacity: 0.98; transform: scale(0.24); border: 6rpx solid rgba(255, 231, 117, 1); box-shadow: 0 0 0 0 rgba(255, 231, 117, 0.46); } 48% { opacity: 0.52; transform: scale(3.8); border: 4rpx solid rgba(255, 231, 117, 0.72); box-shadow: 0 0 0 14rpx rgba(255, 231, 117, 0.14); } 100% { opacity: 0; transform: scale(4.8); border: 2rpx solid rgba(255, 231, 117, 0); box-shadow: 0 0 0 0 rgba(255, 231, 117, 0); } } @keyframes stage-fx-finish { 0% { opacity: 0; background: radial-gradient(circle at 50% 50%, rgba(255, 241, 168, 0.22) 0%, rgba(255, 241, 168, 0.08) 28%, rgba(255, 255, 255, 0) 62%); backdrop-filter: brightness(1); } 24% { opacity: 1; background: radial-gradient(circle at 50% 50%, rgba(255, 241, 168, 0.34) 0%, rgba(255, 241, 168, 0.14) 32%, rgba(255, 255, 255, 0.04) 74%); backdrop-filter: brightness(1.08); } 100% { opacity: 0; background: radial-gradient(circle at 50% 50%, rgba(255, 241, 168, 0) 0%, rgba(255, 241, 168, 0) 100%); backdrop-filter: brightness(1); } }