
:root{--bg:#0b1220;--panel:#111827;--panel2:#172033;--text:#f8fafc;--muted:#a8b7ca;--green:#22c55e;--red:#ef4444;--blue:#3b82f6;--gold:#f59e0b;--border:rgba(255,255,255,.1)}
*{box-sizing:border-box;-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;scrollbar-width:none;-ms-overflow-style:none}
*::-webkit-scrollbar{display:none;width:0;height:0}
html,body{touch-action:pan-x pan-y;overscroll-behavior-y:none}
[hidden]{display:none!important}
body{margin:0;min-height:100vh;font-family:system-ui,-apple-system,Segoe UI,Roboto,Arial,sans-serif;background:linear-gradient(180deg,#09101d,#0b1220 45%,#0d1525);color:var(--text)}
.wrap{max-width:560px;margin:auto;padding:18px 16px calc(32px + env(safe-area-inset-bottom))}
h1{font-size:27px;line-height:1.15;margin:4px 0 6px}
h2{font-size:18px;margin:0 0 12px}
.sub,.muted{color:var(--muted)}
.sub{font-size:14px;margin-bottom:18px}
.card{margin-top:16px;background:var(--panel);border:1px solid var(--border);border-radius:20px;padding:16px;box-shadow:0 12px 32px rgba(0,0,0,.16)}
.score{margin-top:0;background:linear-gradient(180deg,var(--panel),#0f172a)}
.grid{display:grid;grid-template-columns:1fr;gap:10px}
.stat{background:var(--panel2);border:1px solid var(--border);border-radius:15px;padding:12px;min-width:0}
.stat .v{font-size:26px;font-weight:800;margin-top:2px;font-variant-numeric:tabular-nums}
.stat .k{font-size:12px;color:var(--muted)}
.result{width:100%;max-width:440px;aspect-ratio:1;margin:14px auto 0;padding:20px;border:1px solid rgba(34,197,94,.4);border-radius:18px;background:linear-gradient(145deg,#153825,#142b2b);text-align:center;display:flex;flex-direction:column;justify-content:center}
.result-value{font-size:clamp(68px,21vw,96px);font-weight:900;line-height:1;font-variant-numeric:tabular-nums;letter-spacing:-3px}
.rank-badge{display:flex;flex-direction:column;align-items:center;gap:6px;margin-top:22px;color:#fde68a;font-size:17px;font-weight:800}
.rank-trophy{font-size:34px;line-height:1}
.slots{position:relative;display:grid;grid-template-columns:repeat(3,1fr);gap:8px}
.slot{aspect-ratio:1;min-width:0;border:1px solid var(--border);background:#1b2940;border-radius:12px;padding:6px;text-align:center;font-size:clamp(20px,6vw,28px);font-weight:850;display:flex;align-items:center;justify-content:center}
.slot.empty{color:var(--muted);background:#142036;font-weight:500}
.slot.hit-flash{animation:hit-flash .18s ease-out}
.slots.shared .slot{visibility:hidden}
.approach-message{position:absolute;inset:0;border:1px solid var(--border);background:#1b2940;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:clamp(28px,8vw,42px);font-weight:850;font-variant-numeric:tabular-nums}
.approach-message.score{color:#86efac;border-color:#4ade80;animation:approach-flash .38s ease-out}
.approach-message.maximum{color:#f87171;border-color:#f87171;animation:maximum-flash .3s ease-in-out 3}
@keyframes hit-flash{0%{background:#416cab;border-color:#bfdbfe;box-shadow:inset 0 0 0 2px #93c5fd}100%{background:#1b2940;border-color:var(--border);box-shadow:inset 0 0 0 0 transparent}}
@keyframes approach-flash{0%,25%{background:#214b40;border-color:#86efac;box-shadow:inset 0 0 0 2px #4ade80}100%{background:#1b2940;border-color:#4ade80;box-shadow:inset 0 0 0 0 transparent}}
@keyframes maximum-flash{0%,100%{color:#f87171;background:#1b2940}50%{color:#fff;background:#991b1b}}
.progress{display:grid;grid-template-columns:repeat(10,minmax(0,1fr));gap:3px;height:12px;margin-top:12px}
.progress-segment{background:#243047;border-radius:3px;overflow:hidden}
.progress-fill{height:100%;width:0;background:var(--green);border-radius:inherit;transition:width .2s ease}
.big{margin:14px auto 0;max-width:440px;display:grid;grid-template-columns:1fr 1fr;gap:10px}
.big button{aspect-ratio:1;min-height:0;padding:12px;font-size:clamp(18px,5vw,24px)}
button{border:0;border-radius:18px;color:#fff;font-weight:800;font-size:20px;padding:20px 10px;min-height:74px;cursor:pointer;-webkit-tap-highlight-color:transparent;box-shadow:inset 0 -2px 0 rgba(0,0,0,.18)}
button:not(:disabled):active{transform:scale(.985)}
button:focus-visible{outline:3px solid #fff;outline-offset:3px}
button:disabled{opacity:.45;cursor:default;pointer-events:none;box-shadow:none}
.miss{background:var(--red)}.s20{background:var(--blue)}.d20{background:var(--gold);color:#151515}.t20{background:var(--green);color:#052e16}
.big button{border:1px solid rgba(255,255,255,.16);background-image:linear-gradient(180deg,rgba(255,255,255,.12),rgba(0,0,0,.08));box-shadow:inset 0 1px 0 rgba(255,255,255,.25),inset 0 -3px 0 rgba(0,0,0,.18),0 4px 0 rgba(0,0,0,.3);transition:none;touch-action:manipulation}
.big button:not(:disabled):active{transform:translateY(4px);box-shadow:inset 0 1px 0 rgba(0,0,0,.15),inset 0 -1px 0 rgba(0,0,0,.12);filter:brightness(.88)}
.big button:disabled{box-shadow:none}
.actions{display:grid;grid-template-columns:1fr;gap:10px;margin-top:12px}
.small{min-height:52px;padding:12px 9px;font-size:15px;background:#243047}
.rows{display:grid;gap:0}
.row{display:flex;justify-content:space-between;gap:12px;padding:10px 0;border-bottom:1px solid var(--border);font-size:14px}
.row:last-child{border-bottom:0}.row span:last-child{font-weight:800;text-align:right;font-variant-numeric:tabular-nums}
.history{display:flex;gap:7px;flex-wrap:wrap;margin-top:10px}
.dot{min-width:42px;height:42px;padding:0 5px;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:12px;font-weight:900;background:#243047;border:1px solid var(--border)}
.dot.m{background:#4c1d1d}.dot.s{background:#1e3a8a}.dot.d{background:#7c5a06}.dot.t{background:#14532d}
.note{font-size:12px;color:var(--muted);margin-top:10px;line-height:1.45}
#trainingHistory{margin-top:8px;border-top:1px solid var(--border)}
.training-list{display:grid;gap:0}
.training-item{display:grid;grid-template-columns:minmax(0,1fr) auto 44px;align-items:center;gap:12px;min-height:70px;padding:10px 0;border-bottom:1px solid var(--border)}
.training-item:last-child{border-bottom:0}
.training-item.is-deleting{pointer-events:none;background:rgba(239,68,68,.08)}
.training-head{min-width:0}
.training-time{font-size:14px;font-weight:700;color:var(--text);line-height:1.2}
.delete-training{display:flex;align-items:center;justify-content:center;width:44px;height:44px;min-height:44px;padding:0;border-radius:10px;background:transparent;color:#8291a7;box-shadow:none}
.delete-training:not(:disabled):active{background:#382731;color:#fecaca}
.training-values{text-align:right;font-variant-numeric:tabular-nums}
.training-value{font-size:27px;font-weight:850;line-height:1}
.training-norm{margin-top:6px;color:#b7d8c5;font-size:11px;line-height:1.2}
.training-norm .rank-trophy{font-size:12px;margin-right:5px}
.empty-text{color:var(--muted);font-size:14px;line-height:1.45;margin:0}
.chart-box{width:100%;overflow-x:auto}
.chart-box,.chart{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none;-webkit-tap-highlight-color:transparent}
.statistics-head{display:flex;align-items:baseline;justify-content:space-between;gap:12px;margin-bottom:14px}
.statistics-head h2{margin:0}
.stat-switch{display:grid;grid-template-columns:1fr 1fr;gap:4px;border:1px solid var(--border);padding:4px;border-radius:13px;background:#0d1525;margin-bottom:12px}
.stat-switch button{min-height:44px;font:inherit;font-size:14px;font-weight:750;padding:9px 12px;border-radius:9px;background:transparent;color:var(--muted);box-shadow:none}
.stat-switch button[aria-pressed="true"]{background:#243858;color:#fff}
.period-switch{grid-template-columns:none;grid-auto-flow:column;grid-auto-columns:minmax(0,1fr);margin-bottom:10px}
.period-switch button{padding:9px 4px;font-size:13px}
.chart{display:block;width:100%;height:auto;min-height:180px}
.chart text{fill:var(--muted);font-size:13px;font-family:system-ui,sans-serif}
.chart .bar{fill:var(--blue)}.chart .gridline{stroke:rgba(255,255,255,.1);stroke-width:1}
.chart .norm-line{stroke:#8095b4;stroke-width:1;stroke-dasharray:4 5;opacity:.55}
.chart .average-line{stroke:#c4d3e9;stroke-width:1.5;stroke-dasharray:5 5;opacity:.85}
.chart .average-label{fill:#c4d3e9;font-size:12px;font-weight:650}
.chart .norm-next{stroke:var(--gold);opacity:.7}.chart .norm-label{font-size:13px;fill:#bbc9dc}.chart .norm-next-label{fill:#fcd34d}
.chart .label{fill:var(--text);font-size:14px;font-weight:750}
.chart.is-compact .day-date{font-size:14px}
.chart .day-month{font-size:11px}
.chart.is-compact .label{paint-order:stroke;stroke:var(--panel);stroke-width:3px;stroke-linejoin:round}
.chart-norm-key{display:flex;justify-content:space-between;gap:12px;margin:2px 2px 8px;color:#bbc9dc;font-size:12px;font-weight:650}
.chart-norm-key span:last-child{color:#fcd34d}
.chart .day-target{cursor:pointer;outline:none}.chart .day-hit{fill:transparent;stroke:transparent}
.chart .day-target:focus-visible .day-hit{stroke:#fff;stroke-width:2}.chart .is-selected .bar{fill:#93c5fd}
.chart .is-selected .day-date{fill:#fff;font-weight:800}
.day-detail{padding:4px 0 14px}
.day-detail-title{font-size:14px;font-weight:750;min-height:20px;line-height:20px;margin-bottom:12px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.day-detail-grid{display:grid;align-items:baseline;grid-template-columns:minmax(0,1.4fr) repeat(2,minmax(0,.9fr));gap:10px}
.day-detail-value{font-size:23px;font-weight:850;font-variant-numeric:tabular-nums;line-height:1.15}
.day-detail-grid>div:first-child .day-detail-value{font-size:clamp(24px,7vw,36px)}
.day-detail-label{font-size:12px;color:var(--muted);margin-top:4px}
.norms{border-top:1px solid var(--border);padding-top:2px}.norms summary{min-height:44px;padding:12px 0;cursor:pointer;font-size:13px;color:#bfdbfe;font-weight:700}
.norm-category{float:right;color:var(--muted);font-size:12px;font-weight:500}
.norm-table{border-collapse:collapse;width:100%;font-size:13px}.norm-table th,.norm-table td{padding:9px 0;border-bottom:1px solid var(--border);text-align:left}
.norm-table th{color:var(--muted);font-size:12px;font-weight:500}.norm-table th:last-child,.norm-table td:last-child{text-align:right;font-variant-numeric:tabular-nums}
.days{display:grid;gap:10px}
.day{background:var(--panel2);border:1px solid var(--border);border-radius:14px;padding:12px}
.day-title{display:flex;justify-content:space-between;gap:10px;align-items:baseline;font-size:14px;font-weight:800}
.day-title span:last-child{color:var(--muted);font-size:12px;font-weight:500;text-align:right}
.day-stats{font-size:13px;color:var(--muted);margin-top:5px}
.session-list{margin-top:8px;padding-top:8px;border-top:1px solid var(--border);display:grid;gap:6px}
.session-line{display:flex;justify-content:space-between;gap:10px;font-size:12px}
.session-line span:last-child{text-align:right;color:var(--muted)}
.note:empty{display:none}
#storageNote:not(:empty),#chartNotice:not(:empty){margin:0 0 14px;padding:10px 12px;border:1px solid rgba(245,158,11,.35);border-radius:12px;background:#292319;color:#fde68a;font-size:13px}
.form{display:grid;gap:10px}
.form label{display:grid;gap:5px;font-size:13px;color:var(--muted)}
.auth-links{display:flex;justify-content:space-between;gap:12px;margin:14px 0;font-size:14px}
.auth-links a{color:#93c5fd;padding:8px 0}
.form input,.form select{width:100%;border:1px solid var(--border);border-radius:12px;background:#172033;color:var(--text);font:inherit;font-size:16px;padding:13px;min-height:48px}
.form input:focus-visible,.form select:focus-visible{outline:2px solid var(--blue)}
.form button{font-size:16px;min-height:52px;padding:12px}
.primary{background:var(--blue)}
.account-bar{margin-top:20px;display:grid;gap:10px}
.profile-link{display:flex;align-items:center;justify-content:center;min-height:56px;padding:12px;border-radius:12px;font-size:17px;font-weight:800;color:var(--text);background:#243047;text-decoration:none}
.feedback-button{width:100%;min-height:52px;padding:12px;border-radius:12px;background:#172033;color:#bfdbfe;font-size:16px;font-weight:750;border:1px solid rgba(255,255,255,.1)}
.feedback-dialog{width:min(480px,calc(100% - 32px));max-height:calc(100dvh - 32px);padding:20px;border:1px solid rgba(255,255,255,.12);border-radius:20px;background:#111827;color:var(--text);box-shadow:0 20px 70px rgba(0,0,0,.5);overflow:auto}
.feedback-dialog::backdrop{background:rgba(3,7,18,.75)}
.feedback-dialog h2{margin:0 0 16px;font-size:22px}
.feedback-dialog textarea{display:block;width:100%;min-height:160px;resize:vertical;padding:14px;border:1px solid rgba(255,255,255,.12);border-radius:12px;background:#172033;color:var(--text);font:inherit;font-size:16px;line-height:1.5;-webkit-user-select:text;user-select:text;-webkit-touch-callout:default}
.feedback-dialog textarea:focus-visible{outline:2px solid #60a5fa}
.feedback-dialog .actions{display:grid;grid-template-columns:1fr 1fr;margin-top:14px}
.feedback-dialog .feedback{margin-top:12px}
.profile-link:focus-visible{outline:3px solid #fff;outline-offset:3px}
.feedback{color:#fecaca;font-size:13px;min-height:1em;line-height:1.4}
.feedback.ok{color:#bbf7d0}
.profile-list{font-size:13px;color:var(--muted);line-height:1.6}
@media(max-width:350px){.wrap{padding-left:12px;padding-right:12px}.card{padding:13px}.stat .v{font-size:23px}.small{font-size:13px}}
@media(prefers-reduced-motion:reduce){.slot,.slots .slot,.approach-message{animation:none!important}.progress-fill{transition:none}}


.training-header{display:flex;align-items:center;gap:10px;margin:0 0 18px}
.training-header h1{margin:0;flex:1;min-width:0;font-size:25px}
.back-arrow,.rules-button{display:grid;place-items:center;flex:none;width:44px;height:44px;min-height:44px;padding:0;border-radius:12px;background:#172033;color:var(--text);font-size:26px;text-decoration:none;box-shadow:none;border:1px solid var(--border)}
.rules-button{font-size:22px}
.back-arrow svg{display:block;width:24px;height:24px}
.menu-heading{margin:4px 0 22px}
html:has(#app:not([hidden]) #mainMenu:not([hidden])){height:100%;overflow:hidden}
body:has(#app:not([hidden]) #mainMenu:not([hidden])){position:fixed;inset:0;min-height:0;overflow:hidden}
#app:has(#mainMenu:not([hidden])){height:100%;min-height:0;display:flex;flex-direction:column;padding-top:max(18px,env(safe-area-inset-top));padding-bottom:max(18px,env(safe-area-inset-bottom))}
#mainMenu{min-height:0}
@media(max-height:520px){
  #mainMenu .menu-heading{font-size:24px;margin:0 0 12px}
  #mainMenu .menu-training{min-height:64px;padding:14px 18px;font-size:21px}
  #mainMenu .account-bar{margin:12px 0 0}
  #app:has(#mainMenu:not([hidden])){padding-top:max(12px,env(safe-area-inset-top));padding-bottom:max(12px,env(safe-area-inset-bottom))}
}
@media(max-height:440px){
  #mainMenu .menu-heading{font-size:22px;margin-bottom:10px}
  #mainMenu .account-bar{grid-template-columns:1fr 1fr;gap:8px}
  #mainMenu .profile-link,#mainMenu .feedback-button{min-height:48px;padding:10px;font-size:15px}
  #app:has(#mainMenu:not([hidden])) #installApp{min-height:40px;padding:8px;font-size:15px}
}
.menu-trainings{display:grid;gap:12px}
.menu-training{display:flex;align-items:center;justify-content:space-between;gap:14px;min-height:108px;padding:22px;border-radius:20px;border:1px solid var(--border);background:linear-gradient(145deg,#1d3355,#111d31);color:var(--text);text-decoration:none;font-size:23px;font-weight:800;box-shadow:0 8px 24px rgba(0,0,0,.16)}
.menu-training:active{transform:scale(.985)}
.menu-training:focus-visible{outline:3px solid #fff;outline-offset:3px}
.around-score .big{margin-top:14px}
.around-target-title{display:flex;align-items:center;justify-content:center;min-height:96px;padding:20px 12px;border:1px solid var(--border);border-radius:12px;background:#1b2940;font-size:clamp(28px,8vw,38px);font-weight:850;line-height:1.2;text-align:center}
.around-slots{gap:3px;margin-top:12px}
.around-slots .slot{aspect-ratio:auto;height:12px;padding:0;border:0;border-radius:3px;background:#243047}
.around-slots .slot.is-hit{background:var(--green)}
.around-slots .slot.is-miss{background:var(--red)}
.around-score .big button{font-size:clamp(24px,8vw,42px)}
.around-stage{position:relative}
.around-input[aria-hidden="true"]{visibility:hidden;pointer-events:none}
.around-result{position:absolute;inset:0;width:100%;height:100%;max-width:none;aspect-ratio:auto;margin:0}
.rules-dialog p{font-size:15px;line-height:1.6;margin:0 0 14px}
.rules-dialog .small{width:100%}
.rules-dialog{overscroll-behavior:contain;touch-action:pan-y}
