/* Цвета интерфейса — переменные. Здесь тема «Основная» (болотная с латунью),
   остальные темы лежат в themes.css и переопределяют те же переменные. */
:root{
  --ink:#0c1013;            /* фон страницы */
  --felt:#131c1b;           /* поле вокруг карты */
  --stage-img:none;         /* узор поля вокруг карты (дерево, звёзды…) */
  --panel:#171f23;          /* панели */
  --panel-2:#1f2a2f;        /* карточки и кнопки на панелях */
  --hover:#26333a;          /* наведение */
  --field:#101719;          /* поля ввода */
  --sunken:#0f1618;         /* лунки под картинки */
  --line:#2c3a40;
  --scroll:#2c3a3f;
  --brass:#c9a227;          /* акцент: кнопки, выделение */
  --brass-hi:#dbb32f;
  --brass-dim:#8d7320;
  --accent-rgb:201,162,39;  /* тот же акцент для полупрозрачных заливок */
  --on-accent:#1a1405;      /* текст на акцентной кнопке */
  --dragon:#a8322a;
  --danger-text:#f0b6ac;
  --danger-bg:#3a201c;
  --danger-line:#4a2a25;
  --err:#f0a292;
  --paper:#e8e1cf;          /* пергамент старых листов */
  --paper-2:#f3eee0;
  --paper-line:#c6bca2;
  --text:#dbe4e2;
  --muted:#8497a0;
  --title:#e8e1cf;          /* заголовки и крупные числа */
  --sheet-red:#d77a62;      /* «красные» подписи листа D&D */
  --ok:#5f9e6e;
  --ok-text:#b7e2c1;
  --emote:#b8c6b9;
  --whisper:#b3a6c9;
  --roll-bg:#141d20;
  --die-min:#d08f81;
  --die-drop:#5a6b70;
  --secret:#7a6bab;
  --overlay:rgba(4,7,8,.75);
  --hud:rgba(16,22,25,.92);
  --hud-strong:rgba(18,22,25,.95);
  --auth-1:#1a2a27;
  --auth-2:#0a0e10;
  --cw-bg:var(--ink);       /* фон под листом персонажа — лист теперь в цветах темы */
  --cw-head:var(--panel);
  --cw-line:var(--line);
  --cw-text:#d7dae2;
  --turn-ring:#f0c75e;      /* подсветка токена, чей ход */
  --board:#101619;          /* доска карты, если мастер не выбрал свой цвет */
  --grid:#ffffff;           /* сетка по умолчанию */
  --r:3px;
  --serif: Georgia, "Times New Roman", serif;
  --ui: "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
  color-scheme: dark;
}
*{box-sizing:border-box}
html,body{height:100%;margin:0}
body{font-family:var(--ui);background:var(--ink);color:var(--text);font-size:14px;overflow:hidden}
button:not(.charsheet *),input:not(.charsheet *),select:not(.charsheet *),textarea:not(.charsheet *){font-family:inherit;font-size:14px;color:var(--text)}
button:not(.charsheet *){background:var(--panel-2);border:1px solid var(--line);color:var(--text);padding:6px 11px;border-radius:var(--r);cursor:pointer}
button:not(.charsheet *):hover{border-color:var(--brass-dim);background:var(--hover)}
button:not(.charsheet *):focus-visible,input:not(.charsheet *):focus-visible,select:not(.charsheet *):focus-visible,textarea:not(.charsheet *):focus-visible{outline:2px solid var(--brass);outline-offset:1px}
button.primary{background:var(--brass);border-color:var(--brass);color:var(--on-accent);font-weight:600}
button.primary:hover{background:var(--brass-hi)}
button.danger{color:var(--danger-text);border-color:var(--danger-line)}
button.danger:hover{background:var(--danger-bg);border-color:var(--dragon)}
button.small{padding:3px 8px;font-size:12px}
button.on{background:var(--brass);border-color:var(--brass);color:var(--on-accent)}
input:not(.charsheet *),select:not(.charsheet *),textarea:not(.charsheet *){background:var(--field);border:1px solid var(--line);border-radius:var(--r);padding:6px 8px;width:100%}
textarea:not(.charsheet *){resize:vertical;min-height:70px;line-height:1.45}
label:not(.charsheet *){display:block;font-size:12px;color:var(--muted);margin-bottom:3px}
h1:not(.charsheet *),h2:not(.charsheet *),h3:not(.charsheet *){font-family:var(--serif);font-weight:normal;margin:0}
h2:not(.charsheet *){font-size:20px}h3:not(.charsheet *){font-size:16px}
.spacer{flex:1}
.rowbtns{display:flex;gap:6px;flex-wrap:wrap}
.hint{color:var(--muted);font-size:12.5px;line-height:1.55}
.err{color:var(--err);font-size:13px;min-height:18px;margin-top:8px}
::-webkit-scrollbar{width:9px;height:9px}
::-webkit-scrollbar-thumb{background:var(--scroll);border-radius:5px}

.screen{display:none;height:100%;flex-direction:column}
.screen.on{display:flex}

/* рамка-филигрань в духе книг правил */
.filigree{height:10px;background:
  radial-gradient(circle at 12px 50%, var(--brass-dim) 1.5px, transparent 2px) repeat-x;
  background-size:24px 10px;opacity:.5}

/* ---------- вход ---------- */
#auth{align-items:center;justify-content:center;
  background:
    radial-gradient(circle at 50% 30%, var(--auth-1) 0%, var(--auth-2) 70%);
}
#auth.on{display:flex}
.authbox{width:340px;background:var(--panel);border:1px solid var(--line);padding:24px;border-radius:var(--r);text-align:center;position:relative}
.authbox::before,.authbox::after{content:"";position:absolute;left:12px;right:12px;height:2px;background:linear-gradient(90deg,transparent,var(--brass-dim),transparent)}
.authbox::before{top:6px}.authbox::after{bottom:6px}
.sigil{color:var(--brass);margin-bottom:6px}
.authbox h1{font-size:24px;letter-spacing:.5px}
.authbox .sub{color:var(--muted);font-size:13px;margin:4px 0 18px}
.authbox .row{text-align:left;margin-bottom:10px}
.authbtns{display:flex;gap:8px;margin-top:6px}
.authbtns button{flex:1}

/* ---------- верхняя панель ---------- */
.topbar{display:flex;align-items:center;gap:10px;padding:7px 12px;background:var(--panel);border-bottom:1px solid var(--line)}
.brand{font-family:var(--serif);font-size:17px}
.who{color:var(--muted);font-size:13px}
.seats{display:flex;gap:5px;flex-wrap:wrap}
.seat{font-size:12px;padding:2px 8px;border:1px solid var(--line);border-radius:10px;color:var(--muted)}
.seat.gm{color:var(--brass);border-color:var(--brass-dim)}
.seat.voice{border-color:var(--ok);color:var(--ok-text)}

/* ---------- лобби ---------- */
.lobbywrap{flex:1;display:grid;grid-template-columns:1fr 320px;gap:18px;padding:18px;overflow:auto}
.lbhead{display:flex;align-items:center;gap:14px;margin-bottom:14px}
.campgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(230px,1fr));gap:14px}
.camp{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);overflow:hidden;display:flex;flex-direction:column}
.camp .cover{height:120px;background:var(--sunken) center/cover;border-bottom:1px solid var(--line);position:relative}
.camp .cover .none{position:absolute;inset:0;display:flex;align-items:center;justify-content:center;color:var(--line);font-family:var(--serif);font-size:38px}
.camp .b{padding:10px 12px}
.camp .nm{font-family:var(--serif);font-size:17px;color:var(--title)}
.camp .meta{color:var(--muted);font-size:12px;margin:4px 0 9px}
.lbside{background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:14px;height:max-content}
.profhead{display:flex;gap:12px;align-items:center;margin-bottom:12px}
.avatar{width:64px;height:64px;border-radius:50%;object-fit:cover;background:var(--panel-2);border:1px solid var(--line)}
.medals{display:flex;flex-wrap:wrap;gap:6px;margin-top:6px}
.medal{display:flex;gap:6px;align-items:center;border:1px solid var(--line);border-radius:12px;padding:3px 9px;font-size:12px;background:var(--panel-2)}
.medal b{font-weight:600;color:var(--title)}
.statline{display:flex;justify-content:space-between;border-bottom:1px dotted var(--line);padding:5px 0;font-size:13px}
.statline span:last-child{color:var(--brass)}

/* ---------- стол ---------- */
.tablewrap{flex:1;display:grid;grid-template-columns:46px 1fr 370px;min-height:0}
.toolbelt{background:var(--panel);border-right:1px solid var(--line);display:flex;flex-direction:column;align-items:center;gap:3px;padding:6px 0;overflow-y:auto}
.toolbelt button{width:34px;height:34px;padding:0;display:flex;align-items:center;justify-content:center;font-size:16px;background:transparent;border:1px solid transparent;border-radius:var(--r)}
.toolbelt button:hover{background:var(--panel-2);border-color:var(--line)}
.toolbelt button.on{background:var(--brass);color:var(--on-accent);border-color:var(--brass)}
.toolbelt .sep{width:24px;height:1px;background:var(--line);margin:4px 0}
.toolbelt .cap{font-size:9px;color:var(--muted);letter-spacing:.4px}

#stage{position:relative;overflow:hidden;background-color:var(--felt);background-image:var(--stage-img);background-size:var(--stage-size,auto);background-attachment:local}
#cv{position:absolute;inset:0;width:100%;height:100%;display:block}
.stagehud{position:absolute;left:10px;top:10px;display:flex;gap:6px;flex-wrap:wrap;max-width:80%;pointer-events:none}
.stagehud>*{pointer-events:auto}
.stagehud .chip{background:var(--hud);border:1px solid var(--line);padding:4px 9px;border-radius:var(--r);font-size:12px;color:var(--muted)}
.pagebadge{position:absolute;right:10px;top:10px;background:var(--hud);border:1px solid var(--line);padding:4px 10px;border-radius:var(--r);font-size:12px;color:var(--muted)}

.side{display:flex;flex-direction:column;background:var(--panel);border-left:1px solid var(--line);min-height:0}
/* вкладки иконками: квадратные кнопки, выбранная залита акцентом */
.tabs{display:flex;gap:3px;padding:6px 8px;border-bottom:1px solid var(--line);overflow-x:auto;flex:none}
.tabs button{flex:1 1 0;min-width:32px;max-width:44px;height:34px;padding:0;display:flex;align-items:center;justify-content:center;
  border:1px solid transparent;border-radius:5px;background:transparent;color:var(--muted)}
.tabs button:hover{color:var(--text);background:var(--hover);border-color:transparent}
.tabs button.on{background:var(--brass);border-color:var(--brass);color:var(--on-accent)}
.tabs button svg{display:block}
.tabtitle{font-family:var(--serif);font-size:15px;color:var(--title);padding:7px 12px 6px;border-bottom:1px solid var(--line);flex:none}
.pane{display:none;flex:1;min-height:0;flex-direction:column}
.pane.on{display:flex}
.pane .body{flex:1;overflow:auto;padding:12px}

#log{flex:1;overflow:auto;padding:10px 12px;display:flex;flex-direction:column;gap:8px}
.msg{line-height:1.45}
.msg .who{color:var(--brass);font-size:12px}
.msg .who .t{color:var(--muted);margin-left:6px;font-size:11px}
.msg.system{color:var(--muted);font-size:12.5px;font-style:italic}
.msg.emote{color:var(--emote);font-style:italic}
.msg.whisper{color:var(--whisper)}
.msg.narrate{color:var(--brass);font-style:italic;border-left:2px solid var(--brass-dim);padding-left:8px}
.msg.try{padding:4px 0}
.msg.try .trywho{color:var(--brass);font-size:12.5px}
.msg.try .trytext{font-style:italic}
.msg.try .trybadge{font-weight:700;margin-left:4px}
.msg.try.success .trybadge{color:var(--ok)}
.msg.try.failure .trybadge{color:var(--dragon)}
.msg.ooc{color:var(--muted);font-size:13px}
.msg.ooc .ooclabel{display:inline-block;background:var(--panel-2);border:1px solid var(--line);border-radius:3px;padding:0 5px;font-size:10px;font-weight:700;letter-spacing:.5px;color:var(--muted);margin-right:6px;vertical-align:middle}
.msg.ooc .oocwho{color:var(--muted);font-size:12px}
.roll{border:1px solid var(--line);border-left:2px solid var(--brass);background:var(--roll-bg);padding:7px 9px;border-radius:var(--r)}
.roll .lbl{font-size:12px;color:var(--muted)}
.roll .total{font-family:var(--serif);font-size:26px;line-height:1.1;color:var(--title)}
.roll .parts{font-size:12px;color:var(--muted);margin-top:2px;word-break:break-word}
.roll .d.max{color:var(--brass);font-weight:700}
.roll .d.min{color:var(--die-min)}
.roll .d.drop{color:var(--die-drop);text-decoration:line-through}
.roll.secret{border-left-color:var(--secret)}
#macrobar{display:flex;gap:4px;flex-wrap:wrap;padding:6px 8px;border-top:1px solid var(--line);max-height:110px;overflow:auto}
#macrobar button{padding:3px 8px;font-size:12px}
#chatbar{border-top:1px solid var(--line);padding:8px;display:flex;flex-direction:column;gap:6px}
#chatbar .quick{display:flex;gap:4px;flex-wrap:wrap}
#chatbar .quick button{padding:3px 8px;font-size:12px}
#chatbar .send{display:flex;gap:6px}

.item{border:1px solid var(--line);border-radius:var(--r);padding:9px 10px;margin-bottom:8px;background:var(--panel-2)}
.item .top{display:flex;align-items:center;gap:8px}
.item .nm{flex:1;font-family:var(--serif);font-size:15px}
.item .meta{color:var(--muted);font-size:12px;margin-top:2px}
.item.active{border-color:var(--brass)}
.grid2{display:grid;grid-template-columns:1fr 1fr;gap:8px}
.grid3{display:grid;grid-template-columns:repeat(3,1fr);gap:8px}

.initrow{display:flex;align-items:center;gap:8px;padding:7px 9px;border:1px solid var(--line);border-radius:var(--r);margin-bottom:6px;background:var(--panel-2)}
.initrow.on{border-color:var(--brass);background:rgba(var(--accent-rgb),.09)}
.initrow .v{font-family:var(--serif);font-size:18px;width:34px;text-align:center;color:var(--brass)}
.initrow .n{flex:1}

/* модальные */
.modal{position:fixed;inset:0;z-index:60;display:none;align-items:center;justify-content:center;background:var(--overlay);padding:18px}
.modal.on{display:flex}
.win{background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--brass);border-radius:var(--r);width:min(1000px,96vw);max-height:92vh;display:flex;flex-direction:column}
.win header{background:transparent;border-bottom:1px solid var(--line);display:flex;align-items:center;gap:10px;padding:8px 14px}
.win .title{font-family:var(--serif);font-size:17px}
.win .content{overflow:auto;padding:16px 18px}

/* листы персонажей — пергамент */
.sheet{background:var(--paper);color:#22262c;padding:16px 18px;border-radius:2px;font-family:var(--serif)}
.sheet .ui{font-family:var(--ui)}
.sheet h3{font-size:14px;letter-spacing:.6px;color:#6d2e27;border-bottom:1px solid var(--paper-line);padding-bottom:4px;margin:16px 0 10px}
.sheet h3:first-of-type{margin-top:0}
.sheet input,.sheet textarea,.sheet select{background:var(--paper-2);border:1px solid var(--paper-line);color:#22262c;font-family:var(--ui)}
.sheet label{color:#5e6168}
.sheetTop{display:flex;gap:14px;align-items:flex-start;flex-wrap:wrap}
.sheetTop .portrait{width:92px;height:92px;object-fit:cover;border:1px solid var(--paper-line);background:var(--paper-2)}
.abil{display:grid;grid-template-columns:repeat(6,1fr);gap:8px}
.abilcard{border:1px solid var(--paper-line);background:var(--paper-2);text-align:center;padding:6px 4px}
.abilcard .t{font-size:10.5px;letter-spacing:1px;color:#6d2e27}
.abilcard .sc input{text-align:center;font-size:20px;border:0;background:transparent;padding:2px}
.abilcard .mod{font-size:15px;color:#22262c;border-top:1px solid var(--paper-line);margin-top:4px;padding-top:2px;cursor:pointer}
.abilcard .mod:hover{color:#6d2e27}
.skills{display:grid;grid-template-columns:repeat(2,1fr);gap:2px 14px}
.skill{display:flex;align-items:center;gap:7px;font-size:13px;padding:2px 0;border-bottom:1px dotted var(--paper-line)}
.skill input[type=checkbox]{width:auto}
.skill .b{width:34px;text-align:right;cursor:pointer;font-weight:bold}
.skill .b:hover{color:#6d2e27}
.skill .n{flex:1}
.combat{display:grid;grid-template-columns:repeat(4,1fr);gap:8px}
.statbox{border:1px solid var(--paper-line);background:var(--paper-2);padding:6px;text-align:center}
.statbox .t{font-size:10px;letter-spacing:.8px;color:#6d2e27}
.statbox input{text-align:center;border:0;background:transparent;font-size:18px}
.atkrow{display:grid;grid-template-columns:1.6fr 1fr 1fr auto;gap:6px;margin-bottom:5px;align-items:center}
.rollbtn{background:#20303a;color:var(--paper);border:1px solid #20303a;font-family:var(--serif);padding:6px 8px;cursor:pointer;border-radius:2px}
.rollbtn:hover{background:#2c4351}
.npcline{display:flex;gap:8px;align-items:center;margin-bottom:6px}
.npcstat{border-top:2px solid #6d2e27;border-bottom:2px solid #6d2e27;padding:8px 0;margin:10px 0}

/* галерея */
.cards{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.card{border:1px solid var(--line);border-radius:var(--r);overflow:hidden;background:var(--panel-2);cursor:pointer}
.card img{width:100%;height:110px;object-fit:cover;display:block;background:var(--sunken)}
.card .b{padding:7px 9px}
.card .nm{font-family:var(--serif);font-size:14px}
.card .meta{color:var(--muted);font-size:11.5px}
.reacts{display:flex;gap:4px;flex-wrap:wrap;margin-top:6px}
.react{border:1px solid var(--line);border-radius:12px;padding:1px 8px;font-size:12px;background:var(--panel-2);cursor:pointer}
.react.mine{border-color:var(--brass);color:var(--brass)}
.comment{border-left:2px solid var(--line);padding:4px 0 4px 8px;margin:6px 0;font-size:13px}
.comment .by{color:var(--brass);font-size:11.5px}

.post{border:1px solid var(--line);border-radius:var(--r);padding:9px 11px;margin-bottom:9px;background:var(--panel-2)}
.post .by{color:var(--brass);font-size:12px}
.post img,.post video{max-width:100%;border-radius:2px;margin-top:6px;display:block}

.ctxmenu{position:fixed;z-index:80;background:var(--panel);border:1px solid var(--line);border-radius:var(--r);padding:4px;display:none;min-width:190px;box-shadow:0 8px 24px rgba(0,0,0,.55)}
.ctxmenu.on{display:block}
.ctxmenu button{display:block;width:100%;text-align:left;border:0;background:transparent;padding:7px 10px}
.ctxmenu button:hover{background:var(--panel-2)}
.ctxmenu .hd{padding:5px 10px;color:var(--muted);font-size:11.5px;border-bottom:1px solid var(--line);margin-bottom:3px}
.toast{position:fixed;bottom:18px;left:50%;transform:translateX(-50%);background:var(--panel);border:1px solid var(--brass-dim);padding:9px 16px;border-radius:var(--r);z-index:120;display:none;max-width:70vw}
.toast.on{display:block}
#voiceBox{position:absolute;width:0;height:0;overflow:hidden}

@media (max-width:1000px){
  .tablewrap{grid-template-columns:44px 1fr;grid-template-rows:1fr 46vh}
  .side{grid-column:1/-1;border-left:0;border-top:1px solid var(--line)}
  .lobbywrap{grid-template-columns:1fr}
}

/* ============================================================
   Журнал (папки, персонажи, записки)
   ============================================================ */
.journal{display:flex;flex-direction:column;gap:8px;height:100%}
.jbar{display:flex;gap:6px;align-items:center}
.jbar .jsearch{flex:1}
.jtree{flex:1;overflow:auto;min-height:120px}
.jrow{display:flex;align-items:center;gap:8px;padding:5px 6px;border-radius:var(--r);cursor:pointer;border:1px solid transparent}
.jrow:hover{background:var(--panel-2)}
.jrow.dropping{border-color:var(--brass);background:rgba(var(--accent-rgb),.12)}
.jrow.active{border-color:var(--brass)}
.jrow.gmonly{opacity:.82}
.jrow.gmonly .jname::after{content:' ⚜';color:var(--brass);font-size:11px}
.jfolder .jtwist{width:12px;color:var(--muted);font-size:11px}
.jfolder .jname{font-family:var(--serif)}
.jcount{color:var(--muted);font-size:11px;border:1px solid var(--line);border-radius:9px;padding:0 6px}
.jav{width:30px;height:30px;flex:none;border-radius:4px;background:var(--sunken) center/cover;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:15px}
.jmid{flex:1;min-width:0}
.jmid .jname{font-size:13.5px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jmid .jmeta{color:var(--muted);font-size:11px;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.jkids{display:block}
label.chk{display:flex;gap:8px;align-items:center;margin:5px 0;font-size:13px;color:var(--text)}
label.chk input{width:auto}
.permrow{display:flex;gap:8px;align-items:center;padding:5px 0;border-bottom:1px dotted var(--line)}
.permrow .nm{flex:1}
.hoav{max-width:220px;border-radius:var(--r);display:block;margin-bottom:10px}
.hotext{line-height:1.6;font-size:14px}

/* ============================================================
   Окно персонажа
   ============================================================ */
.charmodal .win{width:min(900px,96vw);max-height:94vh}
.charmodal header{gap:8px}
.charmodal .zoomwrap{margin:0 6px}
.charmodal .zoomwrap input{width:90px}
.cwtabs{display:flex;gap:2px;border-bottom:1px solid var(--line);padding:0 12px}
.cwtabs button{border:0;border-radius:0;background:transparent;color:var(--muted);padding:9px 14px;border-bottom:2px solid transparent;font-size:13px}
.cwtabs button.on{color:var(--brass);border-bottom-color:var(--brass);background:rgba(var(--accent-rgb),.06)}
.charmodal .content{padding:0;background:var(--cw-bg)}
.cwsheet{--sheet-zoom:1;display:flex;justify-content:center;padding:14px}
.cwsheet .charsheet{zoom:var(--sheet-zoom)}
.cwbio{display:flex;gap:16px;align-items:flex-start;flex-wrap:wrap;padding:16px 18px 0}
.cwav{width:110px;height:110px;border-radius:var(--r);background:var(--sunken) center/cover;border:1px solid var(--line);
  display:flex;align-items:center;justify-content:center;font-size:40px;cursor:pointer;flex:none}
.cwinfo{flex:1;min-width:240px}
#cwBody>*:not(.cwsheet){padding-left:18px;padding-right:18px}
#cwBody>h3{margin-top:18px}
#cwBody>.chk{padding-left:18px}
.attrtable{display:flex;flex-direction:column;gap:3px;margin:8px 0;max-height:46vh;overflow:auto}
.attrrow{display:grid;grid-template-columns:minmax(160px,2fr) 3fr auto;gap:6px;align-items:center}
.attrrow .k{font-family:Consolas,monospace;font-size:12px;color:var(--muted);overflow:hidden;text-overflow:ellipsis}
.legacydump{background:var(--sunken);border:1px solid var(--line);border-radius:var(--r);padding:10px;
  max-height:220px;overflow:auto;font-size:11.5px;color:var(--muted);white-space:pre-wrap}

/* карточка броска с листа в чате */
.tplmsg{margin-top:3px}

/* саундпад */
.card.playing{border-color:var(--brass);box-shadow:0 0 0 1px var(--brass) inset}

/* объёмные кости */
#dice3d{position:absolute;inset:0;z-index:5;display:block;visibility:hidden;pointer-events:none}
#dice3d.on{visibility:visible}
#dice3d canvas{width:100%;height:100%;display:block}

/* ============================================================
   Свои диалоги вместо браузерных
   ============================================================ */
.modal.dlg{z-index:400;align-items:flex-start;padding-top:12vh}
.modal.dlg .win{width:min(440px,94vw)}
.modal.dlg .content{padding:16px 18px 6px}
.modal.dlg .dlgtext{line-height:1.55;color:var(--text);white-space:pre-wrap}
.modal.dlg .hint{margin-bottom:10px}
.dlgbtns{display:flex;gap:8px;padding:12px 18px 14px;border-top:1px solid var(--line)}
.dlgbtns .spacer{flex:1}
.dlgbtns button{min-width:92px}

/* состояние связи */
.linkstate{position:fixed;left:50%;bottom:16px;transform:translateX(-50%);z-index:350;display:none;
  background:var(--danger-bg);border:1px solid var(--dragon);color:var(--danger-text);padding:7px 14px;border-radius:var(--r);font-size:13px}
.linkstate.on{display:block}

/* --- Fix sheet rendering --- */
.sheet-rolltemplate-atk div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-top,
.sheet-rolltemplate-atkdmg div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-top,
.sheet-rolltemplate-dmg div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-top,
.sheet-rolltemplate-desc div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-top,
.sheet-rolltemplate-atk div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-bottom,
.sheet-rolltemplate-atkdmg div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-bottom,
.sheet-rolltemplate-dmg div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-bottom,
.sheet-rolltemplate-desc div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-bottom,
.sheet-rolltemplate-atk div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-middle,
.sheet-rolltemplate-atkdmg div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-middle,
.sheet-rolltemplate-dmg div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-middle,
.sheet-rolltemplate-desc div.sheet-licensedsheet-flag-1 ~ div.sheet-desc.sheet-info .sheet-middle {
    background-image: none !important;
}

.sheet-rolltemplate-atk .sheet-desc.sheet-info,
.sheet-rolltemplate-atkdmg .sheet-desc.sheet-info,
.sheet-rolltemplate-dmg .sheet-desc.sheet-info,
.sheet-rolltemplate-desc .sheet-desc.sheet-info {
    background: var(--roll-bg);
    border: 1px solid var(--line);
    border-radius: 4px;
    padding: 8px;
    margin-top: 5px;
    color: var(--text);
}

/* --- Floating Charwindow --- */
.charmodal {
    pointer-events: none;
    background: transparent !important;
    display: block !important;
    visibility: hidden;
}
.charmodal.on {
    visibility: visible;
}
.charmodal .win {
    pointer-events: auto;
    position: absolute;
    top: 5vh;
    left: 5vw;
    margin: 0;
    max-height: 90vh;
    display: flex;
    flex-direction: column;
    box-shadow: 0 10px 40px rgba(0,0,0,0.5), 0 0 0 1px var(--cw-line);
    transition: width 0.2s;
    background: var(--cw-bg);
    border-radius: 6px;
}
.charmodal header {
    cursor: grab;
    user-select: none;
    background: var(--cw-head);
    padding: 8px 12px;
    border-bottom: 1px solid var(--cw-line);
    border-radius: 6px 6px 0 0;
}
.charmodal header:active {
    cursor: grabbing;
}
.charmodal .win.minimized {
    height: 40px !important;
    width: 350px !important;
    overflow: hidden;
    resize: none;
}
.charmodal .win.minimized .content,
.charmodal .win.minimized .cwtabs {
    display: none;
}

/* ---------- панель измерения (Ruler & AoE Drawer) ---------- */
.measure-drawer {
  position: absolute;
  left: 14px;
  top: 14px;
  width: 295px;
  background: var(--hud-strong);
  backdrop-filter: blur(10px);
  -webkit-backdrop-filter: blur(10px);
  border: 1px solid var(--line);
  border-radius: 7px;
  padding: 13px 14px;
  color: var(--text);
  font-family: var(--ui);
  z-index: 30;
  box-shadow: 0 10px 30px rgba(0, 0, 0, 0.65), 0 0 0 1px rgba(255, 255, 255, 0.04);
  display: flex;
  flex-direction: column;
  gap: 9px;
  user-select: none;
  animation: fadeIn 0.15s ease-out;
}
.measure-drawer.collapsed {
  display: none !important;
}

.m-header {
  display: flex;
  align-items: center;
  justify-content: space-between;
  margin-bottom: 1px;
}
.m-title {
  font-size: 16px;
  font-weight: 700;
  color: var(--title);
  letter-spacing: 0.2px;
}
.m-collapse-btn {
  background: transparent;
  border: 0;
  color: var(--muted);
  font-size: 16px;
  padding: 2px 7px;
  cursor: pointer;
  border-radius: 4px;
  line-height: 1;
}
.m-collapse-btn:hover {
  color: var(--title);
  background: rgba(255, 255, 255, 0.09);
}

.m-row-2col {
  display: grid;
  grid-template-columns: 1fr 1fr;
  gap: 10px;
}
.m-field {
  display: flex;
  flex-direction: column;
  gap: 5px;
}
.m-label {
  font-size: 11.5px;
  font-weight: 600;
  color: var(--muted);
  display: flex;
  align-items: center;
  justify-content: space-between;
}
.m-label .sub {
  font-size: 10.5px;
  color: var(--muted);
  font-weight: normal;
}

.m-select {
  background: var(--field);
  border: 1.5px solid var(--line);
  border-radius: 5px;
  padding: 5px 8px;
  font-size: 12.5px;
  color: var(--title);
  outline: none;
  cursor: pointer;
  width: 100%;
  transition: border-color 0.15s, box-shadow 0.15s;
}
.m-select:focus, .m-select:hover {
  border-color: var(--brass);
  box-shadow: 0 0 0 1px var(--brass);
}

.m-btn-group {
  display: flex;
  gap: 3px;
  background: var(--field);
  padding: 3px;
  border-radius: 5px;
  border: 1px solid var(--line);
}
.m-btn-group button {
  flex: 1;
  background: transparent;
  border: 1px solid transparent;
  border-radius: 3px;
  padding: 4px 6px;
  font-size: 11.5px;
  color: var(--muted);
  cursor: pointer;
  text-align: center;
  transition: all 0.15s ease;
  white-space: nowrap;
}
.m-btn-group button:hover {
  color: var(--title);
  background: var(--hover);
}
.m-btn-group button.on {
  background: var(--panel-2);
  color: var(--title);
  font-weight: 600;
  border-color: var(--line);
  box-shadow: 0 2px 5px rgba(0, 0, 0, 0.35);
}

.m-input-num {
  background: var(--field);
  border: 1px solid var(--line);
  border-radius: 4px;
  padding: 4px 6px;
  font-size: 12px;
  color: var(--title);
  width: 58px;
  text-align: center;
}
.m-input-num:focus {
  border-color: var(--brass);
  outline: none;
}

.m-sep {
  height: 1px;
  background: var(--hover);
  margin: 1px 0;
}

.m-toggle-row {
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 8px;
  font-size: 12px;
  color: var(--text);
}
.m-toggle-row .info-icon {
  color: var(--muted);
  cursor: pointer;
  font-size: 12px;
  margin-left: 4px;
}
.m-toggle-row .info-icon:hover {
  color: var(--title);
}

/* Переключатели-свитчи */
.m-switch {
  position: relative;
  display: inline-block;
  width: 36px;
  height: 20px;
  flex-shrink: 0;
}
.m-switch input {
  opacity: 0;
  width: 0;
  height: 0;
}
.m-slider {
  position: absolute;
  cursor: pointer;
  inset: 0;
  background-color: var(--panel-2);
  transition: .2s;
  border-radius: 20px;
  border: 1px solid var(--line);
}
.m-slider:before {
  position: absolute;
  content: "";
  height: 14px;
  width: 14px;
  left: 2px;
  bottom: 2px;
  background-color: var(--title);
  transition: .2s;
  border-radius: 50%;
}
.m-switch input:checked + .m-slider {
  background-color: var(--brass);
  border-color: var(--brass);
}
.m-switch input:checked + .m-slider:before {
  transform: translateX(16px);
}

.m-footer {
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-top: 3px;
  font-size: 11px;
  color: var(--muted);
}
.m-metric-btn {
  background: transparent;
  border: 0;
  color: var(--muted);
  cursor: pointer;
  font-size: 11px;
  padding: 2px 4px;
  border-radius: 3px;
  display: flex;
  align-items: center;
  gap: 3px;
}
.m-metric-btn:hover {
  color: var(--title);
  background: var(--hover);
}

.m-expand-pill {
  position: absolute;
  left: 12px;
  top: 12px;
  z-index: 28;
  background: var(--hud-strong);
  border: 1px solid var(--line);
  color: var(--title);
  border-radius: 6px;
  padding: 6px 11px;
  font-size: 13px;
  font-weight: 600;
  cursor: pointer;
  box-shadow: 0 4px 14px rgba(0, 0, 0, 0.5);
  transition: all 0.15s ease;
}
.m-expand-pill:hover {
  border-color: var(--brass);
  background: var(--hover);
}

/* Всплывающее меню геометрических форм на поясе инструментов */
.ruler-flyout {
  position: absolute;
  left: 48px;
  background: var(--hud-strong);
  border: 1px solid var(--line);
  border-radius: 5px;
  padding: 4px;
  display: flex;
  flex-direction: column;
  gap: 2px;
  z-index: 40;
  box-shadow: 0 6px 20px rgba(0, 0, 0, 0.5);
}
.ruler-flyout button {
  width: 130px !important;
  height: auto !important;
  padding: 5px 8px !important;
  justify-content: flex-start !important;
  gap: 8px;
  font-size: 12px !important;
  color: var(--text);
  border-radius: 4px;
}
.ruler-flyout button:hover {
  background: var(--hover);
}
.ruler-flyout button.on {
  background: var(--brass);
  color: var(--on-accent);
}

/* Акцентные маркеры бросков в чате */
.msg.has-accent {
  position: relative;
  transition: border-color 0.2s;
}
.author-dot, .seat-dot {
  display: inline-block;
  vertical-align: middle;
}

/* ============================================================
   Изображения, аватары, GIF и превью
   ============================================================ */
.img-modal-wrap {
  display: flex;
  flex-direction: column;
  gap: 14px;
  align-items: center;
}
.img-modal-preview {
  width: 140px;
  height: 140px;
  border-radius: 10px;
  border: 2px dashed var(--line);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--sunken);
  overflow: hidden;
  position: relative;
  transition: border-color .2s, background .2s, box-shadow .2s;
  cursor: pointer;
}
.img-modal-preview:hover {
  border-color: var(--brass);
}
.img-modal-preview.circle {
  border-radius: 50%;
}
.img-modal-preview.dragover,
.token-img-preview.dragover,
.art-prev-box.dragover,
.avatar.dragover,
.cwav.dragover {
  border-color: var(--brass) !important;
  background: rgba(var(--accent-rgb),0.15) !important;
  box-shadow: 0 0 14px rgba(var(--accent-rgb),0.45);
}
.img-modal-preview img,
.token-img-preview img,
.art-prev-box img {
  width: 100%;
  height: 100%;
  object-fit: cover;
  display: block;
}
.img-modal-ph {
  font-size: 11.5px;
  color: var(--muted);
  text-align: center;
  padding: 12px;
  pointer-events: none;
  white-space: pre-wrap;
  line-height: 1.4;
}
.img-modal-ctrls {
  width: 100%;
  display: flex;
  flex-direction: column;
  gap: 8px;
}
.img-modal-ctrls button {
  width: 100%;
  justify-content: center;
  display: flex;
  align-items: center;
  gap: 6px;
}
.img-modal-urlrow {
  width: 100%;
}
.img-modal-urlrow input {
  width: 100%;
}

.token-img-preview {
  width: 84px;
  height: 84px;
  border-radius: 50%;
  border: 2px dashed var(--line);
  display: flex;
  align-items: center;
  justify-content: center;
  background: var(--sunken);
  overflow: hidden;
  position: relative;
  flex-shrink: 0;
  cursor: pointer;
  transition: border-color .2s, background .2s;
}
.token-img-preview:hover {
  border-color: var(--brass);
}

.cwav {
  transition: border-color .2s, box-shadow .2s, transform .15s;
}
.cwav:hover {
  border-color: var(--brass);
}
.avatar {
  transition: border-color .2s, box-shadow .2s, transform .15s;
}
.avatar:hover {
  border-color: var(--brass);
}




/* ---------- порядок хода ---------- */
.turnwin{position:fixed;z-index:55;width:300px;min-width:240px;max-width:90vw;min-height:120px;height:430px;max-height:88vh;resize:both;overflow:hidden;
  display:flex;flex-direction:column;background:var(--panel);border:1px solid var(--line);border-top:3px solid var(--brass);border-radius:6px;box-shadow:0 12px 32px rgba(0,0,0,.6)}
.turnwin[hidden],#table:not(.on) ~ .turnwin{display:none}
.turnwin header{display:flex;align-items:center;gap:8px;padding:8px 10px;cursor:move;user-select:none;border-bottom:1px solid var(--line)}
.turnwin header .title{font-family:var(--serif);font-size:17px;color:var(--title)}
.turnwin .tround{font-size:11.5px;color:var(--brass);border:1px solid var(--brass-dim);border-radius:10px;padding:1px 8px}
.turnwin .ticon{background:transparent;border:0;padding:3px 7px;font-size:15px;color:var(--muted)}
.turnwin .ticon:hover{color:var(--text);background:var(--panel-2)}
.turnwin .tbody{flex:1;min-height:0;display:flex;flex-direction:column;padding:8px 10px;overflow:auto}
.turnwin .tcount{display:flex;align-items:center;font-size:12.5px;color:var(--muted);margin-bottom:6px}
.turnwin .tlist{flex:1;min-height:0;overflow:auto}
.turnwin footer{display:flex;gap:6px;padding:8px 10px;border-top:1px solid var(--line)}
.turnwin footer button{flex:1;font-size:16px;padding:6px 0}
.turnwin footer .tgear{flex:0 0 38px}
.turnwin footer button[hidden]{display:none}
.turnwin.min{height:auto!important;min-height:0;resize:none}
.turnwin.min .tbody,.turnwin.min footer{display:none}
.tempty{text-align:center;padding:14px 6px;color:var(--muted);font-size:13px;line-height:1.45}
.tempty b{display:block;color:var(--text);margin-bottom:10px}
.trow{display:flex;align-items:center;gap:8px;padding:6px 8px;margin-bottom:5px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel-2);cursor:pointer}
.trow:hover{border-color:var(--brass-dim)}
.trow.on{border-color:var(--brass);background:rgba(var(--accent-rgb),.12);box-shadow:inset 3px 0 0 var(--brass)}
.trow.drag{opacity:.45}
.trow.over{border-style:dashed;border-color:var(--brass)}
.trow.custom{background:var(--panel-2);border-style:dotted}
.trow.st-down .n{text-decoration:line-through;color:#c97a72}
.trow.st-down .tav,.trow.st-incap .tav{filter:grayscale(1) brightness(.7)}
.trow.st-incap .n{color:#c9b072;font-style:italic}
.trow .tav{flex:0 0 32px;height:32px;border-radius:50%;background:var(--field) center/cover;border:1px solid var(--line);display:flex;align-items:center;justify-content:center;font-family:var(--serif);color:var(--brass)}
.trow .tname{flex:1;min-width:0;display:flex;flex-direction:column;gap:2px}
.trow .tname .n{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.trow .ttags{display:flex;flex-wrap:wrap;gap:3px}
.trow .ttag{font-size:10.5px;padding:0 5px;border-radius:8px;background:var(--field);border:1px solid var(--line);color:var(--muted)}
.trow .tval{flex:0 0 auto;min-width:34px;text-align:center;font-family:var(--serif);font-size:18px;color:var(--brass)}
.turnopts{width:330px;height:auto;min-height:0;resize:none}
.turnopts .tbody{gap:9px}
.turnopts .toptrow{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.turnopts .toptrow .lbl{font-size:12.5px;color:var(--muted);flex:0 0 auto}
.turnopts .tbtns{display:flex;gap:5px;flex-wrap:wrap}
.turnopts .tbtns button{padding:5px 9px;font-size:12.5px}
.turnopts .tbtns button.on{outline:2px solid var(--title);outline-offset:1px}
.turnopts .tcheck{display:flex;align-items:center;gap:8px;font-size:13px;cursor:pointer}
.turnopts .tcheck input{width:auto}
.turnopts h4{margin:6px 0 0;font-size:13.5px}
.turnopts .tadd{display:flex;gap:6px}
.turnopts .twhat{font-size:12px;color:var(--brass)}
.turnopts .wide{width:100%}
.trow.tdivider{cursor:default;gap:10px;padding:4px 6px;background:transparent;border:0;border-radius:0}
.trow.tdivider:hover{border-color:transparent}
.trow.tdivider .tline{flex:1;height:1px;background:linear-gradient(90deg,transparent,var(--brass-dim),transparent)}
.trow.tdivider .n{font-family:var(--serif);font-size:12.5px;letter-spacing:.6px;text-transform:uppercase;color:var(--brass)}

/* ---------- вкладка «Настройки» (раскрывающиеся разделы, кнопки внизу) ---------- */
.pane .body.settings{display:flex;flex-direction:column;padding:0;overflow:hidden}
.ssscroll{flex:1;min-height:0;overflow:auto;padding:10px;display:flex;flex-direction:column;gap:6px}
.sset{background:var(--panel-2);border:1px solid var(--line);border-radius:5px}
.sset summary{cursor:pointer;list-style:none;padding:9px 12px;font-weight:600;font-size:13.5px;color:var(--title);display:flex;align-items:center}
.sset summary::-webkit-details-marker{display:none}
.sset summary::after{content:'';margin-left:auto;width:7px;height:7px;border-right:2px solid var(--muted);border-bottom:2px solid var(--muted);transform:rotate(45deg) translateY(-2px);transition:transform .15s}
.sset[open] summary::after{transform:rotate(-135deg) translateY(-1px)}
.sset summary:hover{color:var(--brass)}
.ssbody{padding:2px 12px 12px;display:flex;flex-direction:column;gap:8px}
.sssub{font-size:12px;color:var(--muted);margin-top:4px;letter-spacing:.3px}
.themegrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(98px,1fr));gap:7px}
.themecard{display:flex;flex-direction:column;gap:3px;align-items:stretch;text-align:left;padding:5px!important;border-radius:6px!important;background:var(--panel)!important}
.themecard:hover{border-color:var(--brass)!important}
.themecard.on{border-color:var(--brass)!important;box-shadow:0 0 0 1px var(--brass) inset}
.themecard .tcprev{height:44px;border-radius:4px;display:flex;align-items:stretch;justify-content:flex-end;padding:5px;border:1px solid rgba(128,128,128,.25)}
.themecard .tcside{width:44%;border-radius:3px;padding:4px;display:flex;flex-direction:column;gap:3px}
.themecard .tcside i{display:block;height:3px;border-radius:2px;width:80%}
.themecard .tcside b{display:block;height:7px;border-radius:2px;margin-top:auto}
.themecard .tcname{font-size:12px;font-weight:600;color:var(--text)}
.themecard .tcnote{font-size:10.5px;color:var(--muted);line-height:1.25}
.keylist{display:flex;flex-direction:column;gap:4px}
.keyrow{display:flex;align-items:center;gap:8px;font-size:12.5px}
.keyrow kbd{flex:0 0 auto;min-width:64px;font-family:var(--ui);font-size:11px;padding:2px 6px;border:1px solid var(--line);border-bottom-width:2px;border-radius:4px;background:var(--field);color:var(--title);text-align:center}
.ssfoot{flex:none;display:flex;flex-direction:column;gap:6px;padding:10px;border-top:1px solid var(--line)}
.ssfoot button{width:100%}

/* ============================================================
   Обновление интерфейса: мягкие углы, воздух, плавные переходы.
   Только переопределения поверх старых правил — цвета по-прежнему из темы.
   ============================================================ */
:root{ --r:8px; --r-lg:14px; --shadow-lg:0 24px 60px rgba(0,0,0,.42); --shadow-md:0 8px 24px rgba(0,0,0,.28); --ease:cubic-bezier(.2,.7,.3,1) }

/* кнопки и поля */
button:not(.charsheet *){border-radius:var(--r);transition:background .15s var(--ease),border-color .15s,color .15s,box-shadow .15s,transform .1s;font-weight:500}
button:not(.charsheet *):active:not(:disabled){transform:translateY(1px)}
button:not(.charsheet *):disabled{opacity:.5;cursor:not-allowed}
button.primary{box-shadow:0 2px 10px rgba(var(--accent-rgb),.28)}
button.primary:hover{box-shadow:0 4px 16px rgba(var(--accent-rgb),.38)}
input:not(.charsheet *),select:not(.charsheet *),textarea:not(.charsheet *){border-radius:var(--r);padding:7px 10px;transition:border-color .15s,box-shadow .15s}
input:not(.charsheet *):focus,select:not(.charsheet *):focus,textarea:not(.charsheet *):focus{outline:none;border-color:var(--brass);box-shadow:0 0 0 3px rgba(var(--accent-rgb),.18)}
input[type=checkbox]:not(.charsheet *),input[type=radio]:not(.charsheet *){accent-color:var(--brass)}
input[type=range]:not(.charsheet *){accent-color:var(--brass);padding:0;border:0;background:transparent;box-shadow:none}
::-webkit-scrollbar{width:8px;height:8px}
::-webkit-scrollbar-track{background:transparent}
::-webkit-scrollbar-thumb{background:var(--scroll);border-radius:8px;border:2px solid transparent;background-clip:padding-box}
::-webkit-scrollbar-thumb:hover{background-color:var(--muted)}

/* верхняя панель */
.topbar{padding:8px 14px;gap:12px;box-shadow:0 1px 0 var(--line)}
.brand{font-size:18px;letter-spacing:.3px}
.seat{border-radius:20px;padding:3px 10px;background:var(--panel-2)}

/* окна */
.modal{backdrop-filter:blur(4px);-webkit-backdrop-filter:blur(4px)}
.win{border-radius:var(--r-lg);border-top:1px solid var(--line);box-shadow:inset 0 3px 0 var(--brass),var(--shadow-lg);overflow:hidden;animation:winIn .18s var(--ease)}
.win header{padding:12px 16px;border-bottom:1px solid var(--line)}
.win .title{font-size:18px}
.win .content{padding:18px 20px}
@keyframes winIn{from{opacity:0;transform:translateY(8px) scale(.985)}to{opacity:1;transform:none}}
.modal.dlg .win{border-radius:var(--r-lg)}
.dlgbtns{padding:12px 20px 16px}
.ctxmenu{border-radius:12px;padding:6px;box-shadow:var(--shadow-md);backdrop-filter:blur(8px)}
.ctxmenu button{border-radius:7px;padding:7px 10px}
.toast{border-radius:12px;padding:10px 18px;bottom:24px;box-shadow:var(--shadow-md);border-color:var(--line);border-left:3px solid var(--brass)}
.linkstate{border-radius:12px}
.turnwin{border-radius:var(--r-lg);border-top:1px solid var(--line);box-shadow:inset 0 3px 0 var(--brass),var(--shadow-lg)}
.measure-drawer{border-radius:var(--r-lg)}
.stagehud .chip,.pagebadge{border-radius:20px;padding:5px 12px;backdrop-filter:blur(6px)}

/* правая панель и чат */
.tabtitle{font-size:16px;padding:9px 14px 8px}
#log{padding:12px 14px;gap:10px}
.msg .who{font-weight:600;margin-bottom:2px}
.msg.system{align-self:center;text-align:center;font-style:normal;font-size:11.5px;background:var(--panel-2);border:1px solid var(--line);border-radius:20px;padding:2px 12px;max-width:92%}
.msg.has-accent{border-radius:10px;padding:6px 8px 6px 10px}
.roll{border-radius:10px;padding:9px 12px;border-left-width:3px}
.roll .total{font-size:28px}
.roll .totalrow{display:flex;align-items:baseline;gap:10px;flex-wrap:wrap}
.roll .target{font-size:12px;font-weight:600;padding:2px 9px;border-radius:20px}
.roll .target.ok{background:rgba(95,158,110,.18);color:var(--ok-text)}
.roll .target.no{background:rgba(168,50,42,.18);color:var(--danger-text)}
.msg.emote,.msg.narrate{padding:2px 0}
#macrobar,#chatbar .quick{gap:5px}
#macrobar button,#chatbar .quick button{border-radius:20px;padding:4px 11px;font-size:12px}
#chatbar{padding:10px 12px 12px;gap:8px;background:var(--panel)}
#chatbar .send input{border-radius:20px;padding:9px 14px}
#chatbar .send button{border-radius:50%;width:38px;height:38px;padding:0;flex:none}
.pane .body{padding:14px}

/* карточки: журнал, галерея, лобби, саундпад */
.item,.post{border-radius:12px;padding:11px 13px}
.card{border-radius:12px;transition:transform .15s var(--ease),box-shadow .15s,border-color .15s}
.card:hover{transform:translateY(-2px);box-shadow:var(--shadow-md);border-color:var(--brass-dim)}
.card .b{padding:9px 11px}
.card.playing{position:relative}
.card.playing::after{content:"\266A";position:absolute;top:8px;right:10px;color:var(--brass);animation:pulse 1.2s ease-in-out infinite}
@keyframes pulse{0%,100%{opacity:.35}50%{opacity:1}}
.react{border-radius:20px;padding:2px 9px}
.jrow{border-radius:8px;padding:6px 8px}
.jav{border-radius:8px}
.camp{border-radius:var(--r-lg);transition:transform .15s var(--ease),box-shadow .15s}
.camp:hover{transform:translateY(-2px);box-shadow:var(--shadow-md)}
.camp .cover{height:132px}
.lbside{border-radius:var(--r-lg);padding:16px}
.medal{border-radius:20px}
.authbox{border-radius:18px;padding:30px 28px;box-shadow:var(--shadow-lg)}

/* ---------- левая панель инструментов ---------- */
.tablewrap{grid-template-columns:56px 1fr 370px;transition:grid-template-columns .2s var(--ease)}
.tablewrap.tb-hidden{grid-template-columns:0 1fr 370px}
.tablewrap.tb-hidden .toolbelt{border:0;padding:0;overflow:hidden}
.toolbelt{gap:2px;padding:6px 0 10px;overflow-x:hidden}
.toolbelt button.tb{width:40px;height:38px;border-radius:10px;color:var(--muted);border:1px solid transparent;flex:none}
.toolbelt button.tb:hover{color:var(--title);background:var(--hover);border-color:transparent}
.toolbelt button.tb.on{background:var(--brass);border-color:var(--brass);color:var(--on-accent);box-shadow:0 3px 10px rgba(var(--accent-rgb),.35)}
.toolbelt button.tbhide{height:26px;margin-bottom:4px;opacity:.75}
.toolbelt .cap{font-size:9px;font-weight:700;letter-spacing:.9px;color:var(--muted);margin:7px 0 2px;text-transform:uppercase;opacity:.85}
.toolbelt .sep{width:28px;margin:6px 0 2px}
.toolbelt .grow{flex:1;min-height:10px}
.toolbelt button.tblayer{width:46px;height:auto;padding:7px 0 5px;flex:none;flex-direction:column;gap:3px;border-radius:12px;color:var(--muted);
  font-size:9px;font-weight:700;letter-spacing:.5px;text-transform:uppercase;border:1px solid transparent}
.toolbelt button.tblayer:hover{color:var(--title);background:var(--hover)}
.toolbelt button.tblayer.on{background:rgba(var(--accent-rgb),.16);border-color:var(--brass);color:var(--brass)}
.tbexpand{position:absolute;left:10px;bottom:14px;z-index:31;display:none;width:36px;height:36px;padding:0!important;border-radius:12px!important;
  align-items:center;justify-content:center;background:var(--hud-strong)!important;color:var(--title)!important;box-shadow:var(--shadow-md);backdrop-filter:blur(6px)}
.tablewrap.tb-hidden .tbexpand{display:flex}

/* ---------- окно «Бросок костей» ---------- */
.dicetray{width:310px;height:auto;min-height:0;resize:none}
.dicetray .tbody{gap:10px;padding:10px 12px 12px;overflow:visible}
.dicetray h4{margin:4px 0 0;font-size:13.5px;color:var(--title)}
.seg{display:flex;background:var(--field);border:1px solid var(--line);border-radius:11px;padding:3px;gap:3px}
.seg button{flex:1;border:1px solid transparent!important;background:transparent!important;border-radius:8px!important;padding:6px 0!important;font-weight:600;color:var(--muted)}
.seg button.on{background:var(--panel-2)!important;color:var(--title)!important;border-color:var(--line)!important;box-shadow:0 1px 5px rgba(0,0,0,.25)}
.dgrid{display:grid;grid-template-columns:1.7fr repeat(5,1fr);gap:2px 3px}
.dgrid button{border:1px solid transparent!important;background:transparent!important;border-radius:7px!important;padding:6px 0!important;font-weight:600;font-size:14px}
.dgrid button:hover{background:var(--hover)!important}
.dgrid .dname{display:flex;align-items:center;gap:7px;padding-left:6px!important;justify-content:flex-start;color:var(--title);border-right:1px solid var(--line)!important;border-radius:7px 0 0 7px!important}
.dgrid .dname svg{color:var(--muted)}
.dgrid .dname:hover svg{color:var(--brass)}
.drow{display:grid;grid-template-columns:repeat(4,1fr);gap:4px}
.dicon{display:flex!important;flex-direction:column;align-items:center;gap:3px;padding:6px 0!important;font-size:11.5px;font-weight:600;background:transparent!important;border:1px solid transparent!important}
.dicon:hover{background:var(--hover)!important;color:var(--brass)}
.dadv{display:grid;grid-template-columns:66px 1fr auto 72px;gap:6px;align-items:center}
.dadv .plus{color:var(--muted);font-size:18px}
.dtarget{display:flex!important;align-items:center;gap:10px;margin:0;font-size:13px;color:var(--text)}
.dtarget input[type=number]{width:72px;margin-left:auto}
.dicetray .wide{width:100%;padding:9px 0}
.drecent{display:flex;flex-direction:column;gap:2px;max-height:200px;overflow:auto}
.drec{display:flex;align-items:center;justify-content:space-between;gap:8px;padding:5px 2px;border-bottom:1px dashed var(--line)}
.drec code{font-family:Consolas,monospace;font-size:12.5px;color:var(--title)}
.dicetray footer{align-items:center;gap:4px}
.dicetray footer button{flex:none!important;padding:5px 9px!important;font-size:13px!important}
.dicetray .dlink{background:none!important;border:0!important;color:var(--brass);font-weight:600;padding-left:2px!important;box-shadow:none!important}
.dicetray .dex{min-width:36px;font-weight:700;font-family:Consolas,monospace}
.dicetray .dex.on{background:var(--brass)!important;border-color:var(--brass)!important;color:var(--on-accent)!important}

@media (max-width:1000px){
  .tablewrap{grid-template-columns:52px 1fr;grid-template-rows:1fr 46vh}
  .tablewrap.tb-hidden{grid-template-columns:0 1fr}
}
.win .cards{grid-template-columns:repeat(auto-fill,minmax(210px,1fr))}
.card .rowbtns{gap:4px}
.charmodal .win{animation:none}

/* ============================================================
   Окно листа персонажа: без размытия стола.
   Общий стиль окон даёт .modal backdrop-filter на весь экран — у листа
   это размывало стол и заметно ело кадры. Стол за листом живой.
   ============================================================ */
.modal.charmodal{backdrop-filter:none!important;-webkit-backdrop-filter:none!important}

/* ---------- «Как:» под чатом ---------- */
#chatbar .speakas{display:flex;align-items:center;gap:6px;font-size:12px;color:var(--muted)}
#chatbar .speakas select{flex:1;min-width:0;padding:4px 8px;font-size:12.5px;border-radius:var(--r)}
#chatbar .speakas select.as-char{border-color:var(--brass);color:var(--title);box-shadow:inset 3px 0 0 var(--brass)}
.msg .who{color:var(--who,var(--brass));display:flex;align-items:center;gap:5px;flex-wrap:wrap}
.msg .who .t{order:9}
.msg .who-av{width:18px;height:18px;border-radius:50%;background:var(--field) center/cover no-repeat;border:1px solid var(--who,var(--line));flex:none}
.msg .who-real{font-weight:400;color:var(--muted);font-size:11px}
.msg .who-real::before{content:"· "}
.msg.emote{color:var(--who,var(--emote))}

/* ---------- личный цвет и графика в настройках ---------- */
.colorswatches{display:flex;flex-wrap:wrap;gap:7px;align-items:center;margin-top:8px}
.cswatch{width:24px;height:24px;border-radius:50%;padding:0;border:2px solid transparent;box-shadow:0 0 0 1px var(--line)}
.cswatch.on{border-color:var(--title);box-shadow:0 0 0 2px var(--brass)}
.colorswatches input[type=color]{width:34px;height:26px;padding:0 2px;border-radius:6px}
.gfxrow{display:flex;flex-direction:column;gap:5px;margin:10px 0;font-size:13px}
.gfxrow .seg{display:flex;border:1px solid var(--line);border-radius:var(--r);overflow:hidden}
.gfxrow .seg button{flex:1;border:0;border-radius:0;padding:5px 6px;font-size:12px;background:var(--panel-2);white-space:nowrap}
.gfxrow .seg button+button{border-left:1px solid var(--line)}
.gfxrow .seg button.on{background:var(--brass);color:var(--on-accent)}

/* ---------- панель освещения ---------- */
.lightpanel{position:absolute;left:14px;top:14px;z-index:31;width:300px;max-height:calc(100% - 28px);overflow:auto;
  background:var(--hud-strong);border:1px solid var(--line);border-radius:12px;box-shadow:var(--shadow-md);padding:10px 12px 12px;color:var(--text);font-size:13px}
.lp-head{display:flex;align-items:center;margin:0 0 6px}
.lp-title{font-family:var(--serif);font-size:17px;color:var(--title);flex:1}
.lp-x{background:transparent;border:0;font-size:18px;color:var(--muted);padding:0 6px}
.lp-x:hover{color:var(--text)}
.lp-sec{border-top:1px solid var(--line);padding:9px 0 4px}
.lp-cap{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--brass);font-weight:700;margin-bottom:6px}
.lp-hint{font-size:11.5px;line-height:1.4;color:var(--muted);margin:4px 0 6px}
.lp-meta{font-size:12px;color:var(--muted);flex:1}
.lp-row{display:flex;flex-wrap:wrap;gap:5px;align-items:center;margin:6px 0}
.lp-row button{font-size:11.5px;padding:3px 8px}
.lp-switch{display:flex;align-items:center;gap:8px;margin:6px 0;cursor:pointer;user-select:none}
.lp-switch input{display:none}
.lp-knob{display:inline-block;width:30px;height:17px;border-radius:9px;background:var(--field);border:1px solid var(--line);position:relative;flex:none;transition:background .15s}
.lp-knob::after{content:"";position:absolute;left:2px;top:2px;width:11px;height:11px;border-radius:50%;background:var(--muted);transition:transform .15s,background .15s}
.lp-switch input:checked + .lp-knob{background:var(--brass);border-color:var(--brass)}
.lp-switch input:checked + .lp-knob::after{transform:translateX(13px);background:var(--on-accent)}
.lp-seg{display:flex;border:1px solid var(--line);border-radius:var(--r);overflow:hidden;margin:6px 0}
.lp-seg button{flex:1;border:0;border-radius:0;padding:5px 6px;font-size:12px;background:var(--panel-2)}
.lp-seg button+button{border-left:1px solid var(--line)}
.lp-seg button.on{background:var(--brass);color:var(--on-accent)}
.lp-slider{margin:7px 0}
.lp-sl-top{display:flex;justify-content:space-between;font-size:12px;color:var(--muted)}
.lp-sl-top b{color:var(--text);font-weight:600}
.lp-slider input{width:100%}
.lp-presets{display:grid;grid-template-columns:1fr 1fr;gap:5px}
.lp-preset{display:flex;align-items:center;gap:7px;text-align:left;padding:5px 7px;border-radius:var(--r);background:var(--panel-2);border:1px solid var(--line)}
.lp-preset:hover{border-color:var(--glow,var(--brass))}
.lp-preset.on{border-color:var(--glow,var(--brass));box-shadow:0 0 0 1px var(--glow,var(--brass)),0 0 12px color-mix(in srgb,var(--glow,var(--brass)) 45%,transparent)}
.lp-ico{font-size:17px;width:20px;text-align:center;filter:drop-shadow(0 0 4px var(--glow,transparent))}
.lp-pn{display:flex;flex-direction:column;min-width:0}
.lp-pn b{font-size:12px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.lp-pn small{font-size:10.5px;color:var(--muted)}
.lp-tok{font-weight:600;color:var(--title);margin-bottom:6px}
.lp-sel{width:100%;margin-bottom:6px}
.lp-fields{display:grid;grid-template-columns:repeat(3,1fr);gap:6px}
.lp-f{display:flex;flex-direction:column;gap:2px;font-size:11px;color:var(--muted)}
.lp-f input{padding:3px 6px;font-size:12.5px;width:100%}
.lp-f input[type=color]{height:26px;padding:0 2px}

/* ---------- саундпад ---------- */
.soundwin{width:560px;height:520px;min-width:420px;min-height:300px}
.sw-tabs{display:flex;gap:4px;padding:8px 10px 0;border-bottom:1px solid var(--line)}
.sw-tabs button{border:0;border-radius:var(--r) var(--r) 0 0;background:transparent;color:var(--muted);padding:6px 12px;font-size:13px;border-bottom:2px solid transparent}
.sw-tabs button.on{color:var(--title);border-bottom-color:var(--brass);background:var(--panel-2)}
.sw-top{display:flex;gap:6px;margin-bottom:8px}
.sw-search{flex:1;min-width:0}
.sw-split{display:flex;gap:10px;flex:1;min-height:0}
.sw-folders{flex:0 0 132px;display:flex;flex-direction:column;gap:3px;overflow:auto}
.sw-folder{display:flex;justify-content:space-between;align-items:center;gap:4px;text-align:left;padding:5px 8px;font-size:12.5px;border-radius:var(--r);background:transparent;border:1px solid transparent}
.sw-folder span{overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sw-folder small{color:var(--muted);font-size:11px}
.sw-folder:hover{background:var(--panel-2)}
.sw-folder.on{background:rgba(var(--accent-rgb),.14);border-color:var(--brass-dim);color:var(--title)}
.sw-folder.drop{border-style:dashed;border-color:var(--brass)}
.sw-newf{color:var(--muted);justify-content:center}
.sw-list{flex:1;min-width:0;overflow:auto;display:flex;flex-direction:column;gap:5px}
.sw-row{display:flex;align-items:center;gap:8px;padding:6px 8px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel-2)}
.sw-row.playing{border-color:var(--brass);box-shadow:inset 3px 0 0 var(--brass)}
.sw-row button.small{padding:3px 8px;font-size:12px;white-space:nowrap}
.sw-play{flex:none;width:30px;height:30px;border-radius:50%;padding:0;font-size:12px;display:flex;align-items:center;justify-content:center}
.sw-play.on{background:var(--brass);color:var(--on-accent);border-color:var(--brass)}
.sw-name{flex:1;min-width:0;display:flex;flex-direction:column;cursor:default}
.sw-name b{font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sw-name small{font-size:11px;color:var(--muted);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sw-vol{flex:0 0 74px;width:74px}
.sw-foot{display:flex;gap:6px;align-items:center;flex-wrap:wrap;margin-top:8px;padding-top:8px;border-top:1px solid var(--line)}
.sw-foot .hint{font-size:11.5px}
.sw-cap{font-size:11px;letter-spacing:.06em;text-transform:uppercase;color:var(--brass);font-weight:700;margin:12px 0 6px}
.sw-mixrow{display:flex;align-items:center;gap:9px;padding:6px 8px;border-radius:var(--r);background:var(--panel-2);margin-bottom:5px}
.sw-mixrow b{flex:1;min-width:0;font-weight:600;font-size:13px;overflow:hidden;text-overflow:ellipsis}
.sw-mixrow .sw-vol{flex:0 0 120px;width:120px}
.sw-mixrow.muted b{color:var(--muted);text-decoration:line-through}
.sw-master{background:transparent;padding-left:0}
.sw-who{width:10px;height:10px;border-radius:50%;flex:none}
.sw-dot{color:var(--brass);font-size:16px;width:20px;text-align:center}
.soundwin .tbody{display:flex;flex-direction:column}

/* ============================================================
   Панель страниц
   ============================================================ */
#stage .pb-tab{position:absolute;top:0;left:50%;transform:translateX(-50%);z-index:33;display:flex;align-items:center;gap:7px;
  max-width:46%;padding:5px 14px 6px;border-radius:0 0 12px 12px;border:1px solid var(--line);border-top:0;
  background:var(--hud-strong);color:var(--text);font-size:13px;box-shadow:var(--shadow-md)}
.pb-tab span{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
#stage .pb-tab:hover{color:var(--title);border-color:var(--brass-dim)}
.pb-tab.open{border-color:var(--brass)}
.pb-tab-arr{color:var(--muted);font-size:11px}
.pagebar{position:absolute;top:0;left:0;right:0;z-index:32;max-height:min(70%,560px);overflow:auto;
  padding:10px 14px 14px;background:var(--hud-strong);border-bottom:1px solid var(--line);box-shadow:var(--shadow-lg);
  animation:pbIn .16s var(--ease)}
@keyframes pbIn{from{transform:translateY(-12px);opacity:0}to{transform:none;opacity:1}}
#stage .pb-tab.open{display:none}
.pb-head{display:flex;align-items:center;gap:10px;margin-bottom:10px}
.pb-thumb{position:relative;aspect-ratio:16/10;border-radius:6px;background:var(--board) center/cover no-repeat;border:1px solid var(--line);overflow:hidden}
.pb-thumb.empty{background-image:linear-gradient(var(--line) 1px,transparent 1px),linear-gradient(90deg,var(--line) 1px,transparent 1px)!important;background-size:14px 14px!important}
.pb-thumb.mini{width:52px;flex:none}
.pb-cur{font-family:var(--serif);font-size:17px;color:var(--title);white-space:nowrap;overflow:hidden;text-overflow:ellipsis;max-width:30%}
.pagebar .pb-link{background:transparent;border:0;color:var(--brass);font-size:13px;padding:2px 6px;white-space:nowrap}
.pagebar .pb-link:hover{color:var(--brass-hi);text-decoration:underline}
.pb-note{font-size:12px;color:var(--muted)}
.pb-group{display:flex;align-items:center;gap:3px;padding:4px 10px 4px 6px;border-radius:20px;background:var(--panel-2);border:1px solid var(--line)}
.pb-count{font-size:12px;color:var(--muted);margin-left:4px}
.pb-x{width:34px;height:34px;padding:0;border-radius:var(--r);font-size:15px}
.pb-tools{display:flex;gap:8px;margin-bottom:10px}
.pb-search{flex:1;min-width:0}
.pb-add{white-space:nowrap}
.pb-players{display:flex;flex-wrap:wrap;align-items:center;gap:6px 12px;margin-bottom:10px;font-size:12px}
.pb-cap{color:var(--muted)}
.pb-pl{display:flex;align-items:center;gap:6px}
.pb-pl small{color:var(--muted);font-size:11.5px}
.pb-ava{width:26px;height:26px;border-radius:50%;flex:none;display:inline-flex;align-items:center;justify-content:center;
  font-size:10px;font-weight:700;color:#fff;background:var(--c,#666) center/cover no-repeat;border:2px solid var(--c,#666);cursor:grab;
  box-shadow:0 1px 4px rgba(0,0,0,.5)}
.pb-ava.sm{width:20px;height:20px;font-size:8.5px;border-width:1.5px}
.pb-ava.off{opacity:.5;filter:grayscale(.6)}
.pb-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:10px}
.pagebar .pb-card{padding:6px;border-radius:10px;background:var(--panel-2);border:2px solid transparent;cursor:pointer;transition:border-color .12s,transform .12s}
.pb-card:hover{border-color:var(--brass-dim);transform:translateY(-1px)}
.pb-card.viewing{border-color:var(--brass);box-shadow:0 0 0 1px var(--brass),0 4px 14px rgba(var(--accent-rgb),.25)}
.pb-card.drop{border-style:dashed;border-color:var(--brass)}
.pb-card.dragging{opacity:.45}
.pb-meta{display:flex;flex-direction:column;padding:6px 2px 0;min-width:0}
.pb-meta b{font-size:12.5px;font-weight:600;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}
.pb-meta small{font-size:11px;color:var(--muted)}
.pb-ribbon{position:absolute;left:6px;top:-2px;width:18px;height:28px;cursor:grab;
  background:linear-gradient(#ffd34d,#e8a91c);clip-path:polygon(0 0,100% 0,100% 100%,50% 76%,0 100%);
  filter:drop-shadow(0 1px 2px rgba(0,0,0,.6))}
.pb-split{position:absolute;right:5px;bottom:5px;display:flex;gap:2px}

/* ============================================================
   Лист персонажа в отдельном окне
   ============================================================ */
body.popsheet{margin:0;height:100vh;display:flex;flex-direction:column;background:var(--cw-bg,var(--panel));color:var(--text);overflow:hidden}
.pop-head{display:flex;align-items:center;gap:10px;padding:8px 14px;background:var(--cw-head,var(--panel-2));border-bottom:1px solid var(--cw-line,var(--line))}
.pop-name{font-family:var(--serif);font-size:18px;color:var(--title)}
.pop-zoom input{width:110px}
.pop-body{flex:1;overflow:auto}
.pop-body .cwsheet{justify-content:safe center}
body.popsheet .toast{position:fixed}

/* ---------- скрытие правой панели ---------- */
.tablewrap.side-hidden{grid-template-columns:56px 1fr 0}
.tablewrap.tb-hidden.side-hidden{grid-template-columns:0 1fr 0}
.tablewrap.side-hidden > .side{overflow:hidden;border:0;min-width:0}
.tabs button.sidehide{margin-left:auto;opacity:.7}
.tabs button.sidehide:hover{opacity:1}
.sideexpand{position:absolute;right:12px;top:12px;z-index:31;display:none;width:36px;height:36px;padding:0!important;border-radius:12px!important;
  align-items:center;justify-content:center;background:var(--hud-strong)!important;color:var(--title)!important;box-shadow:var(--shadow-md);backdrop-filter:blur(6px)}
.tablewrap.side-hidden .sideexpand{display:flex}
@media (max-width:1000px){
  .tablewrap.side-hidden{grid-template-columns:52px 1fr;grid-template-rows:1fr 0}
  .tablewrap.tb-hidden.side-hidden{grid-template-columns:0 1fr}
}

/* ---------- чат: многострочные системные, крит НИП, сворачивание описаний ---------- */
.msg.system{white-space:pre-line}
.msg .critnote{margin-top:4px;font-size:11.5px;color:var(--muted);font-style:italic}
.msg .foldbtn{margin-top:4px;padding:1px 8px;font-size:11.5px;height:auto;min-height:0;border-radius:20px;background:transparent;border:1px dashed var(--line);color:var(--muted)}
.msg .foldbtn:hover{color:var(--title);border-color:var(--brass)}
.tplmsg.folded .sheet-desc.sheet-info,
.tplmsg.folded span.sheet-desc,
.tplmsg.folded .sheet-description,
.tplmsg.folded .sheet-row:has(> span.sheet-desc),
.tplmsg.folded .sheet-row:has(> .sheet-description),
.tplmsg.folded .sheet-rolltemplate-spell .sheet-container > :not(.sheet-title):not(.sheet-italics):not(.vtt-save){display:none!important}
.msg.try .trywho{color:var(--who,var(--brass))}

/* ---------- приватный чат ---------- */
.pchatlog{flex:1;min-height:0;overflow:auto;display:flex;flex-direction:column;gap:8px;margin-bottom:8px;padding:6px 2px}
.pchatbar{display:flex;flex-direction:column;gap:5px;flex:none}
.pchat-top{display:flex;align-items:center;gap:6px}
.pchat-cap{font-size:12px;color:var(--muted)}
.pchat-top select{flex:1;width:auto;min-width:0;padding:4px 8px;font-size:12.5px}
.pchat-top select.as-char{border-color:var(--brass);color:var(--title);box-shadow:inset 3px 0 0 var(--brass)}
.pchat-hint{font-size:11px;color:var(--muted);line-height:1.35}
.pchatbar .send{display:flex;gap:6px}
.pchatbar .send input{flex:1}

/* ---------- доступ к персонажу ---------- */
.accpick{margin:10px 0 14px}
.acc-title{font-weight:700;color:var(--title);font-size:13px;margin-bottom:5px}
.acc-box{display:flex;flex-wrap:wrap;gap:6px;align-items:center;min-height:42px;padding:6px 8px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel-2)}
.acc-chip{display:inline-flex;align-items:center;gap:6px;padding:3px 4px 3px 10px;border-radius:4px;background:rgba(var(--accent-rgb),.16);color:var(--title);font-size:13px;font-weight:600}
.accpick .acc-chip button.acc-x{height:20px;min-height:0;width:20px;min-width:0;padding:0;border:0;background:transparent;box-shadow:none;color:var(--muted);font-size:15px;line-height:1}
.accpick .acc-chip button.acc-x:hover{color:var(--dragon);background:transparent}
.accpick select.acc-add{width:auto;flex:0 0 auto;min-width:140px;padding:3px 6px;font-size:12.5px;background:transparent;border:1px dashed var(--line);height:auto}
.artview{display:flex;flex-direction:column;align-items:center;gap:10px}
.artview-img{max-width:100%;max-height:62vh;border-radius:var(--r);box-shadow:var(--shadow-md);object-fit:contain}
.artview-none{font-size:84px;opacity:.6}
.artview-name{font-family:var(--serif);font-size:22px;color:var(--title)}

/* ---------- эффекты смены раунда ---------- */
.eflist{display:flex;flex-direction:column;gap:5px;margin:6px 0}
.efrow{display:flex;align-items:center;gap:7px;padding:5px 7px;border:1px solid var(--line);border-radius:var(--r);background:var(--panel-2)}
.efrow.off{opacity:.55}
.efrow input[type=checkbox]{width:auto;flex:none;margin:0}
.efrow button{flex:none}
.efrow .eftxt{flex:1 1 auto}
.efrow .eftxt{flex:1;min-width:0;display:flex;flex-direction:column;font-size:12px;line-height:1.35}
.efrow .eftxt span{color:var(--muted)}
.efpick{display:flex;flex-direction:column;gap:3px;max-height:180px;overflow:auto;padding:4px 0 8px}
.efpick[hidden],.efedit [hidden]{display:none!important}
.efedit > .hint{margin-bottom:9px}
.efedit .efpresets{display:flex;flex-wrap:wrap;gap:4px;align-items:center;margin-bottom:10px}
.efedit .efpresets .hint{margin:0 4px 0 0}
.efedit .efformula{display:flex;gap:6px}
.efedit .efformula input{flex:1;min-width:0;font-family:Consolas,monospace}
.efedit .effields{display:flex;flex-wrap:wrap;gap:4px;margin:-4px 0 8px}
.efedit .effields[hidden]{display:none}
.efedit .efsave{margin:4px 0 8px;padding:6px 8px;border:1px dashed var(--line);border-radius:var(--r)}
.efedit .efsave-row{display:flex;align-items:center;gap:6px;margin-top:6px}
.efedit .efsave-row[hidden]{display:none}
.efedit .efsave-row select{flex:1;min-width:0}
.efedit .efsave-row input{width:56px;flex:none;text-align:center}
.efedit .chk{display:flex;align-items:center;gap:6px;margin:3px 0}

/* ---------- конструктор формул ---------- */
.fbuilder .seg button{white-space:nowrap}
.fbuilder .fb-row{display:flex;align-items:center;gap:6px;flex-wrap:wrap;margin:6px 0}
.fbuilder .fb-cap{width:112px;flex:none;font-size:12px;color:var(--muted);font-weight:600}
.fbuilder .fb-chips{display:flex;flex-wrap:wrap;gap:4px;flex:1}
.fbuilder .fb-cnt{width:60px}
.fbuilder .fb-num{width:80px}
.fbuilder .fb-own{width:170px}
.fbuilder .fb-die{min-width:44px;font-family:Consolas,monospace;font-weight:700}
.fbuilder .fb-attr{font-size:12px}
.fbuilder .fb-built{display:flex;flex-wrap:wrap;gap:5px;align-items:center;min-height:44px;margin:10px 0 6px;padding:8px;border:1px solid var(--brass);border-radius:var(--r);background:var(--panel-2)}
.fbuilder .fb-empty{color:var(--muted);font-size:12.5px;font-style:italic}
.fbuilder .fb-part{display:inline-flex;align-items:center;gap:4px;padding:3px 4px 3px 6px;border-radius:6px;background:rgba(var(--accent-rgb),.14);font-size:13px;font-weight:600;color:var(--title)}
.fbuilder .fb-part.fb-dice{font-family:Consolas,monospace}
.fbuilder .fb-part button.fb-sign,.fbuilder .fb-part button.fb-x{height:20px;min-height:0;width:20px;min-width:0;padding:0;border:0;background:transparent;box-shadow:none;color:var(--muted);font-size:14px;line-height:1}
.fbuilder .fb-part button.fb-sign{color:var(--brass);font-weight:800}
.fbuilder .fb-part button.fb-x:hover{color:var(--dragon)}
.fbuilder .fb-label{flex:1;min-width:200px}
.fbuilder .fb-out{display:flex;flex-direction:column;gap:2px;margin-top:6px}
.fbuilder .fb-outrow{display:flex;align-items:center;gap:6px}
.fbuilder .fb-outrow input{flex:1;font-family:Consolas,monospace;font-size:12.5px}
.fbuilder .fb-actions{margin-top:12px;padding-top:10px;border-top:1px solid var(--line)}
.fbuilder .fb-actions select{width:auto;flex:0 1 auto;min-width:140px}
.fbuilder .fb-row input.fb-cnt,.fbuilder .fb-row input.fb-num,.fbuilder .fb-row input.fb-own{flex:none}
.fbuilder .fb-row input.fb-cnt{width:60px}.fbuilder .fb-row input.fb-num{width:80px}.fbuilder .fb-row input.fb-own{width:170px}

/* ---------- строка крита НИП: мастер прячет и показывает ---------- */
.msg .critnote{display:flex;align-items:center;gap:8px;flex-wrap:wrap}
.msg .critnote.gmonly span{opacity:.6;text-decoration:line-through dotted}
.msg .critnote button.critbtn{height:auto;min-height:0;padding:1px 8px;font-size:11px;border-radius:20px;background:transparent;border:1px dashed var(--line);color:var(--muted);font-style:normal}
.msg .critnote button.critbtn:hover{color:var(--title);border-color:var(--brass)}

/* ---------- настройки стены / двери / окна ---------- */
.wallset .ws-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:6px 10px;margin:8px 0}
.wallset .ws-f{display:flex;flex-direction:column;gap:3px;font-size:12px;color:var(--muted)}
.wallset .ws-f[hidden],.wallset label.chk[hidden]{display:none}
.wallset .ws-sub{margin:10px 0 2px;font-weight:700;font-size:12.5px;color:var(--title)}
.wallset .rowbtns{margin:4px 0}

/* ---------- ИИ-импорт ---------- */
.aiimp .aiimp-type{margin-bottom:12px}
.aiimp .aiimp-step{display:flex;gap:12px;margin:10px 0;padding:12px;border:1px solid var(--line);border-radius:var(--r-lg,12px);background:var(--panel-2)}
.aiimp .aiimp-step[hidden]{display:none}
.aiimp .aiimp-num{flex:none;width:28px;height:28px;border-radius:50%;display:flex;align-items:center;justify-content:center;background:var(--brass);color:var(--on-accent);font-weight:800}
.aiimp .aiimp-body{flex:1;min-width:0;display:flex;flex-direction:column;gap:6px}
.aiimp textarea.aiimp-idea{min-height:58px}
.aiimp textarea.aiimp-ans{min-height:120px;font-family:Consolas,monospace;font-size:12px}
.aiimp textarea.drop{border-color:var(--brass);box-shadow:0 0 0 2px rgba(var(--accent-rgb),.3)}
.aiimp .aiimp-prompt{max-height:240px;overflow:auto;white-space:pre-wrap;font-size:11.5px;line-height:1.4;padding:8px;border:1px solid var(--line);border-radius:var(--r);background:var(--bg,#0003);user-select:text}
.aiimp .aiimp-card{padding:8px 10px;border:1px solid var(--line);border-left:3px solid var(--brass);border-radius:var(--r);background:var(--panel)}
.aiimp .aiimp-name{font-family:var(--serif);font-size:17px;color:var(--title)}
.aiimp .aiimp-line{font-size:12.5px}
.aiimp .aiimp-line.dim{color:var(--muted)}
.aiimp .aiimp-warn{font-size:12px;color:var(--warn,#e0a03a)}
.aiimp .aiimp-err{color:var(--dragon);font-size:13px}
.aiimp .aiimp-go{align-self:flex-start;margin-top:4px}

/* ---------- заклинания в лист ---------- */
.spimp .spimp-target{display:flex;align-items:center;gap:8px;margin-bottom:10px}
.spimp .spimp-target select{flex:1;width:auto}
.spimp .spimp-card{display:flex;gap:10px;align-items:flex-start;cursor:pointer}
.spimp .spimp-card input[type=checkbox]{width:auto;flex:none;margin-top:5px}

/* ---------- осмотр объекта ---------- */
.objinfo .objinfo-img{display:block;max-width:100%;max-height:220px;margin:0 auto 8px;border-radius:var(--r);object-fit:contain}
.objinfo .objinfo-state{font-size:12px;color:var(--muted);margin-bottom:6px}
.objinfo .objinfo-text{white-space:pre-line;line-height:1.5;margin-bottom:8px}
.objset textarea{min-height:60px}

/* ============================================================
   Event Horizon — вход, лобби, профиль, достижения
   Все цвета — из темы: --brass (акцент), --panel, --line, --title…
   ============================================================ */
/* звёздное небо с лёгким свечением горизонта — под входом и лобби */
.eh-sky{position:absolute;inset:0;pointer-events:none;z-index:0;overflow:hidden;
  background:
    radial-gradient(1px 1px at 12% 18%, #fff9, transparent 60%),
    radial-gradient(1px 1px at 78% 12%, #fff8, transparent 60%),
    radial-gradient(1.5px 1.5px at 64% 66%, #fffa, transparent 60%),
    radial-gradient(1px 1px at 30% 82%, #fff7, transparent 60%),
    radial-gradient(1px 1px at 90% 48%, #fff8, transparent 60%),
    radial-gradient(1px 1px at 46% 38%, #fff6, transparent 60%),
    radial-gradient(1.5px 1.5px at 8% 60%, #fff7, transparent 60%),
    radial-gradient(ellipse 60% 40% at 50% 110%, rgba(var(--accent-rgb),.16), transparent 70%),
    radial-gradient(ellipse 50% 50% at 85% -10%, rgba(var(--accent-rgb),.10), transparent 70%)}
#auth,#lobby{position:relative}
#auth > :not(.eh-sky),#lobby > :not(.eh-sky){position:relative;z-index:1}

/* логотип: чёрная дыра с диском и медленной орбитой */
.eh-logo{position:relative;width:104px;height:104px;margin:0 auto 6px}
.eh-logo svg{width:100%;height:100%;filter:drop-shadow(0 0 18px rgba(var(--accent-rgb),.35))}
.eh-orbit{position:absolute;inset:-6px;border-radius:50%;border:1px dashed rgba(var(--accent-rgb),.35);animation:ehSpin 40s linear infinite}
.eh-orbit::after{content:"";position:absolute;top:50%;left:-3px;width:6px;height:6px;border-radius:50%;background:var(--brass-hi);box-shadow:0 0 8px var(--brass)}
@keyframes ehSpin{to{transform:rotate(360deg)}}
.eh-title{font-family:var(--serif);font-size:30px;letter-spacing:1px;margin:4px 0 2px;color:var(--title);
  background:linear-gradient(90deg,var(--title),var(--brass-hi),var(--title));-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent}
.eh-slogan{font-family:var(--serif);font-style:italic;color:var(--brass);font-size:14px;letter-spacing:.2px}
#auth .authbox{width:min(360px,calc(100vw - 32px));backdrop-filter:blur(6px);background:color-mix(in srgb,var(--panel) 88%,transparent)}
#auth .sub{margin:6px 0 18px}

/* верхняя панель лобби */
.lbtop{background:color-mix(in srgb,var(--panel) 82%,transparent);backdrop-filter:blur(8px)}
.eh-brand{display:flex;align-items:center;gap:8px;font-family:var(--serif);font-size:18px;color:var(--title);letter-spacing:.4px}
.eh-brand svg{width:28px;height:28px}
.lbme{display:flex;align-items:center;gap:8px;padding:3px 12px 3px 3px!important;border-radius:999px!important;background:var(--panel-2)}
.lbme .ehava{width:28px;height:28px;border:0}
.lbme .who{color:var(--text);font-weight:600}
button.ghost{background:transparent!important;border-color:transparent!important;color:var(--muted)!important}
button.ghost:hover{color:var(--text)!important;background:var(--panel-2)!important}

/* раскладка */
#lobby .lobbywrap{grid-template-columns:minmax(0,1fr) 340px;gap:22px;padding:22px;align-items:start}
.lbmain{min-width:0}
.lbhero{display:flex;align-items:flex-end;justify-content:space-between;gap:16px;flex-wrap:wrap;margin-bottom:18px;padding:22px 24px;border-radius:var(--r-lg);border:1px solid var(--line);
  background:radial-gradient(ellipse 50% 120% at 100% 0%, rgba(var(--accent-rgb),.14), transparent 60%),color-mix(in srgb,var(--panel) 92%,transparent);box-shadow:var(--shadow-md)}
.lbhello{font-family:var(--serif);font-size:28px;color:var(--title);line-height:1.15}
.lbhero .eh-slogan{margin:4px 0 12px}
.lbchips{display:flex;flex-wrap:wrap;gap:6px}
.lbchip{display:inline-flex;align-items:center;gap:6px;padding:4px 11px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line);font-size:12.5px;color:var(--text)}
.lbchip.live{border-color:color-mix(in srgb,var(--ok) 60%,var(--line));color:var(--ok-text)}
.lbchip.live span{color:var(--ok);animation:ehPulse 1.8s ease-in-out infinite}
@keyframes ehPulse{50%{opacity:.35}}
.lbactions button{padding:9px 16px}
.lbbar{display:flex;align-items:center;gap:10px;margin:0 0 14px;flex-wrap:wrap}
.lbbar .seg{display:inline-flex;gap:2px;padding:3px;border-radius:999px;background:var(--panel);border:1px solid var(--line)}
/* круглые переключатели лобби и профиля; общий .seg (лоток костей и др.) не трогаем —
   раньше эти правила были без области и обнуляли отступы у кнопок лобби */
.lbbar .seg button,.seg.ph-tabs button,.seg.achfilter button{flex:0 0 auto;white-space:nowrap;border:0!important;background:transparent!important;border-radius:999px!important;padding:5px 14px!important;color:var(--muted)}
.lbbar .seg button.on{background:var(--panel-2)!important;color:var(--title)!important;box-shadow:inset 0 0 0 1px var(--line)}
.seg button .cnt{font-size:11px;opacity:.7;margin-left:4px}
#lbSearch{flex:1;min-width:160px;max-width:300px;margin-left:auto;border-radius:999px;padding:7px 14px;background:var(--panel);border:1px solid var(--line)}
.lbbar.few #lbSearch{display:none}

/* карточки кампаний */
#lobby .campgrid{grid-template-columns:repeat(auto-fill,minmax(250px,1fr));gap:16px}
#lobby .camp{position:relative;border-radius:var(--r-lg);background:var(--panel);border:1px solid var(--line);overflow:hidden;display:flex;flex-direction:column;
  animation:campIn .35s var(--ease) both;transition:transform .18s var(--ease),box-shadow .18s,border-color .18s}
@keyframes campIn{from{opacity:0;transform:translateY(8px)}}
#lobby .camp:hover{transform:translateY(-3px);box-shadow:var(--shadow-md),0 0 0 1px rgba(var(--accent-rgb),.35);border-color:rgba(var(--accent-rgb),.5)}
#lobby .camp.live{border-color:color-mix(in srgb,var(--ok) 45%,var(--line))}
#lobby .camp .cover{height:140px;position:relative;background-size:cover;background-position:center;cursor:pointer;border-bottom:1px solid var(--line)}
#lobby .camp .cover-mark{position:absolute;right:14px;bottom:12px;width:58px;height:58px;opacity:.85;transition:transform .6s var(--ease)}
#lobby .camp:hover .cover-mark{transform:rotate(-12deg) scale(1.08)}
.cbadge{position:absolute;top:10px;left:10px;font-size:11.5px;font-weight:600;padding:3px 9px;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;backdrop-filter:blur(4px);border:1px solid rgba(255,255,255,.12)}
.cbadge.gm{color:#ffe7a3}
.cbadge.live{left:auto;right:10px;display:flex;align-items:center;gap:6px;color:#c9f5d4}
.cbadge.live i{width:7px;height:7px;border-radius:50%;background:#4ade80;box-shadow:0 0 6px #4ade80;animation:ehPulse 1.8s ease-in-out infinite}
#lobby .camp .b{padding:12px 14px 14px;display:flex;flex-direction:column;gap:8px;flex:1}
#lobby .camp .nm{font-family:var(--serif);font-size:19px;color:var(--title);line-height:1.2;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
#lobby .camp .meta{display:flex;gap:6px;flex-wrap:wrap;color:var(--muted);font-size:12.5px;margin:0}
.people{display:flex;align-items:center}
.ehava{width:28px;height:28px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:none;overflow:hidden;
  background:var(--panel-2);color:#fff;font-weight:700;font-size:12px;border:2px solid var(--panel);position:relative}
.people .ehava + .ehava{margin-left:-8px}
.ehava img{width:100%;height:100%;object-fit:cover}
.ehava.on::after{content:"";position:absolute;right:-1px;bottom:-1px;width:9px;height:9px;border-radius:50%;background:#4ade80;border:2px solid var(--panel)}
.ehava.more{background:var(--panel-2);color:var(--muted);font-size:11px}
.people .pcount{margin-left:10px;font-size:12px;color:var(--muted)}
.cactions{display:flex;gap:8px;margin-top:auto}
.cactions .primary{flex:1;padding:8px 12px}
.cactions .icon{width:38px;padding:0!important;font-size:16px}
#lobby .camp-add{min-height:250px;align-items:center;justify-content:center;gap:6px;border:2px dashed var(--line);background:transparent;color:var(--muted);cursor:pointer;font:inherit;animation:none}
#lobby .camp-add:hover{border-color:var(--brass);color:var(--title);background:rgba(var(--accent-rgb),.05)}
.camp-add .plus{font-size:34px;line-height:1;color:var(--brass)}
.camp-add b{font-size:15px;color:var(--title)}
.lbempty{grid-column:1/-1;text-align:center;padding:40px 20px;border:1px dashed var(--line);border-radius:var(--r-lg);background:color-mix(in srgb,var(--panel) 85%,transparent)}
.lbempty-mark{width:96px;height:96px;margin-bottom:6px}
.lbempty h3{font-family:var(--serif);color:var(--title);font-size:22px;margin:4px 0}
.lbempty p{color:var(--muted);max-width:420px;margin:0 auto 14px}
.lbempty .rowbtns{justify-content:center}
.lbnone{grid-column:1/-1}

/* карточка профиля справа */
#lobby .lbside{padding:0;overflow:hidden;border-radius:var(--r-lg);background:var(--panel);border:1px solid var(--line);box-shadow:var(--shadow-md);position:sticky;top:0}
.pbanner{height:74px;background-size:cover}
.phead{display:flex;align-items:flex-end;gap:12px;padding:0 16px;margin-top:-42px}
.pname{padding-bottom:4px;min-width:0}
.pname h3{margin:0;font-family:var(--serif);font-size:21px;color:var(--title);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.prank{font-size:12.5px;color:var(--brass);font-weight:600}
.lbside > .xpbar{margin:12px 16px 4px}
.xpcap{font-size:11.5px;color:var(--muted);padding:0 16px}
.xpbar{height:7px;border-radius:999px;background:var(--panel-2);overflow:hidden;border:1px solid var(--line)}
.xpbar i{display:block;height:100%;border-radius:inherit;background:linear-gradient(90deg,var(--brass-dim),var(--brass-hi));box-shadow:0 0 8px rgba(var(--accent-rgb),.5);transition:width .6s var(--ease)}
.xpbar.thin{height:5px}
.pabout{margin:12px 16px 0;padding:9px 11px;border-radius:10px;background:var(--panel-2);font-size:13px;line-height:1.45;color:var(--text);font-style:italic;cursor:pointer;white-space:pre-line;
  display:-webkit-box;-webkit-line-clamp:3;-webkit-box-orient:vertical;overflow:hidden}
.pabout.empty{color:var(--muted);border:1px dashed var(--line);background:transparent}
.pabout.big{margin:0 0 14px;-webkit-line-clamp:unset;cursor:default}
.stattiles{display:grid;grid-template-columns:repeat(2,1fr);gap:8px;padding:12px 16px 0}
.ehprof .stattiles{grid-template-columns:repeat(4,1fr);padding:0;margin-bottom:6px}
.stile{display:flex;flex-direction:column;gap:1px;padding:9px 11px;border-radius:12px;background:var(--panel-2);border:1px solid var(--line);position:relative;overflow:hidden}
.stile .si{position:absolute;right:8px;top:6px;font-size:18px;opacity:.55}
.stile b{font-size:18px;color:var(--title);font-variant-numeric:tabular-nums}
.stile .sl{font-size:11.5px;color:var(--muted)}
.psec{padding:14px 16px 0}
.ehprof .psec{padding:14px 0 0}
.psec-h{display:flex;justify-content:space-between;align-items:baseline;margin-bottom:6px}
.psec-h b{font-family:var(--serif);font-size:15px;color:var(--title);font-weight:600}
.psec-h span{font-size:12px;color:var(--muted)}
.achrow{display:flex;flex-wrap:wrap;gap:6px;margin:10px 0}
.achmini{width:36px;height:36px;border-radius:10px;display:inline-flex;align-items:center;justify-content:center;font-size:19px;background:var(--panel-2);border:1px solid var(--line);cursor:default;transition:transform .15s var(--ease)}
.achmini:hover{transform:translateY(-2px) scale(1.06);border-color:var(--brass)}
.achmini.secret{background:radial-gradient(circle,rgba(var(--accent-rgb),.25),var(--panel-2));border-color:var(--brass-dim)}
.achmini.more{font-size:12px;color:var(--muted)}
.achnext{display:flex;gap:9px;align-items:center;margin:8px 0}
.achnext .ai{font-size:18px;width:30px;text-align:center;filter:grayscale(.6);opacity:.8}
.achnext .ac{flex:1;min-width:0}
.achnext .at{display:flex;justify-content:space-between;gap:6px;font-size:12.5px;margin-bottom:3px}
.achnext .at b{font-weight:600;color:var(--text);overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.achnext .at span{color:var(--muted);flex:none}
button.linkbtn{background:none!important;border:0!important;padding:4px 0!important;color:var(--brass)!important;font-weight:600}
button.linkbtn:hover{color:var(--brass-hi)!important}
.lbside > button.wide{display:block;width:calc(100% - 32px);margin:14px 16px 16px}
.lbside .medals{margin:0}

/* аватар в кольце уровня */
.lvlava{--sz:84px;position:relative;width:var(--sz);height:var(--sz);flex:none}
.lvlring{position:absolute;inset:0;border-radius:50%;
  background:conic-gradient(var(--brass-hi) calc(var(--pct) * 1%), color-mix(in srgb,var(--line) 70%,transparent) 0);
  -webkit-mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 3px));mask:radial-gradient(farthest-side,transparent calc(100% - 4px),#000 calc(100% - 3px));
  filter:drop-shadow(0 0 6px rgba(var(--accent-rgb),.45))}
.lvlava .ehava.big{position:absolute;inset:6px;width:auto;height:auto;font-size:calc(var(--sz) * .36);border:3px solid var(--panel);cursor:pointer;transition:filter .15s}
.lvlava .ehava.big:hover{filter:brightness(1.12)}
.lvlava .ehava.big.dragover{outline:2px dashed var(--brass);outline-offset:2px}
.lvlnum{position:absolute;right:-2px;bottom:2px;min-width:26px;height:26px;padding:0 6px;border-radius:999px;display:flex;align-items:center;justify-content:center;
  background:var(--brass);color:var(--on-accent);font-weight:800;font-size:12.5px;border:3px solid var(--panel);box-shadow:0 2px 8px rgba(0,0,0,.35)}

/* окно профиля */
#modalBody:has(> .ehprof){padding:0!important}
.ph-hero{position:relative;padding:22px 22px 18px;background-size:cover}
.ph-hero::after{content:"";position:absolute;inset:0;background:linear-gradient(180deg,transparent 30%,var(--panel) 100%);pointer-events:none}
.ph-in{position:relative;z-index:1;display:flex;align-items:center;gap:18px}
.ph-col{flex:1;min-width:0}
.ph-col h2{margin:0;font-family:var(--serif);font-size:28px;color:var(--title);text-shadow:0 2px 10px rgba(0,0,0,.5)}
.ph-col .xpbar{margin:8px 0 4px;max-width:420px}
.ph-col .xpcap{padding:0}
.ph-tabs{display:flex;width:max-content;max-width:calc(100% - 44px);margin:0 22px;padding:3px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line)}
.ph-body{padding:16px 22px 22px}
.ph-tabs button.on,.achfilter button.on{background:var(--brass)!important;color:var(--on-accent)!important;box-shadow:none}
.ph-row{margin:6px 0 12px}
.ph-color{display:flex;align-items:center;gap:10px;color:var(--muted);font-size:13px;cursor:pointer}
.ph-color input[type=color]{width:42px;height:32px;padding:2px;border-radius:8px;border:1px solid var(--line);background:var(--panel-2)}
.achfilter{display:inline-flex;margin-bottom:4px;padding:3px;border-radius:999px;background:var(--panel-2);border:1px solid var(--line);flex-wrap:wrap}
.achgrid{display:grid;grid-template-columns:repeat(auto-fill,minmax(220px,1fr));gap:8px}
.achtile{display:flex;gap:10px;align-items:flex-start;padding:10px 12px;border-radius:12px;background:var(--panel-2);border:1px solid var(--line);opacity:.72;transition:transform .15s var(--ease),opacity .15s}
.achtile:hover{opacity:1;transform:translateY(-1px)}
.achtile .ai{width:40px;height:40px;flex:none;border-radius:12px;display:flex;align-items:center;justify-content:center;font-size:21px;background:var(--panel);border:1px solid var(--line);filter:grayscale(1)}
.achtile .ac{flex:1;min-width:0}
.achtile b{display:block;color:var(--title);font-size:13.5px}
.achtile .ad{font-size:12px;color:var(--muted);line-height:1.35;margin:1px 0 5px}
.achtile .aw{font-size:11.5px;color:var(--muted);margin-top:3px}
.achtile.done{opacity:1;border-color:color-mix(in srgb,var(--brass) 45%,var(--line));background:linear-gradient(135deg,rgba(var(--accent-rgb),.10),var(--panel-2) 60%)}
.achtile.done .ai{filter:none;background:radial-gradient(circle,rgba(var(--accent-rgb),.25),var(--panel));border-color:var(--brass-dim)}
.achtile.done .aw{color:var(--brass)}
.achtile.locked .ai{filter:none;color:var(--muted)}
.achtile.locked .ad{font-style:italic}
.achtile.secret.done{background:linear-gradient(135deg,rgba(var(--accent-rgb),.2),var(--panel-2) 70%);box-shadow:0 0 0 1px rgba(var(--accent-rgb),.25),0 0 18px rgba(var(--accent-rgb),.12)}
.medallist{display:flex;flex-direction:column;gap:6px}
.medalcard{display:flex;gap:10px;align-items:center;padding:8px 11px;border-radius:12px;background:var(--panel-2);border:1px solid var(--line)}
.medalcard .mi{font-size:24px}
.medalcard b{color:var(--title)}

/* всплывающее «достижение открыто» */
#achHost{position:fixed;right:18px;bottom:18px;z-index:200;display:flex;flex-direction:column;gap:10px;align-items:flex-end;pointer-events:none}
.achpop{pointer-events:auto;cursor:pointer;display:flex;gap:12px;align-items:center;min-width:260px;max-width:min(360px,calc(100vw - 36px));padding:12px 16px 12px 12px;border-radius:16px;
  background:color-mix(in srgb,var(--panel) 92%,transparent);backdrop-filter:blur(8px);border:1px solid var(--brass-dim);box-shadow:var(--shadow-lg),0 0 24px rgba(var(--accent-rgb),.25);
  animation:achIn .5s var(--ease) both}
.achpop.out{animation:achOut .4s ease-in both}
.achpop .ai{width:48px;height:48px;flex:none;border-radius:14px;display:flex;align-items:center;justify-content:center;font-size:26px;
  background:radial-gradient(circle,rgba(var(--accent-rgb),.35),var(--panel-2));border:1px solid var(--brass);animation:achGlow 1.6s ease-in-out 2}
.achpop .ak{font-size:11px;text-transform:uppercase;letter-spacing:.08em;color:var(--brass);font-weight:700}
.achpop b{display:block;color:var(--title);font-size:15px}
.achpop .ad{font-size:12px;color:var(--muted)}
.achpop.secret{border-color:var(--brass);background:radial-gradient(ellipse at 0% 50%,rgba(var(--accent-rgb),.22),color-mix(in srgb,var(--panel) 94%,transparent) 70%)}
@keyframes achIn{from{opacity:0;transform:translateX(30px) scale(.96)}}
@keyframes achOut{to{opacity:0;transform:translateX(30px)}}
@keyframes achGlow{50%{box-shadow:0 0 18px rgba(var(--accent-rgb),.7)}}

@media (max-width:1000px){
  #lobby .lobbywrap{grid-template-columns:1fr;padding:16px;gap:16px}
  #lobby .lbside{position:static}
  .ehprof .stattiles{grid-template-columns:repeat(2,1fr)}
}
@media (max-width:560px){
  .lbhero{padding:16px}
  .lbhello{font-size:22px}
  .lbactions{width:100%}
  .lbactions button{flex:1}
  .lbme .who{display:none}
  .lbme{padding:3px!important}
  .ph-in{flex-direction:column;text-align:center}
  .ph-col .xpbar{margin-left:auto;margin-right:auto}
  .ph-tabs{margin:0 16px}
  .ph-body{padding:14px 16px 18px}
  #lbSearch{max-width:none;margin-left:0}
}
@media (prefers-reduced-motion:reduce){
  .eh-orbit,.lbchip.live span,.cbadge.live i,#lobby .camp,.achpop,.achpop .ai{animation:none}
}

/* ---------- окно «Новая кампания» / «Настройки кампании» ---------- */
#modalBody:has(> .campset){padding:16px 18px 18px!important}
.campset .cs-cover{position:relative;aspect-ratio:16/7;border-radius:var(--r-lg);border:1px solid var(--line);background-size:cover;background-position:center;cursor:pointer;overflow:hidden;transition:box-shadow .15s,border-color .15s}
.campset .cs-cover:hover,.campset .cs-cover.drag{border-color:var(--brass);box-shadow:0 0 0 3px rgba(var(--accent-rgb),.2)}
.campset .cs-cover .cover-mark{position:absolute;right:18px;bottom:16px;width:70px;height:70px}
.campset .cs-cover-hint{position:absolute;left:12px;bottom:10px;padding:4px 10px;border-radius:999px;background:rgba(0,0,0,.55);color:#fff;font-size:12px;backdrop-filter:blur(4px);opacity:.9}
.campset .cs-cover.has .cs-cover-hint{opacity:0;transition:opacity .15s}
.campset .cs-cover.has:hover .cs-cover-hint{opacity:.9}
.campset .cs-cover-btns{margin:8px 0 14px}
.campset .cs-row{display:flex;align-items:center;gap:10px;margin:2px 0 14px;flex-wrap:wrap}
.campset .cs-row label{margin:0}
.campset .cs-seats{width:72px;text-align:center}
.campset .cs-block{border:1px solid var(--line);border-radius:var(--r-lg);padding:12px 14px;margin-bottom:12px;background:color-mix(in srgb,var(--panel-2) 55%,transparent)}
.campset .cs-cap{font-family:var(--serif);font-size:15px;color:var(--title);margin-bottom:8px}
.campset .cs-choice{display:grid;grid-template-columns:1fr 1fr;gap:8px;margin-bottom:8px}
.campset .cs-opt{display:flex;gap:10px;align-items:flex-start;text-align:left;padding:10px 12px!important;border-radius:12px!important;background:var(--panel)!important;border:1px solid var(--line)!important;white-space:normal;height:auto}
.campset .cs-opt .ci{font-size:22px;line-height:1}
.campset .cs-opt .ct{display:flex;flex-direction:column;gap:2px}
.campset .cs-opt b{color:var(--title);font-size:13.5px}
.campset .cs-opt .ct span{font-size:12px;color:var(--muted);font-weight:400;line-height:1.35}
.campset .cs-opt.on{border-color:var(--brass)!important;box-shadow:0 0 0 1px var(--brass),0 0 14px rgba(var(--accent-rgb),.18);background:linear-gradient(135deg,rgba(var(--accent-rgb),.12),var(--panel) 70%)!important}
.campset .chk{display:flex;align-items:center;gap:8px;margin:4px 0;font-size:13px;cursor:pointer}
.campset .chk input{width:auto;margin:0}
.campset .chk.off{opacity:.45}
.campset .cs-perms{display:grid;grid-template-columns:1fr 1fr;gap:0 14px}
.campset .cs-go{display:block;width:100%;padding:10px!important;font-size:15px;margin-top:4px}
#lobby .camp .cdesc{font-size:12.5px;color:var(--text);opacity:.8;line-height:1.35;margin:-2px 0 0;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}
@media (max-width:560px){
  .campset .cs-choice,.campset .cs-perms{grid-template-columns:1fr}
}

/* ---------- иконки вместо эмодзи (public/js/icons.js) ---------- */
.ico{display:inline-block;width:1.15em;height:1.15em;vertical-align:-.2em;flex:none;fill:none;stroke:currentColor;stroke-width:2;stroke-linecap:round;stroke-linejoin:round;overflow:visible}
.ico.ico-fill{fill:currentColor}
/* кнопка с иконкой: значок и подпись в одну строку, ровно по центру */
button:has(> .ico){display:inline-flex;align-items:center;justify-content:center;gap:.4em;white-space:nowrap}
.topbar button:has(> .ico){flex:none}
.seat{white-space:nowrap}
@media (max-width:700px){
  /* на узком экране плашка страницы и ползунок масштаба наезжали на панель
     страниц (масштаб — щипком или колёсиком), а кнопки шапки уезжали за край */
  .pagebadge,.stagehud .chip:has(input[type=range]){display:none!important}
  #btnBack,#btnDice3d,#btnVoice{font-size:0;gap:0;padding:6px 8px}
  #btnBack .ico,#btnDice3d .ico,#btnVoice .ico{width:16px;height:16px}
}

/* ---------- настройки звука ---------- */
.sndset{display:flex;flex-direction:column;gap:6px;margin:6px 0 12px}
.sndrow{display:grid;grid-template-columns:minmax(150px,1fr) minmax(90px,1.3fr) 32px;align-items:center;gap:10px;padding:6px 8px;border-radius:var(--r);background:var(--panel-2);border:1px solid var(--line);transition:opacity .15s}
.sndrow.off{opacity:.55}
.sndrow.sndmaster{grid-template-columns:minmax(150px,1fr) minmax(90px,1.3fr) 32px;background:transparent;border-color:transparent;padding:4px 8px;font-weight:600}
.sndrow.sndmaster input[type=range]{grid-column:2/4}
.sndrow input[type=range]{width:100%;accent-color:var(--brass);margin:0}
label.sndtog{display:flex;align-items:center;gap:8px;cursor:pointer;font-size:13px;margin:0;color:var(--text);line-height:1.2}
label.sndtog input{margin:0;accent-color:var(--brass);width:16px!important;height:16px;flex:none;padding:0}
.sndtest{width:32px;height:28px;padding:0!important;justify-content:center}
span.sndtest{display:block}
.sndamb{display:flex;flex-direction:column;gap:6px;margin-top:6px;padding-top:8px;border-top:1px dashed var(--line)}
.sndsrc{display:flex;flex-wrap:wrap;align-items:center;gap:8px;padding:0 8px}
.sndsrc .hint{flex:1 1 160px;margin:0}
.sndset > .hint{padding:0 8px}
.sndset > .hint button{margin-left:6px}
@media (max-width:560px){.sndrow{grid-template-columns:1fr 32px}.sndrow input[type=range]{grid-column:1/2;grid-row:2}.sndrow .sndtest{grid-row:1/3;grid-column:2}.sndrow.sndmaster input[type=range]{grid-column:1/3}}
