Files
birthday-chat/styles.css
Freestyle-Play 60991875c0 init
2026-08-25 18:22:36 +03:00

768 lines
26 KiB
CSS
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.
/* ============================================================
ДЕЛО № 260826 — визуальный слой v2
Бюрократический нуар: тёмный терминал + бумажные документы.
============================================================ */
:root {
--bg: #0d1117;
--bg-2: #131a22;
--line: #232c37;
--line-2: #2e3946;
--paper: #efe4cd;
--paper-2: #f6eeda;
--paper-3: #e5d8bd;
--ink: #23201a;
--ink-2: #5c5344;
--ink-3: #8a7f6a;
--red: #b03a3a;
--red-soft: #d8a3a3;
--amber: #d7a44a;
--green: #4a7d55;
--dim: #7d8896;
--mono: "JetBrains Mono", "IBM Plex Mono", ui-monospace, "Courier New", monospace;
--serif: "PT Serif", "Source Serif 4", Georgia, serif;
--sans: "Inter", "Manrope", "Segoe UI", system-ui, sans-serif;
--r: 4px;
--shadow: 0 18px 50px rgba(0,0,0,.45);
}
* { box-sizing: border-box; }
html { -webkit-text-size-adjust: 100%; }
body {
margin: 0;
background: var(--bg);
color: #ccd4dd;
font-family: var(--sans);
font-size: 15px;
line-height: 1.6;
min-height: 100vh;
background-image:
radial-gradient(1200px 600px at 20% -5%, rgba(215,164,74,.055), transparent 60%),
radial-gradient(900px 500px at 85% 105%, rgba(176,58,58,.05), transparent 60%);
transition: background-color .9s ease;
}
body.warm {
background-color: #241b13;
background-image:
radial-gradient(1000px 520px at 50% -10%, rgba(215,164,74,.16), transparent 62%),
radial-gradient(760px 460px at 15% 110%, rgba(215,164,74,.09), transparent 60%);
}
.shell { min-height: 100vh; display: flex; flex-direction: column; }
/* ---------------- верхняя панель ---------------- */
.topbar {
position: sticky; top: 0; z-index: 20;
display: flex; justify-content: space-between; align-items: center;
gap: 12px; flex-wrap: wrap;
padding: 11px 20px;
background: rgba(13,17,23,.92);
backdrop-filter: blur(8px);
border-bottom: 1px solid var(--line);
font-family: var(--mono); font-size: 12.5px;
}
.tb-left { display: flex; align-items: baseline; gap: 14px; min-width: 0; }
.tb-logo { color: var(--amber); letter-spacing: .06em; white-space: nowrap; }
.tb-case { color: var(--dim); white-space: nowrap; }
.tb-right { display: flex; gap: 7px; }
.chip {
display: inline-flex; align-items: center; gap: 6px;
background: #19212b; color: #c4ced9;
border: 1px solid var(--line-2); border-radius: var(--r);
padding: 6px 11px;
font: inherit; cursor: pointer;
transition: border-color .15s, color .15s, transform .08s;
}
.chip:hover:not(:disabled) { border-color: var(--amber); color: #e6ecf2; }
.chip:active:not(:disabled) { transform: translateY(1px); }
.chip:disabled { opacity: .32; cursor: default; }
.chip-n {
background: var(--amber); color: #1a1409;
border-radius: 20px; padding: 0 6px;
font-size: 11px; font-weight: 700; line-height: 17px;
}
.chip-i { padding: 6px 9px; }
/* ---------------- прогресс ---------------- */
.rail {
display: flex; gap: 2px; overflow-x: auto;
padding: 10px 20px 0;
scrollbar-width: none;
}
.rail::-webkit-scrollbar { display: none; }
.rail-step {
display: flex; align-items: center; gap: 7px;
padding: 5px 13px 5px 7px;
border-bottom: 2px solid var(--line);
color: #55606d;
font-family: var(--mono); font-size: 11px;
white-space: nowrap; flex: none;
transition: color .2s, border-color .2s;
}
.rail-dot {
width: 18px; height: 18px; border-radius: 50%;
display: grid; place-items: center;
background: #19212b; border: 1px solid var(--line-2);
font-size: 10px; line-height: 1;
}
.rail-step.done { color: #7f8b98; border-bottom-color: var(--green); }
.rail-step.done .rail-dot { background: var(--green); border-color: var(--green); color: #eaf3ec; }
.rail-step.cur { color: var(--amber); border-bottom-color: var(--amber); }
.rail-step.cur .rail-dot { border-color: var(--amber); color: var(--amber); }
/* ---------------- лист документа ---------------- */
.stage {
flex: 1;
display: flex; justify-content: center; align-items: flex-start;
padding: 26px 16px 40px;
animation: rise .38s cubic-bezier(.2,.7,.3,1);
}
@keyframes rise { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }
.center-wrap { width: 100%; display: flex; justify-content: center; }
.sheet {
position: relative;
width: 100%; max-width: 680px;
background: var(--paper);
background-image:
repeating-linear-gradient(0deg, rgba(0,0,0,.012) 0 1px, transparent 1px 3px),
radial-gradient(600px 400px at 15% 0%, rgba(255,255,255,.5), transparent 65%);
color: var(--ink);
font-family: var(--serif);
padding: 30px 34px 32px;
border-radius: var(--r);
box-shadow: var(--shadow);
}
.sheet::before {
content: ""; position: absolute; inset: 0;
border-radius: var(--r);
box-shadow: inset 0 0 0 1px rgba(120,100,60,.22);
pointer-events: none;
}
.sheet p { margin: 0 0 11px; }
.vspace { height: 9px; }
.sheet-head { margin-bottom: 18px; }
.chapter {
font-family: var(--mono); font-size: 11px;
letter-spacing: .14em; text-transform: uppercase;
color: var(--ink-3);
}
.chapter.red { color: var(--red); }
.sheet h1, .sheet h2 {
font-family: var(--sans); color: #1b1812;
letter-spacing: -.01em; margin: 4px 0 0;
}
.sheet h1 { font-size: 25px; line-height: 1.25; }
.sheet h2 { font-size: 19px; }
.intro h1 { margin-bottom: 14px; }
.note { font-family: var(--mono); font-size: 11.5px; color: var(--ink-3); margin-top: 14px; }
.dim { color: var(--ink-3); }
.quote {
font-style: italic; color: var(--ink-2);
border-left: 2px solid var(--amber);
padding-left: 13px; margin: 15px 0 0;
}
.center-t { text-align: center; }
/* ---------------- кнопки ---------------- */
.row { display: flex; gap: 10px; flex-wrap: wrap; margin-top: 20px; }
.row.center { justify-content: center; }
.btn {
font-family: var(--sans); font-weight: 600; font-size: 14px;
padding: 11px 21px; border: 0; border-radius: var(--r);
cursor: pointer; transition: filter .15s, transform .07s, box-shadow .15s;
}
.btn:active { transform: translateY(1px); }
.btn.primary {
background: var(--red); color: #fbf1e6;
box-shadow: 0 2px 0 rgba(0,0,0,.18);
}
.btn.primary:hover { filter: brightness(1.09); }
.btn.ghost {
background: transparent; color: var(--ink);
box-shadow: inset 0 0 0 1px rgba(120,100,60,.5);
}
.btn.ghost:hover { box-shadow: inset 0 0 0 1px var(--ink-2); }
.linkbtn {
display: block; margin-top: 14px; padding: 0;
background: none; border: 0;
color: var(--ink-3); font-family: var(--mono); font-size: 11.5px;
text-decoration: underline; cursor: pointer;
}
.linkbtn:hover { color: var(--red); }
/* ---------------- поля ввода ---------------- */
.inrow { display: flex; gap: 9px; flex-wrap: wrap; margin: 18px 0 4px; }
.inrow input {
flex: 1 1 200px; min-width: 0;
padding: 11px 13px;
border: 1px solid rgba(120,100,60,.45); border-radius: var(--r);
background: var(--paper-2); color: var(--ink);
font-family: var(--mono); font-size: 14px;
}
.inrow input:focus { outline: 2px solid var(--amber); outline-offset: -1px; }
.inrow input:disabled { opacity: .65; }
/* ---------------- обратная связь ---------------- */
.feedback {
display: flex; gap: 8px; align-items: flex-start;
font-family: var(--mono); font-size: 12.5px; line-height: 1.5;
min-height: 18px; margin-top: 8px;
}
.feedback:empty { margin: 0; }
.fb-mark { flex: none; width: 3px; align-self: stretch; border-radius: 2px; }
.feedback.bad { color: var(--red); }
.feedback.bad .fb-mark { background: var(--red); }
.feedback.good { color: var(--green); }
.feedback.good .fb-mark { background: var(--green); }
.shake { animation: shake .32s; }
@keyframes shake {
0%,100% { transform: translateX(0); }
25% { transform: translateX(-4px); }
75% { transform: translateX(4px); }
}
/* ---------------- служебные вставки ---------------- */
.excerpt, .memo {
background: var(--paper-3);
border-left: 3px solid var(--amber);
padding: 13px 16px; margin: 16px 0;
border-radius: 0 var(--r) var(--r) 0;
}
.excerpt-h, .memo-h {
font-family: var(--mono); font-size: 10.5px;
letter-spacing: .12em; text-transform: uppercase;
color: var(--ink-3); margin-bottom: 6px;
}
.excerpt p, .memo p { margin: 0; font-size: 14px; }
.memo p { font-style: italic; }
.record {
background: var(--paper-2);
border: 1px solid rgba(120,100,60,.3);
border-radius: var(--r);
padding: 13px 16px; margin: 16px 0;
}
.record-h {
font-family: var(--mono); font-size: 10.5px;
letter-spacing: .12em; text-transform: uppercase;
color: var(--ink-3); margin-bottom: 9px;
padding-bottom: 7px; border-bottom: 1px solid rgba(120,100,60,.22);
}
.rec-row, .inv-row {
display: flex; justify-content: space-between; gap: 14px;
padding: 5px 0; font-size: 14px;
border-bottom: 1px dotted rgba(120,100,60,.24);
}
.rec-row:last-child, .inv-row:last-child { border-bottom: 0; }
.rec-row span { color: var(--ink-2); }
.rec-row b { text-align: right; font-family: var(--mono); font-size: 13px; }
.inv-row { font-family: var(--mono); font-size: 12.5px; justify-content: flex-start; }
.inv-n { color: var(--red); flex: none; width: 82px; }
.record-note {
font-family: var(--mono); font-size: 11px;
color: var(--ink-3); font-style: italic; margin-top: 8px;
}
/* журнал турникета */
.log-grid { display: flex; flex-direction: column; }
.log-row {
display: grid; grid-template-columns: 62px 1fr 74px;
gap: 10px; align-items: center;
padding: 6px 0; font-family: var(--mono); font-size: 13px;
border-bottom: 1px dotted rgba(120,100,60,.24);
}
.log-row:last-child { border-bottom: 0; }
.log-t { color: var(--ink); font-weight: 700; }
.log-n { color: var(--ink-2); }
.log-d {
justify-self: end; font-size: 11px;
padding: 2px 8px; border-radius: 20px; letter-spacing: .04em;
}
.log-d.in { background: rgba(74,125,85,.16); color: var(--green); }
.log-d.out { background: rgba(176,58,58,.13); color: var(--red); }
/* ---------------- две колонки (опись + стол) ---------------- */
/* Глава с описью шире прочих: бирки на столе должны читаться без усилий. */
.sheet.wide { max-width: 940px; }
.two-col {
display: grid; grid-template-columns: 264px minmax(0, 1fr);
gap: 18px; align-items: start; margin: 16px 0;
}
.two-col .record { margin: 0; }
.scene-box {
border: 1px solid rgba(120,100,60,.35);
border-radius: var(--r);
overflow: hidden;
overflow-x: auto;
background: #43331f;
-webkit-overflow-scrolling: touch;
}
.desk { width: 100%; display: block; }
.desk .hit { cursor: pointer; }
.desk .hit > *:not(.tag) { transition: filter .15s; }
.desk .hit:hover > *:not(.tag) { filter: brightness(1.14); }
.desk .tag rect { fill: #f2e7cf; stroke: #8a7550; stroke-width: .8; }
.desk .tag text {
fill: #3a3125; font-family: var(--mono); font-size: 9.5px; font-weight: 700;
}
.desk .hit:hover .tag rect { fill: #fff8e6; stroke: var(--amber); }
.desk .lbl { fill: #3a3125; font-family: var(--mono); font-size: 12px; }
.desk .lbl-s { fill: #3a3125; font-family: var(--mono); font-size: 10.5px; }
.desk .lbl-xs { fill: #6b5c44; font-family: var(--mono); font-size: 8.5px; }
.desk .num { fill: #23201a; font-family: var(--sans); font-size: 27px; font-weight: 700; }
.desk .found .tag rect { fill: var(--amber); stroke: #8a6a20; }
.pulse { animation: pulse 1.05s ease-in-out infinite; }
@keyframes pulse {
0%,100% { filter: none; }
50% { filter: drop-shadow(0 0 9px var(--amber)) brightness(1.15); }
}
/* ---------------- карточки-варианты ---------------- */
.cards, .docs { display: grid; gap: 10px; margin: 16px 0; }
.pcard, .doc {
display: block; width: 100%; text-align: left;
background: var(--paper-2);
border: 1px solid rgba(120,100,60,.32);
border-left: 3px solid rgba(120,100,60,.32);
border-radius: var(--r);
padding: 13px 15px;
font-family: var(--serif); font-size: 14px; color: var(--ink);
cursor: pointer;
transition: border-color .16s, background .16s, transform .1s, box-shadow .16s;
}
.pcard:hover:not(:disabled), .doc:hover:not(:disabled) {
border-left-color: var(--red);
background: #f8f1de;
transform: translateX(2px);
box-shadow: 0 3px 12px rgba(0,0,0,.07);
}
.pcard:disabled, .doc:disabled { cursor: default; opacity: .62; }
.pcard.found, .doc.found {
opacity: 1;
border-left-color: var(--green);
background: #f1f5ea;
}
.pcard-top { display: flex; align-items: baseline; gap: 9px; flex-wrap: wrap; margin-bottom: 6px; }
.pcard-name { font-family: var(--sans); font-weight: 700; font-size: 14.5px; }
.pcard-role { font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); }
.pcard-text { color: var(--ink-2); }
.doc-h { display: flex; align-items: baseline; gap: 10px; flex-wrap: wrap; margin-bottom: 7px; }
.doc-n { font-family: var(--mono); font-size: 10.5px; color: var(--red); letter-spacing: .08em; }
.doc-title { font-family: var(--sans); font-weight: 600; font-size: 13.5px; }
.doc-t { margin-bottom: 8px; }
.doc-sign {
font-family: var(--mono); font-size: 10.5px; color: var(--ink-3);
text-align: right; font-style: italic;
}
/* ---------------- успех ---------------- */
.success {
background: linear-gradient(180deg, rgba(74,125,85,.11), rgba(74,125,85,.05));
border: 1px solid rgba(74,125,85,.34);
border-radius: var(--r);
padding: 15px 17px; margin-top: 18px;
animation: rise .35s;
}
.success-head {
display: flex; align-items: center; gap: 9px;
font-family: var(--sans); font-weight: 700; font-size: 15px;
color: #2f5b39; margin-bottom: 7px;
}
.tick {
flex: none; width: 20px; height: 20px; border-radius: 50%;
background: var(--green); color: #fff;
display: grid; place-items: center; font-size: 12px;
}
.success p { margin: 0; color: var(--ink-2); font-size: 14px; }
/* ---------------- карточка факта ---------------- */
.jcard {
background: var(--paper-2);
border: 1px dashed rgba(120,100,60,.45);
border-radius: var(--r);
padding: 11px 14px; margin-bottom: 10px;
}
.jcard.inline { margin: 13px 0 0; background: rgba(255,255,255,.5); }
.jcard-name {
font-family: var(--sans); font-weight: 700; font-size: 13px;
letter-spacing: .06em; color: var(--red); margin-bottom: 6px;
}
.jcard-fact {
display: flex; justify-content: space-between; align-items: baseline;
gap: 12px; flex-wrap: wrap;
padding: 7px 10px; border-radius: 3px;
background: rgba(215,164,74,.16);
}
.jcard-label { font-family: var(--sans); font-size: 11.5px; color: var(--ink-2); }
.jcard-fact b { font-family: var(--mono); font-size: 15px; color: var(--ink); letter-spacing: .04em; }
.jcard-desc { font-size: 12.5px; color: var(--ink-3); margin-top: 7px; }
/* ---------------- песня ---------------- */
.song {
background: var(--paper-2);
border: 1px solid rgba(120,100,60,.3);
border-radius: var(--r);
padding: 16px 18px; margin: 16px 0;
}
.song-t { font-family: var(--sans); font-weight: 700; font-size: 16px; }
.song-a { font-family: var(--mono); font-size: 10.5px; color: var(--ink-3); margin-top: 2px; }
.song audio { width: 100%; margin: 12px 0 6px; }
.song-fb { font-family: var(--mono); font-size: 11.5px; color: var(--ink-3); }
.lyrics { display: grid; gap: 14px; margin-top: 12px; }
.lblock p { margin: 1px 0; font-size: 13.5px; color: var(--ink-2); }
.lblock-h {
font-family: var(--mono); font-size: 10px;
letter-spacing: .12em; text-transform: uppercase;
color: var(--ink-3); margin-bottom: 4px;
}
.badge {
background: var(--red); color: #fdf3e8;
border-radius: 20px; padding: 1px 8px;
font-size: 9px; letter-spacing: .06em; margin-left: 4px;
}
.lblock.chorus p { font-style: italic; color: var(--ink-3); }
.lblock.bridge {
background: rgba(215,164,74,.13);
border-left: 3px solid var(--amber);
padding: 10px 13px; margin-left: -4px;
border-radius: 0 var(--r) var(--r) 0;
}
.lblock.bridge p { color: var(--ink); font-weight: 600; }
.acro {
color: var(--red); font-weight: 800;
font-size: 1.14em;
border-bottom: 2px solid rgba(176,58,58,.32);
}
/* ---------------- ложный след ---------------- */
.alert {
background: linear-gradient(180deg, rgba(176,58,58,.12), rgba(176,58,58,.05));
border: 1px solid rgba(176,58,58,.42);
border-radius: var(--r);
padding: 13px 16px; margin-bottom: 15px;
}
.alert p { margin: 0 0 4px; font-size: 14px; }
.alert p:last-child { margin: 0; }
.report {
position: relative;
background: var(--paper-2);
border: 1px solid rgba(120,100,60,.34);
border-radius: var(--r);
padding: 17px 19px 22px; margin: 15px 0;
}
.report-h {
font-family: var(--sans); font-weight: 700; font-size: 15px;
letter-spacing: .04em; margin-bottom: 10px;
padding-bottom: 8px; border-bottom: 1px solid rgba(120,100,60,.22);
}
.report-body { font-size: 14.5px; line-height: 1.85; margin: 0; }
.report-seal {
position: absolute; right: 16px; bottom: 10px;
font-family: var(--mono); font-size: 9.5px;
color: var(--red-soft); border: 1px solid var(--red-soft);
border-radius: 3px; padding: 2px 7px;
transform: rotate(-6deg); opacity: .8;
}
/* Искомые фрагменты НЕ отличаются от обычного текста: найти их —
и есть загадка. Кликается весь рапорт, «подозрительность» игрок
определяет сам, сверяя с журналом и памяткой. */
.plain { cursor: pointer; border-radius: 2px; transition: background .14s; }
.plain:hover { background: rgba(120,100,60,.11); }
.tell {
font: inherit; color: inherit;
background: none; border: 0; padding: 0;
border-radius: 2px;
cursor: pointer; transition: background .14s, color .14s;
}
.tell:hover:not(:disabled) { background: rgba(120,100,60,.11); }
.tell.got {
background: rgba(74,125,85,.2); color: #2f5b39;
box-shadow: inset 0 -1.5px 0 var(--green);
font-weight: 700; padding: 1px 3px;
cursor: default;
}
.task {
display: flex; justify-content: space-between; align-items: center;
gap: 14px; flex-wrap: wrap;
background: var(--paper-3); border-radius: var(--r);
padding: 11px 15px; margin-top: 4px;
}
.task p { margin: 0; font-size: 13.5px; }
.counter { font-family: var(--mono); font-size: 12.5px; color: var(--ink-2); white-space: nowrap; }
.counter b { color: var(--red); font-size: 15px; }
/* ---------------- форма ордера ---------------- */
.form { display: grid; gap: 17px; margin: 20px 0 4px; }
.fgroup label {
display: block;
font-family: var(--sans); font-weight: 600; font-size: 13.5px;
color: var(--ink); margin-bottom: 6px;
}
.fline { display: flex; align-items: center; gap: 9px; }
.fline input {
flex: 1; min-width: 0;
padding: 10px 13px;
border: 1px solid rgba(120,100,60,.45); border-radius: var(--r);
background: var(--paper-2); color: var(--ink);
font-family: var(--mono); font-size: 14px;
}
.fline input:focus { outline: 2px solid var(--amber); outline-offset: -1px; }
.fmark {
flex: none; width: 22px; text-align: center;
color: var(--green); font-size: 17px; font-weight: 700;
}
.fsrc {
font-family: var(--mono); font-size: 10.5px;
color: var(--ink-3); margin-top: 5px;
}
.ferr {
font-family: var(--mono); font-size: 11.5px;
color: var(--red); margin-top: 5px;
}
.ferr:empty { margin: 0; }
.fgroup.ok label { color: var(--green); }
.fgroup.ok .fline input {
background: rgba(74,125,85,.09);
border-color: rgba(74,125,85,.5);
}
/* ---------------- финал ---------------- */
.twist {
width: 100%; max-width: 620px; margin: 70px auto 0; text-align: center;
}
.twist-lines { min-height: 150px; }
.twist-lines p {
font-family: var(--mono); font-size: 16.5px; line-height: 1.6;
color: #e8ded0; margin: 12px 0;
opacity: 0; animation: fade .85s forwards;
}
@keyframes fade { to { opacity: 1; } }
.bigstamp {
display: inline-block; margin-top: 26px;
border: 3px solid var(--red); color: var(--red);
font-family: var(--mono); font-weight: 700; font-size: 17px;
letter-spacing: .1em; padding: 11px 22px;
transform: rotate(-4deg);
animation: slam .38s cubic-bezier(.2,1.4,.4,1);
}
@keyframes slam {
from { transform: rotate(-4deg) scale(2.1); opacity: 0; }
to { transform: rotate(-4deg) scale(1); opacity: 1; }
}
.warm-sheet {
background: #fbf4e6;
background-image: radial-gradient(700px 400px at 20% 0%, rgba(255,255,255,.7), transparent 60%);
max-width: 620px;
}
.warm-sheet h1 { text-align: center; font-size: 22px; margin-bottom: 18px; }
.warm-sheet p { line-height: 1.72; }
.order-final .record { background: rgba(255,255,255,.55); }
.qr {
width: 232px; margin: 18px auto;
background: #fff; padding: 8px; border-radius: var(--r);
box-shadow: 0 3px 14px rgba(0,0,0,.12);
}
.qr svg { width: 100%; height: auto; display: block; }
.pickup .rec-row b { font-size: 14px; }
/* Блок «как получить штрихкод» — последний шаг вне системы */
.claim {
background: rgba(215,164,74,.16);
border: 1px solid rgba(215,164,74,.5);
border-radius: var(--r);
padding: 15px 18px; margin: 16px 0 4px;
text-align: left;
}
.claim-h {
font-family: var(--mono); font-size: 10.5px;
letter-spacing: .12em; text-transform: uppercase;
color: #8a6a20; margin-bottom: 7px;
}
.claim-lead { font-size: 13.5px; color: var(--ink-2); margin: 0 0 10px; }
.claim-steps {
margin: 0; padding-left: 20px;
display: grid; gap: 6px;
}
.claim-steps li { font-size: 14.5px; line-height: 1.5; }
.claim-steps li::marker { color: var(--red); font-weight: 700; }
.claim-note {
font-family: var(--mono); font-size: 11.5px;
color: var(--ink-3); font-style: italic;
margin: 14px 0 0;
padding-top: 11px;
border-top: 1px dotted rgba(120,100,60,.35);
}
/* ---------------- док и футер ---------------- */
.dock {
display: flex; gap: 7px; justify-content: center; flex-wrap: wrap;
padding: 6px 16px 0; opacity: .42; transition: opacity .2s;
}
.dock:hover { opacity: 1; }
.dk {
background: none; border: 1px solid #232c37; color: #5b6673;
border-radius: var(--r); padding: 5px 10px;
font-family: var(--mono); font-size: 10.5px; cursor: pointer;
transition: border-color .15s, color .15s;
}
.dk:hover { border-color: var(--amber); color: var(--amber); }
.footer {
text-align: center; padding: 14px 0 20px;
font-family: var(--mono); font-size: 10px; color: #222a34;
}
/* ---------------- панели ---------------- */
.backdrop {
position: fixed; inset: 0; z-index: 60;
background: rgba(4,7,10,.6);
display: flex; justify-content: flex-end;
animation: fadein .18s;
}
@keyframes fadein { from { opacity: 0; } to { opacity: 1; } }
.panel {
width: min(400px, 93vw); height: 100vh;
background: var(--bg-2); color: #ccd4dd;
overflow-y: auto;
box-shadow: -14px 0 44px rgba(0,0,0,.5);
animation: slidein .24s cubic-bezier(.2,.7,.3,1);
}
@keyframes slidein { from { transform: translateX(24px); opacity: .4; } to { transform: none; opacity: 1; } }
.panel-head {
position: sticky; top: 0; z-index: 2;
display: flex; justify-content: space-between; align-items: center;
padding: 15px 18px;
background: var(--bg-2); border-bottom: 1px solid var(--line);
}
.panel-head h3 {
margin: 0; font-family: var(--mono); font-size: 13px;
color: var(--amber); letter-spacing: .06em;
}
.panel-x {
background: none; border: 0; color: var(--dim);
font-size: 21px; line-height: 1; cursor: pointer; padding: 0 4px;
}
.panel-x:hover { color: #e6ecf2; }
.panel-body { padding: 16px 18px 28px; }
.panel-lead { font-size: 12.5px; margin-bottom: 14px; }
.panel-body .dim { color: var(--dim); }
.panel-body .jcard {
background: #19212b; border-color: var(--line-2);
}
.panel-body .jcard-name { color: var(--amber); }
.panel-body .jcard-fact { background: rgba(215,164,74,.1); }
.panel-body .jcard-label { color: var(--dim); }
.panel-body .jcard-fact b { color: #f0e3c8; }
.panel-body .jcard-desc { color: var(--dim); }
.hint {
font-family: var(--mono); font-size: 12.5px; line-height: 1.55;
color: #d3dbe3; margin: 10px 0;
padding-left: 11px; border-left: 2px solid var(--amber);
}
.hint b { color: var(--amber); }
/* ---------------- загрузка ---------------- */
.boot {
width: 100%; text-align: center; padding-top: 54px;
display: flex; flex-direction: column; align-items: center;
}
.boot-title {
font-family: var(--mono); color: var(--amber);
letter-spacing: .1em; font-size: 21px; margin: 0;
}
.boot-sub {
color: var(--dim); font-size: 12.5px; max-width: 440px;
margin: 8px auto 30px; font-family: var(--mono);
}
.boot-lines p {
font-family: var(--mono); font-size: 13.5px; color: #b9c3ce;
margin: 7px 0; opacity: 0; animation: fade .5s forwards;
}
/* ---------------- тост ---------------- */
#toast {
position: fixed; left: 50%; bottom: 26px; z-index: 90;
transform: translateX(-50%) translateY(10px);
background: #19212b; color: #ecd9b4;
border: 1px solid var(--amber); border-radius: var(--r);
padding: 10px 18px; max-width: 90vw;
font-family: var(--mono); font-size: 12px;
opacity: 0; pointer-events: none;
transition: opacity .24s, transform .24s;
}
#toast.on { opacity: 1; transform: translateX(-50%) translateY(0); }
/* ---------------- адаптив ---------------- */
@media (max-width: 720px) {
.two-col { grid-template-columns: 1fr; }
/* На узком экране стол не ужимаем: иначе инвентарные бирки —
а на них держится вся загадка — становятся нечитаемыми.
Вместо этого даём сцене горизонтальную прокрутку. */
.desk { min-width: 500px; }
.scene-box { box-shadow: inset -14px 0 12px -12px rgba(0,0,0,.5); }
}
@media (max-width: 520px) {
body { font-size: 14.5px; }
.sheet { padding: 22px 18px 24px; }
.sheet h1 { font-size: 21px; }
.sheet h2 { font-size: 17px; }
.topbar { padding: 10px 13px; }
.rail { padding: 9px 13px 0; }
.stage { padding: 18px 10px 32px; }
.task { flex-direction: column; align-items: flex-start; }
.twist { margin-top: 44px; }
}
@media (prefers-reduced-motion: reduce) {
*, *::before, *::after { animation-duration: .01ms !important; transition-duration: .01ms !important; }
}