2026-07-14 11:14:13 +03:00

743 lines
15 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* =========================
Base reset
========================= */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* =========================
Page
========================= */
body {
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
min-height: 100vh;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
color: #333;
}
h1 {
color: white;
text-align: center;
margin-bottom: 30px;
font-size: 3.5rem;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
width: 100%;
max-width: 800px;
/* ширина под блоки */
}
h2 {
color: #2d3748;
font-size: 2rem;
margin-bottom: 14px;
}
/* =========================
Legacy: если где-то ещё используется
========================= */
.form-root {
background: white;
padding: 25px;
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
width: 100%;
max-width: 800px;
display: flex;
flex-direction: column;
gap: 20px;
}
/* =========================
NEW: раскрывающиеся блоки (details)
========================= */
.block {
width: 100%;
max-width: 800px;
border-radius: 20px;
background: white;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
overflow: hidden;
margin-bottom: 18px;
}
/* убираем стандартный маркер */
.block>summary::-webkit-details-marker {
display: none;
}
.block>summary::marker {
content: "";
}
/* заголовок блока */
.block-title {
padding: 20px 24px;
cursor: pointer;
user-select: none;
font-weight: 700;
color: #2d3748;
font-size: 2rem;
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
background: white;
}
/* стрелка справа */
.block-title::after {
content: "›";
font-size: 2.4rem;
line-height: 1;
transform: rotate(0deg);
transition: transform 0.2s ease;
opacity: 0.85;
}
.block[open]>.block-title {
border-bottom: 2px solid rgba(0, 0, 0, 0.06);
}
.block[open]>.block-title::after {
transform: rotate(90deg);
}
/* тело блока */
.block-body {
padding: 22px 24px 24px;
display: flex;
flex-direction: column;
gap: 18px;
}
/* =========================
Панели (карточки внутри блока)
========================= */
.panel {
background: white;
padding: 25px;
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
width: 100%;
max-width: 800px;
display: flex;
flex-direction: column;
gap: 12px;
margin-bottom: 0;
/* теперь управляем gap'ом в .block-body */
}
/* чуть мягче панели внутри раскрывающегося блока (не ломает общий стиль) */
.block-body .panel {
box-shadow: 0 6px 18px rgba(0, 0, 0, 0.12);
}
/* =========================
Группы элементов формы
========================= */
.form-group {
border: 2px solid #e0e0e0 !important;
border-radius: 12px !important;
padding: 20px;
transition: all 0.3s ease;
background: #f8f9fa;
}
/* hover реакция */
.form-group:hover {
border-color: #667eea !important;
box-shadow: 0 5px 15px rgba(102, 126, 234, 0.1);
transform: translateY(-2px);
}
.form-group label {
display: block;
font-weight: 600;
color: #2d3748;
margin-bottom: 12px;
font-size: 2.1rem;
}
.form-group p {
font-weight: 600;
color: #2d3748;
margin-bottom: 15px;
font-size: 2.1rem;
}
/* =========================
Range input
========================= */
input[type="range"] {
width: 100%;
height: 8px;
border-radius: 4px;
background: linear-gradient(to right, #667eea, #764ba2);
outline: none;
-webkit-appearance: none;
appearance: none;
}
input[type="range"]::-webkit-slider-thumb {
-webkit-appearance: none;
appearance: none;
width: 24px;
height: 24px;
border-radius: 50%;
background: white;
border: 3px solid #667eea;
cursor: pointer;
box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2);
transition: all 0.2s ease;
}
input[type="range"]::-webkit-slider-thumb:hover {
transform: scale(1.1);
box-shadow: 0 4px 8px rgba(0, 0, 0, 0.3);
}
/* =========================
Checkbox
========================= */
input[type="checkbox"] {
-webkit-appearance: none;
appearance: none;
width: 24px;
height: 24px;
border: 2px solid #cbd5e0;
border-radius: 6px;
background: white;
cursor: pointer;
position: relative;
transition: all 0.2s ease;
margin-right: 10px;
vertical-align: middle;
}
input[type="checkbox"]:checked {
background: #667eea;
border-color: #667eea;
}
input[type="checkbox"]:checked::after {
content: "✓";
position: absolute;
color: white;
font-size: 16px;
font-weight: bold;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
input[type="checkbox"]:hover {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
}
/* =========================
Radio
========================= */
input[type="radio"] {
-webkit-appearance: none;
appearance: none;
width: 20px;
height: 20px;
border: 2px solid #cbd5e0;
border-radius: 50%;
background: white;
cursor: pointer;
position: relative;
transition: all 0.2s ease;
margin-right: 10px;
vertical-align: middle;
}
input[type="radio"]:checked {
border-color: #667eea;
}
input[type="radio"]:checked::after {
content: "";
position: absolute;
width: 10px;
height: 10px;
background: #667eea;
border-radius: 50%;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
input[type="radio"]:hover {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.1);
}
/* =========================
Радио-строки (.radio-row)
========================= */
.radio-row {
display: flex;
align-items: center;
justify-content: space-between;
gap: 12px;
margin-bottom: 10px;
padding: 10px 12px;
border-radius: 8px;
transition: background 0.2s ease;
}
.radio-row:hover {
background: rgba(102, 126, 234, 0.05);
}
.radio-row label {
margin-bottom: 0;
font-size: 1.6rem;
font-weight: 500;
}
.radio-row input[type="radio"] {
margin-right: 0;
}
/* поддержка старой разметки */
.form-group>div {
margin-bottom: 10px;
padding: 8px 12px;
border-radius: 8px;
transition: background 0.2s ease;
}
.form-group>div:hover {
background: rgba(102, 126, 234, 0.05);
}
.form-group>div:last-child,
.radio-row:last-child {
margin-bottom: 0;
}
/* =========================
Legacy submit
========================= */
input[type="submit"] {
background: linear-gradient(to right, #667eea, #764ba2);
color: white;
border: none;
padding: 18px 40px;
font-size: 1.2rem;
font-weight: 600;
border-radius: 12px;
cursor: pointer;
transition: all 0.3s ease;
margin-top: 10px;
width: 100%;
letter-spacing: 1px;
text-transform: uppercase;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.3);
}
input[type="submit"]:hover {
transform: translateY(-3px);
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.4);
}
input[type="submit"]:active {
transform: translateY(-1px);
}
/* =========================
Buttons / Coins / Login
========================= */
button {
font-family: inherit;
}
.coins-row {
display: flex;
align-items: center;
gap: 12px;
flex-wrap: nowrap;
}
.coins-input {
width: 160px;
border: 2px solid #e0e0e0;
border-radius: 12px;
padding: 12px 14px;
background: #f8f9fa;
font-size: 1.2rem;
transition: all 0.2s ease;
}
.coins-row .coins-input {
width: 140px;
/* слева компактно */
flex: 0 0 auto;
}
.coins-row .coins-btn {
flex: 1 1 auto;
/* кнопка занимает остальное */
white-space: nowrap;
}
.coins-input:focus {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2);
outline: none;
}
.coins-btn,
#loginBtn {
background: linear-gradient(to right, #667eea, #764ba2);
color: white;
border: none;
padding: 14px 18px;
font-size: 1.1rem;
font-weight: 600;
border-radius: 12px;
cursor: pointer;
transition: all 0.2s ease;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.25);
}
.coins-btn:hover,
#loginBtn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.35);
}
.coins-btn:active,
#loginBtn:active {
transform: translateY(-1px);
}
.status {
font-size: 1.05rem;
color: #2d3748;
opacity: 0.9;
min-height: 1.2em;
/* чтобы не прыгало */
}
/* глобальный статус снизу */
#globalStatus.status {
width: 100%;
max-width: 800px;
text-align: center;
color: white;
opacity: 0.95;
margin-top: 6px;
text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.25);
}
/* =========================
NEW: actions (SettingAction)
========================= */
.action-group {
border: 2px solid #e0e0e0;
border-radius: 16px;
padding: 18px;
background: #f8f9fa;
transition: all 0.3s ease;
}
.action-group:hover {
border-color: #667eea;
box-shadow: 0 5px 15px rgba(102, 126, 234, 0.1);
transform: translateY(-2px);
}
.action-group-title {
color: #2d3748;
font-size: 1.7rem;
font-weight: 700;
margin-bottom: 14px;
}
.actions-grid {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(240px, 1fr));
gap: 12px;
}
.action-btn {
background: linear-gradient(to right, #667eea, #764ba2);
color: white;
border: none;
padding: 16px 16px;
font-size: 1.1rem;
font-weight: 700;
border-radius: 14px;
cursor: pointer;
transition: all 0.2s ease;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.22);
text-align: center;
line-height: 1.15;
}
.action-btn:hover {
transform: translateY(-2px);
box-shadow: 0 6px 20px rgba(102, 126, 234, 0.35);
}
.action-btn:active {
transform: translateY(-1px);
}
.action-btn:disabled {
opacity: 0.65;
cursor: not-allowed;
transform: none !important;
box-shadow: 0 4px 15px rgba(102, 126, 234, 0.18);
}
/* =========================
Login page card
========================= */
.login-root {
background: white;
padding: 25px;
border-radius: 20px;
box-shadow: 0 10px 30px rgba(0, 0, 0, 0.2);
width: 100%;
max-width: 520px;
display: flex;
flex-direction: column;
gap: 18px;
}
.login-root h1 {
color: #2d3748;
text-shadow: none;
font-size: 2.6rem;
margin-bottom: 0;
max-width: none;
}
#loginStatus {
font-size: 1.05rem;
color: #2d3748;
opacity: 0.9;
min-height: 1.2em;
}
.login-root input[type="password"] {
width: 100%;
border: 2px solid #e0e0e0;
border-radius: 12px;
padding: 12px 14px;
background: #f8f9fa;
font-size: 1.2rem;
transition: all 0.2s ease;
}
.login-root input[type="password"]:focus {
border-color: #667eea;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.2);
outline: none;
}
/* =========================
Counters: Название:Значение в одну строку
========================= */
.form-group.counter {
display: flex;
align-items: center;
justify-content: space-between;
gap: 14px;
}
.form-group.counter label {
margin-bottom: 0;
/* убираем столбик */
flex: 1 1 auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
/* двоеточие рисуем автоматически */
.form-group.counter label::after {
content: ":";
margin-left: 6px;
}
/* значение справа */
.form-group.counter .status {
margin: 0;
padding: 0;
min-height: 0;
flex: 0 0 auto;
white-space: nowrap;
font-weight: 700;
opacity: 1;
}
/* перебиваем твой общий .form-group > div (там padding/margin),
чтобы status не превращался в "вторую строку" */
.form-group.counter>div {
margin: 0 !important;
padding: 0 !important;
}
.form-group.counter>div:hover {
background: transparent !important;
}
/* цены: чуть компактнее и ровнее */
.price-card label {
margin-bottom: 10px; /* меньше, чем у обычных form-group */
}
.price-row {
gap: 12px;
}
.price-input {
width: 140px; /* как у монет */
}
.price-btn {
flex: 1 1 auto;
}
.currency-card label { margin-bottom: 10px; }
.currency-row { gap: 12px; }
.currency-input { width: 160px; }
.currency-btn { flex: 1 1 auto; }
/* =========================
Focus accessibility
========================= */
input:focus,
button:focus,
summary:focus {
outline: none;
box-shadow: 0 0 0 3px rgba(102, 126, 234, 0.3);
}
/* =========================
Mobile
========================= */
@media (max-width: 768px) {
body {
padding: 15px;
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
}
h1 {
font-size: 1.8rem;
margin-bottom: 20px;
padding: 0 10px;
}
h2 {
font-size: 1.3rem;
margin-bottom: 10px;
}
.block-title {
font-size: 1.35rem;
padding: 16px 18px;
}
.block-title::after {
font-size: 1.9rem;
}
.block-body {
padding: 18px;
gap: 16px;
}
.form-root,
.panel {
padding: 20px;
border-radius: 16px;
gap: 16px;
}
.form-group {
padding: 16px;
}
.form-group label,
.form-group p {
font-size: 1rem;
margin-bottom: 10px;
}
.coins-btn,
#loginBtn,
input[type="submit"],
.action-btn {
padding: 14px 16px;
font-size: 1rem;
border-radius: 12px;
}
.coins-input,
.login-root input[type="password"] {
font-size: 1rem;
padding: 12px 14px;
width: 100%;
}
.coins-row {
flex-direction: row;
align-items: center;
}
.coins-row .coins-input {
width: 120px;
}
.coins-row .coins-btn {
width: auto;
}
.actions-grid {
grid-template-columns: 1fr;
}
/* тач-таргеты */
input[type="checkbox"],
input[type="radio"],
input[type="range"]::-webkit-slider-thumb {
min-height: 44px;
min-width: 44px;
}
.radio-row {
padding: 12px 16px;
margin-bottom: 8px;
}
.login-root {
max-width: 800px;
}
.login-root h1 {
font-size: 1.8rem;
}
.form-group.counter label,
.form-group.counter .status {
font-size: 1rem;
/* как у остальных на мобилке */
}
}