/* ТОКЕНЫ ДИЗАЙН-СИСТЕМЫ 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 }

/* ── выпадающее меню: 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 }
}
@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 }
/* qafull 26.10 (guest sweep: «Log in to load GG-Shøt» did nothing — the row lets the pointer through to the chart): its words take the click, the login window opens (main.js) */
.cx-indleg.signin .nm { pointer-events:auto; cursor:pointer }
.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 }
/* hunt26 26.10 (desk hunt #2: Maximize pane on RSI / MACD — the coin logo of the hidden candle pane stayed on top of the pane's «MACD» name; compare rows too) */
.cx-stage.pane-max .cx-legicon, .cx-stage.pane-max .cx-cmprow { 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); box-sizing:border-box }   /* hunt26 26.10 (phone with a notch: the safe-area paddings came on top of the full height — Defaults / Cancel / Ok 81 px under the screen edge): the paddings are inside the page */
  .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(--gg-mint-muted);   /* kitfinal 25.10: not the neon 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 }

/* ── выпадающие меню: #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:24px; height:20px }   /* logo 25.10: the new mark is 1.18 : 1 */
/* logo 25.10 (owner picked the candle mark): the corner of the top bar in its own colours, full strength (the watermark stays dim) */
.cx-ggmark.cx-ggmark-top { opacity:1 !important }
.gg-tv .cx-ggmark-top svg.gg-candle { width:23px; height:25px }
/* wmark 23.10: the watermark (body.gg-free, main.js wmPaint) — the GG mark and the address in the chart corner, phone and computer.
   wmplus 23.10 (owner 15:36/15:38): one and the same mark for Free and Pro; Pro+, Premium and Lite VIP — no mark at all */
.gg-tv .cx-ggurl { display:none }
.gg-tv.gg-acc-2.gg-free .cx-ggmark-st { display:flex; align-items:center; gap:6px; position:absolute; left:10px; bottom:34px; z-index:2; pointer-events:none }
.gg-tv.gg-acc-2.gg-free .cx-ggurl { display:block; font-family:var(--tv-font); font-size:11px; font-weight:500; line-height:18px; letter-spacing:0; white-space:nowrap }

/* ═════ компьютер: плитки через зазор 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) }
  /* wmplus 23.10: the phone's plain corner mark for paid viewers is gone — Pro+ and above carry no mark (owner 15:38) */
}

/* ═════ акцент кита (минимально; без свечений, градиентов и «стекла») ═════ */
/* 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) }
/* 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) }

/* ═════ 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 }
/* press 26.10 (owner: «должно белым загораться при нажатии? нет микро-эффекта нажатия»): the window buttons in the kit's tones — Cancel / More
   outlined in the field colour, hover a soft fill, a press is a small sink (scale .97) with a slightly stronger fill, no white flash */
.gg-tv .tvd-btn { transition:transform .08s ease-out, background-color .12s, border-color .12s; border-color:var(--tv-field-hover); color:var(--tv-text) }
.gg-tv .tvd-btn:active { transform:scale(.97) }
@media (hover:hover) { .gg-tv .tvd-btn:not(.tvd-ok):not([data-tvd="defaults"]):hover { background:var(--tv-hover); border-color:var(--tv-field-hover); color:var(--tv-text) }
  .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-field); border-color:var(--tv-field-hover); color:var(--tv-text) }
.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 }
.tvd-sw i[data-ggc] { cursor:pointer }   /* indlive 25.10: a GG-Shøt / GG-Osc swatch opens TV's palette */
.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-back.eat { pointer-events:auto }   /* hunt26 26.10 (phone hunt 2 #5): a tool just picked in Drawings — the tap right after it doesn't reach the chart */
.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);--gg-mint-fill:color-mix(in srgb,#00FFA3 50%,#0e100e)}   /* mintup 26.10 (owner voice 11:48: «блеклый зелёный… светлее процентов на 20» — active interval, chosen tool, stars, top-right marks): 50→60 %, fill 42→50 % */   /* kitfinal 25.10 (owner): the interface green calmer — fills and lines «вариант 1» (42 %), the important marks (active interval, chosen tool, stars, checks) a step brighter (50 %, «как 2 или 3») */
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}
/* nostrip 23.10 (owner, Telegram Desktop from the app: «колёса кривые»): the wheel strip of the phone's bottom bar is styled only below 700 px; made
   while the window was narrow, it stayed in a wide one as plain text inside the coin and TF buttons. A wide window has the web buttons only */
@media (min-width: 700px) and (min-height: 700px), (min-width: 700px) and (pointer: fine), (min-width: 700px) and (pointer: none) { .gg-tv .cx-top .mstrip { display:none } }
.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-fill)!important;color:#e8efe8!important;border-color:var(--gg-mint-fill)!important}
.gg-tv #tvDlg .tvd,.gg-tv #tvDlg .tvd-foot{background:#050706!important}.gg-tv .tvd-tabs button.on:after{background:var(--gg-mint-fill)!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:var(--gg-mint-fill)!important;border-color:var(--gg-mint-fill)!important}
.gg-tv .tvd-btn.tvd-ok{background:var(--gg-mint-fill)!important;border-color:var(--gg-mint-fill)!important;color:#f2f5f2!important}.tvdd.sheet{background:#0e100e!important}.tvdd-r.on{color:#e8efe8!important;background:var(--gg-mint-fill)!important}
#menu.as-sheet,.gg-tv .cx-menu{background:#0e100e!important}#menu .cx-opt.active{background:var(--gg-mint-fill)!important;color:#e8efe8!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: панель выбранного рисунка на телефоне — вверху графика под легендой (у 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-fill)!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)) }
  /* hunt26 26.10 (phone in landscape with a notch: the drawing tools strip that takes the bar's place kept 4 px sides — its × and 🗑 sat under the cut-out): the bar's side fields */
  .gg-tv .cx-strip.bottom-nav { padding-left:max(4px, env(safe-area-inset-left, 0px), var(--tg-safe-area-inset-left, 0px)); padding-right:max(4px, env(safe-area-inset-right, 0px), var(--tg-safe-area-inset-right, 0px)) }
  /* hunt26 26.10: the same for the bottom sheets (TF, Drawings, «…», Symbol search, Indicators): titles, tiles, coin icons, stars and × sat under the cut-out */
  .gg-tv :is(.cx-tfsh, .cx-sheet .modal-sheet) { box-sizing:border-box; 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 }
  .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 }
/* rea27C 27.10 (phone hunt2 Q4: with the keyboard up the sheet kept its 78 % — 4 results seen at 508 px): as TV, while its search has the keyboard
   the phone's Indicators sheet grows to the top of the visible area (8 px under it), the results get the rest */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv #shInd:has(#indSearch:focus) .modal-sheet { 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) - 8px) !important; max-height:none !important; box-sizing:border-box }
}
/* 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)}
/* rea27B 27.10 (#7): a drawing row being dragged to a new order (Object tree) — lifted over the others, the selection fill */
.cx-otrow[data-ot="o"]{-webkit-user-select:none;user-select:none;-webkit-touch-callout:none}
.cx-otrow.cx-otdrag{position:relative;z-index:2;background:var(--tv-sel);cursor:grabbing}
.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,#e8efe8)}
.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:var(--gg-mint-fill)}   /* kitblue 25.10: kit colour, not TV blue */
/* toastui 25.10 (owner: «серые облагородить… к одному стилю»): one toast — the kit's dark panel instead of the old blue-grey, a soft shadow, the 3D icon by
   meaning (main.js snack), Inter 14; it rises 6 px in and fades out */
.cx-snack{position:fixed;left:16px;right:16px;margin:0 auto;width:fit-content;bottom:84px;transform:translateY(6px);z-index:95;display:flex;align-items:center;gap:10px;box-sizing:border-box;max-width:min(440px,calc(100vw - 32px));min-height:44px;padding:10px 18px 10px 12px;border-radius:10px;background:#1a1e1a;color:#e8efe8;font:500 14px/1.35 GGInter,-apple-system,sans-serif;box-shadow:inset 0 1px 0 rgba(255,255,255,.04),0 10px 30px rgba(0,0,0,.6),0 2px 6px rgba(0,0,0,.45);opacity:0;pointer-events:none;transition:opacity .16s ease,transform .16s ease}
.cx-snack.on{opacity:1;transform:none}
.cx-snack .ic{flex:0 0 22px;width:22px;height:22px;display:flex;align-items:center;justify-content:center}
.cx-snack .ic:empty{display:none}
.cx-snack .ic img{width:22px;height:22px;display:block}
.cx-snack .tx{min-width:0}
.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 }
/* indlive2 25.10: the line style sample of the indicator windows — the drawings' one (#dsetWin .dw-samp): a line sample and the chevron, 64 wide;
   the generic window's Style rows keep their controls in one group of the same width (swatch 34, width 64, style 64, gaps 8) from the right,
   so the swatches of the line, level, histogram and fill rows stand in one column (TV) */
.gg-tv :is(#tvInd, #tvDlg) .dw-samp { flex:0 0 64px; width:64px; padding:0 4px 0 10px }
.gg-tv :is(#tvInd, #tvDlg) .dw-samp .v { color:var(--tv-text) }
.gg-tv :is(#tvInd, #tvDlg) .dw-samp .v svg { width:32px; height:12px; display:block }
.gg-tv #tvInd .dw-samp { height:30px }
.gg-tv #tvDlg .dw-samp { height:34px }
.gg-tv #tvInd .tvi-ctl { flex:0 0 auto; min-width:178px; gap:8px; justify-content:flex-start }
.gg-tv #tvInd .tvi-ctl .tvi-w { margin-left:0 }
.gg-tv #tvInd .tvi-vis { flex:1 1 auto; min-height:0; min-width:0 }   /* indsweep 26.10: the Style row's name with its visibility checkbox (TV) */
body:has(#tvInd.open) #menu, body:has(#tvDlg.open) #menu { z-index:130 }
.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; resize:none; overflow:hidden; white-space:pre }   /* qa26 26.10 (tester #1): the editor is a textarea now (Shift+Enter — a new line) */

/* 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 var(--gg-mint-muted, #069f67) }
.cx-wlc.asc::after { border-bottom:5px solid var(--gg-mint-muted, #069f67) }
#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-wlm { right:32px }   /* feat26 26.10: the row's «⋯» left of its × */
body:has(#shSym.open) #menu { z-index:112 } body:has(#shSym.open) #menuBack.on { z-index:111 }   /* feat26 26.10: a row's menu over the phone's watchlist (the symbol sheet) */
.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-wl-row.cx-sr.kb { background:#2e2e2e } .gg-tv #shInd .toggle-row.kb { background:var(--tv-hover) }   /* patrol1024: the row marked from the keyboard (↓ / ↑) — as its hover */
@media (hover:hover) { .gg-tv #shInd .toggle-row:hover { background:var(--tv-hover) } }   /* patrol1024: TV — a row of the Indicators window lights under the mouse (#shInd's transparent row beat the sheet's hover) */
.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; scroll-snap-type:y proximity }   /* patrol1024 r2: a row at the bottom (symFit) */
  .gg-tv #shSym #symList :is(.cx-sr, .kpi-label) { scroll-snap-align:end }
  .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 var(--gg-mint-muted, #069f67);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, #00FFA3) }
/* 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:var(--gg-mint-muted, #069f67) }   /* kitblue 25.10 (owner: «синяя полоска загорается — лучше по киту, тогда будет бренд»): the edges that drag light in the kit colour */
#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 } }
/* otpanel 25.10 (owner: «левую сторону тоже двигать — этого нет на TW, такое бы нас выделяло»; picked «Б»): the Object tree docked right beside the
   drawing bar, one pane with it (no gap); the chart gives up the width (--ow, main.js, set before the first frame). Its right edge drags as the right
   column's: the same 7 px handle over the 4 px gap. Rows, labels and «—» are the sheet's (.cx-otrow); the selected drawing's row lit as the
   watchlist's active row, edge to edge. The toggle sits at the bottom of the bar */
#otPane, #rszO { 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-app.ot-on #otPane { display:block; flex:0 0 clamp(200px, var(--ow, 248px), 420px); box-sizing:border-box; min-width:0; margin-left:-4px;
    overflow:hidden; background:var(--tv-pane); border-radius:0 4px 0 0 }
  /* otpanel 25.10 (owner 14:00 «переносить по уму, адаптировав»): TV's tabs Object tree | Data window — the right panel's tabs and page (.cx-side);
     the body scrolls under them. Data window in the narrow panel: values right-aligned and on one line down to 200 px */
  .gg-tv #otBody { overflow-x:hidden; overscroll-behavior:contain; scrollbar-width:none }
  .gg-tv #otBody > .cx-sts { padding:8px 14px 8px 12px }
  .gg-tv #otBody :is(.cx-dwr, .cx-dwh) { padding:0 14px 0 12px; gap:8px }
  .gg-tv #otBody .cx-dwr span { flex:none }
  .gg-tv #otBody :is(.cx-dwr, .cx-dwh) b { min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis }
  .gg-tv #otBody .cx-dwr b { text-align:right }
  /* the right panel's page was drawn in TV's greys; here in the kit's tokens (the brief: --tv-pane / --tv-text / --tv-text2 / --tv-div): the tabs as the
     interval switch (the picked one filled, no box around them), one line down to 200 px; the bar's block, lines and up / down colours */
  .gg-tv #otPane .cx-side-tabs { margin:10px 8px 8px; padding:0; background:transparent }
  .gg-tv #otPane .cx-sidetab { flex:1 1 auto; min-width:0; padding:0 6px; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; color:var(--tv-text2) }
  .gg-tv #otPane .cx-sidetab.on { background:var(--tv-sel); color:var(--tv-text) }
  @media (hover:hover) { .gg-tv #otPane .cx-sidetab:not(.on):hover { color:var(--tv-text) } }
  .gg-tv #otPane .cx-side-body { border-top-color:var(--tv-div) }
  .gg-tv #otBody .cx-dwr { color:var(--tv-text) }
  .gg-tv #otBody .cx-dwr b.up { color:var(--tv-up) } .gg-tv #otBody .cx-dwr b.dn { color:var(--tv-down) }
  .gg-tv #otBody .cx-dwblk { background:var(--tv-sel); border-color:var(--tv-div) }
  .gg-tv #otBody .cx-dwblk2 { border-bottom-color:var(--tv-div) }
  .gg-tv .cx-app.ot-on .cx-left { border-radius:0 }
  .gg-tv .cx-app.ot-on #rszO { display:block; position:relative; flex:0 0 7px; margin:0 -5px 0 -6px }
  /* otpull 26.10 (owner «это окно всё ещё не двигается»): closed, the same handle sits on the bar's right edge (no width taken) and pulls the panel out */
  .gg-tv .cx-app:not(.ot-on) #rszO { display:block; position:relative; z-index:3; flex:0 0 7px; margin:0 -6px 0 -5px }
  /* otlpos 26.10: the Object tree button sits under the drawing tools (owner) — no longer pushed to the bottom */
  .gg-tv #otPane .cx-otname { min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis }
  .gg-tv #otPane .cx-otb { flex:none }
  .gg-tv #otPane .cx-otrow.on { background:var(--tv-sel); box-shadow:-12px 0 0 var(--tv-sel), 14px 0 0 var(--tv-sel) }
}
body:is(.gg-mc-cell, .gg-mc-deskcell) :is(#otPane, #rszO, #otL), body.gg-mc-host:not(.gg-mc-dh) :is(#otPane, #rszO) { display:none !important }
.cx-app.cx-rsz #otPane { pointer-events:none }
/* 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 var(--gg-mint-muted, #069f67) }

/* 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:var(--gg-mint-muted, #069f67) }   /* favgreen 24.10 (owner «фаворит звёзды все зелёные»): a starred star is our green everywhere */
.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 }
  /* hunt26 26.10 (phone Indicators → On chart: ⚙ and 🗑 were 28×28, «Remove all» 32 high — a near miss landed on the row): 40 px to the finger, nothing moves */
  .gg-tv #shInd :is(.cx-onb, .cx-rmall) { position:relative }
  .gg-tv #shInd .cx-onb::after { content:''; position:absolute; inset:-6px }
  .gg-tv #shInd .cx-rmall::after { content:''; position:absolute; left:-6px; right:-6px; top:-4px; bottom:-4px }
  /* hunt26 26.10 (phone Object tree: Lock / Visible / Remove were 28 px with 4 px between — a near miss on the eye deleted the drawing): 40 px buttons */
  .gg-tv #menu .cx-otrow .cx-otb { width:40px; height:40px }
  /* hunt26 26.10 (phone Replay bar: 34 px buttons 2 px apart — Forward next to Jump to real-time, which leaves the replay): 40 px; the bar stays well inside 390 */
  .gg-tv .cx-replay .nav-btn.cx-tb { width:40px; height:40px }
  .gg-tv .cx-replay .nav-btn.cx-tb.cx-rp-spd { height:40px }
  /* hunt26 26.10 (phone hunt 2 #2: the indicator / chart Settings pages — Defaults, Cancel, Ok 34 px high, Cancel 12 px from Ok, × 34 px): 46 px to the finger, nothing moves */
  .gg-tv .tvd-foot .tvd-btn, .gg-tv .tvd-x { position:relative }
  .gg-tv .tvd-foot .tvd-btn::after { content:''; position:absolute; inset:-7px -6px }
  .gg-tv .tvd-x::after { content:''; position:absolute; inset:-6px }
  /* hunt26 26.10 (phone hunt 2 #3: Symbol search — the star was 20×20 (18 px to the finger) at the row's edge; a near miss opened that coin instead): 42×44 */
  .gg-tv #shSym .cx-sstar { position:relative }
  .gg-tv #shSym .cx-sstar::after { content:''; position:absolute; inset:-12px -10px }
}
/* 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-fill); color:#e8efe8 }
@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 }
#indList .cx-gated .cx-lk { color:var(--tv-down, #e83a4e) }   /* lockind 25.10 (owner: «красный замок только на индикаторы, на всё остальное как было»): red only in the Indicators window */
.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 }
/* rea27C 27.10 (desk hunt2 #36): a locked menu row with an icon — the top bar's lock (icon at .5, the 11×13 lock on its corner) */
.cx-opt.cx-optlk .ico { position:relative }
.cx-opt.cx-optlk .ico > svg, .cx-opt.cx-optlk > .lb { opacity:.5 }
.cx-opt.cx-optlk .ico > .cx-lk { position:absolute; right:-4px; bottom:-3px; width:11px; height:13px; background:var(--tv-pop, #1f1f1f); border-radius:3px !important }
.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:var(--gg-mint-muted, #069f67) }
@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 */

/* tiers 23.10: a plan's lock in the alert windows — My bot (the Telegram bot window) and Add condition: the guest's look (dimmed, small lock) */
.al-ch.cx-gated { cursor:pointer }
.al-ch.cx-gated > .al-ch-h { opacity:1 }
.al-ch.cx-gated > .al-ch-h > .t { opacity:.5 }
.al-ch.cx-gated > .al-ch-h > .cx-lk { margin-left:auto }
.al-rad.cx-gated > .cx-lk, .al-add.cx-gated > .cx-lk { margin-left:6px }
.cx-lyb.cx-gated > svg { opacity:.5 }
.cx-lyb.cx-gated > .cx-lk { position:absolute; right:0; bottom:0 }
/* patrol1024 r2 24.10 (owner via the coordinator: the windows in one style): the small windows — the layout name (Rename, Make a copy, Create new
   layout), Delete layout, Open layout and the watchlist ones — in the look of the alert and settings windows: their panel colour and shadow, the
   title on the left in a 62 px head with the × at its right, the 34 px field with their focus line, their Cancel and mint button over the divider
   line. Log in keeps its own code field (cx-lg) */
.gg-tv .cx-iv.cx-wldlg:not(.cx-lg), .gg-tv .cx-iv.cx-wlo { align-items:stretch; gap:0; padding:0; background:var(--tv-pop); box-shadow:var(--tv-shadow); border-radius:6px; color:var(--tv-text); font:400 14px/1.3 var(--tv-font) }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-iv-t, .gg-tv .cx-wlo .cx-iv-t { box-sizing:border-box; height:62px; margin:0; padding:17px 60px 0 20px; text-align:left; font:600 20px/28px var(--tv-font); color:var(--tv-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wldlg-x, .gg-tv .cx-wlo .cx-wldlg-x { top:14px; right:17px; color:var(--tv-text) }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wldlg-in { box-sizing:border-box; width:auto; height:34px; margin:6px 20px 0; padding:0 11px; border:1px solid var(--tv-field); border-radius:8px; background:transparent; color:var(--tv-text); text-align:left; font:400 14px/32px var(--tv-font) }
@media (hover:hover) { .gg-tv .cx-wldlg:not(.cx-lg) .cx-wldlg-in:hover { border-color:var(--tv-field-hover) } }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wldlg-in:focus { border-color:var(--tv-focus); box-shadow:inset 0 0 0 1px var(--tv-focus) }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wldlg-in.bad { border-color:var(--tv-down); box-shadow:inset 0 0 0 1px var(--tv-down) }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-lay-e { margin:8px 20px 0 }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-lay-e:empty { margin:0 }
.gg-tv .cx-laydel-t { margin:2px 20px 0; color:var(--tv-text); font:400 14px/20px var(--tv-font); overflow-wrap:anywhere }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wldlg-f { margin:20px 0 0; padding:16px 20px; gap:12px; border-top:1px solid var(--tv-div) }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wlbtn { height:34px; min-width:0; padding:0 11px; border-radius:8px; border:1px solid #fff; background:transparent; color:#fff; font:400 14px/32px var(--tv-font) }
.gg-tv .cx-wldlg:not(.cx-lg) .cx-wlbtn.ok { min-width:44px; background:var(--gg-mint-fill); border-color:var(--gg-mint-fill); color:#f2f5f2 }
@media (hover:hover) { .gg-tv .cx-wldlg:not(.cx-lg) .cx-wlbtn:not(.ok):not(:disabled):hover { background:var(--tv-light); border-color:var(--tv-light); color:var(--tv-ink) }
  .gg-tv .cx-wldlg:not(.cx-lg) .cx-wlbtn.ok:not(:disabled):hover { background:var(--tv-text); border-color:var(--tv-text) } }
.gg-tv .cx-wlo { padding-bottom:8px }
.gg-tv .cx-wlo .cx-wlo-s { box-sizing:border-box; height:34px; margin:6px 20px 8px; padding:0 10px; border:1px solid var(--tv-field); border-radius:8px }
.gg-tv .cx-wlo .cx-wlo-s:focus-within { border-color:var(--tv-focus); box-shadow:inset 0 0 0 1px var(--tv-focus) }
.gg-tv .cx-wlo .cx-wlo-s input { color:var(--tv-text); font:400 14px/1 var(--tv-font) }
@media (hover:hover) { .gg-tv .cx-wlo .cx-wlo-row:hover { background:var(--tv-hover) } }
.gg-tv .cx-wlo .cx-wlo-row.on .nm { color:var(--tv-text) }
.gg-tv .cx-wlo .cx-lay-none { color:var(--tv-text2) }
/* patrol1024 r2 24.10 (owner: outlined boxes are slop; the model is TV's iPhone sheet, Analysis hub, rec IMG_6496 0:34–0:37): the tiles and chips of
   the phone sheets («…», Drawings, interval) are filled a step lighter than the sheet, with no outline; the one switched on shows its mint
   icon (tile) or the mint fill (chip) — no ring */
.cx-tfsh .cx-dtile { border-color:transparent; background:#1a1e1a }
.cx-tfsh .cx-dtile:active { background:#232823 }
.cx-tfsh .cx-dtile.on { border-color:transparent; background:#232823 }
.cx-tfsh .cx-chip { border-color:transparent !important; background:#1a1e1a !important }
.cx-tfsh .cx-chip.on { background:var(--gg-mint-fill) !important; border-color:transparent !important }
/* kittone 25.10 (owner: «зелёные — не так ярко, профессиональный уровень»; «полоску снизу тоже, и намного лучше»): the edges that drag — a soft
   2 px line fading at its ends, side and bottom alike. The tone was picked by the owner on the chart (kitfinal) */
.mc-split.v::after { left:2px; width:2px; border-radius:1px } .mc-split.h::after { top:2px; height:2px; border-radius:1px }
.mc-split.v { --dir:180deg } .mc-split.h { --dir:90deg }
.mc-split:hover::after, .mc-split.on::after { background:linear-gradient(var(--dir), transparent, var(--gg-mint-fill) 12%, var(--gg-mint-fill) 88%, transparent) }
/* acctrow 25.10: the account menu's first row — the name left, the plan right, normal case */
.cx-acct { display:flex; align-items:center; justify-content:space-between; gap:24px; min-height:32px; padding:4px 12px 6px; font-family:var(--tv-font) }
.cx-acct .nm { color:var(--tv-text, #e8efe8); font-size:14px; font-weight:600; white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.cx-acct .pl { color:var(--tv-text2, #8a968a); font-size:13px; white-space:nowrap; margin-left:auto }
.cx-hub-html .cx-acct { padding:6px 15px 0; min-height:24px } .cx-hub-html .cx-acct .pl { margin-left:0 }   /* qaauth 26.10 (F6): the phone «…» sheet — the plan on its own row, left */
/* invtip 25.10: the small (i) of a menu row (Invite a friend) — its rule in the hover tip, the row keeps its width */
.cx-mi { display:inline-grid; place-items:center; width:16px; height:16px; margin-left:10px; border-radius:50%; background:#5d5d5d; color:#1f1f1f; font:600 11px/16px Georgia, serif; cursor:help }   /* the same (i) as the settings rows (.tvd-i) */
.cx-tip { z-index:10050 }
/* stratmenu 25.10 (owner: the list black, then grey): the strategy list on the dialog's own surface — one colour from the search to the last row,
   the window under the phone sheet not darkened (it is the same surface) */
.gg-tv .tvdd.tvst, .gg-tv .tvdd.tvst.sheet { background:var(--tv-pane) !important; box-shadow:var(--tv-shadow) }   /* VA2: --tv-pane = the window's own #050706 (--tv-pop was a shade lighter) */
@media (hover:hover) { .gg-tv .tvst .tvdd-r:hover { background:var(--tv-hover) } }
.gg-tv .tvdd-back.on.tvst-back { background:transparent }
/* stratmenu VA: All / Favorites — the window's own tabs (text, the underline) under the search; a row's star shows on hover, stays when on */
.gg-tv .tvst-a .tvst-r .cx-ind-star:not(.on) { opacity:0 }
@media (hover:hover) { .gg-tv .tvst-a .tvst-r:hover .cx-ind-star { opacity:1 } }
@media (hover:none) { .gg-tv .tvst-a .tvst-r .cx-ind-star { opacity:1 } }
.gg-tv .tvdd.sheet.tvst-a .tvst-r .cx-ind-star { opacity:1 }   /* the phone sheet: no hover — the stars always in sight */
/* stratmenu VA2 25.10 (owner 06:52: «вылизать всю верхнюю часть… расстояния неидеальные»): the top of the list on a 4 / 8 rhythm, one left edge.
   Computer: text at 14 from the list's edge (rows 6 + 8), search 36, gap 8, tabs 32 on a 1 px line, gap 8, titles 28 (8 above the next one), rows 32.
   Phone: text at 20 like the window's title and tabs, search 40, tabs 36, titles 32, rows 36; the sheet 8 under the window's tabs */
.gg-tv .tvdd.tvst { padding:8px 0 }
.gg-tv .tvdd.tvst { transition:opacity .12s ease-out } .gg-tv .tvdd.tvst.tvst-out { opacity:0; pointer-events:none }   /* press 26.10: the list fades out after a pick */
.gg-tv .tvdd.tvst .tvdd-r[data-stv]:active, .gg-tv .tvdd.tvst .tvdd-r.tvst-pick { background:var(--tv-sel) }
.gg-tv .tvdd.tvst .screener-search { height:36px; margin:0 6px 8px; padding:0 10px 0 8px; gap:8px }
.gg-tv .tvdd.tvst .tvst-tabs { flex:0 0 auto; display:flex; gap:20px; height:32px; margin:0 14px 8px; padding:0; border-bottom:1px solid var(--tv-div) }
.gg-tv .tvdd.tvst .tvst-tabs::after { content:none }
.gg-tv .tvdd.tvst .tvst-dkback { gap:6px; color:var(--tv-text) } .gg-tv .tvdd.tvst .tvst-dkback svg { width:18px; height:18px; transform:rotate(90deg); flex:none; margin-left:-4px }   /* stdesks2 26.10: «‹ Desk name» on top of a desk's list */
.gg-tv .tvdd.tvst .tvst-dk .tvst-v { margin-left:auto; margin-right:8px }
.gg-tv .tvdd.tvst .tvdd-h .tvst-cnt { margin-left:auto; padding-right:2px; font-family:var(--mono, ui-monospace, SFMono-Regular, Menlo, monospace); font-size:12px; font-variant-numeric:tabular-nums; color:var(--tv-text2) }   /* stcnt 26.10: the section's total on its title line, right, terminal digits */
.gg-tv .tvdd.tvst .tvdd-h:has(.tvst-cnt) { display:flex; align-items:center }
.gg-tv .tvdd.tvst .tvst-tabs .tvst-sync { margin-left:auto; align-self:center; min-height:0; font-size:13px; font-weight:400; white-space:nowrap; cursor:pointer }   /* syncC 26.10: Sync with chart on the tabs' line, right */
.gg-tv .tvdd.tvst .tvst-tabs button { position:relative; height:32px; padding:0; font-size:14px; line-height:31px; font-weight:600; color:var(--tv-text2) }
.gg-tv .tvdd.tvst .tvst-tabs button.on { color:var(--tv-text) }
.gg-tv .tvdd.tvst .tvst-tabs button.on::after { content:''; position:absolute; left:0; right:0; bottom:-1px; height:2px; border-radius:1px; background:var(--gg-mint-fill) !important; z-index:1 }
.gg-tv .tvdd.tvst .tvdd-r.tvdd-h, .gg-tv .tvdd.tvst .tvdd-r.tvdd-h:hover { height:28px; line-height:28px; margin-top:8px; padding-top:0; padding-bottom:0; font-size:13px; color:var(--tv-text2) }
.gg-tv .tvdd.tvst .tvdd-sc > .tvdd-r.tvdd-h:first-child { margin-top:6px }   /* stall 26.10 (owner «сначала отступ, потом Crypto, потом отступ — не такой огромный, как в оригинале»): a gap above the first title too */
.gg-tv .tvdd.tvst .tvdd-sc > .tvdd-r.tvdd-h { margin-bottom:4px }
.gg-tv .tvdd.tvst.sheet { padding:8px 0 calc(8px + env(safe-area-inset-bottom)) }
.gg-tv .tvdd.tvst.sheet .screener-search { height:40px; margin:0 8px 8px; padding:0 12px 0 12px }
.gg-tv .tvdd.tvst.sheet .tvst-tabs { height:36px; margin:0 20px 8px; gap:24px }
.gg-tv .tvdd.tvst.sheet .tvst-tabs button { height:36px; font-size:15px; line-height:35px }
.gg-tv .tvdd.tvst.sheet .tvdd-sc { padding:0 8px }
.gg-tv .tvdd.tvst.sheet.tall .tvdd-r.tvdd-h, .gg-tv .tvdd.tvst.sheet.tall .tvdd-r.tvdd-h:hover { height:32px; line-height:32px; font-size:14px }
/* Auto (owner «B»): a checkbox row under Strategy like Volume Filter, its (i) at the right */
.gg-tv .tvd-row.tvd-syncrow .tvd-chk { flex:1 1 auto; min-height:0 }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv #tvDlg .tvd-row.tvd-syncrow .tvd-chk { flex:0 0 203px } }   /* the phone: its (i) under the other (i) (label 112 + field 91) */
/* lgpage 25.10 (owner: «должна быть страница логина» on the phone): the same Log in with Telegram on a full page — the chart's dark, the GG mark above the
   title, the form in the middle; × goes on to the chart. The mark shows only on the page */
.cx-lg-mark { display:none }
#loginDlg.page { background:#050706; align-items:center; justify-content:center }
#loginDlg.page .cx-lg { width:calc(100% - 32px); max-width:400px; box-shadow:none; background:transparent; border:0 }
#loginDlg.page .cx-lg-mark { display:flex; justify-content:center; margin:0 0 20px; color:var(--gg-mint-muted) }
#loginDlg.page .cx-lg-mark svg { width:64px; height:auto }
#loginDlg.page .cx-iv-t { text-align:center; font-size:20px }
#loginDlg.page .cx-wldlg-x { position:fixed; top:max(16px, env(safe-area-inset-top)); right:16px }   /* the page's corner, not the form's */

/* mobpass 26.10 (owner «мобил экран не проработан», «снизу… сделать её намного лучше»; his iPhone in Telegram next to TV's app at one scale):
   the bottom bar — the ticker whole up to 8 letters (TV's app: «CLUSDT» whole; ours was cut to «SOLUSD»), a longer one fades at its own end (.mi.ovf);
   the buttons share the bar up to its right edge (Telegram has no full screen button: 30 % of the bar stood empty on the right); a thin line between
   the tools and undo, as in TV's app; icons 32 (the drawing ~20 pt like TV's, was ~16), the line stays 1.1 */
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .gg-tv .cx-top > .cx-sym { flex:3 0 82px; width:auto; min-width:82px; max-width:106px }
  .gg-tv .cx-top .cx-sym .mstrip { right:0;
    -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 > .nav-btn.cx-tb { flex:1 1 44px; min-width:44px; max-width:60px }
  .gg-tv .cx-top .cx-sep-u.d-only { display:block !important; order:6; flex:0 0 1px; width:1px; height:20px; margin:0 4px; background:var(--tv-field) }
  .gg-tv .cx-top .js-undo { order:7 }
  .gg-tv .cx-top #fullT { order:8 }
  .gg-tv .cx-top .nav-btn.cx-tb svg.tvi { width:32px; height:32px }
}

/* sgdk 26.10: the desk filter on the Signals tab line — the window's select, compact */
.gg-tv .cx-sgp .cx-sgdk { flex:0 1 auto; max-width:150px; height:28px; padding:0 6px 0 10px; gap:4px; font-size:13px; border-radius:7px }
/* sgdknob 26.10 (owner: «убери обводку»): the desk picker in the Signals header — plain text with the chevron, no frame in any state */
.gg-tv .cx-sgp button.cx-sgdk.tvd-dd, .gg-tv .cx-sgp button.cx-sgdk.tvd-dd:hover, .gg-tv .cx-sgp button.cx-sgdk.tvd-dd:focus, .gg-tv .cx-sgp button.cx-sgdk.tvd-dd.dd-on { border-color:transparent; background-color:transparent; padding-left:4px }
.gg-tv .cx-sgp .cx-sgdk .v { min-width:0; overflow:hidden; white-space:nowrap; text-overflow:ellipsis }
.gg-tv .cx-sgp .cx-sgdk .ch svg { width:14px; height:14px }
.gg-tv .cx-sgnone { padding:14px 16px; color:var(--tv-text2); font-size:13px }

/* qa26 26.10 (tester #3): Cursors as TV — Dot: a small dot pointer, Arrow: the arrow; only where the core shows its crosshair pointer (drawings keep «pointer», borders their resize) */
#chartSlot.cx-cur-dot [style*="cursor: crosshair"] { cursor:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='9' height='9'%3E%3Ccircle cx='4.5' cy='4.5' r='2.5' fill='%23dbdbdb' stroke='%23000' stroke-width='1'/%3E%3C/svg%3E") 4 4, crosshair !important }
#chartSlot.cx-cur-arrow [style*="cursor: crosshair"] { cursor:default !important }
/* qa26 26.10 (tester #6: the Object tree padlock looked the same locked / unlocked): locked — the closed padlock in the kit's accent, always shown; unlocked — the open one */
.cx-otb[data-otlock].on, .gg-tv .cx-otb[data-otlock].on { color:var(--tv-acc, #069f67) }
/* qa26 26.10 (tester #12): the text field of the Note / Text sheet is a textarea (Shift+Enter — a new line): the field's look, two lines tall, no resize grip */
.gg-tv .cx-sheet .form-input.cx-txtin, .cx-txtin { height:auto; min-height:34px; padding:7px 10px; line-height:18px; resize:none; display:block; width:100% }
/* hunt26 26.10: landscape notch fields for the Indicators sheet too — its own padding rule (#shInd above) comes later than the landscape block */
@media (orientation: landscape) and (max-height: 500px) and (pointer: coarse) {
  .gg-tv #shInd .modal-sheet { 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 }
}

/* customtf 27.10: «Add custom interval» — the number and its unit in one row (the field of the name dialog, the dropdown of Settings); × of a custom
   interval in the Interval menu (after its star); a custom chip / favorite of a guest or Free — the plan's lock, as the other locked controls */
.cx-ctf-r { display:flex; gap:8px; margin:6px 20px 0 }
.cx-ctf-r .cx-wldlg-in, .gg-tv .cx-wldlg:not(.cx-lg) .cx-ctf-r .cx-wldlg-in { flex:1 1 auto; width:auto; min-width:0; margin:0 }
.cx-ctf-r .tvd-sel { flex:0 0 132px }
#menu .cx-opt .st + .st.cx-mdel { margin-left:0 }
#menu .cx-opt .st.cx-mdel svg { width:14px; height:14px }
.cx-tff.cx-gated, .cx-chip.cx-gated { display:inline-flex; align-items:center; gap:5px }

/* ── 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 }
.gg-tv .al-head .al-bk[hidden] { display:none }   /* alexp 24.10: the bots window shows its ‹ only when there is a page to go back to */
.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; flex-shrink:0 }
/* altm 23.10: in a 300–320 px panel the expiration's time was cut («09:4») — the venue gives way first, the date stays whole */
.al-sy, .al-st { flex-shrink:0 } .al-vn { 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 }
}
/* alpar 23.10: TV's pieces — the row of an active alert holds Stop, the gear and the bin (three buttons); the filter button lit while it filters;
   Message: the { } of the placeholders right of its label; Expiration: the date and the time side by side (the pickers in the dark theme);
   Notifications: Show pop-up / Play sound with the sound; the pop-up of a triggering — a card over the chart, never full screen on the phone */
@media (hover:hover) { .al-r.al-r3:hover .al-r-t { padding-right:104px } }
.al-flr { display:flex; align-items:center; justify-content:space-between }
.al-flr label { color:var(--tv-text2) }
.al-ph { height:24px; min-width:34px; padding:0 8px; border:1px solid var(--tv-field); border-radius:6px; background:none; color:var(--tv-text); font:500 13px/22px var(--tv-font); cursor:pointer }
@media (hover:hover) { .al-ph:hover { border-color:var(--tv-field-hover); background:var(--tv-hover) } }
.al-exp { margin-top:6px }
.al-exp input { color-scheme:dark; font-variant-numeric:tabular-nums }
:root[data-theme="light"] .al-exp input { color-scheme:light }
.al-snd { display:grid; grid-template-columns:minmax(0, 1fr) 150px; align-items:center; gap:8px }
.al-snd .al-chk { min-width:0 }
.gg-tv .al-snd .tvd-sel { width:100%; max-width:none; min-width:0 }
.gg-tv .al-pop { width:min(400px, calc(100vw - 32px)) }
.al-pop .al-body { height:auto; min-height:0; max-height:min(60vh, 420px); padding:4px 20px 12px }
.al-pi { padding:10px 0; border-bottom:1px solid var(--tv-div) }
.al-pi:last-child { border-bottom:0 }
.al-pi-t { font-size:15px; line-height:20px; font-weight:600; color:var(--tv-text); overflow-wrap:anywhere }
.al-pi-m { margin-top:2px; font-size:14px; line-height:20px; color:var(--tv-text); white-space:pre-wrap; overflow-wrap:anywhere }
.al-pi .al-r-s { margin-top:6px }
body:has(#alPop.open) #snack { z-index:140 }
#alPop.al-back { z-index:135 }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  #alPop.tvd-back { align-items:center }
  .gg-tv .al-pop { width:calc(100vw - 32px); height:auto; max-height:80vh; border-radius:12px; padding-top:0; padding-bottom:0 }
  .al-pop .al-body { padding:4px 16px 12px }
  .al-snd { grid-template-columns:minmax(0, 1fr) 132px }
}
/* alux 23.10: the alert windows as TV's in their make-up (alerts_ui.js alux). The checks and radios — the green of the Settings windows (tvd-chk);
   Trigger and Expiration — fields as the Condition's, 8 apart; Expiration's list — the term, its date grey on the right; Custom date — the Go to
   window's 150 / 100 fields over its calendar, 262 wide in the middle; Notifications — a row per way (radio, name over @handle, state or action on
   the right), the sound always in place with ▶; the bots window — a row per bot, My bot's numbered steps; the toast of a triggering (TV) */
.al-rad.on .dot { border-color:#2BC360 } .al-rad.on .dot::after { background:#2BC360 }
.al-chk.on .box { border-color:#2BC360; background:#2BC360 }
#alDlg .al-row.al-bx { margin-bottom:8px }
.gg-tv .al-ctl .al-xb .v { flex:0 1 auto; min-width:0 }
.al-xb .al-xr { margin-left:auto; padding-left:12px; font-size:13px; color:var(--tv-text2); white-space:nowrap }
.tvdd-r.al-ddx { display:flex; align-items:center; gap:24px }
.tvdd-r .al-ddr { margin-left:auto; font-size:13px; color:var(--tv-text2); white-space:nowrap }
.tvdd-r.on .al-ddr { color:inherit; opacity:.7 }
.tvdd-r .al-ddi { display:grid; place-items:center } .tvdd-r .al-ddi svg { width:20px; height:20px }
.al-xp { width:262px; margin:10px auto 0 }
.al-xp .al-vrow.al-exp { grid-template-columns:150px 100px; gap:12px; margin-top:0 }
.al-xp .cx-go-in .ic { flex:0 0 28px; width:28px; height:28px; color:var(--tv-text2); display:grid; place-items:center }
.al-xp .cx-cal.al-cal { height:auto; margin:16px 0 0; padding:0 }
.al-sec { margin-top:6px }
.al-nr { display:flex; align-items:center; gap:12px; min-height:54px }
.al-nr .al-rad { flex:1 1 auto; width:auto; min-width:0; min-height:54px }
.al-nm { display:flex; flex-direction:column; min-width:0 }
.al-nm .t { font-size:14px; line-height:20px; font-weight:600; color:var(--tv-text); white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.al-nm .s { font-size:13px; line-height:18px; color:var(--tv-text2); white-space:nowrap; overflow:hidden; text-overflow:ellipsis }
.al-rad.dis .al-nm .t { color:var(--tv-text2) }
.gg-tv .al-dlg .tvd-btn.al-nb { flex:0 0 auto; height:30px; padding:0 14px; font-size:13px; line-height:28px }
.al-nr .al-cst { margin-left:0 }
.al-nl { flex:0 0 auto; gap:4px }
.al-nl .v { color:var(--tv-text) }
.al-snd { grid-template-columns:minmax(0, 1fr) auto }
.al-sndc { display:flex; align-items:center; gap:4px }
.gg-tv .al-snd .al-sndc .tvd-sel { flex:0 0 150px; width:150px }
.al-play { width:34px; height:34px; display:grid; place-items:center }
.al-play svg { width:22px; height:22px }
@media (hover:hover) { .al-play:hover { color:var(--tv-text); background:var(--tv-hover) } }
.al-snd.off .al-sndc { opacity:.45; pointer-events:none }
/* the bots window */
.al-bots .al-ch-h { gap:12px; min-height:40px }
.al-bots .al-ch-h .al-nm { flex:1 1 auto }
.al-bots .al-ch-h .al-cst { margin-left:0 }
.al-bots .al-ch-h .tvd-btn { flex:0 0 auto }
.al-bots .al-ch > .al-ch-t, .al-bots .al-ch > .al-ch-a, .al-bots .al-ch > .al-ch-a2, .al-bots .al-ch > .al-ch-l { margin-left:0 }
.al-stps { margin-top:8px }
.al-stp { display:flex; gap:12px; padding:5px 0 }
.al-sn { flex:0 0 22px; width:22px; height:22px; box-sizing:border-box; border:1px solid var(--tv-field); border-radius:50%; display:grid; place-items:center; font-size:12px; line-height:1; color:var(--tv-text2) }
.al-stp.cur .al-sn { border-color:var(--tv-text); color:var(--tv-text) }
.al-stp.done .al-sn { border-color:#2BC360; background:#2BC360; color:#050706 }
.al-sb { flex:1 1 auto; min-width:0 }
.al-stt { font-size:14px; line-height:22px; color:var(--tv-text2) }
.al-stp.cur .al-stt, .al-stp.done .al-stt { color:var(--tv-text) }
.al-stt a { color:#00FFA3; text-decoration:none }
@media (hover:hover) { .al-stt a:hover { text-decoration:underline } }
.al-stps .al-tok, .al-stps .al-err, .al-stps .al-ch-a, .al-stps .al-ch-t { margin-left:0 }
.al-stps .al-tok { display:flex; margin-top:8px }
.al-stps .al-err:empty { min-height:0; margin:0 }
.al-stps .al-ch-a { margin-top:10px }
/* the toast of a triggering */
.al-toasts { position:fixed; left:64px; bottom:56px; z-index:135; display:none; flex-direction:column; gap:8px; width:min(360px, calc(100vw - 24px)); pointer-events:none }
.al-toasts.open { display:flex }
.al-toast { pointer-events:auto; position:relative; display:flex; background:var(--tv-pop); border:1px solid var(--tv-div); border-radius:10px; box-shadow:0 6px 24px rgba(0,0,0,.5); overflow:hidden; font-family:var(--tv-font) }
.al-tsi { flex:0 0 44px; display:flex; justify-content:center; padding-top:13px; background:color-mix(in srgb, #2BC360 14%, transparent); color:#2BC360 }
.al-tsb { flex:1 1 auto; min-width:0; padding:12px 40px 10px 14px }
.al-tsh { font-size:14px; line-height:22px; color:var(--tv-text2) }
.al-tsy { margin-left:2px; padding:1px 6px; border-radius:4px; background:var(--tv-hover); color:var(--tv-text); font-weight:600 }
.al-toast .al-pi-t { margin-top:6px }
.al-toast .al-pi-m { margin-top:2px }
.al-tsf { display:flex; align-items:center; justify-content:space-between; gap:12px; margin-top:8px; font-size:13px; line-height:20px; color:var(--tv-text2) }
.al-toast .al-tl.al-tsa { height:20px; font-size:13px; line-height:20px; color:#00FFA3 }
.gg-tv .al-toast .al-tsx { position:absolute; top:8px; right:8px; width:28px; height:28px; margin:0 }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) {
  .al-toasts { left:8px; right:8px; width:auto; bottom:calc(72px + env(safe-area-inset-bottom, 0px)) }
  .al-snd { grid-template-columns:minmax(0, 1fr) auto }
  .gg-tv .al-snd .al-sndc .tvd-sel { flex-basis:124px; width:124px }
}
.al-bots .al-body { height:auto; min-height:0; padding-bottom:6px }   /* alux: the window as tall as its rows (no empty half under «Set up») */
.gg-tv .al-toast .al-tsx svg { width:18px; height:18px }
.al-lgd { padding:12px 12px 4px; font-size:11px; line-height:16px; letter-spacing:.04em; color:var(--tv-text2) }   /* alux: the Log's day (TV) */
.al-lgd:first-child { padding-top:6px }
/* patrol1024 r2 24.10: Notifications — Telegram is a checkbox of its own (TV: each way of notifying on its own, «None» when all are off); its bots
   under it, shifted by the box; off — they stay in place, dimmed (a tap on one turns Telegram on) */
.al-tgr { margin-top:4px }
.al-tgb { padding-left:28px }
.al-tgb.off .al-nr { opacity:.45 }
/* patrol1024 r2: the reason of a failed delivery in the Log, after its status */
.al-er { color:var(--tv-text2) }
/* patrol1024 r2: the bots window without its footer — the rows end the window */
.al-bots .al-body { padding-bottom:16px }
/* patrol1024 r2: the symbol search opened from the alert window's header — over the window (it stays open under it) */
body:has(#alDlg.open) #shSym.open { z-index:125 }
/* patrol1024 r2: the header's symbol as TV's «AAPL ˅» — the title's text and a chevron, no box; the hover tint of the window's buttons */
.gg-tv button.al-symb { display:inline-flex; align-items:center; gap:2px; min-width:0; max-width:100%; height:34px; margin-left:4px; padding:0 4px; border:0; border-radius:6px; background:transparent; color:var(--tv-text); font:600 20px/28px var(--tv-font); cursor:pointer; overflow:hidden }
.gg-tv button.al-symb > i { flex:0 1 auto; min-width:0; overflow:hidden; text-overflow:ellipsis }
.gg-tv button.al-symb .ch { flex:0 0 18px; display:grid; place-items:center; color:var(--tv-text) }
.gg-tv button.al-symb .ch svg { width:18px; height:18px }
@media (hover:hover) { .gg-tv button.al-symb:hover { background:var(--tv-hover) } }
@media (max-width: 699px), (pointer: coarse) and (max-height: 699px) { .gg-tv button.al-symb { font-size:17px } }

/* 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 }
/* onechart3 23.10: one legend row — «GG-Shøt <strategy>»: no inputs, no caret (the symbol row is off: embed.js, CS.title) */
body.gg-embed #indLegName .n2, body.gg-embed #legFold, body.gg-embed #legSym { display:none !important }
/* onechart4 23.10: the legend row on the plot's top-left (as TV's phone app and the big chart) — no band above the candles */
body.gg-embed #indLeg { top:4px !important }
/* onechart5 23.10: the app's 5 / 10 over the frame (data-embed-over) — the legend row centred on it, one line (embed.js legendAlign) */
body.gg-embed.gg-emb-over #indLeg { top:var(--emb-leg-c) !important; transform:translateY(-50%) }
/* onechart6 23.10 (owner: «старый был лучше» + «как в TradingView app на телефоне»): the legend row in the app's face, phone size — the same
   10–11 px monospace as the scales and the overview's labels of this frame (embed.js MONO); one line, as before */
body.gg-embed #indLeg, body.gg-embed #indLeg .nm, body.gg-embed #indLeg .nm * { font-family:"JetBrains Mono", ui-monospace, monospace !important; font-size:11px !important; font-weight:500 !important; letter-spacing:0 }

/* pricing 23.10: the snackbar of a plan's lock (src/plans.js) — the place of the chart's snackbar, with one button «See plans» */
.cx-plsn { position:fixed; left:50%; bottom:84px; transform:translateX(-50%); z-index:96; display:flex; align-items:center; gap:16px;
  max-width:calc(100vw - 32px); box-sizing:border-box; height:44px; padding:0 6px 0 16px; border:1px solid #2a2f2a; border-radius:8px;
  background:#0e100e; color:#e8efe8; font-size:14px; line-height:20px; white-space:nowrap; opacity:0; visibility:hidden; pointer-events:none;
  transition:opacity .15s, visibility 0s linear .15s }
.cx-plsn.on { opacity:1; visibility:visible; pointer-events:auto; transition:opacity .15s }
.cx-plsn-t { overflow:hidden; text-overflow:ellipsis }
.cx-plsn-b { flex:none; height:32px; padding:0 14px; border:0; border-radius:6px; background:#3DDD71; color:#050706; font:inherit; font-weight:600; cursor:pointer }
.cx-plsn-b:hover { background:#5be58a }
