

:root { --bg: #ffffff; --bg-soft: #f5f6fb; --text: #1b1c2e; --text-muted: #5a5c72; --border: #e4e6f0; --primary: #6d5dfc; --primary-dark: #5646e0; --primary-soft: #eeebff; --accent: #f4a340; --card-bg: #ffffff; --shadow: 0 8px 30px rgba(28, 25, 60, 0.08); --icon-cyan: #2f9fc4; --radius: 16px; --radius-sm: 10px; --maxw: 1120px; } @media (prefers-color-scheme: dark) { :root { --bg: #0f1020; --bg-soft: #171830; --text: #eef0ff; --text-muted: #a6a9c8; --border: #2a2c4d; --primary: #7d6dff; --primary-dark: #624fff; --primary-soft: #23254a; --accent: #ffb95c; --card-bg: #161831; --shadow: 0 8px 30px rgba(0, 0, 0, 0.45); --icon-cyan: #6fd3f2; } } *, *::before, *::after { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif; line-height: 1.6; color: var(--text); background: var(--bg); -webkit-font-smoothing: antialiased; } img { max-width: 100%; display: block; } a { color: inherit; text-decoration: none; } button, input, select, textarea { font: inherit; color: inherit; } .container { width: 100%; max-width: var(--maxw); margin: 0 auto; padding: 0 20px; } .accent { color: var(--primary); } .icon-btn { border: 1px solid var(--border); background: var(--card-bg); width: 42px; height: 42px; border-radius: 12px; cursor: pointer; font-size: 18px; display: grid; place-items: center; transition: transform .12s ease, border-color .12s ease; } .icon-btn:hover { transform: translateY(-1px); border-color: var(--primary); } .hero { padding: 48px 0 32px; text-align: center; } .eyebrow { display: inline-block; padding: 6px 14px; border-radius: 999px; background: var(--primary-soft); color: var(--primary); font-size: 13px; font-weight: 600; margin: 0 0 14px; } .hero h1 { font-size: clamp(23px, 3.2vw, 34px); line-height: 1.15; margin: 0 0 12px; letter-spacing: -.02em; } .lead { max-width: 620px; margin: 0 auto 20px; color: var(--text-muted); font-size: 16px; } .hero-cta { display: flex; gap: 12px; justify-content: center; flex-wrap: wrap; } .btn { display: inline-flex; align-items: center; justify-content: center; gap: 8px; padding: 12px 22px; border-radius: var(--radius-sm); font-weight: 600; cursor: pointer; border: 1px solid transparent; transition: transform .12s ease, box-shadow .12s ease; } .btn-primary { background: var(--primary); color: #fff; box-shadow: 0 6px 20px rgba(109, 93, 252, .35); } .btn-primary:hover { background: var(--primary-dark); transform: translateY(-1px); } .btn-ghost { border-color: var(--border); background: var(--card-bg); } .btn-ghost:hover { border-color: var(--primary); transform: translateY(-1px); } .btn-glass { border-color: var(--border); background: var(--bg-soft); color: var(--text); } .btn-glass:hover { border-color: var(--primary); background: var(--card-bg); transform: translateY(-1px); } .btn-vio { border-color: transparent; background: var(--primary); color: #fff; } .btn-vio:hover { background: var(--primary-dark); transform: translateY(-1px); } .btn-sm { padding: 9px 16px; font-size: 13px; border-radius: 11px; } .btn-xs { padding: 8px 12px; font-size: 12px; border-radius: 10px; } .btn:active { transform: translateY(0); } .section { padding: 48px 0; } .section-title { font-size: clamp(22px, 3vw, 32px); margin: 0 0 24px; letter-spacing: -.02em; } .grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); gap: 18px; } .card { display: flex; flex-direction: column; gap: 6px; padding: 24px; background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); transition: transform .15s ease, border-color .15s ease; } .card:hover { transform: translateY(-4px); border-color: var(--primary); } .card-icon { width: 44px; height: 44px; border-radius: 13px; display: grid; place-items: center; font-size: 21px; line-height: 1; margin-bottom: 6px; background: var(--primary-soft); border: 1px solid var(--border); } .card-icon svg { width: 24px; height: 24px; display: block; } .card-icon .ci-a { fill: none; stroke: var(--primary); stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; } .card-icon .ci-b { fill: none; stroke: var(--icon-cyan); stroke-width: 1.7; stroke-linecap: round; stroke-linejoin: round; } .card-icon .ci-fa { fill: rgba(109, 93, 252, .18); stroke: var(--primary); stroke-width: 1.5; stroke-linejoin: round; } .card-icon .ci-fb { fill: rgba(75, 184, 221, .20); stroke: var(--icon-cyan); stroke-width: 1.5; stroke-linejoin: round; } .card h3 { margin: 0; font-size: 20px; } .card p { margin: 0; color: var(--text-muted); font-size: 15px; } .card-badge { align-self: flex-start; margin-top: 6px; font-size: 12px; font-weight: 600; padding: 3px 10px; border-radius: 999px; background: var(--bg-soft); color: var(--text-muted); } .cat-title { font-size: 20px; font-weight: 800; margin: 36px 0 18px; letter-spacing: -.01em; display: flex; align-items: center; gap: 10px; } .cat-title::before { content: ''; width: 12px; height: 12px; border-radius: 4px; background: var(--primary); flex: 0 0 auto; } .form-card { background: var(--card-bg); border: 1px solid var(--border); border-radius: var(--radius); box-shadow: var(--shadow); padding: 24px; } .field { margin-bottom: 18px; } .field label { display: block; font-weight: 600; margin-bottom: 8px; font-size: 14px; } .field input, .field select, .field textarea { width: 100%; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); transition: border-color .12s ease, box-shadow .12s ease; } .field input:focus, .field select:focus, .field textarea:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(109, 93, 252, .2); } .field .hint { font-size: 13px; color: var(--text-muted); margin-top: 6px; } .row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 16px; } .row3 { display: grid; grid-template-columns: repeat(3, 1fr); gap: 16px; } @media (max-width: 720px) { .row3 { grid-template-columns: 1fr; } } .cookie-banner { position: fixed; left: 0; right: 0; bottom: 0; z-index: 1000; background: var(--card-bg); color: var(--text); border-top: 1px solid var(--border); box-shadow: 0 -6px 24px rgba(0,0,0,.08); padding: 14px 20px; } .cookie-banner .container { display: flex; align-items: center; gap: 16px; flex-wrap: wrap; justify-content: space-between; } .cookie-banner p { margin: 0; font-size: 14px; color: var(--text-muted); max-width: 720px; } .cookie-banner a { color: var(--primary); text-decoration: underline; } .cookie-actions { display: flex; gap: 10px; flex-wrap: wrap; } .cookie-actions .btn { padding: 9px 16px; font-size: 14px; } .result-box { margin-top: 24px; padding: 20px; background: var(--primary-soft); border-radius: var(--radius-sm); } .result-list { display: grid; gap: 10px; margin: 0; } .result-list .item { display: flex; justify-content: space-between; gap: 12px; font-size: 16px; } .result-list .item .val { font-weight: 700; } .result-list .item.total { border-top: 1px solid var(--border); padding-top: 12px; } .ad-slot { position: relative; min-height: 100px; display: grid; place-items: center; border: 1px dashed var(--border); border-radius: var(--radius-sm); background: var(--bg-soft); color: var(--text-muted); font-size: 13px; } .ad-label { position: absolute; top: 6px; left: 10px; font-size: 11px; text-transform: uppercase; letter-spacing: .05em; opacity: .7; } .hero-banner { display: block; margin: 8px auto 0; max-width: var(--maxw); border-radius: var(--radius); overflow: hidden; box-shadow: var(--shadow); border: 1px solid var(--border); line-height: 0; } .hero-banner img, .hero-banner svg { width: 100%; height: auto; display: block; object-fit: cover; } .prose { max-width: 760px; } .prose p, .prose li { color: var(--text-muted); } .prose h3 { margin-top: 1.6em; } .site-footer { border-top: 1px solid var(--border); padding: 28px 0; margin-top: 24px; background: var(--bg-soft); } .footer-inner { display: flex; justify-content: space-between; align-items: center; gap: 16px; flex-wrap: wrap; } .footer-nav { display: flex; gap: 18px; flex-wrap: wrap; } .footer-nav a { color: var(--text-muted); font-size: 14px; } .footer-nav a:hover { color: var(--text); } .footer-col { flex-direction: column; align-items: flex-start; gap: 8px; } .footer-col .eyebrow { margin: 0 0 4px; } .tool-layout { display: grid; grid-template-columns: 1fr; gap: 32px; } @media (min-width: 860px) { .tool-layout { grid-template-columns: minmax(0, 1.1fr) minmax(0, .9fr); align-items: start; } } .tool-hero { padding: 40px 0 8px; } .tool-hero h1 { margin: 0 0 12px; letter-spacing: -.02em; } .breadcrumbs { font-size: 14px; color: var(--text-muted); margin-bottom: 16px; } .breadcrumbs a { color: var(--primary); } .tool-meta { color: var(--text-muted); font-size: 15px; } .print-area { padding: 24px; background: #fff; color: #111; } @media print { body * { visibility: hidden; } .print-area, .print-area * { visibility: visible; } .print-area { display: block; position: absolute; left: 0; top: 0; width: 100%; } .no-print { display: none !important; } } @media (max-width: 640px) { .row2 { grid-template-columns: 1fr; } .hero { padding: 48px 0 32px; } } :root[data-theme="light"] { --bg: #ffffff; --bg-soft: #f5f6fb; --text: #1b1c2e; --text-muted: #5a5c72; --border: #e4e6f0; --primary: #6d5dfc; --primary-dark: #5646e0; --primary-soft: #eeebff; --icon-cyan: #2f9fc4; --accent: #f4a340; --card-bg: #ffffff; --shadow: 0 8px 30px rgba(28, 25, 60, .08); } :root[data-theme="dark"] { --bg: #0f1020; --bg-soft: #171830; --text: #eef0ff; --text-muted: #a6a9c8; --border: #2a2c4d; --primary: #7d6dff; --primary-dark: #624fff; --primary-soft: #23254a; --icon-cyan: #6fd3f2; --accent: #ffb95c; --card-bg: #161831; --shadow: 0 8px 30px rgba(0, 0, 0, .45); } .print-area { display: block; } .print-area h1 { font-size: 26px; margin: 0 0 4px; } .print-area .sub { color: #555; font-size: 16px; margin-bottom: 12px; } .print-area .contacts { color: #333; font-size: 14px; margin-bottom: 16px; } .print-area h2 { font-size: 15px; margin: 16px 0 6px; text-transform: uppercase; letter-spacing: .04em; border-bottom: 1px solid #ddd; padding-bottom: 4px; } .print-area p, .print-area li { font-size: 14px; line-height: 1.6; white-space: pre-line; } .note { margin-top: 20px; padding: 16px 18px; border-radius: var(--radius-sm); background: var(--primary-soft); border: 1px solid color-mix(in srgb, var(--primary) 25%, var(--border)); font-size: 15px; line-height: 1.6; } .calc-note { display: inline-block; margin: 14px 0 0; padding: 8px 14px; border-left: 3px solid var(--accent); border-radius: 0 var(--radius-sm) var(--radius-sm) 0; background: var(--bg-soft); color: var(--text-muted); font-size: 14px; } .tr-label { font-size: 13px; color: var(--text-muted); margin-bottom: 6px; } .tr-out { font-family: ui-monospace, SFMono-Regular, Menlo, Consolas, monospace; font-size: 17px; font-weight: 700; line-height: 1.4; word-break: break-all; padding: 12px 14px; min-height: 46px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--card-bg); } .dadata-out { white-space: pre-wrap; word-break: break-word; font-size: 12px; background: var(--bg); padding: 12px; border-radius: 8px; margin-top: 0; max-height: 420px; overflow: auto; } .dep-table { width: 100%; border-collapse: collapse; font-size: 14px; margin: 12px 0; } .dep-table th, .dep-table td { padding: 8px 10px; text-align: right; border-bottom: 1px solid var(--border); } .dep-table th:first-child, .dep-table td:first-child { text-align: left; } .dep-table thead th { color: var(--text-muted); font-weight: 600; background: var(--bg-soft); } .chips { display: flex; flex-wrap: wrap; gap: 10px; } .chip { display: inline-flex; align-items: center; gap: 8px; padding: 9px 14px; border: 1px solid var(--border); border-radius: 999px; background: var(--card-bg); font-size: 14px; font-weight: 500; color: var(--text); transition: border-color .12s ease, transform .12s ease; } .chip:hover { border-color: var(--primary); transform: translateY(-1px); } .chip span { font-size: 16px; } .popular-bar { display: flex; align-items: center; flex-wrap: wrap; gap: 12px; } .popular-label { font-size: 14px; font-weight: 600; color: var(--text-muted); white-space: nowrap; } .search-big { width: 100%; padding: 14px 18px; font-size: 16px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--bg); color: var(--text); } .search-big:focus { outline: none; border-color: var(--primary); box-shadow: 0 0 0 3px rgba(109, 93, 252, .2); } .action-bar { position: fixed; right: 18px; bottom: 18px; display: flex; flex-direction: column; gap: 10px; z-index: 80; } .act-btn { width: 46px; height: 46px; border-radius: 14px; border: 1px solid var(--border); background: var(--card-bg); color: var(--primary); box-shadow: var(--shadow); display: grid; place-items: center; cursor: pointer; font-size: 0; transition: transform .12s ease, border-color .12s ease, color .12s ease; } .act-btn:hover { transform: translateY(-2px); border-color: var(--primary); } .act-btn:active { transform: translateY(0); } .act-btn svg { width: 20px; height: 20px; } .act-btn[hidden] { display: none !important; } @media (max-width: 640px) { .action-bar { flex-direction: row; right: 12px; bottom: 12px; } } .toast { position: fixed; left: 50%; bottom: 78px; transform: translateX(-50%); background: var(--card-bg); color: var(--text); border: 1px solid var(--border); border-radius: 10px; padding: 8px 14px; font-size: 14px; box-shadow: var(--shadow); z-index: 90; opacity: 0; transition: opacity .2s ease; pointer-events: none; } .toast.show { opacity: 1; } .game-wrap { max-width: 560px; margin: 0 auto; } .game-stats { display: flex; gap: 12px; flex-wrap: wrap; margin: 0 0 14px; } .game-stat { flex: 1; min-width: 120px; padding: 12px 14px; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--card-bg); text-align: center; } .game-stat .k { font-size: 12px; color: var(--text-muted); } .game-stat .v { font-size: 22px; font-weight: 800; } .game-question { font-size: 42px; font-weight: 800; text-align: center; margin: 18px 0 22px; letter-spacing: .02em; } .answer-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; } .answer-grid button, .answer-grid a { padding: 16px; font-size: 20px; font-weight: 700; border: 1px solid var(--border); background: var(--card-bg); color: var(--text); border-radius: var(--radius-sm); cursor: pointer; text-align: center; transition: transform .1s ease, border-color .1s ease, background .1s ease; } .answer-grid button:hover { transform: translateY(-1px); border-color: var(--primary); } .answer-grid button.correct { background: #2e7d52; color: #fff; border-color: #2e7d52; } .answer-grid button.wrong { background: #c0392b; color: #fff; border-color: #c0392b; } .game-message { min-height: 22px; text-align: center; font-weight: 600; margin-top: 12px; } .board-2048 { display: grid; grid-template-columns: repeat(4, 1fr); gap: 10px; background: var(--border); padding: 10px; border-radius: 12px; max-width: 400px; margin: 0 auto; } .tile-2048 { aspect-ratio: 1; display: grid; place-items: center; font-weight: 800; font-size: 26px; border-radius: 8px; background: var(--bg-soft); color: var(--text); } .tile-2048[data-v="2"] { background: #eee4da; color: #776e65; } .tile-2048[data-v="4"] { background: #ede0c8; color: #776e65; } .tile-2048[data-v="8"] { background: #f2b179; color: #fff; } .tile-2048[data-v="16"] { background: #f59563; color: #fff; } .tile-2048[data-v="32"] { background: #f67c5f; color: #fff; } .tile-2048[data-v="64"] { background: #f65e3b; color: #fff; } .tile-2048[data-v="128"] { background: #edcf72; color: #fff; } .tile-2048[data-v="256"] { background: #edcc61; color: #fff; } .tile-2048[data-v="512"] { background: #edc850; color: #fff; } .tile-2048[data-v="1024"] { background: #edc53f; color: #fff; } .tile-2048[data-v="2048"] { background: #edc22e; color: #fff; } .tile-2048[data-v="4096"] { background: #3c3a32; color: #fff; } .ic-app { max-width: 760px; margin: 0 auto; } .ic-drop { border: 2px dashed var(--border); border-radius: 20px; padding: 44px 20px; text-align: center; cursor: pointer; transition: border-color .15s ease, background .15s ease; background: var(--bg-soft); } .ic-drop:hover, .ic-drop.drag { border-color: var(--primary); background: var(--primary-soft); } .ic-drop-inner { display: grid; place-items: center; gap: 4px; } .ic-drop-ic { font-size: 42px; line-height: 1; } .ic-drop-title { font-size: 18px; font-weight: 800; margin: 6px 0 0; } .ic-drop-sub { color: var(--text-muted); font-size: 14px; margin: 0 0 12px; } .ic-summary { display: flex; justify-content: space-between; align-items: center; gap: 12px; margin-top: 18px; padding: 12px 16px; background: var(--card-bg); border: 1px solid var(--border); border-radius: 14px; font-size: 14px; } .ic-list { margin-top: 16px; display: flex; flex-direction: column; gap: 12px; } .ic-item { display: flex; align-items: center; gap: 14px; padding: 12px 14px; background: var(--card-bg); border: 1px solid var(--border); border-radius: 14px; } .ic-thumb { width: 52px; height: 52px; flex: 0 0 auto; border-radius: 10px; overflow: hidden; background: var(--bg-soft); display: grid; place-items: center; font-size: 22px; } .ic-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; } .ic-info { min-width: 0; flex: 1; } .ic-name { font-weight: 600; font-size: 14px; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } .ic-size { font-size: 13px; color: var(--text-muted); } .ic-size strong { color: var(--text); } .ic-save { color: #2e7d52; font-weight: 700; margin-left: 6px; } .ic-actions { flex: 0 0 auto; } .ic-actions .btn { padding: 9px 16px; font-size: 14px; border-radius: 12px; } .ic-status { font-size: 13px; color: var(--text-muted); } @media (max-width: 520px) { .ic-item { flex-wrap: wrap; } .ic-actions { width: 100%; } .ic-actions .btn { width: 100%; } } .gen-grid { display: grid; grid-template-columns: minmax(0, 2fr) minmax(0, 1fr); gap: 20px; align-items: start; } @media (max-width: 900px) { .gen-grid { grid-template-columns: 1fr; } } .gen-form { min-width: 0; } .gen-form .row2 { display: grid; grid-template-columns: 1fr 1fr; gap: 12px; } @media (max-width: 640px) { .gen-form .row2 { grid-template-columns: 1fr; } } .gen-variants { display: flex; flex-wrap: wrap; gap: 10px 18px; margin-bottom: 18px; } .gen-variants label { display: inline-flex; align-items: center; gap: 8px; font-size: 14.5px; cursor: pointer; } .gen-variants input[type="radio"] { width: 16px; height: 16px; margin: 0; accent-color: var(--primary); } .gen-preview { background: #fff; color: #111; font-family: "Times New Roman", Times, serif; font-size: 15px; line-height: 1.55; padding: 28px 24px; border-radius: 8px; overflow: auto; max-height: 70vh; box-shadow: 0 10px 30px rgba(0, 0, 0, .35); min-height: 220px; } .gen-preview h1, .gen-preview h2, .gen-preview h3 { font-family: inherit; color: #111; margin: 0 0 10px; font-size: 17px; } .gen-preview p { margin: 0 0 10px; text-align: justify; } .gen-preview table { width: 100%; border-collapse: collapse; font-size: 14px; } .gen-preview td, .gen-preview th { border: 1px solid #444; padding: 6px 8px; vertical-align: top; } .gen-preview .gen-sign { margin-top: 24px; } .gen-preview:empty::before { content: 'Заполните поля слева — документ появится здесь и сразу будет готов к печати.'; color: #777; } .gen-actions { display: flex; flex-wrap: wrap; gap: 10px; margin-top: 16px; } .gen-actions .btn { min-width: 0; } .gen-actions .gen-hint { flex: 1 1 100%; font-size: 12.5px; color: var(--text-muted, #9a92b0); } @media (max-width: 520px) { .gen-actions .btn { width: 100%; } .gen-preview { max-height: 60vh; padding: 18px 14px; } } .auto-modes { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; } .auto-mode { padding: 9px 14px; border-radius: 999px; cursor: pointer; border: 1px solid var(--border); background: var(--primary-soft); color: var(--text-muted); font-size: 13.5px; font-weight: 600; line-height: 1.2; transition: transform .12s ease, color .12s ease, border-color .12s ease; } .auto-mode:hover { color: var(--text); border-color: var(--primary); transform: translateY(-1px); } .auto-mode.is-on { background: var(--primary); border-color: var(--primary); color: #fff; } .auto-pane[hidden] { display: none; } .auto-big { margin: 2px 0 0; } .auto-big-v { font-size: 34px; font-weight: 800; letter-spacing: -.5px; } .auto-big-u { margin-left: 8px; font-size: 15px; color: var(--text-muted); } .auto-bars { display: grid; gap: 8px; margin-top: 14px; } .auto-bar { display: grid; grid-template-columns: 92px 1fr 84px; align-items: center; gap: 10px; font-size: 13px; } .auto-bar-n { color: var(--text-muted); } .auto-bar-t { display: block; height: 8px; border-radius: 999px; background: var(--border); overflow: hidden; } .auto-bar-t i { display: block; height: 8px; border-radius: 999px; background: linear-gradient(90deg, var(--primary), var(--icon-cyan)); } .auto-bar-v { font-weight: 700; text-align: right; } .auto-btns { display: grid; gap: 8px; margin-top: 14px; } .auto-toast { position: fixed; left: 50%; bottom: 24px; transform: translateX(-50%); z-index: 99; padding: 12px 18px; border-radius: 14px; max-width: 92vw; text-align: center; font-size: 14px; background: var(--card-bg); color: var(--text); border: 1px solid var(--border); box-shadow: var(--shadow); } @media (max-width: 560px) { .auto-big-v { font-size: 28px; } .auto-bar { grid-template-columns: 76px 1fr 72px; font-size: 12.5px; } } [data-print="stamp"], [data-print="head"] { display: none; } [data-print="btn"] { display: inline-flex; align-items: center; gap: 8px; margin-top: 10px; padding: 10px 16px; border: 1px solid rgba(255, 255, 255, .18); border-radius: 12px; background: rgba(255, 255, 255, .06); color: inherit; font: inherit; font-size: 14px; cursor: pointer; } [data-print="btn"]:hover { background: rgba(255, 255, 255, .12); } :root[data-theme="light"] [data-print="btn"] { border-color: rgba(20, 16, 40, .16); background: rgba(20, 16, 40, .04); } .seo-steps { display: grid; grid-template-columns: repeat(auto-fit, minmax(170px, 1fr)); gap: 12px; margin: 18px 0 14px; } .seo-step { padding: 16px 14px; border-radius: var(--radius-sm); background: var(--primary-soft); border: 1px solid color-mix(in srgb, var(--primary) 22%, var(--border)); } .seo-step b { display: block; font-size: 20px; font-weight: 800; color: var(--primary); margin-bottom: 6px; } .seo-step span { display: block; font-size: 13.5px; line-height: 1.5; color: var(--text-muted); } .seo-step strong { color: var(--text); } .seo-two { display: grid; grid-template-columns: 1fr 1fr; gap: 14px; margin: 16px 0; } .seo-opt { padding: 18px 20px; border-radius: var(--radius-sm); background: var(--card-bg); border: 1px solid var(--border); box-shadow: var(--shadow); } .seo-opt h3 { margin: 0 0 8px; } .seo-opt ul { margin: 0; padding-left: 18px; } .seo-opt li { margin-bottom: 5px; font-size: 14.5px; } .seo-formula { margin: 14px 0; padding: 16px 20px; border-radius: var(--radius-sm); text-align: center; background: var(--primary-soft); border: 1px dashed color-mix(in srgb, var(--primary) 45%, var(--border)); font-weight: 700; color: var(--primary); letter-spacing: .01em; } .seo-table { width: 100%; border-collapse: collapse; font-size: 14px; margin: 14px 0; } .seo-table th, .seo-table td { padding: 9px 10px; text-align: right; border-bottom: 1px solid var(--border); } .seo-table th:first-child, .seo-table td:first-child { text-align: left; } .seo-table thead th { color: var(--text-muted); font-weight: 600; background: var(--bg-soft); }
@media (max-width: 760px) { .seo-table { font-size: 13px; } .seo-table th, .seo-table td { padding: 6px 5px; overflow-wrap: break-word; } }
@media (max-width: 340px) { .seo-table th, .seo-table td { overflow-wrap: anywhere; } } .seo-links { display: flex; flex-wrap: wrap; gap: 10px; margin: 14px 0 4px; } .seo-links a { display: inline-flex; align-items: center; padding: 9px 14px; border: 1px solid var(--border); border-radius: 999px; background: var(--card-bg); font-size: 14px; font-weight: 500; color: var(--text); text-decoration: none; transition: border-color .12s ease, transform .12s ease; } .seo-links a:hover { border-color: var(--primary); transform: translateY(-1px); } .seo-faq { margin: 12px 0; border: 1px solid var(--border); border-radius: var(--radius-sm); background: var(--card-bg); overflow: hidden; } .seo-faq summary { display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 15px 18px; cursor: pointer; font-weight: 700; list-style: none; } .seo-faq summary:hover { color: var(--primary); } .seo-faq summary::-webkit-details-marker { display: none; } .seo-faq summary::after { content: ''; flex: none; width: 9px; height: 9px; margin-top: -4px; border-right: 2px solid var(--primary); border-bottom: 2px solid var(--primary); transform: rotate(45deg); transition: transform .25s ease; } .seo-faq[open] summary::after { transform: rotate(-135deg); margin-top: 4px; } .seo-faq-b { padding: 0 18px 16px; } .seo-faq-b p { margin: 0; } @media (max-width: 760px) { .seo-steps { grid-template-columns: 1fr 1fr; } .seo-two { grid-template-columns: 1fr; } } @media (max-width: 480px) { .seo-steps { grid-template-columns: 1fr; } } [data-ad-slot] { display: none; } html[data-ads="on"] [data-ad-slot][data-ad-filled="1"] { display: block; } .ad-top { min-height: 100px; } .ad-bottom { min-height: 250px; } .ad-in-content { min-height: 280px; } .ad-slot-box { margin: 16px auto; padding: 10px; max-width: 1000px; border: 1px dashed rgba(255, 255, 255, .12); border-radius: 14px; background: rgba(255, 255, 255, .03); text-align: center; overflow: hidden; } .ad-slot-box > * { max-width: 100%; } @supports (contain: layout) { .ad-slot-box { contain: layout; } } :root[data-theme="light"] .ad-slot-box { border-color: rgba(20, 16, 40, .12); background: rgba(20, 16, 40, .03); } .ad-mobile-sticky { position: fixed; left: 0; right: 0; bottom: 0; z-index: 60; height: 100px; display: none; align-items: center; justify-content: center; background: rgba(12, 10, 24, .96); border-top: 1px solid rgba(255, 255, 255, .12); } html[data-ads="on"] .ad-mobile-sticky[data-ad-visible="1"] { display: flex; } @media (min-width: 721px) { .ad-mobile-sticky { display: none !important; } } @media (max-width: 720px) { body.ad-sticky-on { padding-bottom: 104px; } } header.app-header { --htxt: #f1eef9; --hmut: #9a92b0; --hvio: #a78bfa; --hline: rgba(255, 255, 255, .11); --hline-2: rgba(255, 255, 255, .22); --hglass: rgba(255, 255, 255, .05); --hglass-2: rgba(255, 255, 255, .08); position: sticky; top: 0; z-index: 50; background: rgba(11, 9, 19, .72); -webkit-backdrop-filter: blur(16px); backdrop-filter: blur(16px); border-bottom: 1px solid var(--hline); color: var(--htxt); transition: background .3s, border-color .3s; } header.app-header#header { position: fixed; left: 0; right: 0; background: transparent; border-bottom-color: transparent; } header.app-header#header.scrolled { background: rgba(11, 9, 19, .72); border-bottom-color: var(--hline); } :root[data-theme="light"] header.app-header#header:not(.scrolled) { --htxt: #1b1533; --hmut: #5c5573; --hvio: #6d28d9; --hline: rgba(30, 20, 60, .14); --hline-2: rgba(30, 20, 60, .3); --hglass: rgba(30, 20, 60, .05); --hglass-2: rgba(30, 20, 60, .09); } :root[data-theme="light"] header.app-header#header:not(.scrolled) .nav-panel, :root[data-theme="light"] header.app-header#header:not(.scrolled) .search-dropdown { --htxt: #f1eef9; --hmut: #9a92b0; --hvio: #a78bfa; --hline: rgba(255, 255, 255, .11); --hglass: rgba(255, 255, 255, .05); --hglass-2: rgba(255, 255, 255, .08); } :root[data-theme="light"] header.app-header#header:not(.scrolled) .search-input { background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%235c5573' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6'/%3E%3Cpath d='M20.5 20.5 16 16'/%3E%3C/svg%3E"); } :root[data-theme="light"] header.app-header#header:not(.scrolled) .search-input::placeholder { color: rgba(92, 85, 115, .8); } header.app-header .head-in, header.app-header .header-inner { display: flex; flex-wrap: nowrap; align-items: center; justify-content: space-between; gap: 0; width: 100%; max-width: 1180px; margin: 0 auto; padding: 0 24px; height: 76px; } header.app-header .logo { display: flex; align-items: center; gap: 12px; text-decoration: none; color: var(--htxt); } header.app-header .logo-mark { width: 40px; height: 40px; border-radius: 12px; display: grid; place-items: center; background: rgba(139, 92, 246, .16); border: 1px solid rgba(167, 139, 250, .35); color: var(--hvio); } header.app-header .logo-mark svg { display: block; width: 20px; height: 20px; } header.app-header .logo b { font-family: 'Unbounded', sans-serif; font-weight: 600; font-size: 19px; color: var(--htxt); } header.app-header .main-nav { display: flex; flex-wrap: nowrap; align-items: center; gap: 26px; margin-left: auto; } header.app-header .nav-item { position: relative; display: flex; align-items: center; } header.app-header .nav-link { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; padding: 0; border-radius: 0; background: none; color: var(--hmut); text-decoration: none; font-weight: 600; font-size: 14.5px; transition: color .2s; } header.app-header .nav-link:hover { color: var(--htxt); } header.app-header .main-nav a:hover { color: var(--htxt); background: none; } header.app-header .nav-item > .nav-link::after { content: ''; width: 0; height: 0; margin-left: 1px; border-left: 4px solid transparent; border-right: 4px solid transparent; border-top: 5px solid currentColor; opacity: .5; transition: transform .18s ease, opacity .18s ease; } header.app-header .nav-item:hover > .nav-link::after, header.app-header .nav-item:focus-within > .nav-link::after { transform: rotate(180deg); opacity: .9; } header.app-header .nav-item.is-active > .nav-link, header.app-header .main-nav a.active, header.app-header .main-nav a[aria-current="page"] { color: var(--hvio); background: none; font-weight: 600; } header.app-header .nav-item-plain > .nav-link::after { display: none; } header.app-header .nav-caret { display: none; } header.app-header .nav-caret svg { transition: transform .18s ease; } header.app-header .logo b span { color: var(--hvio); } header.app-header .nav-panel { position: absolute; top: calc(100% + 14px); left: 0; z-index: 60; display: none; min-width: 260px; padding: 10px; background: rgba(17, 14, 30, .95); border: 1px solid var(--hline); border-radius: 16px; box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .85); -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); } header.app-header .nav-panel::before { content: ''; position: absolute; left: 0; right: 0; top: -14px; height: 14px; } header.app-header .nav-item:hover > .nav-panel, header.app-header .nav-item:focus-within > .nav-panel, header.app-header .nav-item.open > .nav-panel { display: block; } header.app-header .nav-panel a { display: flex; align-items: center; gap: 10px; padding: 11px 12px; border-radius: 12px; color: var(--htxt); text-decoration: none; font-weight: 600; font-size: 14px; white-space: nowrap; } header.app-header .nav-panel a:hover { background: var(--hglass-2); color: var(--htxt); } header.app-header .nav-panel b { margin-left: auto; font-size: 13px; font-weight: 600; color: var(--hmut); } header.app-header .nav-panel .nav-soon { margin-left: auto; padding: 1px 8px; font-size: 11.5px; color: var(--hmut); border: 1px dashed var(--hline); border-radius: 999px; } header.app-header .nav-panel .nav-soon-item { display: flex; align-items: center; gap: 10px; padding: 11px 12px; border-radius: 12px; color: var(--hmut); font-size: 14px; font-weight: 600; cursor: default; white-space: nowrap; } header.app-header .nav-panel .nav-all { margin-top: 6px; border-top: 1px solid var(--hline); border-radius: 0 0 12px 12px; color: var(--hvio); } header.app-header .nav-burger { display: none; width: 44px; height: 44px; border-radius: 12px; background: var(--hglass); border: 1px solid var(--hline); color: var(--htxt); cursor: pointer; place-items: center; } header.app-header .nav-burger:hover { background: var(--hglass-2); } header.app-header .head-cta, header.app-header .header-actions { display: flex; align-items: center; gap: 12px; margin-left: 0; } header.app-header .icon-btn { width: 44px; height: 44px; border-radius: 12px; display: grid; place-items: center; background: var(--hglass); border: 1px solid var(--hline); color: var(--htxt); font-size: 17px; line-height: 1; cursor: pointer; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); transition: background .25s, border-color .25s, transform .25s; } header.app-header .icon-btn:hover { background: var(--hglass-2); border-color: var(--hline-2); transform: translateY(-2px); } header.app-header .search-wrap { position: relative; flex: 0 0 auto; } header.app-header .search-input { width: 150px; padding: 7px 12px 7px 30px; border-radius: 999px; font-family: 'Manrope', sans-serif; font-size: 13px; color: var(--htxt); border: 1px solid var(--hline); outline: none; background-color: var(--hglass); background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%239a92b0' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6'/%3E%3Cpath d='M20.5 20.5 16 16'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: 10px 50%; background-size: 14px 14px; -webkit-backdrop-filter: blur(12px); backdrop-filter: blur(12px); transition: width .2s, border-color .2s, box-shadow .2s, background-color .2s; } header.app-header .search-input::placeholder { color: rgba(154, 146, 176, .7); } header.app-header .search-input:focus { width: 190px; border-color: rgba(167, 139, 250, .55); box-shadow: 0 0 0 3px rgba(167, 139, 250, .14); background-color: var(--hglass-2); } header.app-header .search-input:focus-visible { outline: none; } header.app-header .search-input::-webkit-search-cancel-button { -webkit-appearance: none; } header.app-header .search-dropdown { position: absolute; top: calc(100% + 10px); right: 0; min-width: 300px; max-width: 90vw; padding: 6px; border-radius: 14px; background: rgba(17, 13, 29, .92); border: 1px solid var(--hline); box-shadow: 0 24px 48px -22px rgba(0, 0, 0, .75); overflow: visible; z-index: 60; -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); } header.app-header .search-dropdown[hidden] { display: none; } header.app-header .search-dropdown a { display: block; padding: 10px 12px; border: 0; border-radius: 10px; font-size: 14px; color: var(--htxt); text-decoration: none; transition: background .15s, color .15s; } header.app-header .search-dropdown a:hover { background: var(--hglass-2); color: var(--hvio); } header.app-header .search-none { padding: 10px 12px; color: var(--hmut); font-size: 14px; } @media (max-width: 1024px) { header.app-header .main-nav { position: fixed; top: 76px; left: 16px; right: 16px; z-index: 60; display: none; flex-direction: column; align-items: stretch; gap: 2px; padding: 14px; border-radius: 18px; background: rgba(17, 14, 30, .97); border: 1px solid var(--hline); box-shadow: 0 24px 60px -24px rgba(0, 0, 0, .85); max-height: calc(100vh - 100px); overflow-y: auto; -webkit-backdrop-filter: blur(18px); backdrop-filter: blur(18px); } header.app-header .main-nav.open { display: flex; } header.app-header .nav-burger { display: grid; } header.app-header .nav-item { display: block; } header.app-header .nav-item-plain > .nav-link { padding-right: 12px; } header.app-header .nav-item > .nav-link { padding: 13px 44px 13px 12px; border-radius: 12px; } header.app-header .nav-item > .nav-link::after { display: none; } header.app-header .nav-caret { display: grid; position: absolute; right: 6px; top: 8px; width: 36px; height: 36px; place-items: center; border: 0; border-radius: 10px; background: transparent; color: var(--hmut); cursor: pointer; } header.app-header .nav-item.open > .nav-caret { color: var(--hvio); } header.app-header .nav-item.open > .nav-caret svg { transform: rotate(180deg); } header.app-header .nav-panel { position: static; display: none; min-width: 0; margin: 0; padding: 0 0 4px 10px; background: transparent; border: 0; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; } header.app-header .nav-item.open > .nav-panel { display: block; } header.app-header .nav-panel::before { display: none; } header.app-header .nav-panel a { padding: 12px 10px; white-space: normal; } header.app-header .nav-panel .nav-soon-item { white-space: normal; } header.app-header .main-nav .nav-extra { display: flex; flex-direction: column; gap: 12px; margin-top: 12px; padding-top: 14px; border-top: 1px solid var(--hline); } header.app-header .main-nav .nav-extra .search-wrap { display: block; flex: 0 0 auto; } header.app-header .main-nav .nav-extra .search-input { width: 100%; } header.app-header .main-nav .nav-extra .search-dropdown { left: 0; right: 0; min-width: 0; } header.app-header .main-nav .nav-extra .head-cta, header.app-header .main-nav .nav-extra .header-actions { display: flex; margin-left: 0; } header.app-header .main-nav .nav-extra .head-cta .icon-btn, header.app-header .main-nav .nav-extra .header-actions .icon-btn { display: grid; } } @media (min-width: 1101px) { header.app-header .search-wrap { margin-left: 22px; } } @media (max-width: 1100px) { header.app-header .search-input { width: 134px; } header.app-header .search-input:focus { width: 170px; } } @media (max-width: 900px) { header.app-header .search-input { width: 118px; } header.app-header .search-input:focus { width: 152px; } } @media (max-width: 600px) { header.app-header .search-wrap { display: none; } }
/* Тёмная тема: поля форм и приглушённые тексты (правка 21.09.2026, для всех инструментов сайта).
   Причина: поля наследуют цвет текста темы (светлый), а фон берут из светлого правила — текст сливается.
   !important нужен, потому что у части страниц есть собственные инлайн-стили полей, которые идут после этого файла. */
[data-theme='dark'] input:not([type='checkbox']):not([type='radio']),
[data-theme='dark'] select,
[data-theme='dark'] textarea { background: var(--bg-soft) !important; color: var(--text) !important; border-color: var(--border) !important; }
[data-theme='dark'] select option { background: var(--bg-soft) !important; color: var(--text) !important; }
[data-theme='dark'] input::placeholder, [data-theme='dark'] textarea::placeholder { color: #8b8fb0 !important; }
[data-theme='dark'] .calc-note, [data-theme='dark'] .lead, [data-theme='dark'] .card p,
[data-theme='dark'] .prose p, [data-theme='dark'] .prose li, [data-theme='dark'] .field .hint,
[data-theme='dark'] .breadcrumbs, [data-theme='dark'] .tool-meta, [data-theme='dark'] .tr-label { color: #c9cce4 !important; }
/* Случай, когда тёмная тема приходит от системы, а страница не выбрала светлую явно. */
@media (prefers-color-scheme: dark) {
  html:not([data-theme='light']) input:not([type='checkbox']):not([type='radio']),
  html:not([data-theme='light']) select,
  html:not([data-theme='light']) textarea { background: #171830 !important; color: #eef0ff !important; border-color: #2a2c4d !important; }
  html:not([data-theme='light']) select option { background: #171830 !important; color: #eef0ff !important; }
  html:not([data-theme='light']) .calc-note, html:not([data-theme='light']) .prose p,
  html:not([data-theme='light']) .prose li, html:not([data-theme='light']) .lead { color: #c9cce4 !important; }
}
/* Тёмная тема, правка 2 (21.09.2026): текст всех инструментов — абзацы, списки, ячейки таблиц,
   легенды и подсказки. Первая правка закрывала отдельные классы; на инженерных страницах часть
   текста размечена иначе (.legend, безымянные абзацы) и оставалась тусклой. Теперь цвет задан
   по тегам, поэтому не зависит от классов страницы. */
[data-theme='dark'] p, [data-theme='dark'] li, [data-theme='dark'] dd, [data-theme='dark'] dt,
[data-theme='dark'] td, [data-theme='dark'] th, [data-theme='dark'] label, [data-theme='dark'] small,
[data-theme='dark'] .legend, [data-theme='dark'] .legend *, [data-theme='dark'] .calc-note,
[data-theme='dark'] .hint, [data-theme='dark'] .field .hint { color: #d7d9ec !important; }
[data-theme='dark'] h1, [data-theme='dark'] h2, [data-theme='dark'] h3, [data-theme='dark'] h4,
[data-theme='dark'] strong, [data-theme='dark'] b, [data-theme='dark'] summary { color: #ffffff !important; }
@media (prefers-color-scheme: dark) {
  html:not([data-theme='light']) p, html:not([data-theme='light']) li, html:not([data-theme='light']) dt,
  html:not([data-theme='light']) dd, html:not([data-theme='light']) td, html:not([data-theme='light']) th,
/* Тёмная тема, правка 3 (21.09.2026): блоки, которые создаёт JavaScript (заметки-выноски,
   подсказки, панель схемы), и неактивные вкладки. Их классов нет в HTML, поэтому цепляемся
   за подстроку в имени класса; фон выносок и схемы тоже переводим в тёмную палитру. */
[data-theme='dark'] .auto-mode:not(.is-on) { background: var(--bg-soft) !important; color: var(--text) !important; border-color: var(--border) !important; }
[data-theme='dark'] [class*='note'], [data-theme='dark'] [class*='hint'], [data-theme='dark'] [class*='tip'],
[data-theme='dark'] [class*='info'], [data-theme='dark'] [class*='callout'], [data-theme='dark'] [class*='warn'],
[data-theme='dark'] [class*='legend'], [data-theme='dark'] [class*='desc'] { color: #d7d9ec !important; }
[data-theme='dark'] [class*='note'] *, [data-theme='dark'] [class*='tip'] *, [data-theme='dark'] [class*='callout'] *,
[data-theme='dark'] [class*='legend'] *, [data-theme='dark'] [class*='warn'] *, [data-theme='dark'] [class*='info'] * { color: #d7d9ec !important; }
[data-theme='dark'] [class*='scheme'], [data-theme='dark'] [class*='diagram'], [data-theme='dark'] [class*='graph'] { background: var(--bg-soft) !important; }
[data-theme='dark'] [class*='scheme'] *, [data-theme='dark'] [class*='diagram'] * { color: #d7d9ec !important; }
[data-theme='dark'] [class*='scheme'] text, [data-theme='dark'] [class*='scheme'] tspan { fill: #d7d9ec !important; }
@media (prefers-color-scheme: dark) {
  html:not([data-theme='light']) .auto-mode:not(.is-on) { background: #171830 !important; color: #eef0ff !important; border-color: #2a2c4d !important; }
  html:not([data-theme='light']) [class*='note'], html:not([data-theme='light']) [class*='hint'],
  html:not([data-theme='light']) [class*='tip'], html:not([data-theme='light']) [class*='callout'],
  html:not([data-theme='light']) [class*='legend'], html:not([data-theme='light']) [class*='scheme'] * { color: #d7d9ec !important; }
  html:not([data-theme='light']) [class*='scheme'], html:not([data-theme='light']) [class*='diagram'] { background: #171830 !important; }
  html:not([data-theme='light']) [class*='scheme'] text, html:not([data-theme='light']) [class*='scheme'] tspan { fill: #d7d9ec !important; }
}
  html:not([data-theme='light']) label, html:not([data-theme='light']) small,
  html:not([data-theme='light']) .legend, html:not([data-theme='light']) .legend *,
  html:not([data-theme='light']) .calc-note, html:not([data-theme='light']) .hint { color: #d7d9ec !important; }
  html:not([data-theme='light']) h1, html:not([data-theme='light']) h2, html:not([data-theme='light']) h3,
  html:not([data-theme='light']) h4, html:not([data-theme='light']) strong, html:not([data-theme='light']) b { color: #ffffff !important; }
}
/* ── Мобильная шапка (правка 23.09.2026) ─────────────────────────────────────────────
   Было: на телефоне кнопка переключения темы была недоступна из шапки — на ширине ≤600 px
   все .icon-btn внутри .head-cta скрывались, а на 601–1024 px скрипт переносил весь .head-cta
   (вместе с кнопкой темы) в меню-бургер.
   Стало: кнопка темы остаётся в шапке (переносим только поиск), размеры уменьшены, чтобы лого,
   кнопка темы и бургер помещались на 360 px. installBtn скрыт атрибутом hidden — теперь
   hidden важнее, чем display:grid. */
header.app-header [hidden] { display: none !important; }
@media (max-width: 760px) {
  header.app-header .head-cta, header.app-header .header-actions { gap: 6px; }
  header.app-header .head-cta .icon-btn, header.app-header .header-actions .icon-btn { display: grid; width: 44px; height: 44px; font-size: 18px; }
  header.app-header .nav-burger { width: 44px; height: 44px; }
  header.app-header .logo { gap: 8px; }
  header.app-header .logo-mark { width: 34px; height: 34px; }
  header.app-header .logo b { font-size: 16px; }
}

/* ── Контраст в обеих темах (правка 23.09.2026) ────────────────────────────────────────────
   Замерено своими инструментами (_game-test/theme-audit.html, 23.09.2026, 360 px):
     светлая тема — подсказки формы отзыва 2,1:1, плашки и формулы 3,9:1,
     белый текст на кнопке --primary 3,8:1;
     тёмная тема — чипы 1,1:1 и «стеклянные» кнопки 1,4:1 (держали светлую подложку),
     белая «бумага» предпросмотра расписки 1,0–1,4:1, кнопки 2,1–3,8:1.
   Ниже — только те правила, что доводят контраст до нормы WCAG AA (4,5:1 текст, 3:1 крупный).
   Вид разделов не меняем: пары цветов взяты из уже существующей палитры тем. */

/* Светлая тема: белый текст на --primary = 3,8:1 → --primary-dark = 5,9:1. */
:root[data-theme="light"] .btn-primary,
:root[data-theme="light"] .btn-vio { background: var(--primary-dark); }

/* Плашки-надписи и формулы: #6d5dfc на #eeebff = 3,9:1 → тёмно-фиолетовый. */
:root[data-theme="light"] .eyebrow,
:root[data-theme="light"] .seo-formula { color: var(--primary-dark); }

/* Тёмная тема: #7d6dff на #23254a = 3,8:1 → светлее (6,9:1). */
:root[data-theme="dark"] .eyebrow,
:root[data-theme="dark"] .seo-formula { color: #b3a6ff; }

/* Тёмная тема: кнопки. Белый текст давал 3,8:1, а смешанная пара (светлый фон + тёмная
   «тушь») — 2,1:1. Возвращаем задуманную парой переменных тему: #8b5cf6 + #170b2e = 5,9:1. */
:root[data-theme="dark"] .btn-primary,
:root[data-theme="dark"] .btn-vio,
:root[data-theme="dark"] #cookieAccept,
:root[data-theme="dark"] #mReset,
:root[data-theme="dark"] #qrBtn,
:root[data-theme="dark"] #cmpDl { background: var(--vio, #a78bfa); color: #170b2e; }

/* Тёмная тема: чипы популярного и «стеклянные» кнопки держали светлую подложку
   rgba(255,255,255,.8–.88) при светлом тексте = 1,1–1,4:1. Даём тёмное стекло (~15:1). */
:root[data-theme="dark"] .popular-bar .chip { background: rgba(255, 255, 255, .1); color: #f1eef9; border-color: rgba(255, 255, 255, .18); }
:root[data-theme="dark"] .btn-glass { background: rgba(255, 255, 255, .12); color: #f1eef9; border-color: rgba(255, 255, 255, .2); }

/* Светлая тема: панель меню-бургера тёмная, а текст в ней брался светлой палитрой = 2,6:1. */
/* Ссылки меню на тёмном стекле (панель меню на телефоне, стеклянная шапка): светлая палитра. */
:root[data-theme="light"] header.app-header .main-nav { --htxt: #f1eef9; --hmut: #c9c3da; --hvio: #ddd6fe; }
/* Главная в светлой теме: шапка прозрачная над светлым фоном — в строке меню ссылки тёмные.
   Только для широких экранов: на телефоне меню — тёмная панель, там нужна светлая палитра. */
@media (min-width: 1025px) { :root[data-theme="light"] header.app-header#header:not(.scrolled) .main-nav { --htxt: #1b1533; --hmut: #4d4666; --hvio: #6d28d9; } }

/* Предпросмотр документов — это «бумага»: она белая в любой теме, значит текст всегда тёмный. */
:root[data-theme="dark"] #genPreview,
:root[data-theme="dark"] #genPreview h1,
:root[data-theme="dark"] #genPreview h2,
:root[data-theme="dark"] #genPreview h3,
:root[data-theme="dark"] #genPreview p,
:root[data-theme="dark"] #genPreview div,
:root[data-theme="dark"] #genPreview span,
:root[data-theme="dark"] #genPreview td,
:root[data-theme="dark"] #genPreview th { color: #1a1530; }

/* Подсказки формы отзыва: инлайн-цвет #a9a4bb (2,1–2,4:1) → приглушённый, но читаемый.
   !important нужен, потому что цвет задан атрибутом style прямо в разметке страниц. */
#reviews-form p[style*="a9a4bb"],
#reviews-form legend[style*="a9a4bb"],
#reviews-form [data-reviews-note] { color: #5f5a78 !important; }

/* Кнопка отправки отзыва была без стилей: в тёмной теме светлый текст на светлой кнопке (1,0:1). */
#reviews-form button[type="submit"] { border: 0; border-radius: 12px; padding: 12px 20px; font: inherit; font-weight: 700; font-size: 15px; cursor: pointer; background: var(--primary-dark); color: #fff; }
:root[data-theme="dark"] #reviews-form button[type="submit"] { background: #a78bfa; color: #170b2e; }

/* ── Контраст: усиление (правка 23.09.2026, шаг 4б) ──────────────────────────────────────
   Проверка после первого блока (_game-test/theme-audit.html) показала: на главной в тёмной теме
   светлые значения переменных из разметки перебивали тёмные правила. Дожимаем !important —
   это правки читаемости, внешний вид разделов не меняется. */
:root[data-theme="dark"] .btn-primary,
:root[data-theme="dark"] .btn-vio,
:root[data-theme="dark"] #cookieAccept,
:root[data-theme="dark"] #mReset,
:root[data-theme="dark"] #qrBtn,
:root[data-theme="dark"] #cmpDl { background: #a78bfa !important; color: #170b2e !important; }

/* Тёмная тема: чипы и «стеклянные» кнопки главной (были 1,1–1,4:1). */
:root[data-theme="dark"] .popular-bar .chip { background: rgba(255, 255, 255, .1) !important; color: #f1eef9 !important; border-color: rgba(255, 255, 255, .18) !important; }
:root[data-theme="dark"] .btn-glass { background: rgba(255, 255, 255, .12) !important; color: #f1eef9 !important; border-color: rgba(255, 255, 255, .2) !important; }

/* Предпросмотр документов: белая «бумага», значит текст всегда тёмный (цвет ставит скрипт генератора). */
:root[data-theme="dark"] #genPreview,
:root[data-theme="dark"] #genPreview *:not(svg):not(path) { color: #1a1530 !important; }

/* Подсказки формы отзыва: в тёмной теме нужен светлый приглушённый цвет (было 1,0:1). */
:root[data-theme="dark"] #reviews-form p[style*="a9a4bb"],
:root[data-theme="dark"] #reviews-form legend[style*="a9a4bb"],
:root[data-theme="dark"] #reviews-form [data-reviews-note] { color: #bdb7d2 !important; }
:root[data-theme="dark"] #reviews-form button[type="submit"] { background: #a78bfa !important; color: #170b2e !important; }

/* Внутренние страницы: у шапки тёмное стекло и в светлой теме, поэтому акцентное «Doc»
   берём из светлой части палитры. Главную не трогаем: у неё шапка с id=header и своя пара цветов. */
:root[data-theme="light"] header.app-header:not(#header) .logo b span { color: #d0c4ff !important; }

/* Единый боковой отступ страницы (решение владельца 24.09.2026) — 24 px, как у логотипа в шапке.
   Было: отступ 24 px давала только главная своей инлайновой критикой (main.wrap), а внутренние
   страницы имели <main> без класса wrap и .container вообще без боковых padding — на телефоне
   крошки, заголовки, абзацы, списки, плашки и таблицы упирались в края экрана (0…18 px).
   Стало: отступ-«жёлоб» 24 px у всех страниц. Плюс мелочи, которые вылезали за этот жёлоб:
     — блок «Другие инструменты» вставляется скриптом прямо в <body> (вне <main>), поэтому
       отступ ему даём отдельно через body > section / body > .container;
     — у главной .prose без .glass сам имел 24 px внутри main.wrap (то есть 48 px от края) —
       обнуляем, чтобы текст встал на общую линию 24 px и таблица .seo-table не уезжала за край;
     — длинные слова в заголовках («Политика конфиденциальности») переносим, а не выпускаем
       за экран (lang="ru" на страницах есть, переносы работают).
   Правило только до 1168 px: на широком экране .container и так центрируется с отступом >24 px,
   поэтому настольная вёрстка не меняется.
   Отдельная беда — форма генератора: карточка .form-card как grid-элемент не могла сжаться
   (min-width:auto = ширина полей по умолчанию), из-за чего трек растягивался до 415 px и страница
   распирала вьюпорт (замер: /generators/invoice/ на 360 px давал scrollWidth=440 — и вместе с ним
   растягивались fixed-элементы: шапка и баннер cookie уезжали за край). Лечим сжимаемостью:
   min-width:0 у карточки/треков и у самих полей. */
@media (max-width: 1168px) {
  main:not(.wrap) { padding-left: 24px; padding-right: 24px; }
  body > section { padding-left: 24px; padding-right: 24px; }
  body > .container { padding-left: 24px; padding-right: 24px; }
  footer .container { padding-left: 24px; padding-right: 24px; }
  main.wrap .prose:not(.glass) { padding-left: 0; padding-right: 0; }
  main h1, main h2 { overflow-wrap: break-word; hyphens: auto; }
  .form-card, .tool-layout > *, .gen-grid > * { min-width: 0; }
  .field input, .field select, .field textarea { min-width: 0; }
  .item-row input, .item-row select { min-width: 0; }
  table.seo-table, table.cmp { display: block; max-width: 100%; overflow-x: auto; }
  .hud { flex-wrap: wrap; }
}

/* ── Мобильная шапка: кнопки темы, «скачать» и меню — одинаковые промежутки (24.09.2026).
   Раньше группа кнопок стояла по центру (justify-content: space-between), а бургер — справа,
   поэтому между «скачать» и меню был большой разрыв. Теперь группа прижата вправо, а промежутки
   между всеми тремя кнопками одинаковые. */
@media (max-width: 1024px) {
  header.app-header .head-in, header.app-header .header-inner { gap: 8px; }
  header.app-header .head-cta, header.app-header .header-actions { gap: 8px; margin-left: auto; }
}
@media (max-width: 760px) {
  header.app-header .head-in, header.app-header .header-inner { gap: 8px; }
  header.app-header .head-cta, header.app-header .header-actions { gap: 8px; }
}

/* ── Кнопка «Скачать на рабочий стол»: фон стеклянный — как у кнопки смены темы,

/* ─────────── строка поиска внутри мобильного меню (24.09.2026) ───────────
   Жалоба владельца: при открытии меню на телефоне текст в строке поиска сливается с фоном.
   Причина: панель мобильного меню всегда тёмная (rgba(17,14,30,.97)), а поле поиска сохраняло
   цвета светлой темы — светлый фон (--hglass) при светлом же тексте (--htxt: #f1eef9),
   плюс иконка-лупа была нарисована тёмным цветом.
   Что делаем: внутри меню поле делаем тёмным со светлым текстом, светлой лупой и видимой подсказкой. */
header.app-header .main-nav .nav-extra .search-input {
  background-color: rgba(255, 255, 255, .07);
  color: #f1eef9;
  border-color: rgba(255, 255, 255, .18);
  background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='%23c9c3da' stroke-width='2.2' stroke-linecap='round'%3E%3Ccircle cx='11' cy='11' r='6'/%3E%3Cpath d='M20.5 20.5 16 16'/%3E%3C/svg%3E");
}
header.app-header .main-nav .nav-extra .search-input::placeholder { color: rgba(241, 238, 249, .62); }
header.app-header .main-nav .nav-extra .search-input:focus {
  border-color: rgba(221, 214, 254, .55); box-shadow: 0 0 0 3px rgba(167, 139, 250, .16);
}

   а стрелка (SVG) — фиолетовая в цвет темы. Синий цвет из кнопки убран: эмодзи заменён на SVG,
   потому что системный эмодзи перекрасить нельзя. */
header.app-header .head-cta #installBtn, header.app-header .header-actions #installBtn {
  background: var(--hglass); border: 1px solid var(--hline); color: var(--hvio);
}
header.app-header .head-cta #installBtn:hover, header.app-header .header-actions #installBtn:hover {
  border-color: var(--hline-2); color: var(--hvio);
}
header.app-header .head-cta #installBtn svg, header.app-header .header-actions #installBtn svg {
  display: block; width: 20px; height: 20px;
}
:root[data-theme="light"] header.app-header .head-cta #installBtn,
:root[data-theme="light"] header.app-header .header-actions #installBtn {
  background: var(--hglass); border-color: var(--hline); color: var(--hvio);
}


.card-cover{display:block;margin:0 0 12px;border-radius:14px;overflow:hidden;aspect-ratio:1200/630}
.card-cover img{width:100%;height:100%;object-fit:cover;object-position:center;display:block}