/* ТОКЕНЫ ДИЗАЙН-СИСТЕМЫ GG-SHOT
   Извлечены из боевых стилей мини-аппки.
   Меняя значения здесь, вы меняете вид всего приложения разом.
   Две системы живут рядом:
     --brand-* / --bg-* / --text-*  — собственные переменные GG
     --background / --primary / ... — слой shadcn/ui (oklch)
*/

:root{
  --brand-green: #3DDD71;
  --brand-mint: #00FFA3;
  --brand-green-mid: #2BC360;
  --brand-green-deep: #1a6e35;
  --brand-glow: rgba(0, 255, 163, .35);
  --brand-glow-soft: rgba(0, 255, 163, .1);
  --bg: #000000;
  --bg-1: #0a0c0a;
  --bg-2: #111311;
  --bg-3: #161a16;
  --bg-panel: #0e100e;
  --bg-inset: #07090a;
  --line: #1d211d;
  --line-bright: #2a2f2a;
  --text: #e8efe8;
  --text-dim: #8a968a;
  --text-muted: #6b736b;
  --red: #ff5060;
  --red-mid: #e83a4e;
  --red-glow: rgba(255, 80, 96, .3);
  --red-dim: #5a1a24;
  --blue: #4aa7ff;
  --display: "NeueMontreal", "Space Grotesk", ui-sans-serif, system-ui, sans-serif;
  --mono: "JetBrains Mono", ui-monospace, "SF Mono", Menlo, monospace;
  --radius-lg: 22px;
  --radius-md: 14px;
  --radius-sm: 8px
}

:root{
  --radius:.5rem;
  --background:oklch(12% .005 250);
  --foreground:oklch(90% .005 250);
  --card:oklch(15% .005 250);
  --card-foreground:oklch(90% .005 250);
  --popover:oklch(15% .005 250);
  --popover-foreground:oklch(90% .005 250);
  --primary:oklch(65% .16 150);
  --primary-foreground:oklch(10% 0 0);
  --secondary:oklch(18% .005 250);
  --secondary-foreground:oklch(75% .05 150);
  --muted:oklch(20% .005 250);
  --muted-foreground:oklch(55% .01 250);
  --accent:oklch(18% .01 150);
  --accent-foreground:oklch(75% .08 150);
  --destructive:oklch(60% .2 25);
  --destructive-foreground:oklch(98% 0 0);
  --border:oklch(25% .005 250);
  --input:oklch(22% .005 250);
  --ring:oklch(65% .16 150);
  --chart-1:oklch(65% .16 150);
  --chart-2:oklch(60% .2 25);
  --chart-3:oklch(58% .14 250);
  --chart-4:oklch(72% .14 80);
  --chart-5:oklch(50% .15 290);
  --sidebar:oklch(13% .005 250);
  --sidebar-foreground:oklch(90% .005 250);
  --sidebar-primary:oklch(65% .16 150);
  --sidebar-primary-foreground:oklch(10% 0 0);
  --sidebar-accent:oklch(18% .01 150);
  --sidebar-accent-foreground:oklch(75% .08 150);
  --sidebar-border:oklch(25% .005 250);
  --sidebar-ring:oklch(65% .16 150)
}

:root{
  --text-muted: #8a968a !important;
}

:root{
  --z-base: 0;
  --z-sticky: 10;
  --z-nav: 50;
  --z-overlay: 100;
  --z-modal: 500;
  --z-toast: 1000;
}

@font-face{font-family:'JetBrains Mono';font-style:normal;font-display:swap;font-weight:400;src:url(fonts/jetbrains-mono-latin-400-normal.woff2) format('woff2')}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-display:swap;font-weight:500;src:url(fonts/jetbrains-mono-latin-500-normal.woff2) format('woff2')}
@font-face{font-family:'JetBrains Mono';font-style:normal;font-display:swap;font-weight:600;src:url(fonts/jetbrains-mono-latin-600-normal.woff2) format('woff2')}
@font-face{font-family:'Space Grotesk';font-style:normal;font-display:swap;font-weight:300 700;src:url(fonts/spacegrotesk-var.woff2) format('woff2')}
/* kit app.css (дословно) */
@keyframes fadeIn{ 0%{ opacity:0; transform:translateY(6px) } to{ opacity:1; transform:translateY(0) } }
@keyframes slideUp{ 0%{ transform:translateY(100%) } to{ transform:translateY(0) } }
.card{background:linear-gradient(180deg,var(--bg-1) 0%,var(--bg-panel) 100%); border:1px solid var(--line); border-radius:var(--radius-lg); padding:14px 16px; position:relative; overflow:hidden}
.card:before{content:""; position:absolute; top:0; left:0; right:0; height:1px; background:linear-gradient(90deg,transparent,rgba(0,255,163,.35),transparent); opacity:.6}
.status-pill{display:inline-flex; align-items:center; gap:6px; padding:4px 10px; background:#3ddd7114; border:1px solid rgba(61,221,113,.3); border-radius:100px; font-family:var(--mono); font-size:10px; letter-spacing:.1em; color:var(--brand-green); text-transform:uppercase}
.status-pill:before{content:""; width:6px; height:6px; background:var(--brand-green); border-radius:50%; box-shadow:0 0 6px var(--brand-mint); animation:pulse 2s infinite}
.status-pill.inactive{background:#ff506014; border-color:#ff50604d; color:var(--red)}
.status-pill.inactive:before{background:var(--red); box-shadow:0 0 6px var(--red-glow); animation:none}
.btn{display:flex; align-items:center; justify-content:center; gap:8px; width:100%; padding:11px 16px; border-radius:var(--radius-md); border:1px solid var(--line-bright); background:linear-gradient(180deg,var(--bg-2) 0%,var(--bg-panel) 100%); color:var(--text); font-family:var(--display); font-size:12px; font-weight:600; letter-spacing:.08em; cursor:pointer; transition:transform .1s,border-color .2s; text-transform:uppercase}
.btn:active{transform:translateY(1px)}
.btn:hover{border-color:#3ddd714d}
.btn svg{flex-shrink:0}
.toggle-row{display:flex; align-items:center; justify-content:space-between; padding:12px 2px; border-bottom:1px solid var(--line)}
.toggle-row:last-child{border-bottom:none}
.toggle-row-left{display:flex; align-items:center; gap:10px}
.toggle-row-left svg{color:var(--text-dim); flex-shrink:0}
.toggle-row .name{font-size:13.5px; color:var(--text); font-weight:500}
.toggle{position:relative; width:42px; height:24px; background:var(--bg-inset); border:1px solid var(--line-bright); border-radius:100px; cursor:pointer; flex-shrink:0; transition:background .2s,border-color .2s}
.toggle-knob{position:absolute; top:2px; left:2px; width:18px; height:18px; background:#707570; border-radius:50%; transition:left .2s,background .2s}
.toggle.on{background:#00ffa32e; border-color:var(--brand-green-mid)}
.toggle.on .toggle-knob{left:20px; background:var(--brand-mint); box-shadow:0 0 10px var(--brand-glow)}
.modal-backdrop{position:fixed; inset:0; background:#000000b8; backdrop-filter:blur(6px); -webkit-backdrop-filter:blur(6px); z-index:100; display:none; align-items:flex-end; justify-content:center; animation:fadeIn .2s ease-out}
.modal-backdrop.open{display:flex}
.modal-sheet{width:100%; max-width:440px; background:linear-gradient(180deg,#0f120f 0%,var(--bg-panel) 100%); border-top:1px solid var(--line-bright); border-left:1px solid var(--line); border-right:1px solid var(--line); border-radius:22px 22px 0 0; padding:8px 16px calc(100px + env(safe-area-inset-bottom,0)); max-height:90vh; overflow-y:auto; animation:slideUp .28s cubic-bezier(.2,.8,.2,1); position:relative}
.modal-grabber{width:40px; height:4px; background:var(--line-bright); border-radius:100px; margin:6px auto 14px}
.modal-head{display:flex; align-items:center; gap:12px; padding-bottom:14px; border-bottom:1px solid var(--line); margin-bottom:16px}
.modal-title{font-size:17px; font-weight:600; color:var(--text); letter-spacing:-.02em}
.modal-close{margin-left:auto; width:30px; height:30px; background:var(--bg-inset); border:1px solid var(--line); border-radius:8px; display:grid; place-items:center; cursor:pointer; color:var(--text-dim)}
.form-field{margin-bottom:14px}
.form-label{font-family:var(--mono); font-size:10.5px; color:var(--text-dim); letter-spacing:.1em; text-transform:uppercase; margin-bottom:6px; display:flex; justify-content:space-between}
.form-input{width:100%; background:transparent; border:none; outline:none; padding:13px 14px; color:var(--text); font-family:var(--mono); font-size:13px; letter-spacing:-.01em}
.form-input::placeholder{color:var(--text-muted)}
.quick-grid{display:grid; grid-template-columns:repeat(3,1fr); gap:8px}
.quick-card{padding:12px 10px; background:linear-gradient(180deg,var(--bg-1) 0%,var(--bg-panel) 100%); border:1px solid var(--line); border-radius:var(--radius-md); display:flex; flex-direction:column; align-items:center; text-align:center; gap:6px; cursor:pointer; transition:border-color .2s,transform .1s}
.quick-card:hover{border-color:#3ddd7140}
.quick-card:active{transform:translateY(1px)}
.quick-ico{width:36px; height:36px; border-radius:10px; background:var(--bg-inset); border:1px solid var(--line); display:grid; place-items:center; color:var(--brand-green); flex-shrink:0}
.quick-text{display:flex; flex-direction:column; gap:2px; align-items:center}
.quick-text .title{font-size:12.5px; font-weight:600; letter-spacing:-.01em; color:var(--text)}
.quick-text .sub{font-family:var(--mono); font-size:9px; color:var(--text-muted); letter-spacing:.05em; text-transform:uppercase; white-space:nowrap}
.tp-grid-v2{display:grid; grid-template-columns:1fr 1fr; gap:6px; margin-bottom:8px}
.tp-cell-v2{padding:11px 14px; background:var(--bg-inset); border:1px solid var(--line); border-radius:10px; position:relative; overflow:hidden; display:flex; align-items:center; justify-content:space-between; gap:6px; min-width:0}
.tp-cell-v2:before{content:""; position:absolute; left:0; top:0; bottom:0; width:2px; background:var(--text-dim); opacity:.4}
.tp-cell-v2 .lbl{font-family:var(--mono); font-size:9.5px; color:var(--text-dim); letter-spacing:.1em; text-transform:uppercase; font-weight:600; white-space:nowrap; flex-shrink:0}
.tp-cell-v2 .prc{font-family:var(--mono); font-size:11px; font-weight:600; color:var(--text); letter-spacing:-.01em; text-align:right; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; min-width:0}
.tp-cell-v2.hit:before{background:var(--brand-green); opacity:.7}
.tp-cell-v2.hit .lbl{color:var(--brand-green)}
.entry-cell{background:#6495ed0a; border-color:#6495ed2e}
.entry-cell:before{background:#6495ed99; opacity:.8}
.entry-cell .lbl{color:#6495edd9}
.entry-cell .prc{color:var(--text)}
.sl-cell-v2{background:#ff50600a; border-color:#ff506026}
.sl-cell-v2:before{background:#ff506080; opacity:.7}
.sl-cell-v2 .lbl,.sl-cell-v2 .prc{color:#ff5060b3}
.mini-switch{display:inline-flex; gap:2px; padding:2px; background:var(--bg-inset); border:1px solid var(--line); border-radius:8px}
.mini-switch-btn{padding:6px 10px; background:transparent; border:none; color:var(--text-muted); font-family:var(--mono); font-size:9.5px; font-weight:600; letter-spacing:.06em; cursor:pointer; border-radius:5px; transition:color .15s,background .15s; min-height:28px; touch-action:manipulation}
.mini-switch-btn:hover{color:var(--text-dim)}
.mini-switch-btn.active{color:var(--brand-mint); background:#00ffa314}
.bottom-nav{position:fixed; left:50%; bottom:calc(12px + env(safe-area-inset-bottom,0px)); transform:translate(-50%); width:calc(100% - 24px); max-width:416px; background:#0a0c0ae0; backdrop-filter:blur(14px); -webkit-backdrop-filter:blur(14px); border:1px solid var(--line-bright); border-radius:18px; display:grid; grid-template-columns:repeat(4,1fr); padding:8px 6px; z-index:50; box-shadow:0 10px 30px #0009,0 0 0 1px #00ffa30d}
.nav-btn{display:flex; flex-direction:column; align-items:center; justify-content:center; gap:4px; padding:8px 4px; background:transparent; border:none; color:var(--text-muted); font-family:var(--mono); font-size:10px; letter-spacing:.1em; text-transform:uppercase; cursor:pointer; border-radius:12px; transition:color .2s,background .2s; position:relative}
.nav-btn:hover{color:var(--text-dim)}
.nav-btn.active{color:var(--brand-mint); background:#00ffa314}
.nav-btn.active:after{content:""; position:absolute; bottom:2px; left:50%; transform:translate(-50%); width:20px; height:2px; border-radius:2px; background:var(--brand-mint); box-shadow:0 0 6px var(--brand-glow)}
.nav-btn.active svg{filter:drop-shadow(0 0 6px var(--brand-glow))}
.sort-pill{margin-left:auto; padding:7px 12px; background:var(--bg-inset); border:1px solid var(--line-bright); border-radius:8px; font-family:var(--mono); font-size:11px; color:var(--text-dim); letter-spacing:.05em; cursor:pointer; display:flex; align-items:center; gap:6px}
.dir-pill{display:inline-flex; align-items:center; gap:4px; padding:3px 8px; font-family:var(--mono); font-size:10px; letter-spacing:.1em; text-transform:uppercase; border-radius:6px; border:1px solid; font-weight:600}
.dir-pill.long{color:var(--brand-green); background:#3ddd7114; border-color:#3ddd714d}
.dir-pill.short{color:var(--red); background:#ff506014; border-color:#ff50604d}
.tf-pill{padding:3px 8px; background:var(--bg-inset); border:1px solid var(--line); border-radius:6px; font-family:var(--mono); font-size:10px; color:var(--text-dim); letter-spacing:.05em}
.time-pill{display:inline-flex; align-items:center; gap:4px; font-family:var(--mono); font-size:10px; color:var(--text-muted); padding:3px 4px; white-space:nowrap; flex-shrink:0}
.kpi-label{font-family:var(--mono); font-size:10px; color:var(--text-muted); letter-spacing:.1em; text-transform:uppercase; margin-bottom:6px}
.screener-search{display:flex; align-items:center; gap:8px; padding:10px 14px; background:var(--bg-inset); border:1px solid var(--line); border-radius:var(--radius-md)}
.screener-search input{flex:1; background:transparent; border:none; outline:none; color:var(--text); font-family:var(--display); font-size:13px}
.screener-search input::placeholder{color:var(--text-muted)}
.screener-search svg{color:var(--text-muted); flex-shrink:0}
.gg-sort-menu{position:absolute; top:calc(100% + 6px); right:0; z-index:50; display:flex; flex-direction:column; min-width:180px; background:var(--bg-panel); border:1px solid var(--line); border-radius:10px; padding:6px; box-shadow:0 8px 24px rgba(0,0,0,0.5);}
.gg-sort-option{background:transparent; border:none; text-align:left; font-family:var(--mono); font-size:12px; letter-spacing:.04em; color:var(--text-dim); padding:9px 10px; border-radius:6px; cursor:pointer; transition:background .12s, color .12s;}
.gg-sort-option:hover{background:rgba(255,255,255,.04); color:var(--text)}
.gg-sort-option.active{color:var(--brand-mint); background:rgba(0,255,163,.06)}
.sort-pill{cursor:pointer}
.dir-pill svg{display:none !important}
.nav-btn{padding: 10px 6px !important; font-size: 11px !important;}
.bottom-nav{background: rgba(10, 12, 14, 0.55); backdrop-filter: blur(24px) saturate(180%); -webkit-backdrop-filter: blur(24px) saturate(180%); border: 1px solid rgba(255, 255, 255, 0.06); box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.08), inset 0 -1px 0 rgba(0, 0, 0, 0.4), 0 12px 40px rgba(0, 0, 0, 0.55), 0 0 0 1px rgba(0, 255, 163, 0.04); border-radius: 22px;}
.bottom-nav::before{content: ""; position: absolute; inset: 0; border-radius: inherit; background: linear-gradient( 135deg, rgba(255, 255, 255, 0.04) 0%, rgba(255, 255, 255, 0) 45%, rgba(255, 255, 255, 0) 100% ); pointer-events: none;}
.status-pill::before{content:none !important; display:none !important; animation:none !important}
/* Раскладка графика v2. Цвета, шрифты и радиусы — только токены кита (tokens.css); элементы — классы кита
   (nav-btn, mini-switch, sort-pill, gg-sort-menu, gg-sort-option, modal-*, toggle-*, quick-*, screener-search,
   tp-cell-v2, sl-cell-v2, entry-cell, status-pill, time-pill, dir-pill, tf-pill, kpi-label), правила вынуты
   из app.css как есть (build_css.py). Здесь — только раскладка и размеры под панель терминала. */

/* живые правила шапки карточки (app-styles.css боевого бандла) */
.signal-ticker { color:var(--text); font-size:20px; font-weight:600; letter-spacing:-.01em; line-height:1 }
.sig-quote { font-family:var(--mono); font-size:12px; line-height:1; color:var(--text-muted); margin-left:1px }

html, body { height:100%; margin:0; background:var(--bg); overscroll-behavior:none }
/* body кита (app.css) */
body { font-family:var(--display); color:var(--text); font-size:14px; letter-spacing:-.01em; -webkit-font-smoothing:antialiased }
body { padding-bottom:0; overflow:hidden; position:fixed; inset:0; -webkit-user-select:none; user-select:none; -webkit-touch-callout:none }
button { font:inherit; -webkit-tap-highlight-color:transparent }
input { -webkit-user-select:text; user-select:text }

.cx-app { position:absolute; inset:0; display:flex; flex-direction:column; background:var(--bg) }
.cx-grow { flex:1 }

/* ── верхняя панель ── */
.cx-top { flex:0 0 auto; display:flex; align-items:center; gap:2px; height:48px; padding:env(safe-area-inset-top,0px) 8px 0;
  box-sizing:content-box; border-bottom:1px solid var(--line); background:var(--bg) }
.cx-sym { display:flex; align-items:baseline; gap:6px; padding:6px 6px 6px 4px; background:transparent; border:none; color:var(--text);
  cursor:pointer; touch-action:manipulation; border-radius:var(--radius-sm); flex-shrink:0 }
.cx-sym .signal-ticker { font-size:18px }
.cx-sym .dir-pill { align-self:center; margin-left:4px }
.cx-sym svg { align-self:center; color:var(--text-dim) }
.cx-sep { width:1px; height:22px; background:var(--line); margin:0 6px; flex-shrink:0 }
.cx-tfs .mini-switch-btn { min-width:40px }
.cx-tfbtn.sort-pill { margin-left:0; padding:7px 9px; min-height:34px; box-sizing:border-box; color:var(--text) }
.cx-tfbtn svg { color:var(--text-dim) }

/* кнопки-значки панелей: nav-btn кита без подписи, квадрат под палец/мышь */
.nav-btn.cx-tb { flex-direction:row; gap:6px; width:36px; height:36px; padding:0 !important; border-radius:var(--radius-sm); flex-shrink:0 }
.nav-btn.cx-tb-txt { width:auto; padding:0 10px !important; font-family:var(--display); font-size:13px !important; letter-spacing:0; text-transform:none }
.nav-btn.cx-tb:disabled, .nav-btn:disabled { opacity:.45; cursor:default }
.nav-btn.cx-tb.active:after { bottom:1px }

/* ── тело: слева рисование, по центру график, справа сигнал ── */
.cx-body { flex:1 1 auto; display:flex; min-height:0 }
.cx-left { flex:0 0 48px; display:flex; flex-direction:column; align-items:center; gap:2px; padding:6px 0; border-right:1px solid var(--line); overflow-y:auto; scrollbar-width:none }
.cx-left .nav-btn.cx-tb { width:38px; height:38px }
.cx-hsep { width:24px; height:1px; background:var(--line); margin:6px 0; flex-shrink:0 }
.cx-main { flex:1 1 auto; display:flex; flex-direction:column; min-width:0 }
.cx-stage { flex:1 1 auto; position:relative; min-height:0 }
.cx-auto { position:absolute; right:6px; bottom:30px; z-index:5; min-height:26px; padding:4px 10px }
.cx-auto[hidden] { display:none !important }
/* шестерёнка настроек шкалы — в углу под шкалой цены, как у TV */
.cx-scale { position:absolute; right:2px; bottom:2px; z-index:5; width:26px; height:26px; min-width:0; min-height:0; padding:0 }
.cx-chart { position:absolute; inset:0; touch-action:none; z-index:1 }
/* qafix 17.10 (QA №5): у пары на этом ТФ нет свечей — надпись по центру поля графика, как «No data here» у TV */
.cx-nodata { position:absolute; top:0; bottom:0; left:0; right:var(--ax, 64px); z-index:2; display:flex; align-items:center; justify-content:center;
  pointer-events:none; color:var(--text-dim); font-size:14px }
.cx-nodata[hidden] { display:none }

/* водяной знак пары: цвет фона-3 на чёрном — виден, но не спорит со свечами */
.cx-wm { position:absolute; inset:0; z-index:0; display:flex; flex-direction:column; align-items:center; justify-content:center; pointer-events:none;
  color:var(--bg-2); font-family:var(--display); font-weight:600; letter-spacing:-.03em; line-height:1; font-size:clamp(40px, 8vw, 128px) }
.cx-wm #wmB { font-size:.38em; margin-top:.25em; letter-spacing:0 }
/* 16.10 «вид как в TradingView»: у TV водяного знака по умолчанию нет */
.cx-wm { display:none }

.cx-foot { flex:0 0 30px; display:flex; align-items:center; gap:4px; padding:0 8px; border-top:1px solid var(--line) }
.cx-foot .mini-switch-btn { min-height:24px; padding:4px 8px }
.cx-clock { font-family:var(--mono); font-size:11px; color:var(--text-muted); font-variant-numeric:tabular-nums }

.cx-right { flex:0 0 300px; display:none; border-left:1px solid var(--line); overflow-y:auto; scrollbar-width:thin }
.cx-app.panel-on .cx-right { display:block }
.cx-sec { padding:14px; border-bottom:1px solid var(--line) }
.cx-sig-head { display:flex; align-items:baseline; gap:6px; margin-bottom:10px }
.cx-sig-head .tf-pill, .cx-sig-head .dir-pill { align-self:center }
.cx-sig-head .tf-pill { margin-left:6px }
.cx-sig-meta { display:flex; align-items:center; gap:6px; flex-wrap:wrap; margin-bottom:12px }
.cx-sig-meta .time-pill { padding-left:0 }
.cx-sec > .tp-cell-v2 { margin-bottom:6px }

/* список сигналов (панель справа и лист на телефоне) */
.cx-wl-row { display:flex; align-items:center; gap:6px; width:100%; padding:11px 2px; background:transparent; border:none; border-bottom:1px solid var(--line);
  color:var(--text); cursor:pointer; text-align:left; touch-action:manipulation }
.cx-wl-row:last-child { border-bottom:none }
.cx-wl-row .sym { display:flex; align-items:baseline; min-width:0 }
.cx-wl-row .signal-ticker { font-size:15px }
.cx-right .cx-wl-row .sig-quote { display:none }
.cx-wl-row .sig-quote { font-size:10.5px }
.cx-wl-row.active .signal-ticker { color:var(--brand-mint) }
.cx-wl-row .px { margin-left:auto; font-family:var(--mono); font-size:12px; color:var(--text); font-variant-numeric:tabular-nums }
.cx-wl-row .pc { min-width:56px; text-align:right; font-family:var(--mono); font-size:11px; font-variant-numeric:tabular-nums; color:var(--text-dim) }
.cx-wl-row .pc.up { color:var(--brand-green) }
.cx-wl-row .pc.dn { color:var(--red) }

/* ── над графиком: меню выбранного рисунка и активный инструмент ── */
.cx-float { position:absolute; top:48px; left:50%; transform:translateX(-50%); z-index:6; display:none; align-items:center; gap:2px;
  padding:3px 4px 3px 12px; background:var(--bg-1); border:1px solid var(--line-bright); border-radius:var(--radius-sm) }
.cx-float.on { display:flex }
/* qafix 17.10: на компьютере меню рисунка — под строкой GG-Shøt (--legB ставит main.js), не поверх её шестерёнки и глаза */
.cx-float { top:max(48px, var(--legB, 48px)) }
.cx-float .t { font-family:var(--mono); font-size:11px; color:var(--text-dim); white-space:nowrap; margin-right:6px }
.cx-pill { position:absolute; bottom:40px; left:50%; transform:translate(-50%); z-index:5; display:none; align-items:center; gap:8px;
  padding:4px 4px 4px 12px; background:var(--bg-1); border:1px solid var(--line-bright); border-radius:100px }
.cx-pill.on { display:flex }
.cx-pill .t { font-family:var(--mono); font-size:11px; color:var(--brand-mint); white-space:nowrap }
.cx-pill .modal-close { margin-left:0; width:28px; height:28px; border-radius:100px }

/* ── выпадающее меню: gg-sort-menu кита, привязано к кнопке ── */
.gg-sort-menu.cx-menu { position:fixed; top:0; left:0; right:auto; display:none; max-height:72vh; overflow-y:auto; min-width:200px; z-index:90 }
.cx-menu.on { display:flex }
.cx-opt { display:flex; align-items:center; gap:10px; min-height:36px; touch-action:manipulation }
.cx-opt .ico { width:20px; display:grid; place-items:center; color:var(--text-dim) }
.cx-opt.active .ico { color:var(--brand-mint) }
.cx-opt .lb { white-space:nowrap }
.cx-opt .ck { margin-left:auto; padding-left:16px; color:var(--brand-mint) }
.cx-menu-sep { height:1px; background:var(--line); margin:4px 2px }
.cx-menu-head { margin:6px 10px 4px }

/* ── листы ── */
.cx-sheet .modal-sheet { padding-bottom:calc(24px + env(safe-area-inset-bottom,0px)); max-height:80vh }
.cx-sheet .kpi-label { margin:16px 2px 8px }
.cx-sheet .cx-sheet-body > .kpi-label:first-child, .cx-sheet #indList > .kpi-label:first-child { margin-top:4px }
.cx-sheet .quick-grid { grid-template-columns:repeat(4,1fr) }
.cx-sheet .quick-card { padding:10px 4px; touch-action:manipulation }
.cx-sheet .quick-card.active { border-color:var(--brand-green-mid) }
.cx-sheet .quick-ico { color:var(--text) }
.cx-sheet .quick-card.active .quick-ico { color:var(--brand-mint) }
.cx-sheet .quick-text .title { font-size:11px; line-height:1.15 }
.cx-sheet .toggle-row { padding:10px 2px; cursor:pointer; touch-action:manipulation }
.cx-sheet .toggle-row .sub { font-size:11.5px; color:var(--text-muted); margin-left:8px }
.cx-sheet .screener-search { margin-bottom:6px }
.cx-sheet .screener-search input { font-size:16px }

/* ── телефон ── */
.cx-bar.bottom-nav { padding:6px }
.cx-bar .nav-btn { min-height:52px; touch-action:manipulation }
.cx-bar .nav-btn span, .cx-strip .nav-btn span { font-size:9px; letter-spacing:.08em }
.cx-strip.bottom-nav { display:none; grid-template-columns:none; align-items:stretch; gap:2px; padding:6px }
.cx-app.strip-on .cx-bar { display:none }
.cx-app.strip-on .cx-strip { display:flex }
.cx-strip-scroll { flex:1 1 auto; display:flex; gap:2px; overflow-x:auto; scrollbar-width:none; -webkit-overflow-scrolling:touch; min-width:0 }
.cx-strip-scroll::-webkit-scrollbar { display:none }
.cx-strip .nav-btn { flex:0 0 auto; min-width:54px; min-height:52px; padding:6px 4px !important; touch-action:manipulation }
.cx-strip .cx-strip-x { min-width:44px }

@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .d-only { display:none !important }
  .cx-top { height:48px; padding-left:6px; padding-right:4px }
  .cx-right { display:none !important }
  .cx-main { margin-bottom:calc(92px + env(safe-area-inset-bottom,0px)) }
  .nav-btn.cx-tb { width:40px; height:40px }
  .cx-float .nav-btn.cx-tb { width:40px; height:40px }
  /* на телефоне меню рисунка — внизу, под большим пальцем (там же, где таблетка инструмента);
     qafix 17.10 (QA №22): по центру поля графика, не заходя на шкалу цены (--ax — её ширина, main.js) */
  .cx-float { top:auto; bottom:58px; left:calc((100% - var(--ax, 64px)) / 2); max-width:calc(100% - var(--ax, 64px) - 8px); box-sizing:border-box }   /* 58: над знаком GG в углу */
  .cx-float .t { min-width:0; overflow:hidden; text-overflow:ellipsis }
  .cx-pill { left:calc((100% - var(--ax, 64px)) / 2); max-width:calc(100% - var(--ax, 64px) - 8px); box-sizing:border-box }
}
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .m-only { display:none !important }
  /* листы на компьютере — окном по центру */
  .cx-sheet.modal-backdrop { align-items:center }
  .cx-sheet .modal-sheet { max-width:560px; border-radius:var(--radius-lg); border:1px solid var(--line-bright); padding-bottom:18px; max-height:72vh }
  .cx-sheet .modal-grabber { display:none }
}

/* ── легенда индикатора как у TV: «GG-Shøt <стратегия>», настройки, глаз (16.10, финальная сборка) ── */
.cx-indleg { position:absolute; left:10px; top:52px; z-index:3; display:flex; align-items:center; gap:0; max-width:calc(100% - var(--ax, 70px) - 26px);
  color:var(--text-dim); font-size:12px; pointer-events:none }
.cx-indleg .nm { display:flex; min-width:0; white-space:nowrap; overflow:hidden; margin-right:4px }
/* qafix 17.10 (QA №25): не влезает — сначала сжимаются значения входов (n2), имя стратегии (n1) — последним */
.cx-indleg .nm .n1 { flex:0 0 auto; max-width:100%; overflow:hidden; text-overflow:ellipsis }
.cx-indleg .nm .n2 { flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:pre }
.cx-indleg.off .nm { opacity:.45 }
/* ggchart-noauth 17.10: без входа — в строке только фраза «Sign in through the app to load GG-Shøt», без шестерёнки и глаза */
.cx-indleg.signin .cx-leg-b { display:none }
.cx-indleg .nav-btn.cx-tb.cx-leg-b { pointer-events:auto; width:26px; height:26px; color:var(--text-muted) }
.cx-cfg-tabs { margin:0 0 8px }
/* ggchart-dblclick 17.10: панель индикатора развёрнута на весь график — строка GG-Shøt и таблица бэктеста свечей не висят над ней */
.cx-stage.pane-max .cx-indleg, .cx-stage.pane-max .cx-bt { display:none !important }
.cx-sheet #symList .cx-wl-row .time-pill { margin-left:2px }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .cx-indleg { top:28px; font-size:11px } }
.cx-txt-act { display:flex; justify-content:flex-end; margin-top:12px }

/* ── окно настроек индикатора 1 в 1 как у TradingView (16.10, владелец: «настройки выглядят по-другому… всё должно быть
   идентично»). Цвета сняты с его скрина TV (тёмная тема TV), шрифт — системный стек TV. Только это окно и таблица
   бэктеста идут вне токенов кита: так требует «как в TV» для графика. ── */
.tvd-back { --tv-dlg:#1f1f1f; --tv-ctl:#242424; --tv-bd:#565656; --tv-line:#4a4a4a; --tv-text:#dbdbdb; --tv-dim:#8c8c8c; --tv-ok:#eeeeee;
  position:fixed; inset:0; z-index:120; display:none; align-items:center; justify-content:center; background:rgba(0,0,0,.45);
  font-family:-apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif }
.tvd-back.open { display:flex }
.tvd { width:min(620px, calc(100vw - 24px)); max-height:min(86vh, 900px); display:flex; flex-direction:column; background:var(--tv-dlg);
  border-radius:8px; box-shadow:0 2px 24px rgba(0,0,0,.6); color:var(--tv-text) }
.tvd-head { display:flex; align-items:center; padding:20px 20px 12px 24px }
.tvd-title { font-size:20px; font-weight:600; color:#f2f2f2; letter-spacing:0 }
.tvd-x { margin-left:auto; width:32px; height:32px; display:grid; place-items:center; background:none; border:0; color:var(--tv-text); cursor:pointer; border-radius:6px }
.tvd-x:hover { background:var(--tv-ctl) }
.tvd-tabs { display:flex; gap:24px; padding:0 24px; border-bottom:1px solid var(--tv-line) }
.tvd-tabs button { background:none; border:0; padding:10px 0 12px; font:inherit; font-size:16px; color:var(--tv-dim); cursor:pointer; position:relative }
.tvd-tabs button.on { color:#f2f2f2 }
.tvd-tabs button.on:after { content:''; position:absolute; left:0; right:0; bottom:-1px; height:3px; border-radius:2px; background:#f2f2f2 }
.tvd-body { flex:1 1 auto; overflow-y:auto; padding:12px 24px 16px; -webkit-overflow-scrolling:touch }
.tvd-row { display:flex; align-items:center; gap:12px; min-height:48px }
.tvd-lbl { flex:1 1 auto; font-size:15px; color:var(--tv-text) }
.tvd-sel { flex:0 0 180px; max-width:52vw; height:36px; padding:0 30px 0 12px; background:var(--tv-ctl); color:#f2f2f2; border:1px solid var(--tv-bd); border-radius:6px;
  font:inherit; font-size:15px; -webkit-appearance:none; appearance:none; text-overflow:ellipsis; cursor:pointer;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12'%3E%3Cpath d='M2.5 4.5l3.5 3.5 3.5-3.5' fill='none' stroke='%23dbdbdb' stroke-width='1.4'/%3E%3C/svg%3E");
  background-repeat:no-repeat; background-position:right 10px center }
.tvd-sel option:disabled { color:#6b6b6b }
.tvd-i { flex:0 0 20px; width:20px; height:20px; border-radius:50%; border:0; background:#5d5d5d; color:#1f1f1f; font:600 12px/20px Georgia, serif; text-align:center; padding:0; cursor:pointer }
.tvd-i-sp { flex:0 0 20px }
.tvd-tip { margin:-4px 0 8px; padding:10px 12px; background:var(--tv-ctl); border:1px solid var(--tv-line); border-radius:6px; font-size:13px; line-height:1.45; color:var(--tv-text) }
.tvd-chk { display:flex; align-items:center; gap:12px; min-height:44px; font-size:15px; cursor:pointer; -webkit-user-select:none; user-select:none }
.tvd-chk input { position:absolute; opacity:0; pointer-events:none }
.tvd-chk .box { width:18px; height:18px; flex:0 0 18px; border:1px solid #8c8c8c; border-radius:4px; box-sizing:border-box; display:grid; place-items:center }
.tvd-chk input:checked + .box { background:#f2f2f2; border-color:#f2f2f2 }
.tvd-chk input:checked + .box:after { content:''; width:9px; height:5px; border-left:2px solid #1f1f1f; border-bottom:2px solid #1f1f1f; transform:rotate(-45deg) translate(1px,-1px) }
.tvd-chk.off { opacity:.4; cursor:default }
.tvd-srow, .tvd-vrow { display:flex; align-items:center; gap:12px }
.tvd-srow .tvd-chk, .tvd-vrow .tvd-chk { flex:1 1 auto }
.tvd-sw { display:flex; gap:6px } .tvd-sw i { width:28px; height:28px; border-radius:4px; border:1px solid var(--tv-bd); box-sizing:border-box }
.tvd-sec { margin:14px 0 2px; font-size:12px; letter-spacing:.06em; color:var(--tv-dim) }
.tvd-rng { display:flex; align-items:center; gap:8px; font-size:14px; color:var(--tv-dim) } .tvd-rng span { min-width:48px; padding:6px 8px; border:1px solid var(--tv-bd); border-radius:6px; text-align:center }
.tvd-rng i { width:24px; height:1px; background:var(--tv-bd) }
.tvd-foot { display:flex; align-items:center; gap:10px; padding:14px 20px 18px; border-top:1px solid var(--tv-line) }
.tvd-btn { height:38px; padding:0 18px; border-radius:6px; border:1px solid var(--tv-bd); background:none; color:#f2f2f2; font:inherit; font-size:15px; cursor:pointer }
.tvd-ok { background:var(--tv-ok); color:#141414; border-color:var(--tv-ok) }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .tvd-back { align-items:stretch }
  .tvd { width:100vw; max-height:none; height:100%; border-radius:0; padding-top:env(safe-area-inset-top,0px); padding-bottom:env(safe-area-inset-bottom,0px) }
  .tvd-sel { flex-basis:150px }
}

/* ── таблица бэктеста индикатора (Backtest Mode: Small) — как table.new(position.top_right) Pine, цвета из Pine ── */
.cx-bt { position:absolute; top:8px; z-index:3; pointer-events:none; font-family:-apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif }
.cx-bt table { border-collapse:collapse; font-size:12px; color:rgb(225,225,230); background:rgba(19,26,47,.1) }
.cx-bt td { border:1px solid rgb(50,70,120); padding:3px 7px; white-space:nowrap }
.cx-bt td[colspan] { text-align:center }
.cx-bt .h0 { background:rgba(16,30,90,.6); color:rgb(131,207,255); font-weight:700 }
.cx-bt .h1 { background:rgba(14,28,80,.6) } .cx-bt .h2 { background:rgba(12,26,70,.6) } .cx-bt .h3 { background:rgba(10,24,60,.6) }
.cx-bt .dv { background:rgb(65,90,140); color:rgb(131,207,255); font-weight:700 }
.cx-bt .hd td { background:rgba(10,30,84,.05); color:rgb(131,207,255); text-align:center }
.cx-bt td.l { background:rgba(10,30,84,.05) } .cx-bt tr.b td { font-weight:700 } .cx-bt tr.b td.l { color:rgb(131,207,255) }
.cx-bt td.v { text-align:center } .cx-bt td.pos { background:rgba(0,160,75,.2) } .cx-bt td.mid { background:rgba(210,175,40,.2) } .cx-bt td.neg { background:rgba(150,35,40,.2) }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .cx-bt { top:26px } .cx-bt table { font-size:9px } .cx-bt td { padding:2px 4px } }
.cx-coin { width:20px; height:20px; border-radius:50%; flex:0 0 20px; object-fit:cover }
/* с логотипом монеты имя тикера в узкой панели обрезалось (OA…, PLT…) — плотнее строка, цена мельче */
.cx-right .cx-wl-row { gap:5px }
.cx-right .cx-wl-row .signal-ticker { font-size:14px }
.cx-right .cx-wl-row .px { font-size:11px }
.cx-right .cx-wl-row .pc { min-width:50px }
.cx-wl-row .sym { flex:0 1 auto; min-width:0; overflow:hidden }
/* 16.10 «цвета не те»: у TV фон графика чисто чёрный, легенда и шкалы — шрифтом TV; окно настроек — шириной окна TV */
.cx-stage { background:#000 }
.cx-indleg { font-family:-apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; font-size:12px; color:#9a9a9a }
.tvd { width:min(420px, calc(100vw - 24px)) }
.tvd-head { padding:16px 16px 8px 20px } .tvd-title { font-size:18px }
.tvd-tabs { padding:0 20px; gap:20px } .tvd-tabs button { font-size:15px; padding:8px 0 10px }
.tvd-body { padding:8px 20px 12px }
.tvd-row { min-height:42px; gap:10px } .tvd-lbl { font-size:14px }
.tvd-sel { flex:0 0 132px; height:32px; font-size:14px; padding:0 26px 0 10px; background-position:right 8px center }
.tvd-chk { min-height:36px; font-size:14px; gap:10px } .tvd-chk .box { width:16px; height:16px; flex-basis:16px; border-radius:3px }
.tvd-foot { padding:12px 16px 14px } .tvd-btn { height:34px; padding:0 14px; font-size:14px }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .tvd { width:100vw } .tvd-sel { flex-basis:140px } }
/* ggchart-pine 16.10: Large — «PROFIT PANEL» и «ADVANCED TRADING METRICS» (цвета ячеек — инлайн по правилам Pine) */
.cx-bt .hd td.hb { font-weight:700 } .cx-bt td.lt { color:rgb(225,225,230) }

/* ggchart-assist 17.10: торговый ассистент на графике — правая панель компьютера / лист телефона */
.cx-assist { display:flex; flex-direction:column; gap:8px; border-bottom:0 }
.cx-chat { display:flex; flex-direction:column; gap:6px; max-height:360px; min-height:40px; overflow-y:auto; scrollbar-width:thin }
.cx-assist-sheet .cx-chat { max-height:none; height:min(60vh, 520px) }
.cx-msg { max-width:88%; padding:8px 10px; border-radius:var(--radius-md, 8px); font-size:13px; line-height:1.45; color:var(--text); background:var(--bg-2); white-space:normal; overflow-wrap:anywhere }
.cx-msg.me { align-self:flex-end; background:var(--bg-3, var(--bg-2)); border:1px solid var(--line) }
.cx-msg.ai { align-self:flex-start }
.cx-msg.pending { display:flex; gap:4px; padding:12px }
.cx-msg.pending span { width:5px; height:5px; border-radius:50%; background:var(--text-dim); animation:cxDot 1s infinite ease-in-out }
.cx-msg.pending span:nth-child(2) { animation-delay:.15s } .cx-msg.pending span:nth-child(3) { animation-delay:.3s }
@keyframes cxDot { 0%, 80%, 100% { opacity:.25 } 40% { opacity:1 } }
.cx-chat-in { display:flex; align-items:center; gap:6px }
.cx-chat-in .screener-search { flex:1 1 auto; margin:0 }
.cx-chat-in .screener-search input { width:100% }
.cx-chat-send:disabled { opacity:.45 }
/* правая панель: сигнал и лента прокручиваются сами, ассистент — нижняя половина с полем ввода внизу (лента из 40 сигналов его не прячет) */
.cx-app.panel-on .cx-right#right { display:flex; flex-direction:column; overflow:hidden }
#rightTop { flex:1 1 auto; min-height:120px; overflow-y:auto; scrollbar-width:thin }
#assistHome { flex:0 0 auto; height:min(var(--ah, 46%), calc(100% - 120px)); min-height:220px; display:flex; flex-direction:column; border-top:1px solid var(--line) }   /* panelsz 22.10: --ah — the dragged split (main.js), the top widget keeps its 120 */
#assistHome .cx-assist { flex:1 1 auto; min-height:0; padding-bottom:10px }
#assistHome .cx-chat { flex:1 1 auto; max-height:none }
.cx-assist-sheet .cx-assist { padding-top:0 }
.cx-assist-sheet .cx-assist > .kpi-label { display:none }

/* ggchart-tvstyle 17.10 — вид страницы графика «как TradingView». Владелец 01:19 «Делай да» (свой набор: серые цвета и
   системный шрифт TV, только эта страница, аппку не трогать), 01:21 «наш кит частично можешь наложить минималистично».
   Сознательное исключение из закона «UI только классами кита» — ТОЛЬКО для страницы графика.
   Всё под .gg-tv на <body>; акцент кита — .gg-acc-1 / -2 / -3 там же. Числа — замеры SPEC.md (tvstyle/in).
   Не трогаем: слой индикатора (холст), таблицу бэктеста (.cx-bt), шестерёнку шкалы (#scaleSet); окно настроек (.tvd-*) — с tvui 17.10 по замеру TV (блок в конце). */

.gg-tv {
  --tv-pane:#0f0f0f; --tv-gap:#2e2e2e; --tv-pop:#1f1f1f; --tv-hover:#2e2e2e; --tv-sel:#3d3d3d; --tv-sel-hover:#4a4a4a;
  --tv-text:#dbdbdb; --tv-text2:#8c8c8c; --tv-dis:#575757; --tv-div:#4a4a4a; --tv-field:#575757; --tv-field-hover:#707070;
  --tv-focus:var(--tv-focus); --tv-ring:var(--tv-focus); --tv-light:#f2f2f2; --tv-ink:#0f0f0f; --tv-bar:#000; --tv-up:#089981; --tv-down:#f23645;
  --tv-font:-apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif;
  --tv-shadow:0 2px 4px rgba(0,0,0,.4);
  --tv-acc:var(--brand-mint);
  /* токены кита внутри страницы → серые TV (палитра холста читается с <html> и не меняется) */
  --bg:#000; --bg-1:var(--tv-pop); --bg-2:var(--tv-hover); --bg-3:var(--tv-sel); --bg-panel:var(--tv-pop); --bg-inset:transparent;
  --line:var(--tv-gap); --line-bright:var(--tv-div); --text:var(--tv-text); --text-dim:var(--tv-text2); --text-muted:var(--tv-text2);
  --display:var(--tv-font); --mono:var(--tv-font);
  font-family:var(--tv-font); letter-spacing:0; color:var(--tv-text)
}
/* окно настроек индикатора и шестерёнка шкалы — как были (наследуемое вернуть) */
.gg-tv .tvd-back { letter-spacing:-.01em }
.gg-tv .cx-scale { --text-muted:#8a968a; --text-dim:#8a968a; --bg-inset:#07090a; --line:#1d211d }

/* ── кнопки: плашка 2 px внутрь, скругл. 6; наведение/нажатие #2e2e2e, выбрано #3d3d3d (+наведение #4a4a4a) ── */
.gg-tv .nav-btn:not(.cx-scale) { font-family:var(--tv-font); letter-spacing:0; text-transform:none; transition:none }
.gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn, .cx-tfbtn) {
  position:relative; isolation:isolate; background:transparent; color:var(--tv-text); border-radius:6px; touch-action:manipulation }
.gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn, .cx-tfbtn)::before {
  content:''; position:absolute; inset:2px; border-radius:6px; background:transparent; z-index:-1; transition:background-color 60ms }
@media (hover:hover) {
  .gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn, .cx-tfbtn):not(:disabled):hover { color:var(--tv-text) }
  .gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn, .cx-tfbtn):not(:disabled):hover::before { background:var(--tv-hover) }
  .gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn).active:not(:disabled):hover::before { background:var(--tv-sel-hover) }
}
.gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn, .cx-tfbtn):not(:disabled):active::before { background:var(--tv-hover) }
.gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn).active { background:transparent; color:var(--tv-text) }
.gg-tv :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn).active::before { background:var(--tv-sel) }
.gg-tv .nav-btn.active:not(.cx-scale)::after { content:none }
.gg-tv .nav-btn.active:not(.cx-scale) svg { filter:none }
.gg-tv .nav-btn:disabled:not(.cx-scale) { opacity:.5 }
.gg-tv .tvi * { vector-effect:non-scaling-stroke }
.gg-tv :is(.nav-btn:not(.cx-scale), .cx-tfbtn, .cx-sym, .cx-opt, .mini-switch-btn, .cx-wl-row, .modal-close, .quick-card, .btn, .toggle-row):focus-visible {
  outline:2px solid var(--tv-ring); outline-offset:-2px }
.gg-tv .cx-sep { height:22px; background:var(--tv-div); margin:0 4px }

/* ── символ: «пилюля» 28, скругл. 14, #3d3d3d, текст 14/400 ── */
.gg-tv .cx-sym { align-items:center; height:28px; padding:0 12px; margin:0 4px; gap:6px; border-radius:14px; background:var(--tv-sel); color:var(--tv-text); font-family:var(--tv-font) }
@media (hover:hover) { .gg-tv .cx-sym:hover { background:var(--tv-sel-hover) } }
.gg-tv .cx-sym .signal-ticker { font-size:14px; font-weight:400; letter-spacing:0; color:var(--tv-text); line-height:1 }
.gg-tv .cx-sym .sig-quote { font-family:var(--tv-font); font-size:14px; color:var(--tv-text); margin:0 }
.gg-tv .cx-sym > svg { display:none }
.gg-tv .cx-sym .dir-pill { margin-left:2px }
/* таймфрейм: одна кнопка «4h», текст 14 */
.gg-tv .cx-tfbtn.sort-pill { height:38px; min-height:0; margin:0; padding:0 10px; border:0; font-family:var(--tv-font); font-size:14px; letter-spacing:0; color:var(--tv-text); justify-content:center }
.gg-tv .cx-tfbtn > svg { display:none }

/* ── мелкие подписи кита → системный шрифт, без капса и разрядки ── */
.gg-tv .signal-ticker { letter-spacing:0 }
.gg-tv .sig-quote { font-family:var(--tv-font); color:var(--tv-text2) }
.gg-tv .kpi-label { font-family:var(--tv-font); font-size:11px; font-weight:400; letter-spacing:.04em; color:var(--tv-text2) }
.gg-tv .tf-pill { font-family:var(--tv-font); font-size:12px; letter-spacing:0; padding:2px 6px; background:var(--tv-hover); border:0; border-radius:4px; color:var(--tv-text) }
.gg-tv .time-pill { font-family:var(--tv-font); font-size:12px; letter-spacing:0; color:var(--tv-text2) }
.gg-tv .dir-pill { font-family:var(--tv-font); font-size:11px; font-weight:600; letter-spacing:.02em; padding:2px 6px; border-radius:4px }
.gg-tv .dir-pill.long { color:var(--tv-up); border-color:rgba(8,153,129,.5); background:rgba(8,153,129,.12) }
.gg-tv .dir-pill.short { color:var(--tv-down); border-color:rgba(242,54,69,.5); background:rgba(242,54,69,.12) }
.gg-tv .status-pill { font-family:var(--tv-font); font-size:12px; letter-spacing:0; text-transform:none; padding:2px 8px; border:0; border-radius:4px; background:var(--tv-hover); color:var(--tv-text) }
.gg-tv .status-pill.inactive { color:var(--tv-down); background:rgba(242,54,69,.12) }
.gg-tv .mini-switch-btn { font-family:var(--tv-font); font-size:13px; font-weight:400; letter-spacing:0; text-transform:lowercase; color:var(--tv-text);
  min-height:24px; padding:0 8px; border-radius:4px; background:transparent; transition:none }
@media (hover:hover) { .gg-tv .mini-switch-btn:hover { background:var(--tv-hover); color:var(--tv-text) } }
.gg-tv .mini-switch-btn.active { background:var(--tv-sel); color:var(--tv-text) }
.gg-tv .cx-auto { background:var(--tv-pop); box-shadow:var(--tv-shadow); min-height:26px; padding:0 10px }
.gg-tv .cx-clock { font-family:var(--tv-font); font-size:13px; color:var(--tv-text); font-variant-numeric:tabular-nums }

/* ── панель сигнала справа и список сигналов ── */
.gg-tv .cx-sec { padding:12px; border-bottom:1px solid var(--tv-gap) }
.gg-tv .cx-sig-head .signal-ticker { font-size:16px; font-weight:600 }
.gg-tv .tp-cell-v2 { padding:8px 10px; background:transparent; border:1px solid var(--tv-gap); border-radius:6px }
.gg-tv .tp-cell-v2 .lbl { font-family:var(--tv-font); font-size:12px; font-weight:400; letter-spacing:0; text-transform:none; color:var(--tv-text2) }
.gg-tv .tp-cell-v2 .prc { font-family:var(--tv-font); font-size:13px; font-weight:400; letter-spacing:0; font-variant-numeric:tabular-nums; color:var(--tv-text) }
.gg-tv .tp-cell-v2.hit::before { background:var(--tv-up) }
.gg-tv .tp-cell-v2.hit .lbl { color:var(--tv-up) }
.gg-tv .entry-cell { background:transparent; border-color:var(--tv-gap) }
.gg-tv .sl-cell-v2 { background:transparent; border-color:var(--tv-gap) }
.gg-tv .sl-cell-v2 .lbl, .gg-tv .sl-cell-v2 .prc { color:var(--tv-down) }
.gg-tv .cx-wl-row { padding:7px 8px; border-bottom:0; border-radius:4px; gap:6px; font-family:var(--tv-font); color:var(--tv-text) }
@media (hover:hover) { .gg-tv .cx-wl-row:hover { background:var(--tv-hover) } }
.gg-tv .cx-wl-row .signal-ticker { font-size:14px; font-weight:400 }
.gg-tv .cx-wl-row .px, .gg-tv .cx-wl-row .pc { font-family:var(--tv-font); font-size:13px; font-variant-numeric:tabular-nums }
.gg-tv .cx-wl-row .px { color:var(--tv-text) }
.gg-tv .cx-wl-row .pc.up { color:var(--tv-up) }
.gg-tv .cx-wl-row .pc.dn { color:var(--tv-down) }
.gg-tv .cx-wl-row.active { background:var(--tv-sel) }
.gg-tv .cx-right .cx-wl-row { padding:6px 4px; gap:5px }
.gg-tv .cx-right .cx-wl-row :is(.px, .pc) { font-size:12px }
.gg-tv .cx-right .cx-wl-row .pc { min-width:48px }
.gg-tv .cx-wl-row :is(.tf-pill, .dir-pill) { font-size:10px; padding:1px 4px; flex-shrink:0 }
.gg-tv .cx-wl-row.active .signal-ticker { color:var(--tv-text) }

/* ── легенда индикатора: 13 #dbdbdb; tvgrid 17.10 — строка и кнопки как у TV: 24 / 28×24 на компьютере, 26 / 44×26 на телефоне (было 22 / 28×22) ── */
.gg-tv .cx-indleg { color:var(--tv-text); font-size:13px; height:24px }
.gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b { width:28px; height:22px; border-radius:4px }   /* leg 21.10: TV 28×22 in the 24 row (was 28×24) */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-indleg { height:26px }
  .gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b { width:44px; height:26px }
}
.gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b::before { inset:0; border-radius:4px }
.gg-tv .cx-indleg .cx-leg-b svg { width:18px; height:18px }

/* ── меню выбранного рисунка и активный инструмент: окно #1f1f1f, скругл. 6, тень TV ── */
.gg-tv .cx-float { background:var(--tv-pop); border:0; border-radius:6px; box-shadow:var(--tv-shadow); padding:2px 2px 2px 12px }
.gg-tv .cx-float .t { font-family:var(--tv-font); font-size:13px; letter-spacing:0; color:var(--tv-text2) }
.gg-tv .cx-float .nav-btn.cx-tb { width:34px; height:34px }
.gg-tv .cx-pill { background:var(--tv-pop); border:0; box-shadow:var(--tv-shadow); padding:2px 2px 2px 14px }
.gg-tv .cx-pill .t { font-family:var(--tv-font); font-size:13px; color:var(--tv-text) }
.gg-tv .cx-pill .modal-close { width:30px; height:30px }
.gg-tv .cx-pill .modal-close svg { width:22px; height:22px }

/* ── выпадающие меню: #1f1f1f без рамки, скругл. 6, тень 0 2 4 .4; строки 32 / 40 с иконкой 28; выбранный — светлая плашка ── */
.gg-tv .gg-sort-menu.cx-menu { background:var(--tv-pop); border:0; border-radius:6px; padding:6px 0; box-shadow:var(--tv-shadow); min-width:180px }
.gg-tv .cx-opt { font-family:var(--tv-font); font-size:14px; line-height:18px; letter-spacing:0; color:var(--tv-text); min-height:32px; padding:0 12px 0 8px;
  margin:0 4px; border-radius:4px; gap:8px; transition:none }
.gg-tv .cx-opt .ico { width:28px; height:28px; margin:4px 0; color:var(--tv-text) }
.gg-tv .cx-opt .ico > span { border-radius:2px !important }
@media (hover:hover) { .gg-tv .cx-opt:hover { background:var(--tv-hover); color:var(--tv-text) } }
.gg-tv .cx-opt:active { background:var(--tv-sel) }
.gg-tv .cx-opt.active, .gg-tv .cx-opt.active:hover { background:var(--tv-light); color:var(--tv-ink) }
.gg-tv .cx-opt.active .ico { color:var(--tv-ink) }
.gg-tv .cx-opt .hk { margin-left:auto; padding-left:28px; color:var(--tv-text2); white-space:nowrap }
.gg-tv .cx-opt .ck { color:var(--tv-text) }
.gg-tv .cx-menu-sep { height:1px; background:var(--tv-div); margin:6px 0 }
.gg-tv .cx-menu-head { margin:0; padding:0 12px; line-height:24px }
.gg-tv .cx-menu-back { display:none }

/* ── подсказка (мышь): #3d3d3d, скругл. 2, 13/400 #f2f2f2, отступы 3 8 ── */
.cx-tip { position:fixed; left:-999px; top:-999px; z-index:200; pointer-events:none; padding:3px 8px; border-radius:2px; background:#3d3d3d; color:#f2f2f2;
  font:400 13px/18px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; white-space:nowrap; opacity:0; transition:opacity 130ms }   /* tvui: TV — проявление 130 мс (rAF-замер) */
.cx-tip.on { opacity:1 }

/* ── листы и окна: #1f1f1f, затемнение #000 70 % без размытия, заголовок 20/600, поиск 40 скругл. 8 ── */
.gg-tv .modal-backdrop { background:rgba(0,0,0,.7); backdrop-filter:none; -webkit-backdrop-filter:none }
.gg-tv .cx-sheet .modal-sheet { background:var(--tv-pop); border:0; border-radius:6px 6px 0 0; padding:0 0 calc(12px + env(safe-area-inset-bottom,0px)); box-shadow:none }
.gg-tv .modal-grabber { display:none }
.gg-tv .modal-head { padding:14px 10px 10px 20px; margin:0; border-bottom:0; gap:8px }
.gg-tv .modal-title { font-size:20px; line-height:28px; font-weight:600; letter-spacing:0; color:var(--tv-text) }
.gg-tv .modal-close { width:34px; height:34px; background:transparent; border:0; border-radius:6px; color:var(--tv-text) }
@media (hover:hover) { .gg-tv .modal-close:hover { background:var(--tv-hover) } }
.gg-tv .cx-sheet-body { padding:0 8px }
.gg-tv .screener-search { height:40px; box-sizing:border-box; margin:0 8px 8px; padding:0 12px 0 6px; gap:4px; background:transparent; border:1px solid var(--tv-div); border-radius:8px }
@media (hover:hover) { .gg-tv .screener-search:hover { border-color:var(--tv-field-hover) } }
.gg-tv .screener-search:focus-within { border-color:var(--tv-ring) }
.gg-tv .screener-search svg { color:var(--tv-text) }
.gg-tv .screener-search input { font-family:var(--tv-font); font-size:16px; letter-spacing:0; color:var(--tv-text) }
.gg-tv .screener-search input::placeholder { color:var(--tv-text2) }
.gg-tv .cx-sheet .kpi-label { margin:10px 12px 2px; line-height:24px }
.gg-tv .cx-sheet .cx-sheet-body > .kpi-label:first-child, .gg-tv .cx-sheet #indList > .kpi-label:first-child { margin-top:2px }
/* список индикаторов: строка 32, тумблер как у TV 38×20 (вкл — светлая дорожка) */
.gg-tv .cx-sheet .toggle-row { min-height:32px; box-sizing:border-box; padding:0 8px 0 12px; border-bottom:0; border-radius:6px }
@media (hover:hover) { .gg-tv .cx-sheet .toggle-row:hover { background:var(--tv-hover) } }
.gg-tv .toggle-row .name { font-size:14px; font-weight:400; color:var(--tv-text) }
.gg-tv .cx-sheet .toggle-row .sub { font-size:14px; color:var(--tv-text2) }
.gg-tv .toggle { width:38px; height:20px; background:var(--tv-div); border:0; border-radius:20px; transition:none }
.gg-tv .toggle-knob { top:3px; left:3px; width:14px; height:14px; background:var(--tv-text); transition:left .12s }
.gg-tv .toggle.on { background:var(--tv-light) }
.gg-tv .toggle.on .toggle-knob { left:21px; background:var(--tv-hover); box-shadow:none }
/* инструменты рисования листом: строки 40 с иконкой 28 вместо плиток */
.gg-tv .cx-sheet .quick-grid { display:flex; flex-direction:column; gap:0 }
.gg-tv .cx-sheet .quick-card { flex-direction:row; justify-content:flex-start; gap:8px; min-height:40px; padding:0 12px 0 8px; background:transparent; border:0; border-radius:6px; text-align:left; transition:none }
.gg-tv .cx-sheet .quick-card:active { transform:none; background:var(--tv-sel) }
@media (hover:hover) { .gg-tv .cx-sheet .quick-card:hover { background:var(--tv-hover) } }
.gg-tv .cx-sheet .quick-ico { width:28px; height:28px; background:transparent; border:0; border-radius:0; color:var(--tv-text) }
.gg-tv .cx-sheet .quick-text { align-items:flex-start }
.gg-tv .cx-sheet .quick-text .title { font-size:16px; line-height:24px; font-weight:400; letter-spacing:0; color:var(--tv-text) }
.gg-tv .cx-sheet .quick-card.active { background:var(--tv-light) }
.gg-tv .cx-sheet .quick-card.active .quick-ico, .gg-tv .cx-sheet .quick-card.active .title { color:var(--tv-ink) }
/* поле и кнопка листа «Text»: 34, скругл. 8 */
.gg-tv #shText .cx-sheet-body { padding:0 20px }
.gg-tv .cx-sheet .form-input { height:34px; box-sizing:border-box; padding:0 10px; border:1px solid var(--tv-field); border-radius:8px; font-family:var(--tv-font); font-size:14px; letter-spacing:0; color:var(--tv-text) }
@media (hover:hover) { .gg-tv .cx-sheet .form-input:hover { border-color:var(--tv-field-hover) } }
.gg-tv .cx-sheet .form-input:focus { border-color:var(--tv-ring) }
.gg-tv .cx-sheet .btn { width:auto; height:34px; padding:0 16px; border:0; border-radius:8px; background:var(--tv-light); color:var(--tv-ink); font-family:var(--tv-font);
  font-size:14px; font-weight:400; letter-spacing:0; text-transform:none }
@media (hover:hover) { .gg-tv .cx-sheet .btn:hover { background:var(--tv-text) } }

/* знак GG — только в варианте 2 */
.gg-tv .cx-ggmark { display:none }
.gg-tv .cx-ggmark svg { display:block; width:30px; height:18px }

/* ═════ компьютер: плитки через зазор 4 px #2e2e2e, верх 38, слева 52 ═════ */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-app { background:var(--tv-gap); gap:4px }
  .gg-tv .cx-top { height:38px; padding:0 4px; gap:0; background:var(--tv-pane); border-bottom:0 }
  .gg-tv .cx-top .nav-btn.cx-tb { width:38px; height:38px }
  .gg-tv .cx-top .nav-btn.cx-tb-txt { width:auto; padding:0 10px 0 5px !important; gap:2px; font-size:14px !important }
  .gg-tv #tfs { display:none !important }
  .gg-tv .cx-tfbtn.m-only { display:flex !important }
  .gg-tv .cx-body { gap:4px }
  .gg-tv .cx-left { flex-basis:52px; padding:4px 0; gap:0; background:var(--tv-pane); border-right:0; border-radius:0 4px 0 0 }
  .gg-tv .cx-left .nav-btn.cx-tb { width:52px; height:38px; flex-shrink:0 }
  .gg-tv .cx-left .nav-btn.cx-tb::before { inset:2px 9px }
  /* у группы при наведении — стрелка › у правого края, как у TV */
  @media (hover:hover) { .gg-tv .cx-left .nav-btn.cx-tb[data-g]:hover { background:no-repeat right 3px center / 6px 10px url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='6' height='10' viewBox='0 0 6 10'%3E%3Cpath d='M1.5 1.5L4.5 5l-3 3.5' fill='none' stroke='%238c8c8c' stroke-width='1.1' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") } }
  .gg-tv .cx-hsep { width:34px; height:1px; margin:6px 0; background:var(--tv-div) }
  .gg-tv .cx-main { background:var(--tv-pane); border-radius:4px 4px 0 0; overflow:hidden }
  .gg-tv .cx-right { flex-basis:clamp(300px, var(--rw, 300px), 50vw); background:var(--tv-pane); border-left:0; border-radius:4px 0 0 0; padding:0 4px }   /* panelsz 22.10: --rw — the dragged width (main.js) */
  .gg-tv .cx-foot { flex-basis:32px; gap:2px; padding:0 6px; background:var(--tv-pane); border-top:1px solid var(--tv-gap) }
  /* листы на компьютере — окно по центру #1f1f1f, скругл. 12, без рамки */
  .gg-tv .cx-sheet .modal-sheet { max-width:600px; border:0; border-radius:12px; box-shadow:var(--tv-shadow); padding-bottom:12px; max-height:72vh }
  .gg-tv.gg-acc-2 .cx-ggmark-top { display:flex; align-items:center; justify-content:center; flex:0 0 44px; height:38px }
}

/* ═════ телефон: как приложение TV на iOS — график во весь экран, снизу полоса 47 без подписей, касание 44 ═════ */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-app { padding-top:env(safe-area-inset-top,0px); background:#000 }
  .gg-tv .cx-main { margin-bottom:0 }
  .gg-tv .cx-body { order:1 }
  /* верхняя полоса уходит вниз: тикер, ТФ, рисование, индикаторы, «…» │ отмена, повтор, слой GG, весь экран */
  .gg-tv .cx-top { order:3; height:47px; padding:0 4px env(safe-area-inset-bottom,0px); gap:0; background:var(--tv-bar);
    border-bottom:0; border-top:1px solid var(--tv-gap); overflow-x:auto; overflow-y:hidden; scrollbar-width:none; -webkit-overflow-scrolling:touch }
  .gg-tv .cx-top::-webkit-scrollbar { display:none }
  .gg-tv .cx-top > * { flex-shrink:0 }
  /* qafix 17.10 (QA №10): полоса укладывается в ширину экрана (390 px: тикер, ТФ, 7 кнопок) — ничего не уходит за край: кнопки
     сжимаются с 44 до 32 px, тикер — до 40 px (обрезается, как «CASHCA» у TV на iOS); ТФ не сжимается */
  .gg-tv .cx-top > .nav-btn.cx-tb { flex:0 1 44px; min-width:32px }
  .gg-tv .cx-top > .cx-sym { flex:0 1 auto; min-width:40px }
  .gg-tv .cx-top > :is(.cx-grow, .cx-sep:not(.cx-sep-u), #typeBtn, .cx-ggmark) { display:none }
  .gg-tv .cx-top #backBtn { order:0 }
  .gg-tv .cx-top .cx-sym { order:1 }
  .gg-tv .cx-top .cx-tfbtn { order:2 }
  .gg-tv .cx-top #bDraw { order:3 }
  .gg-tv .cx-top #indBtn { order:4 }
  .gg-tv .cx-top #moreBtn { order:5 }
  .gg-tv .cx-top .cx-sep-u.d-only { order:6; display:block !important }
  .gg-tv .cx-top .js-undo { order:7 }
  .gg-tv .cx-top .js-redo { order:8 }
  .gg-tv .cx-top .js-layer { order:9 }
  .gg-tv .cx-top #fullT { order:10 }
  .gg-tv .cx-top :is(.js-undo, .js-redo, .js-layer).d-only { display:flex !important }
  .gg-tv .cx-app.fs-ok .cx-top #fullT.d-only { display:flex !important }
  .gg-tv .cx-top .nav-btn.cx-tb { width:44px; height:44px }
  .gg-tv .cx-top .cx-sym { height:44px; max-width:84px; margin:0; padding:0 8px; overflow:hidden; background:transparent; border-radius:6px }
  .gg-tv .cx-top .cx-sym:active { background:var(--tv-hover) }
  .gg-tv .cx-top .cx-sym .signal-ticker { font-size:16px; white-space:nowrap }
  .gg-tv .cx-top .cx-sym :is(.sig-quote, .dir-pill) { display:none }
  .gg-tv .cx-top .cx-tfbtn.sort-pill { height:44px; min-width:44px; padding:0 10px; font-size:16px }
  /* лента инструментов рисования — та же полоса 47 на месте нижней, без подписей */
  .gg-tv .cx-app.strip-on .cx-top { display:none }
  .gg-tv .cx-strip.bottom-nav { position:static; order:3; transform:none; width:auto; max-width:none; height:47px; box-sizing:content-box; align-items:center;
    gap:0; padding:0 4px env(safe-area-inset-bottom,0px); background:var(--tv-bar); border:0; border-top:1px solid var(--tv-gap); border-radius:0;
    box-shadow:none; backdrop-filter:none; -webkit-backdrop-filter:none }
  .gg-tv .cx-strip.bottom-nav::before { content:none }
  .gg-tv .cx-strip-scroll { gap:0; align-items:center }
  .gg-tv .cx-strip .nav-btn { flex:0 0 44px; width:44px; min-width:44px; height:44px; min-height:44px; padding:0 !important }
  .gg-tv .cx-strip .nav-btn span { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap }
  .gg-tv .cx-float .nav-btn.cx-tb { width:44px; height:44px }
  /* списки — лист снизу во всю ширину: сверху отступ 100, скругл. 6, строки 40, текст 16 */
  .gg-tv .cx-menu-back { position:fixed; inset:0; z-index:89; background:rgba(0,0,0,.7); cursor:pointer }
  .gg-tv .cx-menu-back.on { display:block }
  .gg-tv .gg-sort-menu.cx-menu.as-sheet { top:auto; bottom:0; left:0; right:0; width:auto; min-width:0; max-height:calc(100% - 100px); border-radius:6px 6px 0 0;
    padding:6px 0 calc(6px + env(safe-area-inset-bottom,0px)); box-shadow:none; animation:slideUp .22s cubic-bezier(.2,.8,.2,1) }
  .gg-tv .as-sheet .cx-opt { min-height:40px; margin:0 6px; padding:0 12px; border-radius:6px; font-size:16px; line-height:24px }
  .gg-tv .as-sheet .cx-opt .ico { margin:6px 0 }
  .gg-tv .as-sheet .cx-menu-head { padding:0 18px; line-height:30px }
  .gg-tv .as-sheet .cx-menu-sep { margin:6px 0 }
  .gg-tv .cx-sheet .toggle-row, .gg-tv .cx-sheet .cx-wl-row { min-height:44px }
  .gg-tv .cx-sheet .toggle-row .name, .gg-tv .cx-sheet .toggle-row .sub { font-size:16px }
  /* индикаторы и поиск символа — во весь экран на чёрном, как у TV */
  .gg-tv :is(#shInd, #shSym).modal-backdrop { background:#000 }
  .gg-tv :is(#shInd, #shSym) .modal-sheet { max-width:none; height:100%; max-height:none; border-radius:0; background:#000; padding-top:env(safe-area-inset-top,0px) }
  .gg-tv.gg-acc-2 .cx-ggmark-st { display:block; position:absolute; left:10px; bottom:34px; z-index:2; pointer-events:none }
}

/* ═════ акцент кита (минимально; без свечений, градиентов и «стекла») ═════ */
/* 1 и 2: мятная метка 2 px у активного (внизу кнопки; у левой панели — слева), включённый слой GG — мятный значок */
.gg-tv:is(.gg-acc-1, .gg-acc-2) :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn).active::after {
  content:''; position:absolute; left:50%; bottom:4px; width:14px; height:2px; margin-left:-7px; border-radius:1px; background:var(--tv-acc); transform:none; box-shadow:none }
.gg-tv:is(.gg-acc-1, .gg-acc-2) .cx-left .nav-btn.cx-tb.active::after { left:3px; top:50%; bottom:auto; width:2px; height:16px; margin:-8px 0 0 }
.gg-tv:is(.gg-acc-1, .gg-acc-2, .gg-acc-3) .nav-btn.js-layer.active:not(:disabled) { color:var(--tv-acc) }
.gg-tv:is(.gg-acc-1, .gg-acc-2) .cx-wl-row.active { box-shadow:inset 2px 0 0 var(--tv-acc) }
.gg-tv:is(.gg-acc-1, .gg-acc-2, .gg-acc-3) .mini-switch-btn.active { background:transparent; color:var(--tv-acc) }
.gg-tv:is(.gg-acc-1, .gg-acc-2) .cx-pill .t::before { content:''; display:inline-block; width:6px; height:6px; margin:0 8px 1px 0; border-radius:50%; background:var(--tv-acc); vertical-align:middle }
/* 3 (свой): мятный — на месте синего и светлой плашки TV: выбранное и включённое мятным, фокус мятный, без меток */
.gg-tv.gg-acc-3 { --tv-ring:var(--brand-mint) }
.gg-tv.gg-acc-3 :is(.nav-btn.cx-tb:not(.cx-scale), .cx-strip .nav-btn).active { color:var(--tv-acc) }
.gg-tv.gg-acc-3 .cx-opt.active, .gg-tv.gg-acc-3 .cx-opt.active:hover { background:var(--tv-sel); color:var(--tv-acc) }
.gg-tv.gg-acc-3 .cx-opt.active .ico, .gg-tv.gg-acc-3 .cx-opt.checked .ck { color:var(--tv-acc) }
.gg-tv.gg-acc-3 .cx-sheet .quick-card.active { background:var(--tv-sel) }
.gg-tv.gg-acc-3 .cx-sheet .quick-card.active :is(.quick-ico, .title) { color:var(--tv-acc) }
.gg-tv.gg-acc-3 .toggle.on { background:var(--tv-acc) }
.gg-tv.gg-acc-3 .toggle.on .toggle-knob { background:var(--tv-ink) }
.gg-tv.gg-acc-3 .cx-wl-row.active .signal-ticker { color:var(--tv-acc) }
.gg-tv.gg-acc-3 .cx-pill .t { color:var(--tv-acc) }

/* ═════ tvui 17.10 — элементы интерфейса 1:1 с TV по замеру /root/tv_ui_2026-10-17/SPEC.md (свой Chromium, публичная страница TV) ═════ */
/* листы, окна и меню появляются сразу на своём месте, без выезда и проявления: у TV меню ТФ — первый кадр после клика, лист ТФ на
   телефоне — через 72 мс сразу в итоговом прямоугольнике, окно индикаторов — сразу целиком (rAF-замер); закон плавности п.1 */
.gg-tv .modal-backdrop, .gg-tv .modal-sheet, .gg-tv .gg-sort-menu.cx-menu.as-sheet { animation:none }
/* затемнения под листами и окнами у TV нет (пиксели вокруг листа ТФ на телефоне и вокруг окна индикаторов на компьютере не меняются);
   во весь экран (индикаторы, поиск на телефоне) — чёрный, как был */
.gg-tv .modal-backdrop:not(#shInd):not(#shSym) { background:transparent }
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { .gg-tv :is(#shInd, #shSym).modal-backdrop { background:transparent } }
.gg-tv .cx-menu-back.on { background:transparent }
/* меню с отметками (шкала): у TV ✓ — в колонке слева, текст с 42 px от края меню; справа — горячая клавиша серым */
.gg-tv .cx-opt .ck { order:-1; flex:0 0 22px; margin:0; padding:0; text-align:center; color:var(--tv-text); font-size:15px }
.gg-tv .cx-opt.active .ck { color:var(--tv-ink) }
.gg-tv .cx-opt:has(.ico) .ck { order:0; margin-left:auto }   /* пункт со значком (Grid): отметка справа, значок — в колонке значков */
/* tvd 21.10: rows with their own menu (Labels ›, Lines ›, Time zone ›, Add to watchlist ›): chevron at the right; the open one stays lit */
.gg-tv .cx-opt .sub { margin-left:auto; padding-left:24px; display:grid; place-items:center; color:var(--tv-text) }
.gg-tv .cx-opt .hk + .sub { padding-left:8px }
.gg-tv .cx-opt.sub-on { background:var(--tv-hover) }
.gg-tv #menu2.cx-submenu { z-index:91 }

/* строка GG-Shøt в легенде (компьютер): как строка индикатора TV — кнопки видны при наведении на строку, строка в рамке 1 px #3d3d3d r4;
   значки: глаз 16, шестерёнка 13 (рамка значка 20 при рисунке 28-сетки), на телефоне — 18 / 15 (рамка 23) и кнопки видны всегда, как были */
.gg-tv .cx-indleg .cx-leg-b svg { width:20px; height:20px }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv .cx-indleg .cx-leg-b svg { width:23px; height:23px } }
/* tvd 21.10: the computer's legend icon set (main.js LEG_P) — 18 px as drawn, #dbdbdb, no hover background (TV shows only the tooltip) */
.gg-tv .cx-indleg .cx-leg-b svg.cx-legi { width:18px; height:18px; display:block }
.gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b:has(> svg.cx-legi), .gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b:has(> svg.cx-legi):hover { color:#dbdbdb }
.gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b:has(> svg.cx-legi):not(:disabled):hover::before, .gg-tv .cx-indleg .nav-btn.cx-tb.cx-leg-b:has(> svg.cx-legi):not(:disabled):active::before { background:transparent }
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) and (hover: hover) {
  .gg-tv .cx-indleg { left:4px; padding-left:5px; padding-right:2px; border-radius:4px }   /* leg 21.10: TV — box from 4, name at 9, 2 px past the buttons */
  .gg-tv .cx-indleg .cx-leg-b { opacity:0 }
  .gg-tv .cx-indleg.hov { box-shadow:inset 0 0 0 1px #3d3d3d }
  .gg-tv .cx-indleg.hov .cx-leg-b, .gg-tv .cx-indleg .cx-leg-b:focus-visible { opacity:1 }
}
/* значок в нижней полосе телефона не сжимается вместе с кнопкой (ƒx было 22×28) */
.gg-tv .nav-btn svg.tvi { flex-shrink:0 }

/* ── окно настроек индикатора — замер окна TV (Vol: 380 px, r6, тень 0 2 4 .4; заголовок 20/600 в строке 62; вкладки 16/600 #dbdbdb
   с дорожкой 4 px #4a4a4a и ползунком #f2f2f2 под выбранной; поля 34 r8 рамка #575757; чекбокс 18 r3; кнопки 34 r8: Cancel — белая
   рамка, Ok — #f2f2f2 / #0f0f0f, Defaults — рамка #575757 со стрелкой; черта #4a4a4a над кнопками; фон вокруг окна не затемняется) ── */
.gg-tv .tvd-back { background:transparent }
.gg-tv .tvd { width:min(380px, calc(100vw - 24px)); border-radius:6px; box-shadow:var(--tv-shadow); background:var(--tv-pop); color:var(--tv-text) }
.gg-tv .tvd-head { box-sizing:border-box; height:62px; padding:0 17px 0 20px }
.gg-tv .tvd-title { font-size:20px; line-height:28px; font-weight:600; color:var(--tv-text) }
.gg-tv .tvd-x { width:34px; height:34px; border-radius:6px; color:var(--tv-text) }
.gg-tv .tvd-x svg { width:28px; height:28px }
@media (hover:hover) { .gg-tv .tvd-x:hover { background:var(--tv-hover) } }
.gg-tv .tvd-tabs { position:relative; gap:24px; margin:3px 20px 0; padding:0 0 4px; border-bottom:0 }
.gg-tv .tvd-tabs::after { content:''; position:absolute; left:0; right:0; bottom:0; height:4px; border-radius:2px; background:var(--tv-div) }
.gg-tv .tvd-tabs button { height:32px; padding:0 0 8px; font-size:16px; line-height:24px; font-weight:600; color:var(--tv-text) }
@media (hover:hover) { .gg-tv .tvd-tabs button:not(.on):hover { color:var(--tv-text2) } }
.gg-tv .tvd-tabs button.on { color:var(--tv-text) }
.gg-tv .tvd-tabs button.on:after { bottom:-4px; height:4px; border-radius:2px; background:var(--tv-light); z-index:1 }
.gg-tv .tvd-body { padding:12px 20px 12px; box-sizing:border-box }
.gg-tv .tvd-row { min-height:50px; gap:10px }
.gg-tv .tvd-lbl { font-size:14px; color:var(--tv-text) }
.gg-tv .tvd-sel { height:34px; border-radius:8px; border:1px solid var(--tv-field); background-color:transparent; color:var(--tv-text); font-size:14px; padding:0 30px 0 11px;
  background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M5 7.5l4 4 4-4' fill='none' stroke='%238c8c8c' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");
  background-position:right 7px center }
@media (hover:hover) { .gg-tv .tvd-sel:hover { border-color:var(--tv-field-hover) } }
.gg-tv .tvd-sel:focus { outline:none; border-color:var(--tv-focus) }
.gg-tv .tvd-sel option { background:var(--tv-pop) }
.gg-tv .tvd-sel { min-width:0 }   /* длинные имена стратегий не раздвигают строку за край окна 380 */
.gg-tv .tvd-sel[data-in="strategy"] { flex:1 1 auto; max-width:none }
.gg-tv .tvd-lbl { flex:0 1 auto; margin-right:auto }
.gg-tv .tvd-chk { min-height:34px; gap:8px; font-size:14px; color:var(--tv-text) }
.gg-tv .tvd-chk .box { width:18px; height:18px; flex-basis:18px; border-radius:3px; border:1px solid var(--tv-light) }
.gg-tv .tvd-chk input:checked + .box { background:var(--tv-light); border-color:var(--tv-light) }
.gg-tv .tvd-chk input:checked + .box:after { border-color:var(--tv-ink) }
.gg-tv .tvd-chk input:focus-visible + .box { outline:2px solid var(--tv-focus); outline-offset:1px }
.gg-tv .tvd-sec { font-size:11px; letter-spacing:.04em; color:var(--tv-text2); margin:14px 0 4px }
.gg-tv .tvd-foot { gap:12px; padding:16px 20px; border-top:1px solid var(--tv-div) }
.gg-tv .tvd-btn { height:34px; padding:0 11px; border-radius:8px; font-size:14px; border:1px solid #fff; color:#fff; background:transparent }
@media (hover:hover) { .gg-tv .tvd-btn:not(.tvd-ok):not([data-tvd="defaults"]):hover { background:var(--tv-light); border-color:var(--tv-light); color:var(--tv-ink) }
  .gg-tv .tvd-ok:hover { background:var(--tv-text); border-color:var(--tv-text) } }
.gg-tv .tvd-btn:not(.tvd-ok):not([data-tvd="defaults"]):active { background:var(--tv-text); border-color:var(--tv-text); color:var(--tv-ink) }
.gg-tv .tvd-ok { min-width:44px; background:var(--tv-light); border-color:var(--tv-light); color:var(--tv-ink) }
.gg-tv .tvd-btn[data-tvd="defaults"] { width:100px; padding:0 30px 0 11px; text-align:left; border-color:var(--tv-field); color:var(--tv-text);
  background:no-repeat right 7px center url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='18' height='18' viewBox='0 0 18 18'%3E%3Cpath d='M5 7.5l4 4 4-4' fill='none' stroke='%238c8c8c' stroke-width='1.2' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E") }
@media (hover:hover) { .gg-tv .tvd-btn[data-tvd="defaults"]:hover { border-color:var(--tv-field-hover) } }
.gg-tv .tvd-sw { gap:6px }
.gg-tv .tvd-sw i { width:24px; height:24px; border-radius:3px; border:0; outline:1px solid var(--tv-field); outline-offset:4px; margin:5px }
.gg-tv .tvd-rng span { border-radius:8px; border-color:var(--tv-field); color:var(--tv-text) }
.gg-tv .tvd-tip { background:var(--tv-sel); border:0; border-radius:4px; color:#f2f2f2 }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv .tvd { width:100vw; border-radius:0; box-shadow:none } }
/* нижняя полоса компьютера — как у TV: 38 + черта 1 px #2e2e2e сверху, текст 14; часы справа после черты 1×22 (у TV — у правого края
   колонки графика), log / auto — после часов, как были */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-foot { flex-basis:39px; box-sizing:border-box }
  .gg-tv .cx-foot .cx-grow { order:1 }
  .gg-tv .cx-foot .cx-clock { order:2; position:relative; padding:0 8px 0 13px; font-size:14px; line-height:18px }
  .gg-tv .cx-foot .cx-clock::before { content:''; position:absolute; left:0; top:50%; width:1px; height:22px; margin-top:-11px; background:var(--tv-div) }
  .gg-tv .cx-foot .mini-switch-btn { order:3 }
}
/* tvui 17.10: телефон — строка GG-Shøt до шкалы с запасом 16 (было 26): с кнопками 44×26 (tvgrid) имя стратегии «GG-Shøt BTC/USDT - 4h |
   Long-Term» уходило в многоточие на 2 px (QA №25 падал уже на mvbzsb8i) */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv .cx-indleg { max-width:calc(100% - var(--ax, 70px) - 16px) } .gg-tv .cx-indleg .nm { margin-right:0 } }

/* ═════ tvui2 17.10 — окно Settings графика, полоса навигации, кнопки панели, диапазоны, кнопки строки по касанию (замер /root/tv_ui_2026-10-17/p2) ═════ */
/* окно Settings: компьютер 750×563, слева разделы 206×40 r8 (значок 28 + текст 14; выбранный #2e2e2e 600 белым), справа строки шагом 50 */
.gg-tv .tvs { width:min(750px, calc(100vw - 24px)); height:min(563px, calc(100vh - 24px)); display:flex; flex-direction:column }
.gg-tv .tvs .tvs-back-btn { display:none }
.gg-tv .tvs-mid { flex:1 1 auto; display:flex; min-height:0 }
.gg-tv .tvs-nav { flex:0 0 226px; box-sizing:border-box; padding:8px 0 0 20px; display:flex; flex-direction:column; overflow-y:auto }
.gg-tv .tvs-tab { display:flex; align-items:center; flex:0 0 40px; width:206px; height:40px; box-sizing:border-box; padding:0 16px 0 12px; border:0; border-radius:8px; background:transparent;
  color:var(--tv-text); font:inherit; font-size:14px; text-align:left; cursor:pointer }
.gg-tv .tvs-tab .ico { width:28px; height:28px; margin-right:4px; flex:0 0 28px }
.gg-tv .tvs-tab .ico svg { width:28px; height:28px }
.gg-tv .tvs-tab .chev { margin-left:auto; color:var(--tv-text2) }
@media (hover:hover) { .gg-tv .tvs-tab:hover { background:var(--tv-hover) } }
.gg-tv .tvs-tab.on { background:var(--tv-hover); color:#fff; font-weight:600 }
.gg-tv .tvs-body { flex:1 1 auto; min-height:0; overflow-y:auto; padding:0 20px 12px; box-sizing:border-box }
.gg-tv .tvs-body .tvd-sec { margin:20px 0 4px; line-height:16px }
.gg-tv .tvs-row { display:flex; align-items:center; gap:0; min-height:50px }
.gg-tv .tvs-row .tvd-lbl { flex:0 0 auto; min-width:var(--lw, 120px); margin-right:0 }
.gg-tv .tvs-row .tvd-sel { flex:0 0 150px; width:150px } .gg-tv .tvs-row .tvd-sel.tvs-wide { flex-basis:180px; width:180px }
.gg-tv .tvs-row .tvd-chk { min-height:0; flex:0 0 auto; min-width:var(--lw, 120px) }
.gg-tv .tvs-row .tvd-chk.tvs-sub { margin-left:26px }
.gg-tv .tvs-sws { display:flex; align-items:center; gap:8px }
.gg-tv .tvs-sw { position:relative; width:34px; height:34px; box-sizing:border-box; border:1px solid var(--tv-field); border-radius:6px; display:grid; place-items:center; cursor:pointer; flex:0 0 34px }
@media (hover:hover) { .gg-tv .tvs-sw:hover { border-color:var(--tv-field-hover) } }
.gg-tv .tvs-sw i { width:22px; height:22px; border-radius:3px }
.gg-tv .tvs-sw input { position:absolute; inset:0; width:100%; height:100%; opacity:0; cursor:pointer; border:0; padding:0 }
.gg-tv #tvSet[data-sec="symbol"] .tvs-body { --lw:95px } .gg-tv #tvSet[data-sec="status"] .tvs-body { --lw:121px }
.gg-tv #tvSet[data-sec="scales"] .tvs-body { --lw:181px } .gg-tv #tvSet[data-sec="canvas"] .tvs-body { --lw:169px }
/* телефон: во весь экран — список разделов (строки 60, значок 28, шеврон), раздел — с «назад» слева от заголовка */
.gg-tv #tvSet.tvs-phone .tvs { width:100vw; height:100%; border-radius:0 }
.gg-tv #tvSet.tvs-phone .tvs-mid { display:block; overflow-y:auto }
.gg-tv #tvSet.tvs-phone .tvs-nav { display:none; padding:0 8px }
.gg-tv #tvSet.tvs-phone.tvs-list .tvs-nav { display:flex }
.gg-tv #tvSet.tvs-phone.tvs-list .tvs-body { display:none }
.gg-tv #tvSet.tvs-phone .tvs-tab { width:100%; flex-basis:60px; height:60px; padding:0 12px; font-weight:400; background:transparent; color:var(--tv-text) }
.gg-tv #tvSet.tvs-phone:not(.tvs-list) .tvs-back-btn { display:grid; margin:0 14px 0 -3px }
.gg-tv #tvSet.tvs-phone .tvd-head .tvd-x:last-child { margin-left:auto }
.gg-tv .tvd-btn[data-tvs="defaults"] { border-color:var(--tv-field); color:var(--tv-text) }
@media (hover:hover) { .gg-tv .tvd-btn[data-tvs="defaults"]:hover { background:transparent; border-color:var(--tv-field-hover); color:var(--tv-text) } }
.gg-tv .tvd-btn[data-tvs="defaults"]:active { background:var(--tv-hover); border-color:var(--tv-field); color:var(--tv-text) }

/* полоса навигации (компьютер): 24×24 #2e2e2e r4, значок 18, шаг 32, между группами 40; проявление .4 с */
.gg-tv .cx-nav { position:absolute; z-index:4; display:flex; gap:8px; padding:5px 4px; opacity:0; visibility:hidden; pointer-events:none; transition:opacity .4s ease, visibility .4s ease }
.gg-tv .cx-nav.on { opacity:1; visibility:visible; pointer-events:auto }
.gg-tv .cx-nav .g { display:flex; gap:8px; padding:0 4px }
.gg-tv .cx-nav-b { width:24px; height:24px; padding:0; border:0; border-radius:4px; background:#2e2e2e; color:var(--tv-text); display:grid; place-items:center; cursor:pointer; transition:color .3s ease }
@media (hover:hover) { .gg-tv .cx-nav-b:hover { background:var(--tv-sel) } }
.gg-tv .cx-nav-b.off { visibility:hidden }
.gg-tv .cx-rt { position:absolute; z-index:4; opacity:0; visibility:hidden; pointer-events:none; transition:color .3s ease, opacity .4s ease, visibility .4s ease }   /* tvd 21.10 */
.gg-tv .cx-rt.on { opacity:1; visibility:visible; pointer-events:auto }
/* кнопки панели: 24×24, фон графика, рамка 1 px #4a4a4a r4, значок 15, шаг 28 */
.gg-tv .cx-panes { position:absolute; inset:0; z-index:4; pointer-events:none }
.gg-tv .cx-pane-g { position:absolute; display:flex; gap:4px; opacity:0; visibility:hidden; pointer-events:none; transition:opacity .4s ease, visibility .4s ease }
.gg-tv .cx-pane-g.on { opacity:1; visibility:visible; pointer-events:auto }
.gg-tv .cx-pane-b { width:24px; height:24px; box-sizing:border-box; padding:0; border:1px solid var(--tv-div); border-radius:4px; background:#000; color:var(--tv-text); display:grid; place-items:center; cursor:pointer }
@media (hover:hover) { .gg-tv .cx-pane-b:hover { background:var(--tv-hover) } }
/* диапазоны внизу (компьютер): 14 px, кнопка высотой 38 с полями 6, после — черта 1×22 */
.gg-tv .cx-ranges { display:flex; align-items:center; order:0; height:100%; padding-right:4px; position:relative }
.gg-tv .cx-ranges::after { content:''; width:1px; height:22px; margin-left:4px; background:var(--tv-div) }
.gg-tv .cx-rng { height:38px; padding:0 6px; border:0; background:transparent; color:var(--tv-text); font:400 14px/18px var(--tv-font); cursor:pointer; position:relative; isolation:isolate }
.gg-tv .cx-rng::before { content:''; position:absolute; inset:7px 0; border-radius:4px; z-index:-1 }
@media (hover:hover) { .gg-tv .cx-rng:hover::before { background:var(--tv-hover) } }
/* телефон: лист «Date range» как у TV — строки 40, текст 16 с 42 px, фон под листом затемнён 70 % */
.gg-tv .as-sheet.cx-rng-sheet .cx-opt { padding-left:42px }
.gg-tv .cx-menu-back.on.dim { background:rgba(0,0,0,.7) }
/* телефон: кнопки строки GG-Shøt — после касания строки (TV: рамка 1 px var(--tv-focus), кнопки видны; касание в другом месте — прячутся) */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-indleg { left:6px; padding-left:4px; border-radius:4px }
  .gg-tv .cx-indleg .cx-leg-b { opacity:0; pointer-events:none }
  .gg-tv .cx-indleg.sel { box-shadow:inset 0 0 0 1px rgba(232,239,232,.22) }   /* tvui14: выбранная строка — тонкая черта кита, не синяя рамка TV */
  .gg-tv .cx-indleg.sel .cx-leg-b { opacity:1; pointer-events:auto }
}
/* окно индикаторов и поиск на компьютере — ширина TV 840; у индикаторов слева колонка разделов 200 (как у TV) */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv :is(#shInd, #shSym) .modal-sheet { max-width:840px }
  .gg-tv #shInd .modal-sheet { height:min(638px, 86vh); max-height:none; display:flex; flex-direction:column; box-sizing:border-box }
  .gg-tv #shInd .cx-sheet-body { flex:1 1 auto; display:flex; flex-direction:column; min-height:0 }
  .gg-tv #shInd #indList { flex:1 1 auto; min-height:0; display:grid; grid-template-columns:200px 1fr; gap:0 20px; padding:0 12px }
  .gg-tv .cx-ind-cats { display:flex; flex-direction:column; overflow-y:auto }
  .gg-tv .cx-ind-cats .kpi-label { margin:6px 12px 2px; line-height:30px }
  .gg-tv .cx-ind-cat { display:flex; align-items:center; gap:8px; flex:0 0 40px; height:40px; width:100%; box-sizing:border-box; padding:0 12px; border:0; border-radius:8px; background:transparent;
    color:var(--tv-text); font:400 14px/18px var(--tv-font); text-align:left; cursor:pointer }
  .gg-tv .cx-ind-cat .ico svg { width:28px; height:28px; display:block }
  @media (hover:hover) { .gg-tv .cx-ind-cat:hover { background:var(--tv-hover) } }
  .gg-tv .cx-ind-cat.on { background:var(--tv-sel); font-weight:600 }
  .gg-tv .cx-ind-rows { overflow-y:auto; min-height:0 }
  .gg-tv .cx-ind-rows .kpi-label:first-child { margin-top:8px }
  .gg-tv .cx-ind-none { padding:10px 12px; color:var(--tv-text2) }
}

/* ═════ tvui3 17.10 — палитра цвета, окно копии индикатора (замер p3/tv) ═════ */
.tvp { position:fixed; z-index:200; width:248px; box-sizing:border-box; padding:15px 12px 12px; background:var(--tv-pop, #1f1f1f); border-radius:6px; box-shadow:0 2px 4px rgba(0,0,0,.4);
  font-family:-apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; color:#dbdbdb }
.tvp[hidden] { display:none }
.tvp-grid { display:grid; grid-template-columns:repeat(10, 17px); column-gap:6px; row-gap:6px }
.tvp-c { width:17px; height:17px; padding:0; border:1px solid transparent; border-radius:2px; cursor:pointer; box-sizing:border-box; position:relative }
.tvp-c:nth-child(n+21):nth-child(-n+30) { margin-top:6px }   /* после двух первых строк — отступ 6, как у TV */
.tvp-c.on { box-shadow:0 0 0 2px #1f1f1f, 0 0 0 4px #dbdbdb }
@media (hover:hover) { .tvp-c:hover { transform:scale(1.15) } }
.tvp-sep { height:1px; margin:15px 0 10px; background:#4a4a4a }
.tvp-add { position:relative; display:grid; place-items:center; width:28px; height:28px; border-radius:4px; color:#dbdbdb; cursor:pointer }
@media (hover:hover) { .tvp-add:hover { background:#2e2e2e } }
.tvp-add input { position:absolute; inset:0; opacity:0; cursor:pointer; width:100%; height:100% }
.tvp-lbl { margin:7px 0 4px; font-size:14px; line-height:17px; color:#8c8c8c }
.tvp-op { display:flex; align-items:center; gap:12px }
.tvp-rng { flex:1 1 auto; -webkit-appearance:none; appearance:none; height:10px; border-radius:5px; margin:0;
  background:linear-gradient(to right, transparent, var(--c, #089981)), repeating-conic-gradient(#3d3d3d 0 25%, #1f1f1f 0 50%) 0 0 / 8px 8px; border:1px solid #4a4a4a }
.tvp-rng::-webkit-slider-thumb { -webkit-appearance:none; width:14px; height:14px; border-radius:50%; background:#fff; border:2px solid #0f0f0f; box-shadow:0 0 0 1px #575757 }
.tvp-rng::-moz-range-thumb { width:12px; height:12px; border-radius:50%; background:#fff; border:2px solid #0f0f0f }
.tvp-pct input { width:47px; height:26px; box-sizing:border-box; padding:0 3px; border:1px solid #575757; border-radius:4px; background:transparent; color:#dbdbdb; font:14px/1 inherit; text-align:right }
.gg-tv button.tvs-sw { padding:0; background:transparent }
.gg-tv .tvs-sw.pal-on { border:2px solid var(--tv-focus) }   /* образец, от которого открыта палитра (TV: синяя рамка 2) */
.gg-tv .tvi-num { flex:0 0 120px; width:120px; height:34px; box-sizing:border-box; padding:0 10px; border:1px solid var(--tv-field); border-radius:8px; background:transparent; color:var(--tv-text); font:14px var(--tv-font) }
.gg-tv .tvi-num:focus { outline:none; border-color:var(--tv-focus) }
.gg-tv .tvi-num::-webkit-inner-spin-button, .gg-tv .tvi-num::-webkit-outer-spin-button { -webkit-appearance:none; margin:0 }
.gg-tv .tvi-num { -moz-appearance:textfield; appearance:textfield }
.gg-tv #tvInd .tvd-body { min-height:120px }
/* окно индикаторов: строка без тумблера (щелчок — ещё одна копия), как у TV */
.gg-tv .cx-ind-add { cursor:pointer }

/* ── tvui5 17.10: выпадающие списки и свой выбор цвета, как у TV (замер p5/tv/m/p5_lists_desk.json, p5_picker_desk.json) ── */
.gg-tv button.tvd-dd { background-image:none; padding:0 7px 0 11px; display:flex; align-items:center; justify-content:space-between; gap:6px; text-align:left; cursor:pointer; -webkit-appearance:none; appearance:none }
.gg-tv button.tvd-dd .v { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.gg-tv button.tvd-dd .ch { flex:0 0 auto; display:grid; place-items:center; color:#dbdbdb; transition:transform .12s }
.gg-tv button.tvd-dd .ch svg { width:18px; height:18px }
.gg-tv button.tvd-dd.dd-on { border-color:var(--tv-focus, var(--tv-focus)) }
.gg-tv button.tvd-dd.dd-on .ch { transform:rotate(180deg) }
.tvdd { position:fixed; z-index:210; box-sizing:border-box; padding:6px 0; background:#1f1f1f; border-radius:10px; box-shadow:0 2px 4px rgba(0,0,0,.4); overflow:hidden; display:flex }
.tvdd[hidden] { display:none }
.tvdd-sc { flex:1 1 auto; overflow-y:auto; overscroll-behavior:contain; padding:0 6px; scrollbar-width:thin; scrollbar-color:#4a4a4a transparent }
.tvdd-r { display:block; width:100%; height:32px; box-sizing:border-box; padding:2px 8px; border:0; border-radius:8px; background:transparent; color:#dbdbdb; font:14px/28px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; text-align:left; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; cursor:pointer }
@media (hover:hover) { .tvdd-r:hover { background:#2e2e2e } }
.tvdd-r.on, .tvdd-r.on:hover { background:#f2f2f2; color:#0f0f0f }
.tvdd.sheet { left:0; right:0; bottom:0; top:auto; width:auto; max-height:70vh; border-radius:6px 6px 0 0; padding:6px 0 calc(6px + env(safe-area-inset-bottom)) }
.tvdd.sheet .tvdd-r { height:40px; font-size:16px; line-height:36px; padding:2px 14px }
.tvdd-back { position:fixed; inset:0; z-index:209; background:rgba(0,0,0,.7); display:none }
.tvdd-back.on { display:block }
.tvp-cust { display:flex; flex-wrap:wrap; align-items:center; gap:6px }
.tvp-cust .tvp-c { margin:0 }
.tvp-cust .tvp-add { margin-left:-6px }
.tvp-cust .tvp-c + .tvp-add { margin-left:-5px }
button.tvp-add { border:0; padding:0; background:transparent }
.tvk-top { display:flex; align-items:center; gap:8px; margin:-3px 0 10px }
.tvk-prev { flex:0 0 26px; width:26px; height:26px; border-radius:2px }
.tvk-hex { width:68px; height:26px; box-sizing:border-box; padding:0 5px 0 6px; border:1px solid #575757; border-radius:4px; background:transparent; color:#dbdbdb; font:14px/24px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif }
.tvk-hex:focus { outline:none; border-color:var(--tv-focus) }
.tvk-add { margin-left:auto; height:28px; padding:0 9px; border:1px solid #f2f2f2; border-radius:8px; background:#f2f2f2; color:#0f0f0f; font:14px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; cursor:pointer }
.tvk-main { display:flex; gap:7px; height:184px }
.tvk-sv { position:relative; width:200px; height:184px; border-radius:2px; background-image:linear-gradient(to top, #000, rgba(0,0,0,0)), linear-gradient(to right, #fff, rgba(255,255,255,0)); touch-action:none; cursor:crosshair }
.tvk-svp { position:absolute; width:14px; height:14px; margin:-7px 0 0 -7px; box-sizing:border-box; border:2px solid #fff; border-radius:50%; box-shadow:0 0 0 1px rgba(0,0,0,.35); pointer-events:none }
.tvk-hue { position:relative; width:17px; height:184px; border-radius:2px; background:linear-gradient(#f00 0, #ff0 17%, #0f0 33%, #0ff 50%, #00f 67%, #f0f 83%, #f00 100%); touch-action:none; cursor:pointer }
.tvk-hp { position:absolute; left:-2px; width:21px; height:9px; margin-top:-4.5px; box-sizing:border-box; border:2px solid #fff; border-radius:2px; box-shadow:0 0 0 1px rgba(0,0,0,.35); pointer-events:none }

/* ── tvui6 18.10: телефон — нижняя полоса и колёса как в приложении TV для iPhone (запись владельца, разбор p6) ── */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  /* порядок и шаг как в приложении: тикер (80), ТФ (64), рисование, индикаторы, «…», отмена, весь экран — по 44 (центры 166/210/254/304/348, у приложения 166/209/253/304/349) */
  .gg-tv .cx-top { padding-left:0; padding-right:0 }
  .gg-tv .cx-top .cx-sep-u.d-only { display:none !important }
  .gg-tv .cx-top .js-undo { order:6; margin-left:0 }   /* tvui8: тикер 104 + ТФ 64 + 5×44 = 388 — без отступа ничего не выходит за край 390 */
  .gg-tv .cx-top #fullT { order:7 }
  .gg-tv .cx-top :is(.js-redo, .js-layer).d-only { display:none !important }   /* в приложении их в полосе нет — в «…» (QA №10: ничего за краем) */
  .gg-tv .cx-top > .nav-btn.cx-tb { flex:0 0 44px; min-width:44px }
  .gg-tv .cx-top > .cx-sym { flex:0 0 80px; width:80px; max-width:80px; min-width:80px; padding:0 0 0 11px; justify-content:flex-start; touch-action:pan-x }
  .gg-tv .cx-top .cx-sym > svg { display:none }
  .gg-tv .cx-top .cx-sym .sig-quote { display:inline; font-size:0 }
  .gg-tv .cx-top .cx-sym .sig-quote::after { content:attr(data-q); font-size:16px }
  .gg-tv .cx-top .cx-tfbtn.sort-pill { flex:0 0 64px; width:64px; min-width:64px; padding:0 0 0 8px; justify-content:flex-start; touch-action:pan-x }
  .gg-tv .cx-top .cx-tfbtn.sort-pill > svg { display:none }
}
.cx-wheel { position:fixed; z-index:150; width:146px; height:161px; border-radius:10px; background:rgba(17,17,17,.87); pointer-events:none; opacity:0; transition:opacity .16s ease-out; overflow:hidden; contain:layout paint }
.cx-wheel.on { opacity:1; transition-duration:.1s }
.cx-wheel .it { position:absolute; left:25px; top:50%; display:flex; align-items:center; gap:6px; white-space:nowrap; color:#e8e8e8; font:400 20px/1 -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; transform-origin:0 50%; will-change:transform, opacity }
.cx-wheel .it .cx-coin { width:18px; height:18px; border-radius:50% }
.cx-wheel-ghost { position:fixed; inset:0; z-index:149; pointer-events:none; opacity:0; transition:opacity .16s linear }
.cx-wheel-ghost.on { opacity:1; transition-duration:.1s }
.cx-wheel-ghost span { position:absolute; transform:translateY(-50%); color:#333; font:400 16px/1 -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; white-space:nowrap; max-width:66px; overflow:hidden }   /* приложение: тот же размер, что подпись, очень тусклые (#2e–#33) */

/* ── tvui7 18.10: значок монеты в строке инструмента над легендами (как у TV) ── */
.cx-legicon { position:absolute; z-index:3; width:18px; height:18px; border-radius:50%; pointer-events:none; object-fit:cover }
.cx-legicon[hidden] { display:none }
/* tvui7: заголовки разделов в списке (Strategy: Crypto, Altcoins) */
.tvdd-r.tvdd-h, .tvdd-r.tvdd-h:hover { background:transparent; color:#8c8c8c; font-size:13px; cursor:default; height:30px; margin-top:4px }
/* tvui7: лист ТФ на телефоне как в приложении TV (кадр 0:15,7 ×3: чип 40 pt r7 #2c2c2e, поле 15, заголовки 20 pt, разделы 12 pt капсом #8c8c8c) */
.cx-tfsh-back { position:fixed; inset:0; z-index:180; background:rgba(0,0,0,.5); opacity:0; pointer-events:none; transition:opacity .25s ease-out }
.cx-tfsh-back.on { opacity:1; pointer-events:auto }
.cx-tfsh { position:fixed; left:0; right:0; bottom:0; z-index:181; max-height:78vh; overflow-y:auto; overscroll-behavior:contain; box-sizing:border-box;
  padding:6px 0 calc(16px + env(safe-area-inset-bottom)); background:#1c1c1e; border-radius:12px 12px 0 0; color:#e8e8e8;
  font:400 15px/1 -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; transform:translateY(100%); transition:transform .28s cubic-bezier(.2,.8,.2,1) }
.cx-tfsh.on { transform:none }
.cx-tfsh:not(.on) { pointer-events:none }   /* закрывающийся лист не ловит касание кнопки под ним */
.cx-tfsh .grab { width:36px; height:5px; margin:0 auto 8px; border-radius:3px; background:#48484a }
.cx-tfsh .hd { display:flex; align-items:center; justify-content:space-between; padding:6px 15px 14px }
.cx-tfsh .hd span, .cx-tfsh .ttl { font-size:20px; font-weight:500; color:#f2f2f2 }
.cx-tfsh .ttl { padding:22px 15px 14px }
.cx-tfsh .x { width:28px; height:28px; display:grid; place-items:center; padding:0; border:0; border-radius:50%; background:#2c2c2e; color:#9c9c9c }
.cx-tfsh .x svg { width:14px; height:14px }
.cx-tfsh .lab { padding:6px 15px 8px; font-size:12px; letter-spacing:.04em; color:#8c8c8c }
.cx-tfsh .row { display:flex; flex-wrap:wrap; gap:8px; padding:0 15px 12px }
.cx-tfsh .row.scroll { flex-wrap:nowrap; overflow-x:auto; scrollbar-width:none }
.cx-tfsh .row.scroll::-webkit-scrollbar { display:none }
.cx-tfsh .sep { height:1px; margin:2px 0 10px 15px; background:#2c2c2e }
.cx-chip { position:relative; flex:0 0 auto; min-width:52px; height:40px; padding:0 14px; box-sizing:border-box; border:0; border-radius:7px; background:#2c2c2e; color:#dbdbdb; font:400 15px/40px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; cursor:pointer; touch-action:manipulation; -webkit-user-select:none; user-select:none }
.cx-chip.on { background:#f2f2f2; color:#0f0f0f }
/* tvui7: длинный список на телефоне (Strategy) — как в приложении TV (запись 1:11): от вкладок окна до низа, строки ~28 pt, текст 14 */
.tvdd.sheet.tall { top:180px; max-height:none; border-radius:10px 10px 0 0 }
.tvdd.sheet.tall .tvdd-r { height:36px; font-size:14px; line-height:32px; padding:2px 12px }   /* tvui8: строки 36 pt, как в приложении */
.tvdd.sheet.tall .tvdd-r.tvdd-h { height:36px; color:#dbdbdb; font-size:14px }   /* заголовки индикатора — обычные строки, с отбивкой, как в приложении */

/* ── tvui8 18.10: нижняя полоса телефона как в приложении TV (кадры IMG_6496 7,2–7,7 с, 17,5–17,9 с; масштаб 1 px видео = 1,365 pt) ── */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  /* высота: три строки ленты с шагом 19 pt (сосед, подпись, сосед) — 60; снизу безопасная зона iOS и Telegram */
  .gg-tv .cx-top { height:60px; padding-bottom:max(env(safe-area-inset-bottom, 0px), var(--tg-sab, 0px)); border-top:0 }   /* в приложении черты над полосой нет */
  .gg-tv .cx-top > .cx-sym { flex:0 0 104px; width:104px; max-width:104px; min-width:104px; position:relative; overflow:visible }   /* до 9 знаков (DOGEUSDT, PENDLEUSDT) целиком */
  .gg-tv .cx-top .cx-tfbtn.sort-pill { position:relative; overflow:visible }
  .gg-tv .cx-top .cx-sym > span:first-child, .gg-tv .cx-top .cx-tfbtn .t { opacity:0 }   /* старые подписи остаются для проверок и чтения, видна лента */
  .gg-tv .cx-top .mstrip { position:absolute; left:12px; right:2px; top:-8px; bottom:-8px; overflow:hidden; pointer-events:none;
    -webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%); mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%) }
  .gg-tv .cx-top .cx-tfbtn .mstrip { left:8px }
  .gg-tv .cx-top .mstrip .mi { position:absolute; left:0; right:0; top:calc(50% - 10px); height:20px; line-height:20px; white-space:nowrap; overflow:hidden; color:#e8e8e8; text-align:left;
    font:500 16px/20px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; will-change:transform, opacity }   /* приложение: высота заглавных 11,3 pt ≈ 16 px */
  .gg-tv .cx-top .cx-tfbtn .mstrip .mi { font-size:16px }
  .gg-tv .cx-top .mstrip .mi.ovf { -webkit-mask-image:linear-gradient(to right, #000 calc(100% - 18px), transparent); mask-image:linear-gradient(to right, #000 calc(100% - 18px), transparent) }
}
.cx-wheel { transition:opacity .14s ease-out }
/* tvui8: строка инструмента на телефоне — как в приложении TV: 14 px, тикер светлым, название серым */
.cx-legsym { position:absolute; z-index:3; display:flex; align-items:center; gap:6px; height:18px; white-space:nowrap; overflow:hidden; pointer-events:none;
  font:400 14px/18px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif }
.cx-legsym[hidden] { display:none }
.cx-legsym .cx-coin { flex:0 0 16px; width:16px; height:16px; border-radius:50% }
.cx-legsym .tk { flex:0 0 auto; color:#dbdbdb }
.cx-legsym .nm { flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; color:#8c8c8c; white-space:pre }

/* tvui8: окна настроек на телефоне — как в приложении TV (кадр 1:10,6): заголовок 17 px обычным, вкладки 15 px с шагом 0/65/122 pt */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .tvd-title { font-size:17px; line-height:24px; font-weight:400 }
  .gg-tv .tvd-tabs { gap:25px }
  .gg-tv .tvd-tabs button { font-size:15px; font-weight:500 }
}

/* tvui9 18.10 */
.cx-wheel.on, .cx-wheel-ghost.on { transition-duration:.06s }   /* окно колеса проявляется быстрее — в приложении оно видно на ~50 мс раньше */
.cx-tfsh .hd span { font-size:15px; font-weight:600 }   /* «Date range» в приложении ~15 pt */
.cx-legfold { display:none }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-legsym .nm { color:#dbdbdb }   /* описание тем же тоном, что тикер (приложение TV) */
  .gg-tv .cx-indleg { font-size:12px; color:#8c8c8c }   /* строка индикатора — серее и мельче строки инструмента */
  .gg-tv .cx-indleg .nm { color:#8c8c8c }
  .gg-tv .cx-indleg #indEye { opacity:1; pointer-events:auto; width:30px; height:22px; color:#8c8c8c }   /* глаз виден всегда, как в приложении */
  .gg-tv .cx-indleg #indEye svg { width:17px; height:17px }
  .gg-tv .cx-legfold { display:flex; position:absolute; left:2px; top:100%; width:26px; height:22px; padding:0; border:0; background:none; color:#8c8c8c; align-items:center; justify-content:center; pointer-events:auto; -webkit-tap-highlight-color:transparent }
  .gg-tv .cx-legfold svg { width:16px; height:16px; transform:rotate(180deg) }
  .gg-tv .cx-indleg.fold > :not(.cx-legfold) { visibility:hidden }
  .gg-tv .cx-indleg.fold .cx-legfold { top:0 }
  .gg-tv .cx-indleg.fold .cx-legfold svg { transform:none }
}
/* tvui9: ячейка тикера как в приложении — ~6 знаков (у BTCUSDT последняя буква тает), подпись ТФ с ~94 pt; размер букв прежний (заглавные 11,3 pt) */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-top > .cx-sym { flex:0 0 82px; width:82px; max-width:82px; min-width:82px }
  .gg-tv .cx-top .cx-sym .mstrip { right:0;
    -webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%), linear-gradient(to right, #000 calc(100% - 14px), transparent 100%);
    -webkit-mask-composite:source-in; mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%), linear-gradient(to right, #000 calc(100% - 14px), transparent 100%); mask-composite:intersect }
}
/* tvui9: окно GG-Shøt на телефоне как в приложении TV (IMG_6496 1:10): подписи 12 в колонке 112, поле 91×30 сразу за подписью, ⓘ за полем, шаг строк 45, галки 16 с шагом 31 */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv #tvDlg .tvd-row { min-height:45px; gap:0 }
  .gg-tv #tvDlg .tvd-lbl { flex:0 0 112px; width:112px; margin-right:0; font-size:12px }
  .gg-tv #tvDlg .tvd-row .tvd-sel { flex:0 0 91px; width:91px; height:30px; font-size:12px; padding:0 5px 0 9px; gap:2px; border-radius:7px }
  .gg-tv #tvDlg .tvd-row .tvd-sel .ch svg { width:14px; height:14px }
  .gg-tv #tvDlg .tvd-row .tvd-i { margin-left:10px }
  .gg-tv #tvDlg .tvd-chk { min-height:31px; font-size:12px; gap:9px }
  .gg-tv #tvDlg .tvd-chk .box { width:16px; height:16px; flex:0 0 16px }
  .gg-tv #tvDlg .tvd-more { min-width:44px; padding:0 10px; letter-spacing:1px }
}

/* tvui10 18.10: окно GG-Shøt на телефоне — тело и низ чёрные, как в приложении (лист списка остаётся тёмно-серым); вкладки полужирные;
   значок i меньше и тусклее; «•••» — кольца своим значком, рамки ••• и Cancel тоньше; чипы листа ТФ 13; конец ячейки тикера тает мягче */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv #tvDlg .tvd { background:#000 }
  .gg-tv #tvDlg .tvd-foot { background:#000; border-top-color:#1f1f1f }
  .gg-tv #tvDlg .tvd-tabs button { font-weight:600 }
  .gg-tv #tvDlg .tvd-row .tvd-i { flex:0 0 15px; width:15px; height:15px; background:#3d3d3d; color:#000; font:600 10px/15px Georgia, serif }
  .gg-tv #tvDlg .tvd-btn:not(.tvd-ok) { border-width:.67px }
  .gg-tv #tvDlg .tvd-more { display:grid; place-items:center; color:#dbdbdb }
  .cx-chip { font-size:13px }
  .gg-tv .cx-top .cx-sym .mstrip { right:-6px;
    -webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%), linear-gradient(to right, #000 calc(100% - 17px), transparent 100%);
    mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%), linear-gradient(to right, #000 calc(100% - 17px), transparent 100%) }
}

/* tvui11 18.10: окно колеса как в приложении (IMG_6496 8,6 с, тот же масштаб): высота 165, скругление 13; фон, прозрачность (без размытия — сквозь окно подписи резкие) и проявление без масштаба — как были */
.cx-wheel { height:165px; border-radius:13px }
/* tvui12 18.10: конец тикера тает раньше — как в приложении (IMG_6496 9 с: буквы с 12 pt, 6-я — блёклая около 62–70 pt, подпись ТФ с 88,7 pt):
   лента тикера кончается на 76, тает последние 16 — между блёклой буквой и ТФ (90) зазор не меньше 14 pt (было вплотную: «BTCUSD1H») */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-top .cx-sym .mstrip { right:6px;
    -webkit-mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%), linear-gradient(to right, #000 calc(100% - 16px), transparent 100%);
    mask-image:linear-gradient(to bottom, transparent 0, #000 22%, #000 78%, transparent 100%), linear-gradient(to right, #000 calc(100% - 16px), transparent 100%) }
}


/* tvui14: на касание — никаких рамок фокуса браузера (WebKit обводил строку легенды и кнопки); клавиатура на компьютере — :focus-visible выше */
.gg-tv :focus:not(:focus-visible) { outline:none }
.gg-tv, .gg-tv * { -webkit-tap-highlight-color:transparent }

/* ── tvui15 18.10: ВИД GG CHARTS — стиль 5 (владелец 11:38 «Ок 5 подходит»): основа стиля 1 (кит GG), выбранные строки и чипы — заливка
   приглушённой мятой --gg-mint-muted (60 % --brand-mint + 40 % --bg-panel ≈ #069f67, тёмный текст #050706, контраст 5,9:1), колесо — тёмное окно
   с мятной чертой и мятной серединой. Цвета темы TV (--tv-*) переведены на кит: синий выбор TV → приглушённая мята ── */
@font-face{font-family:GGInter;src:url(fonts/inter-latin-wght-normal.woff2) format('woff2');font-weight:100 900;font-display:swap}
@font-face{font-family:GGGeist;src:url(fonts/geist-latin-wght-normal.woff2) format('woff2');font-weight:100 900;font-display:swap}
@font-face{font-family:GGMono,ui-monospace,monospace;src:url(fonts/jetbrains-mono-latin-400-normal.woff2) format('woff2');font-weight:400;font-display:swap}
@font-face{font-family:GGMono,ui-monospace,monospace;src:url(fonts/jetbrains-mono-latin-600-normal.woff2) format('woff2');font-weight:600;font-display:swap}
.gg-tv { --tv-focus:var(--gg-mint-muted); --tv-up:#2BC360; --tv-down:#e83a4e; --tv-pane:#050706; --tv-bar:#050706; --tv-pop:#0e100e; --tv-sel:#161a16; --tv-sel-hover:#1d211d;
  --tv-hover:#161a16; --tv-gap:#1d211d; --tv-div:#1d211d; --tv-field:#2a2f2a; --tv-field-hover:#3a423a; --tv-text:#e8efe8; --tv-text2:#8a968a; --tv-light:#e8efe8; --tv-ink:#050706 }
:root{--gg-mint-muted:color-mix(in srgb,#00FFA3 60%,#0e100e)}
body,.gg-tv{font-family:GGInter,-apple-system,sans-serif}
.gg-tv .cx-top{background:#050706!important;box-shadow:inset 0 1px 0 #1d211d!important}.gg-tv .cx-top .mstrip .mi{color:#e8efe8!important}
.cx-wheel{background:rgba(5,7,6,.95)!important;border-radius:14px!important;box-shadow:inset 0 0 0 1px color-mix(in srgb,#00FFA3 45%,transparent),0 0 18px rgba(0,255,163,.07)}.cx-wheel .it{color:#e8efe8!important}.cx-wheel .it.c{color:var(--gg-mint-muted)!important}
.cx-legsym .tk{color:#e8efe8!important}.cx-legsym .nm{color:#8a968a!important}.gg-tv .cx-indleg,.gg-tv .cx-indleg .nm{color:#6b736b!important}
.cx-ggmark{color:#2BC360!important;opacity:.55!important}
.cx-tfsh{background:#0e100e!important;border-top:1px solid #1d211d}.cx-tfsh .lab{color:#6b736b!important;letter-spacing:.12em!important}.cx-tfsh .sep{background:#1d211d!important}
.cx-chip{background:#111311!important;border:1px solid #1d211d!important;color:#e8efe8!important;border-radius:10px!important}.cx-chip.on{background:var(--gg-mint-muted)!important;color:#050706!important;border-color:var(--gg-mint-muted)!important}
.gg-tv #tvDlg .tvd,.gg-tv #tvDlg .tvd-foot{background:#050706!important}.gg-tv .tvd-tabs button.on:after{background:#00FFA3!important}.gg-tv .tvd-tabs::after{background:#1d211d!important}
.gg-tv #tvDlg .tvd-row .tvd-sel{border-color:#2a2f2a!important;background:#0a0c0a!important}.gg-tv .tvd-chk input:checked+.box{background:#2BC360!important;border-color:#2BC360!important}
.gg-tv .tvd-btn.tvd-ok{background:#00FFA3!important;border-color:#00FFA3!important;color:#001a10!important}.tvdd.sheet{background:#0e100e!important}.tvdd-r.on{color:#050706!important;background:var(--gg-mint-muted)!important}
#menu.as-sheet,.gg-tv .cx-menu{background:#0e100e!important}#menu .cx-opt.active{background:var(--gg-mint-muted)!important;color:#050706!important}

/* tvui16: лист Drawings (телефон) — плитки инструментов в три столбца, поиск, разделы чипами листа ТФ */
.cx-dfind { display:block; box-sizing:border-box; width:calc(100% - 30px); height:36px; margin:0 15px 12px; padding:0 12px; border-radius:10px; border:1px solid #1d211d; background:#111311; color:#e8efe8; font:400 15px/36px GGInter,-apple-system,sans-serif; outline:none }
.cx-dfind::placeholder { color:#6b736b }
.cx-dgrid { display:grid; grid-template-columns:repeat(3, 1fr); gap:8px; padding:4px 15px 18px; min-height:172px; align-content:start }
.cx-dtile { position:relative; height:78px; padding:6px 4px; border-radius:10px; border:1px solid #1d211d; background:#111311; color:#e8efe8; display:flex; flex-direction:column; align-items:center; justify-content:center; gap:7px; font:400 12px/1.2 GGInter,-apple-system,sans-serif; text-align:center; cursor:pointer; touch-action:manipulation; -webkit-user-select:none; user-select:none }
.cx-dtile svg { width:22px; height:22px; flex:0 0 auto }
.cx-dtile:active { background:#161a16 }
.cx-dtile .st { position:absolute; top:5px; right:7px; font-style:normal; font-size:11px; line-height:1; color:var(--gg-mint-muted) }

/* tvui16: лист «…» (как Analysis hub у TV) — те же плитки, что в листе Drawings; включённое — черта приглушённой мятой */
.cx-dtile.on { border-color:var(--gg-mint-muted); color:#e8efe8 }
.cx-dtile.on svg { color:var(--gg-mint-muted) }
.cx-hub .cx-dgrid { min-height:0; padding-bottom:10px }
.cx-hub .row { padding-bottom:12px }

/* tvui16b: в режиме рисования на телефоне плашки с именем инструмента над графиком нет — она закрывала метки слоя (Short Printed) у низа;
   выбранный инструмент подсвечен в полосе рисования */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv #cx.strip-on .cx-pill { display:none !important } }

/* tvui16b: панель выбранного рисунка на телефоне — вверху графика под легендой (у TV — над рисунком у верха), не у низа, где метки слоя и знак GG;
   кнопки как у TV: настройки, цвет (черта текущего цвета), толщина, удалить, «…» (копия, замок) */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-float { top:max(48px, var(--legB, 48px)); bottom:auto }
  .gg-tv .cx-float [data-f="clone"], .gg-tv .cx-float [data-f="lock"] { display:none }
}
.cx-float .cx-fmore { display:none }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv .cx-float .cx-fmore { display:flex } }
.cx-float .cx-fcol { position:relative }
.cx-float .cx-fcol i { position:absolute; left:11px; right:11px; bottom:7px; height:2px; border-radius:1px; background:#e8efe8 }
.cx-float .cx-fw b { font:500 12px/1 GGInter,-apple-system,sans-serif; color:#e8efe8 }
.cx-float .cx-fw[hidden] { display:none }   /* drw2 22.10: Bars pattern — colour only, no line width (TV) */
.cx-float .cx-fcol[hidden] { display:none }   /* iconcol 22.10: emoji Icon / Ghost feed — no colour button (hidden alone lost to .nav-btn display) */
.cx-samp.cx-bpm { flex-wrap:wrap }   /* drw2 22.10: Bars pattern Mode on the phone — 7 names in rows, each on one line */
.cx-samp.cx-bpm button { flex:1 1 30%; white-space:nowrap; padding:0 8px }
.cx-swatch { display:inline-block; width:14px; height:14px; border-radius:3px }

/* tvui16c: панель рисунка — над самим рисунком (main.js placeFloat), ручка ⋮⋮ слева; цвет — сетка образцов */
.cx-float .cx-fgrip { display:grid; grid-template-columns:repeat(2, 3px); gap:3px; padding:8px 8px 8px 0; margin-left:-6px; cursor:grab; touch-action:none }
.cx-float .cx-fgrip i { width:3px; height:3px; border-radius:50%; background:#6b736b }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv .cx-float .t { display:none } }
.cx-swpop { position:absolute; z-index:20; display:none; grid-template-columns:repeat(5, 30px); gap:8px; padding:10px; border-radius:12px; background:#0e100e; box-shadow:inset 0 0 0 1px #1d211d, 0 8px 24px rgba(0,0,0,.5) }
.cx-swpop.on { display:grid }
.cx-swpop .sw { width:30px; height:30px; padding:0; border:0; border-radius:8px; cursor:pointer; box-shadow:inset 0 0 0 1px rgba(255,255,255,.08) }
.cx-swpop .sw.on { box-shadow:0 0 0 2px #0e100e, 0 0 0 4px var(--gg-mint-muted) }

/* tvui17: сетка образцов поверх окон настроек; толщина линии индикатора рядом с цветом */
.cx-swpop { z-index:400 }
.gg-tv .tvi-w { flex:0 0 64px; width:64px; height:30px; margin-left:8px; padding:0 8px }
/* tvui18: стол как у TV — избранные интервалы кнопками у кнопки интервала; звезда в меню интервалов (видна при наведении, избранная — всегда) */
.cx-tffavs{display:inline-flex;align-items:center;gap:2px}
.cx-tff{height:30px;min-width:30px;padding:0 7px;border:0;border-radius:6px;background:transparent;color:var(--tv-text,#dbdbdb);font:500 14px/30px var(--tv-font,inherit);cursor:pointer}
.cx-tff:hover{background:#1d211d}
.cx-tff.on{color:var(--gg-mint-muted,#069f67)}
@media (max-width:1099px){.cx-tffavs{display:none}}
#menu .cx-opt .st{margin-left:auto;padding:0 2px 0 12px;color:#8c8c8c;opacity:0;font-size:14px;line-height:1;cursor:pointer}
#menu .cx-opt:hover .st{opacity:.8}
#menu .cx-opt .st.on{opacity:1;color:var(--gg-mint-muted,#069f67)}
.cx-tfbtn.fav-cur .t{display:none}
#menu .cx-opt.active .st.on{color:#050706}
/* tvui19c: окно колеса монет и ТФ — без мятной каймы, подложка сплошная (график за именами не читается); длинным именам — шрифт на шаг меньше */
.cx-wheel{background:#050706!important;box-shadow:0 10px 28px rgba(0,0,0,.65)!important}
.cx-wheel.sm .it{font-size:17px}
/* tvui19c (владелец: «Там вообще звёзды не нужны»): на чипах ТФ звёзд нет — избранное долгим касанием, отклик — короткая пульсация чипа;
   на компьютере звезда в меню интервалов только у строки под мышью */
.cx-tfsh .cx-chip.pulse{animation:ggpulse .32s ease-out}
@keyframes ggpulse{0%{transform:scale(1)}40%{transform:scale(1.08)}100%{transform:scale(1)}}
#menu .cx-opt .st,#menu .cx-opt .st.on{opacity:0!important}
#menu .cx-opt:hover .st{opacity:.6!important;color:#e8efe8!important}
#menu .cx-opt:hover .st.on{opacity:.9!important}
#menu .cx-opt.active:hover .st{color:#f4f7f4!important}
/* tvui19c (владелец: «Индикатор меню не продумал»): лист индикаторов на телефоне — снизу, в пределах видимой области телеграма (его шапка
   и вырез не закрывают заголовок), полоска-ручка, заголовок, ×; справа у строки — отметка «на графике» и звезда избранного */
.gg-tv #shInd .modal-sheet{height:auto!important;max-height:calc(var(--tg-viewport-stable-height,100dvh) - max(env(safe-area-inset-top,0px),var(--tg-safe-area-inset-top,0px)) - var(--tg-content-safe-area-inset-top,0px) - 16px)!important;border-radius:14px 14px 0 0!important;padding-top:0!important;align-self:flex-end;margin-top:auto;display:flex;flex-direction:column}
.gg-tv #shInd .cx-sheet-body{overflow-y:auto;min-height:0}
.gg-tv #shInd{align-items:flex-end}
.cx-ind-r{display:flex;align-items:center;gap:10px;margin-left:auto}
.cx-ind-on{color:var(--gg-mint-muted,#069f67);font-size:14px;min-width:14px;text-align:center}
/* tvui19d: звезда избранного индикатора — только на компьютере и только у строки под мышью (как в меню интервалов); на телефоне — долгое касание */
.cx-ind-star{margin-left:auto;border:0;background:transparent;padding:4px 6px;font-size:13px;line-height:1;color:#e8efe8;opacity:0;cursor:pointer}
.toggle-row:hover .cx-ind-star{opacity:.5}.toggle-row:hover .cx-ind-star.on{opacity:.9}
#indList .toggle-row.pulse{animation:ggpulse .32s ease-out}
/* tvui19d: тумблер в стиле 5 — включённый с приглушённой мятой (было белое, как у TV) */
.gg-tv .toggle.on{background:var(--gg-mint-muted,#069f67)!important}
.gg-tv .toggle.on .toggle-knob{background:#e8efe8!important}
/* tvui19d: имя индикатора — одной строкой, длинное — с «…» (не переносится на вторую) */
#indList .toggle-row-left{min-width:0;overflow:hidden;flex:1 1 auto}
#indList .toggle-row .name{white-space:nowrap;overflow:hidden;text-overflow:ellipsis;min-width:0;flex:0 1 auto}
#indList .toggle-row .sub{white-space:nowrap;flex:0 0 auto}
/* tvui20: полоска навигации у низа графика (компьютер) — карточка кита, появляется под мышью у шкалы времени */
/* tvui21 (владелец: «Идентичность» с TV, запись IMG_6521): отпустил колесо — график тускнеет до ~44 % за 150 мс, новые свечи — сразу
   в полную яркость; окно колеса — полупрозрачное серое с размытием (свечи за ним едва видны, текст не читается), как у TV */
#chartSlot{transition:filter .12s ease-out}
#chartSlot.cx-dim{filter:brightness(.45)}
#chartSlot.cx-undim{transition:none!important}
.cx-wheel{background:rgba(46,48,46,.74)!important;-webkit-backdrop-filter:blur(7px);backdrop-filter:blur(7px);box-shadow:none!important}
/* tvui22 B: GG-Shøt — «удалить» и «…» видны у выбранной строки (телефон) или под мышью (компьютер); «On chart» в окне индикаторов */
.gg-tv .cx-indleg .cx-leg-x{display:none}
.gg-tv .cx-indleg.sel .cx-leg-x,.gg-tv .cx-indleg.hov .cx-leg-x{display:inline-flex}
.cx-onhead{display:flex;align-items:center;justify-content:space-between}
.cx-rmall{border:0;background:transparent;color:var(--text-dim,#8a968a);font:inherit;font-size:12px;letter-spacing:0;text-transform:none;cursor:pointer;padding:4px 0}
.cx-onb{width:34px;height:30px;display:grid;place-items:center;border:0;border-radius:6px;background:transparent;color:#e8efe8;cursor:pointer;padding:0}
.cx-onb svg{width:18px;height:18px}
.cx-onb:active,.cx-onb:hover{background:#1d211d}
/* tvui22 E: цвет рисунка — палитра TV сеткой 10 × 7 (текущий в кольце), непрозрачность; толщина и вид линии — образцами; оболочка листа — стиль 5 */
.cx-swpop{grid-template-columns:repeat(10,22px)!important;gap:5px!important}
.cx-swpop .sw{width:22px!important;height:22px!important;border-radius:5px!important}
#menu.cx-st-sheet .cx-sts{padding:4px 14px 12px}
.cx-swgrid{display:grid;grid-template-columns:repeat(10,1fr);gap:6px;margin:4px 0 10px}
.cx-sw{aspect-ratio:1;border:0;border-radius:5px;padding:0;cursor:pointer;box-shadow:inset 0 0 0 1px rgba(255,255,255,.08)}
.cx-sw.on{box-shadow:0 0 0 2px #0e100e,0 0 0 4px var(--gg-mint-muted,#069f67)}
.cx-oprow{display:flex;align-items:center;gap:12px;margin:2px 0 12px;color:#e8efe8;font-size:14px}
.cx-oprow input{flex:1;accent-color:var(--gg-mint-muted,#069f67)}
.cx-oprow b{font-weight:400;min-width:40px;text-align:right;color:#8a968a}
.cx-samp{display:flex;gap:8px;margin:4px 0 12px}
.cx-samp button{flex:1;height:40px;display:grid;place-items:center;border:1px solid #1d211d;border-radius:10px;background:#111311;color:#e8efe8;cursor:pointer;padding:0}
.cx-samp button.on{border-color:var(--gg-mint-muted,#069f67);background:color-mix(in srgb,var(--gg-mint-muted,#069f67) 14%,#111311)}
/* tvui22 B2: подсказка ⓘ — пузырь поверх окна (не вставка в строку), цвета кита */
.cx-tippop{position:fixed!important;z-index:600;margin:0!important;padding:10px 12px!important;background:#1d211d!important;color:#e8efe8!important;border:1px solid #2a2f2a!important;border-radius:10px!important;box-shadow:0 10px 28px rgba(0,0,0,.55);font-size:13px;line-height:1.45;pointer-events:auto}
/* tvui23 F (владелец: «ГГ не должен по-другому выглядеть, это ведь тоже индикатор»): строка GG-Shøt — как строки индикаторов: текст цветом и
   весом заголовка легенды, значки (глаз, настройки, удалить, «…») только у выбранной строки (касание) или под мышью; скрытая — бледнее, глаз виден */
.gg-tv .cx-indleg .nm,.gg-tv .cx-indleg .nm *{color:#dbdbdb!important;font-weight:400!important;font-size:13px!important}
.gg-tv .cx-indleg .cx-leg-b{display:none!important}
.gg-tv .cx-indleg.sel .cx-leg-b,.gg-tv .cx-indleg.hov .cx-leg-b{display:inline-flex!important;opacity:1!important}
.gg-tv .cx-indleg.off .nm{opacity:.5}
.gg-tv .cx-indleg.off .js-layer-eye{display:inline-flex!important;opacity:1!important}
/* окно индикаторов: строки одной высоты, короткое имя — мелко сразу за полным */
#indList .toggle-row{min-height:44px}
#indList .toggle-row .sub{font-size:12px;margin-left:8px;opacity:.8}
/* tvui23 C2: телефон в альбомной ориентации — как приложение TV (IMG_6522): одна полоса снизу высотой ~40, в ней по порядку: тикер, ТФ,
   рисование, индикаторы, тип графика, слой GG, «…», отмена, весь экран, повтор; поля слева и справа — под вырез экрана */
@media (orientation: landscape) and (max-height: 500px) and (pointer: coarse) {
  .gg-tv .cx-top { height:40px !important; padding-left:max(env(safe-area-inset-left, 0px), var(--tg-safe-area-inset-left, 0px)) !important; padding-right:max(env(safe-area-inset-right, 0px), var(--tg-safe-area-inset-right, 0px)) !important; padding-bottom:0 !important }
  .gg-tv .cx-body { padding-left:max(env(safe-area-inset-left, 0px), var(--tg-safe-area-inset-left, 0px)); padding-right:max(env(safe-area-inset-right, 0px), var(--tg-safe-area-inset-right, 0px)) }
  .gg-tv .cx-top #typeBtn, .gg-tv .cx-top .js-redo.d-only, .gg-tv .cx-top .js-layer.d-only { display:flex !important }
  .gg-tv .cx-top > .cx-sym { order:1 } .gg-tv .cx-top .cx-tfbtn { order:2 } .gg-tv .cx-top #bDraw { order:3 } .gg-tv .cx-top #indBtn { order:4 }
  .gg-tv .cx-top #typeBtn { order:5 } .gg-tv .cx-top .js-layer { order:6 } .gg-tv .cx-top #moreBtn { order:7 } .gg-tv .cx-top .js-undo { order:8; margin-left:auto !important }
  .gg-tv .cx-top #fullT { order:9 } .gg-tv .cx-top .js-redo { order:10 }
}
@media (orientation: landscape) and (max-height: 500px) and (pointer: coarse) {
  /* tvui23 C3: листы снизу в альбомной — по центру шириной до 480 и в высоту экрана (как листы приложения TV в альбомной), образцы цвета 30 px */
  #menu.as-sheet { left:50% !important; right:auto !important; width:min(480px, 100vw) !important; transform:translateX(-50%); max-height:calc(100vh - 12px) !important; overflow-y:auto }
  .cx-swgrid { grid-template-columns:repeat(10, 30px); justify-content:space-between }
  .gg-tv .cx-sheet .modal-sheet { max-width:480px; margin-left:auto; margin-right:auto }
}
/* tvui24: «^» сворачивания легенды — под всеми строками (GG-Shøt и индикаторы), не поверх «EMA…» */
.gg-tv .cx-indleg:not(.fold) .cx-legfold { top:var(--foldTop, 100%) }
/* tvui24 (владелец: «все другие окна отличаются от окна индикаторов по стилю»): окно индикаторов — на той же системе, что листы Drawings,
   интервалов и «…» (.cx-tfsh): фон #0e100e и черта #1d211d, углы 12, ручка 36×5 #48484a, заголовок 20/500 #f2f2f2, × — круг 28 #2c2c2e,
   поиск как .cx-dfind (36, углы 10, #111311), подписи разделов 12 прописными #6b736b с разрядкой .12em, строки 44 текстом 15 #e8efe8, выбранное — мята */
.gg-tv #shInd .modal-sheet { background:#0e100e !important; border-top:1px solid #1d211d !important; border-radius:12px 12px 0 0 !important; padding:6px 0 calc(16px + env(safe-area-inset-bottom, 0px)) !important; color:#e8efe8; font:400 15px/1.2 -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif; box-shadow:none !important }
.gg-tv #shInd .modal-grabber { display:block !important; width:36px; height:5px; margin:0 auto 8px; border-radius:3px; background:#48484a; opacity:1 }
.gg-tv #shInd .modal-head { display:flex; align-items:center; justify-content:space-between; padding:6px 15px 14px !important; margin:0 !important; border:0 !important; min-height:0 }
.gg-tv #shInd .modal-title { font-size:20px !important; font-weight:500 !important; color:#f2f2f2 !important; letter-spacing:0 }
.gg-tv #shInd .modal-close { width:28px !important; height:28px !important; min-width:28px; display:grid; place-items:center; padding:0 !important; border:0 !important; border-radius:50% !important; background:#2c2c2e !important; color:#9c9c9c !important }
.gg-tv #shInd .modal-close svg { width:14px !important; height:14px !important }
.gg-tv #shInd .cx-sheet-body { padding:0 !important }
.gg-tv #shInd .screener-search { display:flex !important; align-items:center; gap:8px; box-sizing:border-box; width:calc(100% - 30px) !important; height:36px !important; margin:0 15px 12px !important; padding:0 12px !important; border-radius:10px !important; border:1px solid #1d211d !important; background:#111311 !important; color:#6b736b }
.gg-tv #shInd .screener-search svg { width:16px; height:16px; color:#6b736b }
.gg-tv #shInd .screener-search input { flex:1; height:34px; border:0 !important; background:transparent !important; color:#e8efe8 !important; font:400 15px -apple-system, BlinkMacSystemFont, "Trebuchet MS", Roboto, Ubuntu, sans-serif !important; padding:0 !important; outline:none }
.gg-tv #shInd .screener-search input::placeholder { color:#6b736b }
.gg-tv #shInd .kpi-label { padding:6px 15px 8px !important; margin:0 !important; font-size:12px !important; font-weight:400 !important; letter-spacing:.12em !important; text-transform:uppercase; color:#6b736b !important }
.gg-tv #shInd .toggle-row { min-height:44px !important; padding:0 15px !important; margin:0 !important; border:0 !important; border-radius:0 !important; background:transparent }
.gg-tv #shInd .toggle-row:active { background:#111311 }
.gg-tv #shInd .toggle-row .name { font-size:15px !important; font-weight:400 !important; color:#e8efe8 !important }
.gg-tv #shInd .toggle-row .sub { font-size:12px !important; color:#6b736b !important; margin-left:8px; opacity:1 !important }
.gg-tv #shInd .cx-ind-on { color:var(--gg-mint-muted, #069f67) !important; font-size:15px }
.gg-tv #shInd .cx-onb { width:28px; height:28px; border-radius:50%; background:#1d211d; color:#9c9c9c; margin-left:8px }
.gg-tv #shInd .cx-onb svg { width:14px; height:14px }
.gg-tv #shInd .cx-rmall { font-size:12px; letter-spacing:0; text-transform:none; color:#9c9c9c }
/* tvui24: окно индикаторов — высотой как остальные листы (до 78 % экрана и в видимой области телеграма) */
.gg-tv #shInd .modal-sheet { max-height:min(78vh, calc(var(--tg-viewport-stable-height, 100dvh) - max(env(safe-area-inset-top, 0px), var(--tg-safe-area-inset-top, 0px)) - var(--tg-content-safe-area-inset-top, 0px) - 16px)) !important }
/* tvui24: заголовок и затемнение — как у листа Drawings (замер: заголовок 15/600 #f2f2f2, фон под листом rgba(0,0,0,.5)) */
.gg-tv #shInd .modal-title { font-size:15px !important; font-weight:600 !important }
.gg-tv #shInd.cx-sheet, .gg-tv #shInd.modal-backdrop { background:rgba(0,0,0,.5) !important }
/* pH 19.10: уровни Фибо в листе рисунка — переключатель, значение, цвет в строку (как у TV) */
.cx-fibgrid{display:grid;grid-template-columns:1fr 1fr;gap:6px 14px;margin:2px 0 12px}
.cx-fibrow{display:flex;align-items:center;gap:8px}
.cx-fibrow input{width:64px;min-width:0;height:30px;padding:0 6px;background:transparent;color:var(--tv-text,#d1d4dc);border:1px solid var(--tv-div,#2a2e39);border-radius:6px;font-size:14px}
.cx-fibrow .cx-sw{width:22px;height:22px;flex:none}
.cx-oprow input[type=number]{height:32px;padding:0 8px;background:transparent;color:var(--tv-text,#d1d4dc);border:1px solid var(--tv-div,#2a2e39);border-radius:6px;font-size:14px}
/* pH: вкладки листа рисунка (Style / Inputs / Text / Coordinates / Visibility) — те же вкладки, что в окне индикатора */
.gg-tv .cx-dtabs{display:flex;margin:0 0 12px;gap:18px;overflow-x:auto;scrollbar-width:none}
.gg-tv .cx-dtabs::-webkit-scrollbar{display:none}
.gg-tv .cx-dtabs button{flex:none;background:none;border:0;position:relative;font-size:15px;color:var(--tv-text2,#a3a6af)}
.gg-tv .cx-dtabs button.on{color:var(--tv-text)}
.gg-tv .cx-dtabs button.on:after{content:'';position:absolute;left:0;right:0;bottom:-4px;height:4px;border-radius:2px;background:var(--tv-light)}
#menu.cx-st-sheet{max-height:78vh;overflow-y:auto;overscroll-behavior:contain}
.gg-tv #menu.cx-st-sheet .cx-dtabs{position:sticky;top:0;z-index:2;background:inherit;padding:10px 14px 6px;margin:0 0 4px}
#menu.cx-st-sheet .cx-dpane:not([data-dpane=style]){padding:4px 14px 12px}
.cx-oprow input[type=text]{flex:1;height:32px;padding:0 8px;background:transparent;color:var(--tv-text,#d1d4dc);border:1px solid var(--tv-div,#2a2e39);border-radius:6px;font-size:14px}
/* pH: пока открыт лист настроек рисунка, панель объекта над ним не висит (как у TV — окно настроек закрывает панель) */
body:has(#menu.cx-st-sheet.on) #float{visibility:hidden}
.gg-tv #menu.cx-st-sheet .cx-dtabs{overflow:visible;min-height:34px;align-items:flex-end}
/* p2: несколько графиков — сетка ячеек у хозяина; телефон: портрет друг над другом, альбом рядом; компьютер 2 / 3 / 4 */
body.gg-mc-host:not(.gg-mc-dh) :is(.cx-top, .cx-left, .cx-main, #bar, #strip){display:none!important}
body.gg-mc-host:not(.gg-mc-dh) .cx-right{margin-left:auto}
/* wlD2: desktop host — its top bar, drawing bar and watchlist stay; the grid of cells covers the chart area (main.js placeGrid) */
body.gg-mc-dh .cx-main{visibility:hidden}
/* wlD2: a desktop cell — only the chart (legend, price and time axes); TV has one toolbar for all cells */
body.gg-mc-deskcell :is(.cx-top, .cx-left, .cx-right, .cx-foot, #bar, #strip, .cx-wheel, .cx-wheel-ghost){display:none!important}   /* wlD: the host keeps its watchlist on the right of the grid (computer) */
#mcGrid{position:fixed;inset:0;display:grid;gap:1px;background:var(--tv-div,#2a2e39);z-index:1}
#mcGrid iframe{border:0;width:100%;height:100%;display:block;background:#000}
#mcGrid.mc-n2{grid-template-rows:1fr 1fr}
#mcGrid.mc-n3{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}
#mcGrid.mc-n3 iframe:first-child{grid-row:1 / span 2}
#mcGrid.mc-n4{grid-template-columns:1fr 1fr;grid-template-rows:1fr 1fr}
@media (min-aspect-ratio:1/1){#mcGrid.mc-n2{grid-template-rows:1fr;grid-template-columns:1fr 1fr}}
/* p3: дерево объектов, окно данных, панель повтора — оболочка стиля 5 */
.cx-otrow{display:flex;align-items:center;gap:4px;min-height:40px;border-bottom:1px solid var(--tv-div,#2a2e39)}
.cx-otrow .cx-otname{flex:1;text-align:left;background:none;border:0;color:var(--tv-text,#d1d4dc);font-size:14px;padding:8px 0;cursor:pointer}
.cx-otb{width:34px;height:34px;display:grid;place-items:center;background:none;border:0;color:var(--tv-text2,#a3a6af);border-radius:6px;cursor:pointer;padding:0}
.cx-otb svg{width:20px;height:20px}.cx-otb.on{color:var(--tv-light,#2962ff)}
.cx-otempty{color:var(--tv-text2,#a3a6af);padding:8px 0}
.cx-datawin{position:absolute;left:8px;top:calc(var(--legB,48px) + 8px);z-index:5;min-width:170px;padding:8px 10px;border-radius:8px;background:rgba(19,23,34,.92);border:1px solid var(--tv-div,#2a2e39);font-size:12px;color:var(--tv-text,#d1d4dc);pointer-events:none}
.cx-datawin div{display:flex;justify-content:space-between;gap:12px;line-height:18px}.cx-datawin span{color:var(--tv-text2,#a3a6af)}.cx-datawin b{font-weight:400}
/* tvd 21.10: replay control bar as TV — icon buttons (own icons), speed as text; floats centred over the bottom of the panes, above the time axis
   (placed by rpPlace, no layout change); the select-bar line #2962FF and the shade right of it take no pointer events */
.cx-replay{position:absolute;left:50%;top:auto;bottom:40px;transform:translateX(-50%);z-index:6;display:flex;align-items:center;gap:2px;padding:2px;border-radius:6px;background:var(--tv-pop,#1f1f1f);box-shadow:var(--tv-shadow,0 2px 4px rgba(0,0,0,.4))}
.cx-replay .nav-btn.cx-tb{width:34px;height:34px;padding:0;display:grid;place-items:center}
.cx-replay .nav-btn.cx-tb.cx-rp-spd{width:auto;min-width:40px;padding:0 8px!important;font:500 13px/1 var(--tv-font,-apple-system,sans-serif);color:var(--tv-text,#dbdbdb)}
.cx-replay .nav-btn.cx-tb svg{width:28px;height:28px}
/* gglive 22.10: the replay panel's close — after a divider at the right end (TV) */
.cx-replay .cx-rp-sep{width:1px;height:22px;margin:0 3px;background:var(--tv-div,#2e2e2e);flex:none}
.cx-rpsel{position:absolute;z-index:3;pointer-events:none;display:none}
.cx-rpsel.on{display:block}
.cx-rpsel[hidden]{display:none!important}
.cx-rpsel .sh{position:absolute;inset:0 0 0 1px;background:var(--rp-shade,rgba(0,0,0,.6))}
.cx-rpsel .ln{position:absolute;left:0;top:0;bottom:0;width:1px;background:#2962FF}
.cx-snack{position:fixed;left:50%;bottom:84px;transform:translateX(-50%);z-index:95;padding:10px 16px;border-radius:8px;background:#2a2e39;color:#d1d4dc;font-size:14px;opacity:0;pointer-events:none;transition:opacity .15s}
.cx-snack.on{opacity:1}
.cx-icgrid{display:grid!important;grid-template-columns:repeat(8,1fr);gap:6px}.cx-icgrid button{font-size:22px;height:40px;padding:0}
/* p5: «+» у шкалы цены под перекрестием (как у TV) — та же кнопка панели, без своей подписи */
.cx-axplus{position:absolute;left:0;top:0;z-index:7;width:22px;height:22px;display:grid;place-items:center;padding:0;border:0;border-radius:4px;background:var(--tv-div,#2a2e39);color:var(--tv-text,#d1d4dc);cursor:pointer}
.cx-axplus svg{width:18px;height:18px}
.cx-axplus[hidden]{display:none}
/* p6: у монеты есть стратегия GG — мятная точка после тикера (без слов) */
.cx-strat{display:inline-block;width:6px;height:6px;margin-left:6px;border-radius:50%;background:var(--gg-mint,#14d18a);vertical-align:middle}
/* ggpicker 19.10: лист выбора стратегии GG-Shøt — поиск сверху, чипы категорий и подборок одной прокручиваемой строкой, у строки стратегии биржа и звезда */
.tvdd.tvst { flex-direction:column }
.tvdd.tvst .screener-search { flex:0 0 auto; margin:2px 6px 6px }
.tvdd.tvst .screener-search input { font-size:16px }
.tvst-r { display:flex; align-items:center; gap:8px }
.tvst-n { flex:1 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis }
.tvst-v { flex:0 0 auto; color:var(--text-dim); font-size:12px }
.tvdd-r.on .tvst-v { color:inherit; opacity:.7 }
.tvst-r .cx-ind-star { opacity:.4; padding:4px 2px 4px 6px }
.tvst-r .cx-ind-star.on { opacity:1; color:var(--gg-mint) }
/* ggpick2 22.10: a strategy row with its exchanges under it — the watchlist section's chevron (right when folded), exchange rows indented */
.tvst-g > svg { flex:0 0 16px; width:16px; height:16px; color:var(--text-dim); transform:rotate(-90deg); transition:transform .12s }
.tvst-g.open > svg { transform:none }
.tvst-g > .cx-ind-star { padding-right:0 }
.tvdd-r.tvst-sub { padding-left:24px }
.tvdd.sheet .tvdd-r.tvst-sub { padding-left:30px }
.tvdd.sheet.tall .tvdd-r.tvst-sub { padding-left:28px }

/* desk1 20.10 (owner 03:14 «web version looks like the old view, drawing elements not adapted»): the computer reuses the phone's current pieces.
   Floating panel of a selected drawing: same set as the phone (grip, settings, colour, width, remove, more), no name, desktop size 34. */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-float { padding:2px 2px 2px 10px }
  .gg-tv .cx-float .t, .gg-tv .cx-float [data-f="clone"], .gg-tv .cx-float [data-f="lock"] { display:none }
  .gg-tv .cx-float .cx-fmore { display:flex }
  /* width list: line samples like the settings sheet */
  .gg-tv #menu.cx-wmenu .ico { width:34px; display:flex; align-items:center; justify-content:center }
  .gg-tv #menu.cx-wmenu .ico svg { width:30px; height:12px; display:block }
  /* drawing settings: the phone sheet inside a window in the middle, with the window head (name and close) */
  .gg-tv #menu.cx-st-sheet { position:fixed; inset:0 !important; margin:auto; width:440px; min-width:0; height:fit-content;
    max-height:min(720px, 86vh); padding:0 0 8px; border-radius:6px; box-shadow:var(--tv-shadow) }
  .gg-tv #menu.cx-st-sheet .cx-dhead { position:sticky; top:0; z-index:3; display:flex; align-items:center; justify-content:space-between; background:inherit }
  .gg-tv #menu.cx-st-sheet .cx-dtabs { top:62px; margin:0 20px 4px; padding:0 0 4px }
  .gg-tv #menu.cx-st-sheet .cx-sts, .gg-tv #menu.cx-st-sheet .cx-dpane:not([data-dpane=style]) { padding-left:20px; padding-right:20px }
  /* indicators: a window in the middle like the other windows (the phone bottom-sheet rule of 19.10 had reached the computer) */
  .gg-tv #shInd { align-items:center }
  .gg-tv #shInd .modal-sheet { height:min(638px, 86vh) !important; max-height:none !important; border-radius:12px !important; align-self:center; margin-top:0 }
  .gg-tv .cx-sheet .modal-grabber, .gg-tv #shInd .modal-grabber { display:none !important }
  .gg-tv #shInd .modal-sheet { border-top:0 !important; padding-top:14px !important; box-shadow:var(--tv-shadow) }
}

/* dset 20.10 (owner 03:55 «too bulky, not in the style of the interface»): drawing settings on the computer — the shell of the GG-Shøt window
   (style 5: black body, fields #0a0c0a / #2a2f2a, mint tab and checkboxes), rows like TV: label column, colour swatch, width and line style samples */
.gg-tv #dsetWin .tvd { width:min(360px, calc(100vw - 24px)); --lw:104px }
.gg-tv #dsetWin .tvd, .gg-tv #dsetWin .tvd-foot { background:#050706 }
.gg-tv #dsetWin .tvd-tabs { gap:20px }
.gg-tv #dsetWin .tvd-row { gap:8px }
.gg-tv #dsetWin .tvd-row > .tvd-lbl { flex:0 0 var(--lw); width:var(--lw); margin-right:0 }
.gg-tv #dsetWin .tvd-row > .tvd-chk { flex:0 0 var(--lw); min-height:0 }
.gg-tv #dsetWin .tvd-sel { border-color:#2a2f2a; background-color:#0a0c0a }
.gg-tv #dsetWin .tvd-row .tvd-dd { flex:0 0 150px; width:150px; height:34px }
.gg-tv #dsetWin .dw-ctl { display:flex; align-items:center; gap:8px }
.gg-tv #dsetWin .tvd-row .dw-samp { flex:0 0 64px; width:64px; padding:0 4px 0 10px }
.gg-tv #dsetWin .dw-samp .v { color:var(--tv-text) }
.gg-tv #dsetWin .dw-samp .v svg { width:32px; height:12px; display:block }
.gg-tv #dsetWin .dw-txt { flex:1 1 auto; width:100%; padding:0 11px; font:14px var(--tv-font); outline:none; background-image:none }
.gg-tv #dsetWin .dw-txt:focus, .gg-tv #dsetWin .tvi-num:focus { border-color:var(--tv-focus) }
.gg-tv #dsetWin .tvi-num { flex:0 0 150px; width:150px }
.gg-tv #dsetWin .dw-fib { display:grid; grid-template-columns:1fr 1fr; gap:0 16px; margin:4px 0 8px }
.gg-tv #dsetWin .dw-lv { display:flex; align-items:center; gap:8px; height:42px }
.gg-tv #dsetWin .dw-lv .tvd-chk { min-height:0 }
.gg-tv #dsetWin .dw-lv .tvi-num { flex:0 0 72px; width:72px }
.gg-tv #dsetWin .cx-icgrid { margin:8px 0 4px }
.gg-tv #dsetWin :is([data-wpane="style"], [data-wpane="text"]) > .tvd-chk { min-height:50px }   /* checkbox rows keep the 50 step of the other rows (TV) */
.cx-swpop .cx-oprow { grid-column:1 / -1; margin:6px 2px 0; font-size:13px }
body:has(#dsetWin.open) #float { visibility:hidden }
body:has(#dsetWin.open) #menu { z-index:130 }
/* drawA 20.10: inline editor of the Text drawing on desktop — the drawing's own font, size and colour (set from the drawing), thin frame in its colour */
.cx-tedit { position:absolute; z-index:6; margin:0; padding:2px 3px; box-sizing:content-box; min-width:6px; height:auto; border:1px solid currentColor; border:1px solid color-mix(in srgb, currentColor 45%, transparent); border-radius:2px; background:transparent; outline:none; box-shadow:none; caret-color:currentColor; -webkit-appearance:none; appearance:none }

/* wlD 20.10 — owner 07:26: «REA does the TradingView interface better… we'll adapt to our style/kit later». Watchlist, symbol search and the
   layout picker are TV 1:1 as measured on tradingview.com (isolated REA Chromium, guest; frames/tv/measure.json, desk_*.json, phone_*.json):
   sizes, fonts, paddings and colours below are TV's computed values. Adaptation to the kit is a later separate pass. */
/* ── Watchlist (TV widgetbar 300 wide, bg #0f0f0f) ── */
.cx-right { --wl-cols:15px minmax(0, 1fr) 75px 70px 60px }   /* wlstar 21.10 (owner: «смотри на звёзды»): TV's flag column 15 — the star 12 px centred in it (was 14 px at its left edge: cut by the panel edge, touching the coin) */
#rightTop:has(.cx-wlp) { display:flex; flex-direction:column; overflow:hidden }
.cx-wlp { flex:1 1 auto; min-height:0; display:flex; flex-direction:column; margin:0 -4px; background:#0f0f0f; font-family:var(--tv-font) }
.cx-wlp-head { flex:0 0 48px; display:flex; align-items:center; height:48px; padding:0 8px 0 16px; box-sizing:border-box }
.cx-wlp-t { font:600 14px/28px var(--tv-font); color:#dbdbdb }
.gg-tv .cx-wlp-head .nav-btn.cx-tb { width:38px; height:38px; padding:0 5px !important; color:#dbdbdb }
.gg-tv .cx-wlp-head .nav-btn.cx-tb svg { width:28px; height:28px }
.cx-wlh { flex:0 0 28px; display:grid; grid-template-columns:var(--wl-cols); align-items:center; height:28px; margin-bottom:6px; background:#0f0f0f }
.cx-wlh::before { content:''; }
.cx-wlc { min-width:0; height:27px; padding:3px 8px 3px 0; border:0; background:#0f0f0f; font:400 14px/18px var(--tv-font); color:#8c8c8c; text-align:right; white-space:nowrap; cursor:pointer; box-sizing:border-box }
.cx-wlc:first-of-type { text-align:left; padding-left:1px }
.cx-wlc.asc::after, .cx-wlc.desc::after { content:''; display:inline-block; width:0; height:0; margin-left:4px; vertical-align:2px; border-left:4.5px solid transparent; border-right:4.5px solid transparent }
.cx-wlc.desc::after { border-top:5px solid rgb(41, 98, 255) }
.cx-wlc.asc::after { border-bottom:5px solid rgb(41, 98, 255) }
#wlList { flex:1 1 auto; min-height:0; overflow-y:auto; overscroll-behavior:contain; scrollbar-width:thin }
.gg-tv .cx-right .cx-wl-row.cx-wlr { position:relative; display:grid; grid-template-columns:var(--wl-cols); align-items:center; height:30px; padding:0; gap:0; border:0; border-radius:6px; background:transparent; box-shadow:none; color:#dbdbdb; cursor:pointer }
.cx-wlsym { display:flex; align-items:center; min-width:0; padding-right:2px; overflow:hidden }   /* TV pads 8; ours 2 so the venue tag fits beside a 4-letter ticker */
.cx-wlr .cx-coin { width:18px; height:18px; flex:0 0 18px; margin-right:6px }
.gg-tv .cx-right .cx-wlr .sym { display:flex; align-items:center; min-width:0; overflow:hidden }
.gg-tv .cx-right .cx-wlr .signal-ticker { font:400 14px/14px var(--tv-font); color:#dbdbdb; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.gg-tv .cx-right .cx-wlr.active .signal-ticker { color:#dbdbdb }
.cx-vtag { flex:0 0 auto; align-self:flex-start; margin:-2px 0 0 2px; font:700 10px/12px var(--tv-font); color:#8c8c8c; white-space:nowrap }
.gg-tv .cx-right .cx-wlr :is(.px, .ch, .pc) { min-width:0; margin:0; padding:0 8px 0 0; overflow:hidden; text-align:right; white-space:nowrap; font:400 14px var(--tv-font); font-variant-numeric:tabular-nums; color:#dbdbdb }
.gg-tv .cx-right .cx-wlr :is(.ch, .pc).up { color:rgb(34, 171, 148) }
.gg-tv .cx-right .cx-wlr :is(.ch, .pc).dn { color:rgb(242, 54, 69) }
/* the flag column of TV (15 wide, mark 12×13 #575757) holds our favourite star */
.cx-wlr .cx-wls { grid-column:1; grid-row:1; width:15px; height:29px; margin:0; padding:0; font-size:12px; line-height:29px; text-align:left; opacity:1; color:#575757 }
.cx-wlr .cx-wls.on { color:rgb(242, 54, 69) }
@media (hover:hover) { .gg-tv .cx-right .cx-wl-row.cx-wlr:hover { background:#2e2e2e } }
/* selected row (the open chart): TV frame 2 px #8c8c8c inside a 1 px #2e2e2e line, radius 6 */
.gg-tv .cx-right .cx-wl-row.cx-wlr.active { background:transparent; box-shadow:inset 0 0 0 1px #2e2e2e, inset 0 0 0 3px #8c8c8c }
/* remove: TV's 22×24 button, bg #2e2e2e, radius 4, 8 from the right edge — on hover and on the selected row */
.cx-wlx { position:absolute; right:8px; top:3px; width:22px; height:24px; display:none; place-items:center; padding:0; border:0; border-radius:4px; background:#2e2e2e; color:#999999; cursor:pointer }
.cx-wlx svg { width:18px; height:18px }
.cx-wlr.active .cx-wlx { display:grid }
@media (hover:hover) { .cx-wlr:hover .cx-wlx { display:grid } .cx-wlx:hover { color:#dbdbdb } }
/* ── symbol search (TV dialog 840×680, bg #1f1f1f, radius 6; rows 40 with 1 px #3d3d3d lines; phone rows 52) ── */
.gg-tv #shSym .modal-sheet { background:#1f1f1f; border-radius:6px; padding:0 0 6px; box-sizing:border-box }
.gg-tv #shSym .modal-head { flex:0 0 68px; height:68px; padding:0 20px; margin:0; box-sizing:border-box; align-items:center }
.gg-tv #shSym .modal-title { font:600 20px/28px var(--tv-font); color:#dbdbdb; letter-spacing:0; text-transform:none }
.gg-tv #shSym .modal-close { width:34px; height:34px; padding:8px; border-radius:6px; color:#dbdbdb; background:transparent }
.gg-tv #shSym .modal-close svg { width:18px; height:18px }
.gg-tv #shSym .cx-sheet-body { padding:0 !important }
.gg-tv #shSym .screener-search { flex:0 0 40px; display:flex; align-items:center; box-sizing:border-box; height:40px; margin:0 20px 8px; padding:6px 8px; border:1px solid #636363; border-radius:8px; background:transparent; color:#8c8c8c }
.gg-tv #shSym .screener-search svg { width:28px; height:28px; padding:5px; box-sizing:border-box; color:#8c8c8c; flex:0 0 28px }
.gg-tv #shSym .screener-search input { flex:1; height:24px; padding:0; border:0; background:transparent; font:400 16px/24px var(--tv-font); color:#dbdbdb; outline:none }
.gg-tv #shSym .screener-search:focus-within { border-color:#dbdbdb }
.gg-tv #shSym .kpi-label { margin:0; padding:14px 20px 6px; font:400 12px/17px var(--tv-font); letter-spacing:0; text-transform:uppercase; color:#8c8c8c }
.gg-tv #shSym .cx-wl { padding:0 }
.gg-tv #shSym .cx-wl-row.cx-sr { display:grid; grid-template-columns:32px 212px minmax(0, 1fr) auto 40px; align-items:center; height:40px; min-height:0; padding:0 0 0 20px; gap:0; border:0; border-radius:0; border-top:1px solid #3d3d3d; background:#1f1f1f; font-family:var(--tv-font); color:#dbdbdb; box-sizing:border-box }
.gg-tv #shSym .cx-wl > .cx-wl-row.cx-sr:first-child { border-top:0 }
@media (hover:hover) { .gg-tv #shSym .cx-wl-row.cx-sr:hover { background:#2e2e2e } }
.gg-tv #shSym .cx-wl-row.cx-sr.active { background:#3d3d3d }
.gg-tv #shSym .cx-sr .lg { display:flex; align-items:center }
.gg-tv #shSym .cx-sr .cx-coin { width:24px; height:24px; flex:0 0 24px }
.gg-tv #shSym .cx-sr .sym { display:flex; align-items:center; min-width:0; overflow:hidden }
.gg-tv #shSym .cx-sr .signal-ticker { font:400 16px/24px var(--tv-font); color:#dbdbdb }
.gg-tv #shSym .cx-sr .sig-quote { font:400 14px/24px var(--tv-font); color:#8c8c8c; margin-left:1px }
.gg-tv #shSym .cx-sr .px { margin:0; padding:0 12px 0 0; text-align:left; font:400 14px var(--tv-font); color:#dbdbdb; font-variant-numeric:tabular-nums }
.gg-tv #shSym .cx-xch { display:flex; align-items:baseline; gap:8px; white-space:nowrap }
.gg-tv #shSym .cx-xch .mt { font:400 12px/21px var(--tv-font); color:#8c8c8c }
.gg-tv #shSym .cx-xch .xn { font:400 14px/21px var(--tv-font); color:#dbdbdb }
/* TV: 20×20 at the right of the row (exchange logo / flag) — our favourite star */
.gg-tv #shSym .cx-sstar { width:20px; height:20px; margin:0 0 0 12px; padding:0; font-size:15px; line-height:20px; text-align:center; opacity:1; color:#575757 }
.gg-tv #shSym .cx-sstar.on { color:rgb(242, 54, 69) }
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv #shSym { align-items:center }
  .gg-tv #shSym .modal-sheet { width:840px; max-width:calc(100vw - 40px); height:min(680px, 86vh); max-height:none; display:flex; flex-direction:column; border:0; box-shadow:0 2px 4px rgba(0, 0, 0, .4); margin:0 auto }
  .gg-tv #shSym .cx-sheet-body { flex:1 1 auto; min-height:0; display:flex; flex-direction:column; overflow:hidden }
  .gg-tv #shSym #symList { flex:1 1 auto; min-height:0; overflow-y:auto; scrollbar-width:thin }
  .gg-tv #shSym .modal-grabber { display:none }
}
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  /* TV phone: rows 52 — ticker 16 over a 12 #8c8c8c line (our: price), exchange 14 over market type 12 on the right, 20×20 mark */
  .gg-tv #shSym .modal-sheet { background:#1f1f1f }
  .gg-tv #shSym .cx-wl-row.cx-sr { grid-template-columns:32px minmax(0, 1fr) auto 40px; grid-template-rows:24px 17px; grid-template-areas:'lg sym xch st' 'lg px xch st'; height:52px; padding:0 0 0 20px; row-gap:0 }
  .gg-tv #shSym .cx-sr .lg { grid-area:lg } .gg-tv #shSym .cx-sr .sym { grid-area:sym } .gg-tv #shSym .cx-sr .px { grid-area:px; font-size:12px; line-height:17px; color:#8c8c8c }
  .gg-tv #shSym .cx-sr .cx-xch { grid-area:xch; flex-direction:column-reverse; align-items:flex-end; gap:0 } .gg-tv #shSym .cx-sr .cx-sstar { grid-area:st; margin:0 0 0 10px }
  .gg-tv #shSym .cx-xch .mt { line-height:17px } .gg-tv #shSym .cx-xch .xn { line-height:21px }
}
/* ── layout picker (TV «Layout setup» dropdown: 428 wide, bg #1f1f1f, radius 6, shadow 0 2 4 rgba(0,0,0,.4), padding 6 0) ── */
.gg-tv #menu.cx-lymenu { width:428px; min-width:0; padding:6px 0; border-radius:6px; background:#1f1f1f !important; box-shadow:0 2px 4px rgba(0, 0, 0, .4) }
.cx-lyrow { display:flex; align-items:center; gap:10px; height:28px; margin:0 12px }
.cx-lyrow ~ .cx-lyrow { margin-top:6px; padding-top:6px; border-top:1px solid #4a4a4a }
.cx-lyrow:first-child { margin-top:7px }
.cx-lyn { flex:0 0 18px; margin-right:-10px; font:400 13px/15px var(--tv-font); color:rgb(128, 128, 128) }
.cx-lyb { flex:0 0 29px; width:29px; height:27px; display:grid; place-items:center; padding:0; border:0; border-radius:4px; background:transparent; color:#dbdbdb; cursor:pointer }
.cx-lyb svg { width:21px; height:19px }
@media (hover:hover) { .cx-lyb:hover { background:#2e2e2e } }
.cx-lyb.on, .cx-lyb.on:hover { background:#f2f2f2; color:#000 }
.cx-lyhead { margin:20px 12px 4px; font:400 11px/16px var(--tv-font); letter-spacing:.4px; text-transform:uppercase; color:#8c8c8c }
.cx-lysync { display:flex; align-items:center; justify-content:space-between; width:calc(100% - 24px); height:32px; margin:0 12px; padding:0; border:0; background:transparent; font:400 14px/18px var(--tv-font); color:#dbdbdb; cursor:pointer }
.cx-lysw { position:relative; width:38px; height:20px; border-radius:10px; background:#636363; flex:0 0 38px }
.cx-lysw i { position:absolute; left:3px; top:3px; width:14px; height:14px; border-radius:50%; background:#2e2e2e; transition:left .1s }
.cx-lysw.on { background:#f2f2f2 } .cx-lysw.on i { left:21px }
#menu.as-sheet .cx-lyrow { margin:0 18px }
/* several charts: the active cell — TV marks it with a thin frame */
#mcGrid iframe.on { outline:1px solid #8c8c8c; outline-offset:-1px }
body.gg-mc-cell .cx-right, body.gg-mc-cell #panelT { display:none !important }
/* wlD2 (coordinator: × covered Chg%): the selected / hovered row gives the remove button its own 30 px slot — Last / Chg / Chg% narrow to
   68 / 62 / 52 with 4 px padding, so no value is hidden (TV draws its button over Chg%) */
.gg-tv .cx-right .cx-wl-row.cx-wlr.active { --wl-cols:15px minmax(0, 1fr) 68px 62px 52px 30px }
.gg-tv .cx-right .cx-wlr.active :is(.px, .ch, .pc) { padding-right:4px }
@media (hover:hover) { .gg-tv .cx-right .cx-wl-row.cx-wlr:hover { --wl-cols:15px minmax(0, 1fr) 68px 62px 52px 30px } .gg-tv .cx-right .cx-wlr:hover :is(.px, .ch, .pc) { padding-right:4px } }
/* mcE 20.10: a desktop cell lifted over the whole window while its menu or dialog is open (main.js mcLift): the frame is window-sized and
   transparent, the chart stays pinned to the cell rect with the active frame; the other cells show through around it */
#mcGrid.lifted{z-index:60}
#mcGrid iframe.lift{position:fixed;left:0;top:0;width:100vw;height:100vh;background:transparent;outline:0}
html.gg-mc-lift, html.gg-mc-lift body{background:transparent!important}
html.gg-mc-lift .cx-app{position:fixed;inset:auto;left:var(--mcx);top:var(--mcy);width:var(--mcw);height:var(--mch);outline:1px solid #8c8c8c;outline-offset:-1px}
/* mcE: TV «Change interval» (measured 20.10: 280 wide, centred on the window, title 20/600, field 200×48 r6 with a 2 px focus frame) */
.cx-ivback{position:fixed;inset:0;z-index:80;display:none;align-items:center;justify-content:center}
.cx-ivback.open{display:flex}
.cx-iv{width:280px;box-sizing:border-box;padding:36px 40px 40px;background:var(--tv-pop,#1e1e1e);border-radius:6px;box-shadow:var(--tv-shadow,0 2px 12px rgba(0,0,0,.5));display:flex;flex-direction:column;align-items:center;gap:18px}
.cx-iv-t{font:600 20px/24px GGInter,-apple-system,sans-serif;color:#dbdbdb}
.cx-iv-in{width:200px;height:48px;box-sizing:border-box;border:2px solid #2962ff;border-radius:6px;background:transparent;color:#dbdbdb;text-align:center;font:400 16px/1 GGInter,-apple-system,sans-serif;outline:0;user-select:text;-webkit-user-select:text}
.cx-iv-in.bad{border-color:#f23645}
/* mcF 20.10 — several charts: one bottom bar under the grid (the host's), acting on the active chart (TV) */
body.gg-mc-dh .cx-foot { visibility:visible }
/* mcF — top bar: Alert and Replay with their labels, as TV (icon 28 + text) */
.gg-tv #alertBtn.cx-tb-txt, .gg-tv #rpT.cx-tb-txt { gap:4px; padding:0 8px 0 4px }
.gg-tv #rpT.active, .gg-tv #otT.active { color:var(--tv-acc, #2962ff) }
/* mcF — watchlist name «⌄» (TV: the list's name is the menu button) */
.gg-tv .cx-wlname { display:inline-flex; align-items:center; gap:2px; height:28px; padding:0 4px 0 6px; margin-left:-6px; border:0; border-radius:4px; background:transparent; color:#dbdbdb; font:600 14px/1 var(--tv-font); cursor:pointer; max-width:190px }
.gg-tv .cx-wlname:hover, .gg-tv .cx-wlname.active { background:#2a2a2a }
.gg-tv .cx-wlname svg { width:18px; height:18px; flex:none; transition:transform .12s }
.gg-tv #menu.cx-wlmenu { min-width:210px }
.gg-tv #menu.cx-wlmenu .cx-opt { min-height:32px }
/* mcF — sections of a watchlist: name in capitals with a fold arrow; × on hover */
.gg-tv .cx-right .cx-wlsec { position:relative; display:flex; align-items:center; height:30px; border-top:1px solid #2e2e2e; margin-top:2px }
.gg-tv .cx-wlsec-t { display:inline-flex; align-items:center; gap:4px; flex:1; height:100%; padding:0 4px; border:0; background:transparent; color:#9a9a9a; font:500 11px/1 var(--tv-font); letter-spacing:.4px; text-transform:uppercase; cursor:pointer; text-align:left }
.gg-tv .cx-wlsec-t svg { width:16px; height:16px; transition:transform .12s }
.gg-tv .cx-wlsec.folded .cx-wlsec-t svg { transform:rotate(-90deg) }
.gg-tv .cx-wlsec .cx-wlx { position:static; opacity:0 }
.gg-tv .cx-wlsec:hover .cx-wlx { opacity:1 }
/* mcF — list dialogs (Rename, Create new list, Make a copy, Add section; Watchlists) — same frame as «Change interval» */
.cx-wlback { position:fixed; inset:0; z-index:90; display:none; align-items:center; justify-content:center; background:rgba(0,0,0,.45) }
.cx-wlback.open { display:flex }
.cx-wldlg, .cx-wlo { position:relative; width:400px; max-width:calc(100vw - 32px); padding:20px; border-radius:6px; background:#1e1e1e; box-shadow:0 2px 14px rgba(0,0,0,.6); color:#dbdbdb; font:400 14px/1.3 var(--tv-font, -apple-system, sans-serif) }
.cx-wldlg .cx-iv-t, .cx-wlo .cx-iv-t { font-size:20px; font-weight:600; margin:0 0 16px }
.cx-wldlg-x { position:absolute; right:12px; top:14px; width:32px; height:32px; display:grid; place-items:center; border:0; border-radius:4px; background:transparent; color:#b2b2b2; cursor:pointer }
.cx-wldlg-x:hover { background:#2e2e2e }
.cx-wldlg-in { width:100%; box-sizing:border-box }
.cx-wldlg-f { display:flex; justify-content:flex-end; gap:12px; margin-top:20px }
.cx-wlbtn { height:34px; min-width:72px; padding:0 14px; border-radius:6px; border:1px solid #4a4a4a; background:transparent; color:#dbdbdb; font:500 14px/1 var(--tv-font, sans-serif); cursor:pointer }
.cx-wlbtn.ok { background:#f2f2f2; border-color:#f2f2f2; color:#0f0f0f }
.cx-wlbtn:disabled { opacity:.45; cursor:default }
.cx-wlo { width:440px; padding:20px 0 8px }
.cx-wlo .cx-iv-t { padding:0 20px }
.cx-wlo-s { display:flex; align-items:center; gap:8px; height:40px; margin:0 20px 8px; padding:0 10px; border:1px solid #3a3a3a; border-radius:6px }
.cx-wlo-s svg { width:18px; height:18px; color:#8c8c8c }
.cx-wlo-s input { flex:1; border:0; outline:0; background:transparent; color:#dbdbdb; font:400 14px/1 var(--tv-font, sans-serif) }
.cx-wlo-list { max-height:360px; overflow:auto }
.cx-wlo-row { position:relative; display:flex; align-items:center; gap:8px; height:40px; padding:0 20px; cursor:pointer }
.cx-wlo-row:hover { background:#2a2a2a }
.cx-wlo-row.on .nm { color:#fff; font-weight:600 }
.cx-wlo-row .nm { flex:1; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.cx-wlo-row .n { color:#8c8c8c; min-width:24px; text-align:right }
.cx-wlo-row .cx-wlx { position:static; width:24px; height:24px; display:grid; place-items:center; border:0; background:transparent; color:#b2b2b2; opacity:0; cursor:pointer }
.cx-wlo-row:hover .cx-wlx { opacity:1 }
/* mcF — right panel, TV «Object tree and data window»: two tabs, then the chart's objects or the bar under the crosshair */
.gg-tv .cx-side { display:flex; flex-direction:column; height:100%; min-height:0 }
.gg-tv .cx-side-tabs { display:flex; gap:2px; margin:10px 12px 8px; padding:3px; border-radius:6px; background:#2a2a2a }
.gg-tv .cx-sidetab { flex:1; height:30px; border:0; border-radius:4px; background:transparent; color:#b2b2b2; font:400 14px/1 var(--tv-font); cursor:pointer }
.gg-tv .cx-sidetab.on { background:#4a4a4a; color:#fff }
.gg-tv .cx-side-body { flex:1; min-height:0; overflow:auto; border-top:1px solid #2e2e2e }
.gg-tv .cx-otr { display:flex; align-items:center; height:36px; padding:0 8px 0 14px; color:#dbdbdb }
.gg-tv .cx-otr:hover { background:#2a2a2a }
.gg-tv .cx-otn { display:flex; align-items:center; gap:8px; flex:1; min-width:0; height:100%; border:0; background:transparent; color:inherit; font:400 14px/1 var(--tv-font); text-align:left; cursor:pointer; overflow:hidden; white-space:nowrap; text-overflow:ellipsis }
.gg-tv .cx-ots .cx-otn { cursor:default }
.gg-tv .cx-otn svg { width:22px; height:22px; flex:none }
.gg-tv .cx-otbs { display:flex; gap:2px; opacity:0 }
.gg-tv .cx-otr:hover .cx-otbs, .gg-tv .cx-otb.on { opacity:1 }
.gg-tv .cx-otb { width:28px; height:28px; display:grid; place-items:center; border:0; border-radius:4px; background:transparent; color:#b2b2b2; cursor:pointer }
.gg-tv .cx-otb:hover { background:#3a3a3a; color:#fff }
.gg-tv .cx-otb svg { width:20px; height:20px }
.gg-tv .cx-dw { padding:8px 0 }
.gg-tv .cx-dwr { display:flex; justify-content:space-between; align-items:center; height:26px; padding:0 16px; font:400 14px/1 var(--tv-font); color:#dbdbdb }
.gg-tv .cx-dwr b { font-weight:400 }
.gg-tv .cx-dwr b.up { color:#22ab94 } .gg-tv .cx-dwr b.dn { color:#f23645 }
.gg-tv .cx-dwblk { margin:8px 0; padding:4px 0 8px; background:#2a2a2a; border-top:1px solid #2e2e2e; border-bottom:1px solid #2e2e2e }
.gg-tv .cx-dwblk2 { padding:6px 0; border-bottom:1px solid #2e2e2e }
.gg-tv .cx-dwh { display:flex; align-items:center; gap:8px; height:34px; padding:0 16px; font:600 14px/1 var(--tv-font) }
.gg-tv .cx-dwh svg { width:22px; height:22px }
/* wlogin 21.10 — log in from a browser: «Log in» on the top bar / the account letter; the dialog in the frame of the list dialogs
   (QR on white for a computer, the code field full width, one fixed line for errors so nothing moves) */
.cx-auth { display:flex; align-items:center }
.cx-auth .busy { opacity:.45; pointer-events:none }
.cx-auth-av { width:24px; height:24px; border-radius:50%; display:grid; place-items:center; background:#434651; color:#dbdbdb; font:600 12px/1 var(--tv-font, -apple-system, sans-serif) }
.cx-lg { display:flex; flex-direction:column; align-items:stretch; gap:12px }
.cx-lg .cx-iv-t { margin:0 0 4px }
.cx-lg-qr { align-self:center; padding:8px; border-radius:6px; background:#fff; line-height:0 }
.cx-lg-qr[hidden], .cx-lg-open[hidden], .cx-lg-in[hidden] { display:none }
.cx-lg-qr img { width:164px; height:164px; image-rendering:pixelated }
.cx-lg-open { display:flex; align-items:center; justify-content:center; text-decoration:none }
.cx-iv-in.cx-lg-in { width:100%; height:48px; letter-spacing:6px; font-size:20px }
.cx-lg-in::placeholder { letter-spacing:0; font-size:15px; color:#6a6a6a }
.cx-lg-e { min-height:18px; color:#f23645; font-size:13px; line-height:18px; text-align:center }
.cx-lg .cx-wldlg-f { margin-top:0 }
.cx-lg .cx-wlbtn.busy { opacity:.45 }
/* mcsplit 21.10 — borders between charts drag (TV): a 7 px handle over the 1 px gap, the line lights up on hover and while dragging */
.mc-split { position:absolute; z-index:3; background:transparent }   /* panelsz 22.10: the same handle for the right column's edges (below) */
.mc-split.v { width:7px; cursor:col-resize }
.mc-split.h { height:7px; cursor:row-resize }
.mc-split::after { content:''; position:absolute; background:transparent; transition:background .1s }
.mc-split.v::after { left:3px; top:0; bottom:0; width:1px }
.mc-split.h::after { top:3px; left:0; right:0; height:1px }
.mc-split:hover::after, .mc-split.on::after { background:#2962ff }
#mcGrid.mc-drag iframe { pointer-events:none }
/* panelsz 22.10 (owner: «сдвигать эти окна как в TW») — TV: the edge between the chart and the right column drags its width, the edge
   between the top widget and the one below drags their split. Width handle: in the flow over the 4 px gap (7 px, margins give the gap back);
   split handle: over the assistant's top border. The sizes are --rw / --ah (main.js, set before the first frame) */
#rszW { position:relative; flex:0 0 7px; margin:0 -5px 0 -6px; display:none }
.cx-app.panel-on #rszW { display:block }
body:is(.gg-mc-cell, .gg-mc-deskcell) #rszW, body.gg-mc-host:not(.gg-mc-dh) #rszW { display:none }
#assistHome { position:relative }
#rszH { left:0; right:0; top:-4px }
.cx-app.cx-rsz :is(.cx-main, .cx-right) { pointer-events:none }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { #rszW { display:none !important } }
/* scgear 22.10 (owner: «в шестеренке я же просил настройки тут как в TW»; the 17.10 removal of the corner gear is superseded) — TV: a gear in
   the square where the price scale meets the time scale (--ax × --xah, main.js), the square lights on hover; opens the price scale menu */
.cx-scgear { display:none }
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-scgear { position:absolute; right:0; bottom:0; z-index:4; display:grid; place-items:center; width:var(--ax, 56px); height:var(--xah, 28px); padding:0; border:0; border-radius:0; background:transparent; color:var(--tv-text, #dbdbdb); cursor:pointer }
  .gg-tv .cx-scgear svg { width:24px; height:24px }
  @media (hover:hover) { .gg-tv .cx-scgear:hover { background:var(--tv-hover) } }
}
/* windrag 22.10: a window dragged by its title bar (win_drag.js) sits at left / top in its fixed backdrop; the bar shows the move cursor,
   its buttons keep theirs. Computer only */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv :is(.tvd, .cx-iv).cx-moved { position:absolute; margin:0 }   /* over each window's own centring margin (Go to: margin-top) */
  :is(.tvd-head, .cx-iv-t) { cursor:move }
  :where(.tvd-head, .cx-iv-t) :where(button, input, a) { cursor:auto }
  body.cx-wdrag, body.cx-wdrag * { cursor:move !important; user-select:none }
}

#mcGrid.lifted .mc-split { display:none }
/* icons 21.10 — the Icons pick (TV: a grid of emojis next to the drawing bar; the pick arms the Icon tool) */
#menu.cx-icmenu { min-width:0; width:auto }
.cx-icpick { display:grid; grid-template-columns:repeat(8, 36px); gap:2px; padding:4px 8px 8px }
.cx-icpick button { width:36px; height:36px; padding:0; border:0; border-radius:4px; background:transparent; font-size:22px; line-height:36px; cursor:pointer }
.cx-icpick button:hover { background:#2e2e2e }
.cx-icpick button.on { background:#2a2a2a; box-shadow:inset 0 0 0 1px #2962ff }

/* leg 21.10: desktop GG-Shøt row as a TV indicator row — the name white, the strategy and inputs grey (#8c8c8c) */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-indleg:not(.signin) .nm .n1, .gg-tv .cx-indleg:not(.signin) .nm .n2 { color:#8c8c8c }
  .gg-tv .cx-indleg .nm .n0 { color:#dbdbdb }
}
/* leg 21.10: compare rows (desktop) — TV's legend row of a compared symbol: coin 18 + 4, name and exchange 13 #dbdbdb 12 apart, value 8 after the
   name in the series colour; pointer over the row: 1 px #3d3d3d box on the chart fill, the eye and × right after the name in place of the value */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-cmprow .cx-coin { flex:0 0 18px; width:18px; height:18px; border-radius:50%; margin-right:4px }
  .gg-tv .cx-cmprow .nm { margin-right:0; color:#dbdbdb }
  .gg-tv .cx-cmprow .nm .cv { margin-left:12px; flex:0 0 auto }
  .gg-tv .cx-cmprow .nm .n0 { flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis }
  .gg-tv .cx-cmprow .cx-cmpv { margin-left:8px; white-space:nowrap; flex:0 0 auto }
  .gg-tv .cx-cmprow .cx-cmpb { display:none; margin-left:4px }
  .gg-tv .cx-cmprow .cx-cmpb .cx-leg-b { opacity:1; pointer-events:auto }
  .gg-tv .cx-cmprow.hov .cx-cmpb, .gg-tv .cx-cmprow.off .cx-cmpb { display:flex }
  .gg-tv .cx-cmprow.hov .cx-cmpv, .gg-tv .cx-cmprow.off .cx-cmpv { display:none }
  .gg-tv .cx-indleg.hov { background:var(--leg-bg, #000000) }   /* GG-Shøt and compare rows: the box is filled with the chart colour, as TV */
}
.cx-cmprow { display:none }
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { .gg-tv .cx-cmprow { display:flex } }
/* lay 21.10: named layouts — the top-bar control right of «Select layout» (TV, measured as a guest 21.10: «Layout setup» 38×38, then «Save»
   65×38 with 14 px text, then «Manage layouts» ⌄ 24×38), its menu line, the name dialog's error line and the rows of «Open layout» */
.cx-lay { display:flex; align-items:center }
.cx-lay .nav-btn.cx-lay-s, .gg-tv .cx-top .cx-lay .nav-btn.cx-lay-s { width:auto; min-width:0; max-width:200px; padding:0 6px !important; gap:6px; font:400 14px/1 var(--tv-font, -apple-system, sans-serif); font-size:14px !important; letter-spacing:0; text-transform:none }
.cx-lay-s .nm { max-width:160px; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.cx-lay-s .cx-lay-ic { width:18px; height:18px; flex:none }
.cx-lay-s .cx-lay-ic .up { display:none }
.cx-lay-s.dirty .cx-lay-ic .up { display:inline }
.cx-lay .nav-btn.cx-lay-m, .gg-tv .cx-top .cx-lay .nav-btn.cx-lay-m { width:24px; min-width:24px }
.cx-iv.cx-layo { align-items:stretch; gap:0 }
.cx-layo .cx-iv-t { text-align:left }
.cx-lay-q { padding:8px 12px 4px; color:#8c8c8c; font:400 12px/16px var(--tv-font, -apple-system, sans-serif) }
.cx-lay-qw .cx-lay-q { padding:10px 20px 4px }
.cx-lay-e { min-height:18px; margin-top:8px; color:#f23645; font:400 13px/18px var(--tv-font, -apple-system, sans-serif) }
.cx-lay-e:empty { min-height:0; margin:0 }
.cx-lay-row .ly { display:grid; place-items:center; width:20px; flex:none; color:#8c8c8c }
.cx-lay-row .n { min-width:0; white-space:nowrap }
.cx-lay-none { padding:12px 20px; color:#8c8c8c }
.cx-layo .cx-lay-h { padding:10px 20px 4px; line-height:16px }   /* rvfix 21.10: «This browser» head in Open layout (signed in) */
/* fav 21.10 (owner: «красные звёздочки, зелёные, белые разных размеров»): one favourite star — the same icon (FAV in main.js), 18 px in menus,
   dialogs and search rows, 14 px in dense rows (watchlist, drawing tiles), one colour pair: TV measured as a guest 21.10 (drawing flyout and
   interval menu: 18×18, outline #8c8c8c, filled #f2f2f2). When it shows (hover only, always, only when on) stays as each place had it */
:root { --fav-off:#8c8c8c; --fav-on:#f2f2f2 }
.cx-fav { display:block; width:18px; height:18px; flex:none; fill:none; stroke:var(--fav-off); stroke-width:1.1; stroke-linejoin:round; pointer-events:none }
.on > .cx-fav { fill:var(--fav-on); stroke:var(--fav-on) }
#menu .cx-opt .st, .cx-ind-star, .cx-dtile .st { display:inline-grid; place-items:center; font-size:0; line-height:0; color:inherit }
#menu .cx-opt .st { padding:0 0 0 12px }
#menu .cx-opt:hover .st, #menu .cx-opt:hover .st.on { opacity:1 !important; color:inherit !important }
#menu .cx-opt.active .st > .cx-fav { stroke:currentColor }
#menu .cx-opt.active .st.on > .cx-fav { fill:currentColor }
.cx-ind-star { padding:3px 4px }
.toggle-row:hover .cx-ind-star, .toggle-row:hover .cx-ind-star.on, .tvst-r .cx-ind-star, .tvst-r .cx-ind-star.on { opacity:1 }
.cx-wlr .cx-wls { display:grid; place-items:center; width:15px; font-size:0; opacity:0 }
.cx-wlr:hover .cx-wls, .cx-wlr .cx-wls.on { opacity:1 }
@media (hover:none) { .cx-wlr .cx-wls { opacity:1 } }
.cx-wlr .cx-wls .cx-fav { width:12px; height:12px }
.cx-dtile .st .cx-fav { width:14px; height:14px }
.gg-tv #shSym .cx-sstar { display:grid; place-items:center; font-size:0 }
.cx-dtile .st { top:4px; right:5px }

/* ── pol 21.10 (owner: «интерфейс … чтобы всё идеально было»): pixel sweep — clipping, alignment, one close button for all dialogs, tap targets ── */
/* P1 interval menu: TV puts the dropdown arrow after the favourite intervals; ours was an empty 20 px button before them (arrow display:none) */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv .cx-top .cx-tfbtn.sort-pill { gap:2px; padding:0 4px }
  .gg-tv .cx-top .cx-tfbtn.sort-pill:not(.fav-cur) { padding:0 4px 0 8px }
  .gg-tv .cx-top .cx-tfbtn.sort-pill > svg { display:block; flex:0 0 18px; width:18px; height:18px; color:var(--tv-text) }
  .gg-tv .cx-top .cx-tfbtn:not(.fav-cur) .t { color:var(--gg-mint-muted, #069f67) }
}
/* P2 window 700–1099: the favourites are hidden, so the current interval must stay on the button */
@media (min-width:700px) and (max-width:1159px) { .gg-tv .cx-top .cx-tfbtn.fav-cur .t { display:inline } .gg-tv .cx-top .cx-tfbtn.fav-cur .t { color:var(--tv-text) } }
/* P3 watchlist: rows were 8 px wider than #rightTop (margin 0 -4px inside overflow:hidden) — the selected frame lost its sides, hover lost its
   corners, the star lost 2.5 px, Chg% lost 4 px. The block now spans the whole panel, nothing is cut */
#rightTop:has(.cx-wlp) { margin:0 -4px }
.cx-wlp { margin:0 }
/* P4 star touched the coin (1.5 px): TV's logo starts 5 px after the 15 px flag column; ours 3 (gap 4.5 px) so a wide 4-letter ticker with
   its venue tag (DOGE BN, 86 of 88 px) still fits; header «Symbol» lines up with the logo */
.cx-wlr .cx-coin { margin-left:3px }
.cx-wlc:first-of-type { padding-left:3px }
/* P5 menus: when some rows carry an icon, rows without one keep the icon column (TV) — «Settings…» no longer stands 36 px apart */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { #menu:has(.cx-opt > .ico) .cx-opt:not(:has(> .ico)) > .lb { margin-left:36px } }
/* tvd 21.10: a menu with both icons and check marks (price / time scale: More settings…) — the check takes the icon column, labels in one line (TV) */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { #menu:has(.cx-opt > .ico) .cx-opt:has(> .ck):not(:has(> .ico)) > .lb { margin-left:0 } .gg-tv #menu:has(.cx-opt > .ico) .cx-opt:has(> .ck):not(:has(> .ico)) > .ck { flex-basis:28px } }
/* P6 one dialog close button (TV: 34×34, 18 px icon, #dbdbdb, radius 6, ~17 px from the edge) — Indicators had the phone circle,
   Settings / indicator settings a 28 px icon (cross 16 px), Log in / Open layout / Rename a 32 px grey button 12 px from the edge */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) {
  .gg-tv #shInd .modal-close { width:34px !important; height:34px !important; min-width:34px; border-radius:6px !important; background:transparent !important; color:#dbdbdb !important }
  .gg-tv #shInd .modal-close svg { width:18px !important; height:18px !important }
  .gg-tv .tvd-x:not(.tvs-back-btn) svg { width:14px; height:14px }
}
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) and (hover:hover) { .gg-tv #shInd .modal-close:hover { background:var(--tv-hover) !important } }
.cx-wldlg-x { right:17px; top:15px; width:34px; height:34px; border-radius:6px; color:#dbdbdb }
/* P7 phone: tap targets of at least 36 px without moving a pixel — the legend fold arrow (26×22), the sheet close buttons (28 / 34) */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-legfold::after { content:''; position:absolute; left:-6px; right:-6px; top:-7px; bottom:-7px }
  .gg-tv :is(.modal-close, .cx-tfsh .x) { position:relative }
  .gg-tv :is(.modal-close, .cx-tfsh .x, .cx-wldlg-x)::after { content:''; position:absolute; inset:-6px }
}
/* P8 Indicators dialog: «BUILT-IN» (line 30) sat 3 px lower than «SCRIPT NAME» (line 24) — one header line for both columns */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { .gg-tv #shInd .cx-ind-cats .kpi-label { line-height:24px } }
/* P9 top bar overflowed below ~1320 px (1280: scrollWidth 1302 > 1280 — Object tree button cut by 22 px; «Log in» shrank into the
   layout button, 15 px over it). Like TV, the text buttons fold to icons step by step as the window narrows; «Log in» never shrinks */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { .gg-tv .cx-top #authT { flex-shrink:0 } }
@media (min-width:700px) and (max-width:1329px) { .gg-tv .cx-top #rpT > span { display:none !important } .gg-tv .cx-top #rpT { padding:0 5px !important } }
@media (min-width:700px) and (max-width:1264px) { .gg-tv .cx-top #alertBtn > span { display:none !important } .gg-tv .cx-top #alertBtn { padding:0 5px !important } }
@media (min-width:700px) and (max-width:1226px) { .gg-tv .cx-top #indBtn > span { display:none !important } .gg-tv .cx-top #indBtn { padding:0 5px !important } }
@media (min-width:700px) and (max-width:1159px) { .cx-tffavs { display:none } }
/* ovf 21.10: the «»» menu of a narrow computer window; the folded buttons leave the bar. The Alert button stays off while alerts are off (it is shown by the server's list) */
.gg-tv .cx-top > #ovfT:not(.on), .gg-tv .cx-top > .ovf-h.ovf-h, .gg-tv .cx-top > #alertBtn[hidden] { display:none !important }
.gg-tv #menu .cx-opt:disabled { opacity:.45; cursor:default; pointer-events:none }
/* drw 21.10: TV «Go to» (measured p26/drw/tv/g_dialog_all.json, n_*.png): the bottom bar button 38 × 38 after the ranges' divider; window 302 wide,
   head 68, fields 150 / 100 × 34 r8 12 apart, 17 under the tabs, 16 above the calendar; calendar: head 34 (arrows 34, month 16 px), weekday band
   22 r6 (14 px), days 34 × 34 r8 every 38, always 6 rows; months 3 × 4 and years 4 × 5 in the same box; foot 67. GG colours: selected — the
   list's mint row, in range — the tile tone, weekday band — the hover tone */
.gg-tv .cx-foot .cx-goto-b { order:0; width:38px; padding:0; display:grid; place-items:center }
.gg-tv .cx-foot .cx-goto-b svg { width:28px; height:28px }
.gg-tv .cx-goto { width:302px; max-height:none; align-self:flex-start; margin-top:max(8px, calc(50vh - 285px)) }   /* TV: the top stays put when Custom range adds its row (the window grows down) */
.gg-tv .cx-goto .tvd-head { margin-top:3px }
.cx-go-body { padding:17px 20px 0; box-sizing:border-box }
.cx-go-row { display:flex; gap:12px; margin-bottom:16px }
.cx-go-row[hidden] { display:none }
.cx-go-in { box-sizing:border-box; height:34px; display:flex; align-items:center; padding:0 3px; border:1px solid var(--tv-field); border-radius:8px; color:var(--tv-text); cursor:text }
.cx-go-d { width:150px } .cx-go-t { width:100px }
.cx-go-in input { flex:1 1 auto; min-width:0; height:28px; padding:0 0 0 8px; border:0; outline:0; background:transparent; color:inherit; font:400 14px/28px var(--tv-font) }
.cx-go-in .ic { flex:0 0 28px; width:28px; height:28px; color:var(--tv-text2); display:grid; place-items:center }
.cx-go-t .ic { cursor:pointer }
@media (hover:hover) { .cx-go-in:hover { border-color:var(--tv-field-hover) } }
.cx-go-in:focus-within, .cx-go-in.dd-on { border-color:var(--tv-focus); box-shadow:inset 0 0 0 1px var(--tv-focus) }
.cx-go-in.bad, .cx-go-in.bad:focus-within { border-color:var(--tv-down); box-shadow:inset 0 0 0 1px var(--tv-down) }
.cx-go-in.off { color:color-mix(in srgb, var(--tv-text) 35%, transparent); cursor:default }
.cx-go-in.off input { cursor:default }
.cx-cal { height:332px; margin:0 -12px; padding:0 12px; box-sizing:border-box }
.cx-cal-h { height:34px; display:flex; align-items:center; justify-content:space-between; padding:0 3px }
.cx-cal-nav, .cx-cal-t { height:34px; border:0; border-radius:8px; background:transparent; color:var(--tv-text); font:400 16px/24px var(--tv-font); cursor:pointer; display:grid; place-items:center }
.cx-cal-nav { width:34px; padding:0 }
.cx-cal-t { padding:0 12px }
.cx-cal-nav:disabled { color:color-mix(in srgb, var(--tv-text) 30%, transparent); cursor:default }
.cx-cal-wd { display:grid; grid-template-columns:repeat(7, 34px); column-gap:4px; height:22px; margin:12px 0; border-radius:6px; background:var(--tv-hover); color:var(--tv-text2); font:400 14px/22px var(--tv-font); text-align:center }
.cx-cal-band { display:block }
.cx-cal-g { display:grid; gap:4px }
.cx-cal-d { grid-template-columns:repeat(7, 34px); grid-auto-rows:34px }
.cx-cal-m { grid-template-columns:repeat(3, 1fr); grid-auto-rows:34px; row-gap:30px }
.cx-cal-y { grid-template-columns:repeat(4, 1fr); grid-auto-rows:34px; row-gap:14px }
.cx-cal-c { height:34px; padding:0; border:0; border-radius:8px; background:transparent; color:var(--tv-text); font:400 16px/24px var(--tv-font); cursor:pointer }
.cx-cal-c:disabled { color:color-mix(in srgb, var(--tv-text) 30%, transparent); cursor:default }
.cx-cal-c.now { text-decoration:underline; text-decoration-thickness:2px; text-underline-offset:5px }
.cx-cal-c.in, .cx-cal-c.cur { background:var(--tv-gap) }
.cx-cal-c.on { background:var(--gg-mint-muted); color:#050706 }
@media (hover:hover) { .cx-cal-nav:not(:disabled):hover, .cx-cal-t:hover, .cx-cal-c:not(:disabled):not(.on):hover { background:var(--tv-hover) } }
.gg-tv .cx-goto .tvd-btn.tvd-ok:disabled { opacity:.35; cursor:default }
/* drw 21.10: drawing window, Text tab as TV (help frames): colour 34, size list, B and I squares 34 r8 in one row 8 apart; a text box for several
   lines (124 high, r8); Text alignment — two lists side by side; Text orientation for a vertical line */
.gg-tv #dsetWin .dw-trow { display:flex; align-items:center; gap:8px; margin:8px 0 12px }
.gg-tv #dsetWin .dw-trow .tvd-dd.dw-tsz { flex:0 0 124px; width:124px; height:34px }
.gg-tv #dsetWin .dw-tb { flex:0 0 34px; width:34px; height:34px; padding:0; border:1px solid #2a2f2a; border-radius:8px; background:#0a0c0a; color:var(--tv-text); font:15px/32px var(--tv-font); cursor:pointer }
.gg-tv #dsetWin .dw-tb i { font-family:Georgia, 'Times New Roman', serif; font-size:17px }
.gg-tv #dsetWin .dw-tb.on { background:var(--tv-gap); border-color:var(--tv-field-hover) }
@media (hover:hover) { .gg-tv #dsetWin .dw-tb:hover { border-color:var(--tv-field-hover) } }
.gg-tv #dsetWin .dw-ta { display:block; box-sizing:border-box; width:100%; height:124px; padding:8px 10px; border:1px solid #2a2f2a; border-radius:8px; background:#0a0c0a; color:var(--tv-text); font:14px/20px var(--tv-font); resize:none; outline:none }
.gg-tv #dsetWin .dw-ta:focus { border-color:var(--tv-focus); box-shadow:inset 0 0 0 1px var(--tv-focus) }
.gg-tv #dsetWin [data-wpane="text"] .tvd-row > .tvd-lbl { flex-basis:112px; width:112px }
.gg-tv #dsetWin [data-wpane="text"] .dw-ctl .tvd-dd { flex:0 0 96px; width:96px }

/* symsrc 22.10: кнопки бирж над списком поиска символов — те же .cx-chip, ниже и в ряд с прокруткой */
#symSrc.cx-srcs { display:flex; flex:0 0 auto; gap:6px; overflow-x:auto; scrollbar-width:none; padding:8px 20px 6px; scroll-padding:0 20px }   /* symsrc2: flex 0 0 auto — список ниже сжимал ряд по высоте (кнопки обрезались) */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { #symSrc.cx-srcs { flex-wrap:wrap; overflow:visible } }   /* symsrc2: на компьютере все биржи видны, переносом в 2 ряда, без скрытой прокрутки */
#symSrc.cx-srcs::-webkit-scrollbar { display:none }
#symSrc.cx-srcs .cx-chip { height:30px; line-height:30px; min-width:0; padding:0 12px; font-size:13px }

/* guest 22.10: a locked control stays in place, dimmed, with a small lock (tap → Log in with Telegram) */
.cx-gated { position:relative }
.cx-gated > :not(.cx-lk):not(.cx-ind-r), .cx-gated > .cx-ind-r > :not(.cx-lk) { opacity:.5 }
.cx-lk { display:inline-flex; align-items:center; justify-content:center; color:var(--tv-text, #d1d4dc); pointer-events:none; flex:0 0 auto }
.cx-lk .cx-lki { width:10px; height:12px; display:block }
.nav-btn.cx-tb.cx-gated > .cx-lk, .cx-lay.cx-gated > .cx-lk { position:absolute; right:1px; bottom:2px; width:11px; height:13px; background:var(--tv-bar, #000); border-radius:3px }
.cx-lay.cx-gated > .cx-lk { right:2px; bottom:4px }
.cx-ptab.cx-gated { display:inline-flex; align-items:center; gap:5px }
.cx-ptab.cx-gated > .cx-lk { opacity:1 }
.toggle-row.cx-gated .cx-ind-r { display:flex; align-items:center; gap:8px }
.toggle-row.cx-gated .cx-lk .cx-lki { width:11px; height:13px }
.cx-opt .hk.cx-lkm { display:inline-flex; align-items:center }
.cx-opt .hk.cx-lkm .cx-lki { width:11px; height:13px }
.cx-dtile.cx-gated > .cx-lk { position:absolute; right:8px; top:8px }
.cx-dtile.cx-gated > .cx-lk .cx-lki { width:11px; height:13px }
.cx-chip.cx-gated { display:inline-flex; align-items:center; gap:5px }
.cx-chip.cx-gated > .cx-lk { opacity:1 }
.cx-lk.cx-lkl { margin-right:5px; vertical-align:-1px }
#assistForm.cx-gated .cx-chat-send { opacity:1 }
#assistForm.cx-gated .cx-chat-send .cx-lki { width:12px; height:14px }
#assistForm.cx-gated input { cursor:pointer }
.nav-btn.cx-tb.cx-tb-txt.cx-gated > .cx-lk { position:static; width:auto; height:auto; background:none; margin-left:4px }
/* rea1448 22.10: the panel's tabs (Watchlist, Trading, Signals) — the trading module's rules (trade.js), here as the tabs show without it */
.cx-ptabs { display:flex; align-items:center; gap:4px; margin-left:-8px }
.cx-ptab { height:34px; padding:0 8px; border:0; border-radius:6px; background:transparent; font:600 14px/28px var(--tv-font); color:#8c8c8c; cursor:pointer; white-space:nowrap }
.gg-tv .cx-ptabs .cx-ptab.cx-wlname { height:34px; margin-left:0; padding:0 4px 0 8px; border-radius:6px }
.cx-ptab.on { color:#dbdbdb }
@media (hover:hover) { .cx-ptab:hover { background:#2e2e2e; color:#dbdbdb } }
/* rea1448 22.10 (coordinator: one-line columns ran into each other at 300 px): the Signals list — two lines a row as TV's compact lists, no header.
   Line 1: coin, ticker and exchange tag, side, time ago; line 2 (dim, 12 px): TF and desk under the ticker, entry under the side, status under
   the time. Side / entry and time / status columns have fixed widths, so they line up from row to row; the room between grows with the panel
   (300 px – 50vw), only the desk name is cut (ellipsis). Hover and the active frame as the watchlist rows */
.cx-sgl { flex:1 1 auto; min-height:0; overflow-y:auto; overflow-x:hidden }
.gg-tv .cx-right .cx-sgr { position:relative; display:grid; grid-template-columns:18px minmax(0, 1fr) 76px 40px; grid-template-rows:18px 16px; column-gap:8px; row-gap:2px; align-items:center; height:46px; padding:5px 8px; border-radius:6px; color:#dbdbdb; font:400 14px/18px var(--tv-font); font-variant-numeric:tabular-nums; cursor:pointer; box-sizing:border-box }
.gg-tv .cx-right .cx-sgr > span { min-width:0; white-space:nowrap }
.gg-tv .cx-right .cx-sgr .cx-sgi { grid-area:1 / 1; display:flex; align-items:center; overflow:hidden }
.gg-tv .cx-right .cx-sgr .cx-coin { width:18px; height:18px; flex:0 0 18px; margin:0 }
.gg-tv .cx-right .cx-sgr .cx-sgt { grid-area:1 / 2; display:flex; align-items:center }
.gg-tv .cx-right .cx-sgr .signal-ticker { font:400 14px/18px var(--tv-font); color:#dbdbdb; white-space:nowrap }
.gg-tv .cx-right .cx-sgr .cx-sgs { grid-area:1 / 3; text-align:right }
.gg-tv .cx-right .cx-sgr .cx-sga { grid-area:1 / 4; text-align:right; font-size:13px; color:#8c8c8c }
.gg-tv .cx-right .cx-sgr .cx-sgm { grid-area:2 / 2; display:flex; align-items:center; gap:8px; font:400 12px/16px var(--tv-font); color:#8c8c8c }
.gg-tv .cx-right .cx-sgr .cx-sgf { flex:0 0 auto }
.gg-tv .cx-right .cx-sgr .cx-sgd { flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.gg-tv .cx-right .cx-sgr .cx-sgx { grid-area:2 / 3; text-align:right; font:400 12px/16px var(--tv-font); color:#8c8c8c }
.gg-tv .cx-right .cx-sgr .cx-sgz { grid-area:2 / 4; text-align:right; font:400 12px/16px var(--tv-font); color:#8c8c8c }
.gg-tv .cx-right .cx-sgr .up { color:rgb(34, 171, 148) }
.gg-tv .cx-right .cx-sgr .dn { color:rgb(242, 54, 69) }
.gg-tv .cx-right .cx-sgr .cx-sge { color:rgb(41, 98, 255) }
@media (hover:hover) { .gg-tv .cx-right .cx-sgr:hover { background:#2e2e2e } }
.gg-tv .cx-right .cx-sgr.active { box-shadow:inset 0 0 0 1px #2e2e2e, inset 0 0 0 3px #8c8c8c }
/* drw3 23.10: Position forecast / Anchored volume profile rows — a colour swatch at the row end (phone sheet), price and bar side by side */
.cx-oprow .cx-sw[data-dcc] { width:28px; height:28px; flex:none; margin-left:auto }
.cx-oprow.cx-xy span { white-space:nowrap }
.cx-oprow.cx-xy input { min-width:0 }
.gg-tv #dsetWin .dw-xy .tvi-num { flex:0 0 96px; width:96px }
.cx-oprow .cx-sw[data-dcc] + .cx-sw[data-dcc] { margin-left:0 }   /* drw3b: Sector Background — two swatches side by side */

/* ── alui 21.10: alerts — the Create / Edit alert window, the «Telegram bots» window, the Alerts page of the right panel (alerts_ui.js).
   TV (measured 21.10, p26/alui/tv): window ~480 wide, labels in a column on the left (Condition, Trigger, Expiration, Message, Notifications),
   controls on the right; fixed fields are flat grey boxes; Trigger / Message / Notifications — text with a chevron; panel — segmented
   Alerts | Log 34 high, a row of 38 px tools (+ … search, sort, options), rows: title 14, below it the symbol, the status in colour and the time.
   Colours and fields — our GG tokens (the Go to window's fields, the mint button). The window keeps its height between its pages (no jump). ── */
.gg-tv .al-dlg { width:min(480px, calc(100vw - 24px)) }
.gg-tv .al-dlg .al-head { gap:0 }
.gg-tv .al-head .tvd-title { white-space:nowrap }
.gg-tv .al-head .tvd-x { margin-left:auto; flex:0 0 auto }
.gg-tv .al-head .al-bk { margin-left:-8px; margin-right:6px }
.al-sym { margin-left:8px; min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap; font-size:20px; line-height:28px; font-weight:600; color:var(--tv-text) }
.al-sym i { font-style:normal; font-weight:400; font-size:14px; color:var(--tv-text2); margin-left:8px }
.al-dlg .al-body { box-sizing:border-box; height:298px; overflow-y:auto; padding:6px 20px 14px; -webkit-overflow-scrolling:touch }
.al-bots .al-body { height:372px; padding-top:0 }
.al-row { display:grid; grid-template-columns:116px minmax(0, 1fr); align-items:start; min-height:34px }
.al-lbl { font-size:14px; line-height:34px; color:var(--tv-text2); white-space:nowrap }
.al-ctl { display:flex; flex-direction:column; gap:8px; min-width:0 }
.al-cond .al-row { margin-bottom:0 }
.gg-tv .al-ctl .tvd-sel { flex:none; width:100%; max-width:none; min-width:0 }
.gg-tv .al-ctl .al-op .ic { flex:0 0 auto; display:grid; place-items:center; color:var(--tv-text); margin-left:-6px }
.gg-tv .al-ctl .al-op .ic svg { width:24px; height:24px }
.al-static { box-sizing:border-box; height:34px; display:flex; align-items:center; padding:0 11px; border-radius:8px; background:var(--tv-hover); color:var(--tv-text2); font-size:14px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.al-vrow { display:grid; grid-template-columns:minmax(0, 1fr) minmax(0, 1fr); gap:8px }
.al-num { position:relative }
.al-num input { font-variant-numeric:tabular-nums }
.al-step { display:flex; flex-direction:column; flex:0 0 18px; height:28px; margin-right:2px }
.al-step button { flex:1 1 50%; padding:0; border:0; background:none; color:var(--tv-text2); cursor:pointer; display:grid; place-items:center; border-radius:3px }
.al-step button i { width:6px; height:6px; border:solid currentColor; border-width:1.2px 0 0 1.2px; transform:translateY(1px) rotate(45deg) }
.al-step button + button i { transform:translateY(-2px) rotate(225deg) }
@media (hover:hover) { .al-step button:hover { color:var(--tv-text); background:var(--tv-hover) } }
.al-sep { height:1px; background:var(--tv-div); margin:12px 0 6px }
.al-link { display:inline-flex; align-items:center; gap:2px; max-width:100%; height:34px; padding:0; border:0; background:none; color:var(--tv-text); font:400 14px/34px var(--tv-font); cursor:pointer; text-align:left }
.al-link .v { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
.al-link svg { flex:0 0 18px; width:18px; height:18px; color:var(--tv-text2) }
.al-link .ch { display:grid; place-items:center }
@media (hover:hover) { .al-link:hover .v { color:#fff } .al-link:hover svg { color:var(--tv-text) } }
.al-link.dd-on .ch { transform:rotate(180deg) }
.al-ctl > .al-link { align-self:flex-start }
.al-txt { font-size:14px; line-height:34px; color:var(--tv-text) }
.gg-tv .al-dlg .tvd-ok:disabled { opacity:.45; cursor:default }
.gg-tv .al-dlg .tvd-btn.busy, .al-pn .busy { opacity:.45; pointer-events:none }
.gg-tv .al-dlg .al-del { width:34px; padding:0; display:grid; place-items:center; border-color:var(--tv-down); color:var(--tv-down) }
.gg-tv .al-dlg .al-del svg { width:22px; height:22px }
@media (hover:hover) { .gg-tv .al-dlg .tvd-btn.al-del:hover { background:color-mix(in srgb, var(--tv-down) 16%, transparent); border-color:var(--tv-down); color:var(--tv-down) } }
/* Edit message */
.al-fl { display:block; margin:14px 0 6px; font-size:14px; color:var(--tv-text2) }
.al-fl:first-child { margin-top:6px }
.al-in { display:flex }
.al-ta { display:block; box-sizing:border-box; width:100%; height:132px; padding:7px 11px; border:1px solid var(--tv-field); border-radius:8px; background:transparent; color:var(--tv-text); font:14px/20px var(--tv-font); resize:none; outline:none }
@media (hover:hover) { .al-ta:hover { border-color:var(--tv-field-hover) } }
.al-ta:focus { border-color:var(--tv-focus); box-shadow:inset 0 0 0 1px var(--tv-focus) }
/* radio rows (Notifications, Telegram bots) */
.al-rad { display:flex; align-items:center; gap:10px; width:100%; min-height:48px; padding:0; border:0; background:none; color:var(--tv-text); font:400 14px var(--tv-font); text-align:left; cursor:pointer }
.al-rad .dot { flex:0 0 18px; width:18px; height:18px; box-sizing:border-box; border:1px solid var(--tv-text2); border-radius:50%; display:grid; place-items:center }
.al-rad.on .dot { border-color:#00FFA3 }
.al-rad.on .dot::after { content:''; width:10px; height:10px; border-radius:50%; background:#00FFA3 }
.al-rad.dis { cursor:default }
.al-rad.dis .dot { opacity:.35 }
.al-rad .t { font-weight:600 }
.al-rad .s { color:var(--tv-text2) }
.al-cst { margin-left:auto; font-size:13px; color:var(--tv-text2); white-space:nowrap }
.al-cst.ok { color:var(--tv-up) } .al-cst.bad { color:var(--tv-down) } .al-cst.wait { color:#f5a623 }
.al-chlink { margin-top:4px }
/* Telegram bots */
.al-ch { padding:14px 0; border-bottom:1px solid var(--tv-div) }
.al-ch:last-child { border-bottom:0 }
.al-ch-h { display:flex; align-items:center; gap:10px; min-height:28px }
.al-ch-h .al-rad { width:auto; min-height:28px; flex:0 0 auto }
.al-ch-h .t { font-size:15px; font-weight:600; color:var(--tv-text) }
.al-bot { margin:2px 0 0 28px; font-size:14px; line-height:20px; color:var(--tv-text2) }
.al-ch-l { margin:8px 0 8px 28px; font-size:14px; line-height:20px; color:var(--tv-text) }
.al-ch-l.bad { color:var(--tv-down) }
.al-ch-l a { color:#00FFA3; text-decoration:none }
@media (hover:hover) { .al-ch-l a:hover { text-decoration:underline } }
.al-tok { margin-left:28px }
.al-tok input { letter-spacing:.08em }
.al-err { min-height:18px; margin:6px 0 0 28px; font-size:13px; line-height:18px; color:var(--tv-down) }
.al-ch-a { display:flex; flex-wrap:wrap; gap:8px; margin:12px 0 0 28px }
.al-ch-a2 { display:flex; flex-wrap:wrap; gap:20px; margin:12px 0 0 28px }
.al-tl { height:24px; padding:0; border:0; background:none; color:var(--tv-text2); font:400 14px/24px var(--tv-font); cursor:pointer }
@media (hover:hover) { .al-tl:hover { color:var(--tv-text); text-decoration:underline } }
.al-tl.busy { opacity:.45; pointer-events:none }
/* the phone: a row menu of the Alerts sheet opens over the sheet */
body:has(#shAlerts.open) #menu { z-index:112 }
body:has(#shAlerts.open) #menuBack.on { z-index:111 }
.al-ch-t { display:flex; align-items:center; gap:12px; margin:8px 0 0 28px; font-size:14px; color:var(--tv-text) }
.al-ch-t .al-cst { margin-left:0 }
.gg-tv a.tvd-btn.al-a { display:inline-flex; align-items:center; box-sizing:border-box; text-decoration:none }
/* the top bar's Alerts (right toolbar of TV: Watchlist, Alerts, Object tree) — hidden while the server has no alerts */
.gg-tv .cx-top > #alT[hidden] { display:none !important }
/* ── the Alerts page ── */
.al-pn .al-tools { display:flex; align-items:center; height:38px; padding:2px 4px 2px 0; flex:0 0 auto }
.al-pn .al-tb { width:38px; height:38px }
.al-pn .al-tb svg { width:24px; height:24px }
.al-pn .al-tb.on { color:var(--tv-text) }
@media (hover:hover) { .al-pn .al-tb:hover { background:var(--tv-hover); color:var(--tv-text) } }
.al-q { padding:2px 8px 8px; flex:0 0 auto }
.al-q .cx-go-in { display:flex }
.al-list { padding:4px 0 }
.al-r { position:relative; padding:8px 12px 8px 12px; border-radius:6px; cursor:default; outline:none }
@media (hover:hover) { .al-r:hover { background:var(--tv-hover) } .al-r:hover .al-r-b { display:flex } .al-r:hover .al-r-t { padding-right:72px } }
.al-r.sel, .al-r:focus-visible { background:var(--tv-sel) }
.al-r-t { font-size:14px; line-height:20px; color:var(--tv-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.al-r-s { display:flex; align-items:center; gap:8px; margin-top:2px; font-size:12px; line-height:18px; color:var(--tv-text2); white-space:nowrap; overflow:hidden }
.al-sy { color:var(--tv-text) }
.al-tm { display:inline-flex; align-items:center; gap:4px; min-width:0; overflow:hidden; text-overflow:ellipsis }
.al-cal { flex:0 0 14px }
.al-st.act, .al-st.ok { color:var(--tv-up) } .al-st.trig, .al-st.wait { color:#f5a623 } .al-st.exp, .al-st.bad { color:var(--tv-down) } .al-st.fired { color:var(--tv-text) }
.al-px { color:var(--tv-text); font-variant-numeric:tabular-nums }
.al-r-b { position:absolute; right:4px; top:50%; transform:translateY(-50%); display:none; gap:0 }
.al-r-b .cx-otb { width:32px; height:32px }
.al-r-b .cx-otb svg { width:22px; height:22px }
@media (hover:hover) { .al-r-b .cx-otb:hover { color:var(--tv-text); background:var(--tv-sel-hover) } }
.al-empty { display:flex; flex-direction:column; align-items:center; gap:22px; padding:96px 20px 20px; color:var(--tv-text2) }
.al-empty-l { padding:48px 20px; font-size:14px }
.al-eic { display:block; width:96px; height:96px; color:var(--tv-text2) }
/* the phone: the Alerts sheet holds the same page; the windows are full screen */
#alertList .al-pn { height:auto }
#alertList .cx-side-tabs { margin:2px 4px 6px }
#alertList .al-list { max-height:58vh; overflow-y:auto; border-top:1px solid var(--tv-div) }
#alertList .al-empty { padding-top:40px }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .al-dlg { width:100vw; height:100%; max-height:none }
  .al-dlg .al-body, .al-bots .al-body { height:auto; flex:1 1 auto; padding:6px 16px 14px }
  .al-row { grid-template-columns:104px minmax(0, 1fr) }
  .al-sym { font-size:17px }
  .al-ch-a .tvd-btn { flex:1 1 auto }
}
/* indal 22.10: indicator conditions — Upper / Lower bound rows 8 px apart, as the controls above them; the alert window's body grows with
   the condition (TV's window grows with the bounds and Moving), never below the 298 of before; Message / Notifications keep that height */
.al-cond .al-row + .al-row { margin-top:8px }
#alDlg .al-body { height:auto; min-height:298px }
/* almulti 23.10: several conditions (TV «Add condition») — a closed condition is a flat box with its text and a bin; the open one ends with
   Cancel / Add (a new one) or the bin, Cancel / Apply; Add condition — a text button with a plus. Presets: the header button left of the
   cross; the menu rows with a bin; Save alert preset — the name and four checkboxes */
.al-chip { display:flex; align-items:center; gap:4px; min-width:0 }
.al-cc { flex:1 1 auto; min-width:0; height:34px; display:flex; align-items:center; padding:0 11px; border:0; border-radius:8px; background:var(--tv-hover); color:var(--tv-text); font:400 14px/34px var(--tv-font); text-align:left; cursor:pointer }
.al-cc .v { min-width:0; overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
@media (hover:hover) { .al-cc:hover { background:var(--tv-sel) } }
.al-ccx { flex:0 0 34px; width:34px; height:34px; display:grid; place-items:center }
.al-ccx svg { width:20px; height:20px }
@media (hover:hover) { .al-ccx:hover { color:var(--tv-text); background:var(--tv-hover) } }
.al-cact { display:flex; align-items:center; gap:8px }
.al-ctl > .al-add { align-self:flex-start; gap:6px }
.al-add svg { flex:0 0 18px; color:var(--tv-text) }
.gg-tv .al-head .al-pre { margin-left:auto; margin-right:2px }
.gg-tv .al-head .al-pre + .tvd-x { margin-left:0 }
.gg-tv .al-head .al-pre svg { width:24px; height:24px }
body:has(#alDlg.open) #menu { z-index:130 }
body:has(#alDlg.open) #menuBack.on { z-index:129 }
#menu .al-pr { display:flex; align-items:stretch }
#menu .al-pr .cx-opt:first-child { flex:1 1 auto; min-width:0 }
#menu .al-pr .cx-opt:first-child .lb { overflow:hidden; text-overflow:ellipsis; white-space:nowrap }
#menu .al-pr .al-prx { flex:0 0 40px; width:40px; min-width:0; padding:0; justify-content:center }
#menu .al-pr .al-prx svg { width:18px; height:18px }
.al-pck { display:flex; flex-direction:column; margin-top:12px }
.al-chk { display:flex; align-items:center; gap:10px; min-height:40px; padding:0; border:0; background:none; color:var(--tv-text); font:400 14px var(--tv-font); text-align:left; cursor:pointer }
.al-chk .box { flex:0 0 18px; width:18px; height:18px; box-sizing:border-box; border:1px solid var(--tv-text2); border-radius:4px; display:grid; place-items:center }
.al-chk.on .box { border-color:#00FFA3; background:#00FFA3 }
.al-chk.on .box::after { content:''; width:9px; height:5px; border:solid #000; border-width:0 0 2px 2px; transform:translateY(-1px) rotate(-45deg) }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .al-head .al-pre { width:30px; min-width:30px; margin-right:0 }   /* almulti: the phone header keeps «BTCUSDT, 1h Binance» whole */
  .gg-tv .al-head .al-pre svg { width:22px; height:22px }
}

/* onechart 23.10: embedded mode (?embed=1, embed.js) — the big chart inside the app's strategy screen. Only the page chrome goes;
   the canvas, legend rows, scales, AUTO and the GG mark stay exactly as on /v2/f/chart/. Without body.gg-embed nothing here applies. */
body.gg-embed .cx-top, body.gg-embed .cx-left, body.gg-embed .cx-right, body.gg-embed #rszW, body.gg-embed .cx-foot,
body.gg-embed #strip, body.gg-embed #bar, body.gg-embed #indDel { display:none !important }
body.gg-embed .cx-app { padding-top:0 !important; padding-bottom:0 !important; gap:0 !important }
body.gg-embed .cx-body { gap:0 !important }
/* onechart2 23.10 (law of smoothness, rule 1 — one frame): until the chart is revealed (revealChart: candles, layer, scale and legend in one
   task) nothing of the stage shows — the GG mark, the legend, the scale gear stay hidden with it and appear in the same frame */
body.gg-embed #chartSlot[style*="hidden"] ~ * { visibility:hidden !important }
