Files
AH-Oil-Trader/web/style.css
T
Axel HocksandClaude Opus 5 d3d613068c M15-Karte: Pruefkette als Akkordeon in drei Abschnitten
User-Wunsch. Die Karte war auf zehn Zeilen gewachsen und dominierte das
Dashboard; jetzt sind sie in drei aufklappbare Gruppen sortiert:

  ① - ④  Pruefkette                        (offen)   Bias · Kosten · Zone · Reichweite
  ⑤      Kontext - Motor · M5 · RSI        (zu)      Motor/Raum · M5-Zustand · RSI
  ⑥ - ⑦  Selbstmessung · Ausfuehrung · Veto (zu)      Track · Exec · Veto

Das Status-Banner bleibt IMMER sichtbar - es ist die eine Zeile, die eine
Handlungsaussage traegt, und es bestaetigt ausdruecklich auch das Nicht-Handeln.

⚠⚠ NATIVES <details>/<summary>, kein JS fuer das Klappen. Entscheidend ist, dass
die Elemente IM DOM bleiben: der Render schreibt weiter in alle zehn IDs, auch
wenn ein Abschnitt zugeklappt ist. Ein Container, der die Elemente ENTFERNT,
haette den Render abbrechen lassen - genau der Ausfall von gestern Abend, als
ein ReferenceError in renderM15 das halbe Dashboard auf "—" stehen liess.

JS macht nur EINES: den Auf-/Zu-Zustand in localStorage merken. Ohne das waere
jeder Reload ein Rueckschritt - und die Seite wird bei jedem ?v=-Bump neu
geladen. Faellt localStorage aus (privater Modus), greift der Default.

Verifiziert: 10 m15-Items unveraendert vorhanden, keine doppelten IDs,
div 86/86 und details 3/3 ausgeglichen, node --check gruen, Render-Probe
(Stufe B2) gruen. Reine Frontend-Aenderung (v=190), kein Neustart.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-20 00:11:17 +02:00

650 lines
40 KiB
CSS
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/* ══════════════════════════════════════════════════════════════════════
PICO CSS ALS BASISSCHICHT (2026-08-19, User-Wunsch „schreibe auf pico css um")
⚠⚠ KEIN Neubau, sondern eine SCHICHT: Pico v2.1.1 liefert Typografie,
Formulare, Buttons und Fokus-Ringe fuer semantisches HTML. Die ~60
Trading-Klassen (.card, .tb-field, .m15-item, .px …) kann ein KLASSENLOSES
Framework gar nicht ersetzen — sie bleiben und stehen NACH Pico, gewinnen
also bei Konflikten.
⚠ Lokal eingebunden (84 KB), kein CDN: die PWA laeuft ueber WireGuard und
muss offline laufen; ein CDN-Link waere zudem CSP-blockiert.
⚠ Hier werden Picos eigene Variablen auf die BESTEHENDE Palette gemappt —
sonst faerbt Pico das Dashboard in sein Standard-Blau um. So bleibt die
Terminal-Optik, und Pico liefert nur Struktur.
Zurueck: `web/style.css.bak-2026-08-19` + `index.html.bak-2026-08-19-pico`,
und den pico-<link> aus der index.html entfernen.
══════════════════════════════════════════════════════════════════════ */
:root:not([data-theme=light]), [data-theme=dark]{
--pico-background-color: var(--bg);
--pico-color: var(--bright);
--pico-muted-color: var(--dim);
--pico-primary: var(--accent);
--pico-primary-hover: var(--accent);
--pico-primary-focus: #e8a00040;
--pico-primary-inverse: #0a0d13;
--pico-card-background-color: var(--card);
--pico-card-border-color: var(--border);
--pico-form-element-background-color: var(--surface-2);
--pico-form-element-border-color: var(--border);
--pico-form-element-color: var(--bright);
--pico-border-radius: var(--r);
--pico-font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
system-ui, sans-serif;
/* ⚠ Picos eigene fluide Schrift AUSSCHALTEN: `html{font-size:clamp(...)}`
regelt das seit dem 13.08. an EINER Stelle. Zwei fluide Systeme
uebereinander multiplizieren sich. */
--pico-font-size: 100%;
/* Pico setzt grosszuegige Block-Abstaende, die fuer ein Dashboard zu viel
sind — die Karten bringen ihre eigenen mit. */
--pico-spacing: 0.7rem;
--pico-typography-spacing-vertical: 0.7rem;
--pico-block-spacing-vertical: 0.7rem;
--pico-block-spacing-horizontal: 0.7rem;
}
/* Pico gibt <nav>/<section>/<main> eigene Container-Regeln; unser Layout
bringt sie selbst mit. Nur das zuruecknehmen, was kollidiert. */
/* ⚠⚠ PICOS FORMULAR-HOEHE ZURUECKNEHMEN (User 2026-08-19: „die Textfelder des
laufenden Trades sind viel zu hoch"). ZWEI Regeln waren schuld:
input{height:calc(1rem*line-height + spacing-vertical*2 + border*2)}
-> mit --pico-form-element-spacing-vertical:0.75rem sind das ~3rem ≈ 48px.
Unsere .tb-field-Regel setzt nur `padding`, KEINE Hoehe — also gewann
Pico. Ein Trading-Dashboard braucht kompakte Felder, kein Formular.
input{margin-bottom:var(--pico-spacing)} -> nochmal 0,7rem darunter.
`height:auto` laesst wieder das eigene Padding die Hoehe bestimmen.
⚠ Checkbox/Radio/Range ausgenommen — die haben ihre eigene Groessenlogik. */
input:not([type=checkbox]):not([type=radio]):not([type=range]),
select, textarea{ height:auto; margin-bottom:0; }
main, section, nav{ padding-inline: unset; }
main > *, section > *{ margin-bottom: unset; }
h2{ margin-block: 0; }
:root{
/* Flächen (Elevation-Leiter: bg < surface-2 < card) */
--bg:#0a0d13; --card:#161b22; --surface-2:#0d1117;
--border:#2a323e; --line:#20262f;
/* Text (--text-* = Aliasse; mehrere Komponenten nutzten sie ohne Definition) */
--bright:#e6edf3; --text-bright:#e6edf3;
--dim:#8b949e; --text-dim:#8b949e;
/* Akzente */
--accent:#e8a000; --up:#3fb950; --down:#f85149; --blue:#58a6ff;
/* Radius / Schatten — einheitliche Design-Tokens */
--r-sm:6px; --r:9px; --r-lg:13px;
--shadow:0 1px 2px rgba(0,0,0,.45), 0 8px 24px rgba(0,0,0,.28);
--shadow-sm:0 1px 2px rgba(0,0,0,.4);
--mono:"SF Mono",ui-monospace,"Cascadia Code","Courier New",monospace;
}
*{box-sizing:border-box;-webkit-tap-highlight-color:transparent}
html,/* ══════════════════════════════════════════════════════════════════════
FLUIDE SCHRIFTGROESSE (2026-08-13, User-Wunsch: "auf jedem Geraet bzw.
je nach Fenstergroesse automatisch angepasst").
⚠ Umgesetzt mit rem + fluider WURZEL, NICHT mit em: `em` ist relativ zum
ELTERNelement und skaliert NICHT mit dem Fenster — verschachtelt
multipliziert es sich sogar (h2 mit 1,2em in einer Karte mit 1,1em
landet bei 1,32x). `rem` haengt dagegen an genau EINER Stellschraube.
⚠ EINE STUFE KLEINER (2026-08-13 nachmittags, User: "verkleinere alle
Schriftarten um 1em"). Woertlich waere 1em = 100 % = null, gemeint ist
also eine Stufe: -2px, exakt der Schritt, in dem die Groesse am 24.07.
zweimal HOCHgesetzt wurde. Am Handy damit ~16px statt ~18px.
390px -> 15,95px · 800px -> 18px · 1440px -> 21,2px · ab 1600px -> 22px
(davor: clamp(17px, 16px + 0.5vw, 24px) = 17,95 / 20 / 23,2 / 24)
➜ GROESSE GLOBAL AENDERN = NUR DIESE EINE ZEILE. Die 96 rem-Werte bleiben
unberuehrt, alle Groessenverhaeltnisse untereinander auch. Eine Stufe
entspricht 2px in den beiden Zahlen (Minimum und Steigungs-Basis), der
Deckel wandert mit.
⚠ ABSTAENDE bleiben in px. Sie mitzuskalieren waere ein weit groesserer
Eingriff (Grid, Karten, Trade-Leiste) und kann Layouts kippen — die
Anfrage betraf die Schrift. Folge: die Schrift sitzt jetzt etwas
lockerer in den unveraenderten Polstern.
Zurueck auf 18px-Basis: clamp(17px, 16px + 0.5vw, 24px).
Zurueck auf die alte px-Fassung ganz: `web/style.css.bak-2026-08-13`.
══════════════════════════════════════════════════════════════════════ */
html { font-size: clamp(15px, 14px + 0.5vw, 22px); }
body{margin:0;padding:0}
body{
background:var(--bg); color:var(--bright);
/* Sans für Text/Labels + tabellarische Ziffern (saubere Zahlen-Ausrichtung);
Terminal-Charakter bleibt über Mono bei Kursen/Logs. */
font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,system-ui,sans-serif;
font-variant-numeric:tabular-nums;
font-size:1rem; line-height:1.45;
padding-bottom:env(safe-area-inset-bottom);
-webkit-font-smoothing:antialiased; text-rendering:optimizeLegibility;
}
/* Zahlen-lastige Werte in Mono (aligned, Trading-Terminal-Optik) */
#hdr-price,#hdr-pnl,.px span,.tb-val,.tb-field input,
.hdr-clock,.gap-zone,.trade .p{font-family:var(--mono)}
/* ── Header (scrollt unter den Tabs) ────── */
header{
background:var(--bg);
padding:0.6667rem 0.7778rem;
border-bottom:1px solid var(--border);
}
.sym-row{display:flex;align-items:center;justify-content:space-between;gap:0.4444rem}
#symbol{font-size:1.2222rem;font-weight:700;letter-spacing:.5px;flex:0 0 auto}
.hdr-right{display:flex;align-items:center;gap:0.4444rem;min-width:0}
.hdr-meta{display:flex;flex-direction:column;align-items:flex-end;line-height:1.25;min-width:0}
.hdr-meta .session-line{margin-top:1px}
.hdr-clock{font-size:0.7778rem;color:var(--dim);font-variant-numeric:tabular-nums;
white-space:nowrap}
.dot{width:11px;height:11px;border-radius:50%;display:inline-block}
.dot.on{background:var(--up);box-shadow:0 0 8px var(--up)}
.dot.off{background:var(--down);box-shadow:0 0 8px var(--down)}
/* stale = der Socket behauptet Verbindung, liefert aber nichts mehr (2026-08-07).
Bernstein + Pulsieren, damit der Unterschied zu „verbunden" auf einen Blick
sichtbar ist — genau dieser Zustand erzeugte den G/V-Lag. Schlägt `.on` und
`.off`, deshalb hier NACH beiden. */
.dot.stale{background:var(--warn,#f0a020);box-shadow:0 0 8px var(--warn,#f0a020);
animation:dotpuls 1.2s ease-in-out infinite}
@keyframes dotpuls{0%,100%{opacity:1}50%{opacity:.35}}
.price-row{display:flex;flex-wrap:wrap;gap:0.4444rem;margin-top:0.5556rem}
/* flex-basis 28% → 3 Boxen je Reihe, die 5. Box (KURS/G/V) bricht sauber um */
.px{flex:1 1 28%;background:var(--card);border:1px solid var(--border);
border-radius:var(--r);padding:0.3889rem 0.5556rem;box-shadow:var(--shadow-sm)}
.px label{display:block;font-size:0.7222rem;color:var(--dim);letter-spacing:1px;
text-transform:uppercase}
.px span{font-size:1.1111rem;font-weight:600}
.px span.up{color:var(--up)} .px span.down{color:var(--down)}
/* KURS + G/V größer als die Konto-Kennzahlen (User-Vorgabe) */
#hdr-price, #hdr-pnl{font-size:1.4444rem;font-weight:700}
#spread{color:var(--blue)}
.session-line{margin-top:3px;font-size:0.7778rem;font-weight:600}
.session-line.ok{color:var(--up)}
.session-line.warn{color:var(--accent)}
.session-line.dim{color:var(--dim)}
/* ── Modul-Menü (Tabs, ganz oben & sticky) ─ */
#tabs{
position:sticky; top:0; z-index:6;
display:flex; gap:0.3333rem;
padding:calc(0.4444rem + env(safe-area-inset-top)) 0.5556rem 0.4444rem;
background:var(--bg); border-bottom:1px solid var(--border);
overflow-x:auto; -webkit-overflow-scrolling:touch;
}
.tab{
flex:0 0 auto; padding:0.3889rem 0.7778rem; border-radius:var(--r); cursor:pointer;
background:var(--card); border:1px solid var(--border);
color:var(--dim); font-family:inherit; font-size:0.8889rem; font-weight:600;
transition:background .15s, color .15s, border-color .15s;
}
.tab:hover{color:var(--bright)}
.tab.active{background:var(--accent); color:#0a0d13; border-color:var(--accent);
box-shadow:0 2px 10px #e8a00033}
/* Mute-Button: klein, ganz rechts in der Tab-Leiste */
.mute-tab{margin-left:auto;padding:0.3889rem 0.5556rem;font-size:1rem;line-height:1}
.mute-tab.muted{opacity:.55}
.view.hidden{display:none}
.view-head{display:flex;align-items:center;justify-content:space-between;
padding:0.5556rem 0.6667rem 0.2222rem}
.view-head h2{margin:0;font-size:0.9444rem;letter-spacing:1px;color:var(--bright)}
.reload{background:var(--card);border:1px solid var(--border);color:var(--bright);
border-radius:var(--r);width:34px;height:30px;font-size:1.0556rem;cursor:pointer;
transition:background .15s,border-color .15s}
.reload:hover{border-color:var(--dim)}
/* ── Cards-Grid (Dashboard) ─────────────── */
/* ⚠⚠ SELBSTREGELND statt fester Breakpoint (Fix 2026-08-19, User: „am Handy
passen sich die Groessen nicht an"). Vorher: feste 2 Spalten, Umbruch auf
1 Spalte erst bei <=360px — moderne Handys haben aber 390-430 CSS-Pixel.
Auf dem Geraet standen also ZWEI Spalten a ~190px nebeneinander.
`auto-fit` + `minmax` braucht keinen geratenen Breakpoint: es passen so
viele Spalten hinein, wie je 320px Platz haben — Handy 1, Tablet 2. */
main{display:grid;grid-template-columns:repeat(auto-fit,minmax(320px,1fr));
gap:0.7rem;padding:0.7rem}
.card{background:var(--card);border:1px solid var(--border);
border-radius:var(--r-lg);padding:0.6667rem 0.7778rem;box-shadow:var(--shadow-sm)}
.card.wide{grid-column:1 / -1}
/* Karten AUSSERHALB des Dashboard-Grids (Statistik-Tab, 2026-08-05): `main` ist
ein Grid mit eigenem padding, `#view-stats` ist eine schlichte <section> — ohne
diese Regel klebten die verschobenen Karten randlos aneinander und `.wide`
(grid-column) liefe ins Leere. */
#view-stats > .card,
#view-siglive > .card,
#view-siganzeige > .card{margin:0.6111rem 0.5556rem}
#view-stats > .card:last-child,
#view-siglive > .card:last-child,
#view-siganzeige > .card:last-child{margin-bottom:4.1111rem} /* Platz für die fixe Leiste */
/* Untertitel in der View-Kopfzeile: sagt in einem Halbsatz, wonach der Tab
sortiert ist — ohne ihn ist „SIG Live" vs. „SIG Anzeige" nicht selbsterklärend. */
.view-note{font-size:0.6667rem;color:var(--dim);margin-left:auto}
.card h2{margin:0 0 0.5rem;font-size:0.7778rem;letter-spacing:1.5px;
text-transform:uppercase;color:var(--dim);font-weight:600}
.kv{display:flex;justify-content:space-between;align-items:baseline;
padding:2px 0;font-size:0.8889rem}
.kv span{color:var(--dim)}
.kv b{font-weight:600}
/* ── Aktueller Trade (Leiste über der Gesamtempfehlung) ───────────── */
.trade-bar{padding:0.4444rem 0.6667rem;border-color:#2d4a2d}
.trade-bar.hidden{display:none}
#card-trail.hidden{display:none} /* Trailing-Kachel ausgeblendet, 2026-07-22 */
.tb-title{margin:0 0 0.4444rem;font-size:0.7778rem;letter-spacing:1.5px;text-transform:uppercase;
color:var(--dim);font-weight:600}
/* Laufzeit-Uhr: im Titel mitlaufend (kompakt) + eigenes Feld in der Zeile */
.tb-runtime{margin-left:0.4444rem;color:var(--bright);font-family:var(--mono);
letter-spacing:.5px;text-transform:none}
.tb-field .tb-val.warn{color:var(--accent);border-color:#4a3600}
.tb-row{display:flex;flex-wrap:wrap;gap:0.5556rem}
/* EINHEITLICHES Feld-Design: Anzeige-Boxen (Richtung/Lots/Einsatz) und Eingabe-
Felder (SL/TP/Gewinn-Close/Notfall-Close) sehen identisch aus (Label über Box). */
.tb-field{display:flex;flex-direction:column;gap:2px}
.tb-field label{font-size:0.7222rem;color:var(--dim);letter-spacing:.5px}
/* ⚠ Feste 88px waren zu schmal (User 2026-08-19: „das Einsatz-Feld ist nicht
breit genug"). Der Einsatz zeigt Betraege wie „712.84 €" — bei fett und
0,94rem passt das nicht in 88px. `ch` = Breite einer Ziffer, haengt also
an der Schriftgroesse und waechst mit der fluiden Wurzel mit; `width:auto`
laesst laengere Werte darueber hinaus wachsen, statt sie abzuschneiden. */
.tb-field input, .tb-field .tb-val{width:auto;min-width:7.5ch;background:var(--surface-2);
border:1px solid var(--border);border-radius:var(--r-sm);color:var(--bright);
font-size:0.9444rem;font-weight:700;padding:0.3333rem 0.3889rem;text-align:center;
transition:border-color .15s, box-shadow .15s}
.tb-field .tb-val{display:block;white-space:nowrap}
.tb-field input{width:8ch} /* Eingaben: feste, aber mitskalierende Basis */ /* nur Anzeige, kein Input */
.tb-field input:focus{outline:none;border-color:var(--blue);
box-shadow:0 0 0 2px #58a6ff33}
.tb-field.stop input{border-color:#5c1a1a;color:#f85149} /* SL/Notfall rötlich */
.tb-field.gain input{border-color:#1a4731;color:#3fb950} /* TP/Gewinn grünlich */
.tb-field.stop input::placeholder,.tb-field.gain input::placeholder{color:#8b949e88}
.tb-dir.up{color:var(--up)} .tb-dir.down{color:var(--down)}
/* Auto-Close-Schalter als Box im Feld-Design: grau=AUS, grün=AN */
.tb-btn{cursor:pointer;color:var(--dim)}
.tb-btn.on{background:#0d2a16;border-color:#1a4731;color:#3fb950}
.tb-btn:active{filter:brightness(1.3)}
/* ── Gesamtempfehlung ───────────────────── */
/* Circuit Breaker Banner (Tagesverlust-Stopp) — ganz oben, rot bei ausgelöst */
.circuit{margin:0 0 0.6111rem;padding:0.6111rem 0.7778rem;border-radius:var(--r);font-weight:700;
font-size:0.8889rem;text-align:center;letter-spacing:.2px}
.circuit.hidden{display:none}
.circuit.tripped{background:#3d1a1a;color:#ff6b6b;border:1px solid var(--down);
box-shadow:0 0 0 1px var(--down)}
.circuit.near{background:#2a1f00;color:var(--accent);border:1px solid #4a3600}
/* Chartmuster-Karte (visuell, reine Anzeige) */
#card-patterns .pt-tf{font-size:0.6111rem;color:var(--dim);font-weight:600;margin-left:0.3333rem}
.pt-item{background:var(--surface-2);border:1px solid var(--border);border-left:3px solid var(--line);
border-radius:var(--r-sm);padding:0.5rem 0.6667rem;margin-bottom:0.4444rem}
.pt-item.up{border-left-color:var(--up)} .pt-item.down{border-left-color:var(--down)}
.pt-head{display:flex;align-items:center;gap:0.4444rem;flex-wrap:wrap}
.pt-svg{flex:0 0 auto;background:var(--bg);border:1px solid var(--border);
border-radius:4px;padding:1px 2px}
.pt-name{font-weight:700;font-size:0.8333rem}
.pt-item.up .pt-name{color:var(--up)} .pt-item.down .pt-name{color:var(--down)}
.pt-badge{font-size:0.6111rem;font-weight:700;border-radius:4px;padding:1px 0.3889rem}
.pt-badge.conf{background:#0d2a16;color:var(--up);border:1px solid #1a4731}
.pt-badge.form{background:#2a1f00;color:var(--accent);border:1px solid #4a3600}
.pt-q{margin-left:auto;font-size:0.6667rem;color:var(--dim);font-family:var(--mono)}
.pt-det{font-size:0.7222rem;margin-top:0.2222rem;font-family:var(--mono);color:var(--bright)}
.pt-note{font-size:0.6667rem;color:var(--dim);margin-top:3px}
.pt-disclaimer{font-size:0.6667rem;color:var(--dim);margin-top:0.3333rem;line-height:1.4}
.pt-disclaimer code{font-family:var(--mono);font-size:0.6111rem}
/* Kerzen-Anatomie — bewusst NEUTRAL gefärbt (keine grün/rot-Ampel): die
Lehrbuch-Deutung ist gemessen invertiert, eine Richtungsfarbe würde
systematisch falsch stupsen. Nur „hot" (Volumen>=2x) wird hervorgehoben. */
#card-candles .ca-tf{font-size:0.6111rem;color:var(--dim);font-weight:600;margin-left:0.3333rem}
.ca-item{background:var(--surface-2);border:1px solid var(--border);
border-left:3px solid var(--line);border-radius:var(--r-sm);
padding:0.4444rem 0.6667rem;margin-bottom:0.3889rem}
.ca-item.hot{border-left-color:var(--accent)}
.ca-head{display:flex;align-items:center;gap:0.4444rem;flex-wrap:wrap}
.ca-name{font-weight:700;font-size:0.8333rem;color:var(--bright)}
.ca-vol{font-size:0.6111rem;font-weight:700;border-radius:4px;padding:1px 0.3889rem;
font-family:var(--mono);background:var(--bg);color:var(--dim);
border:1px solid var(--border)}
.ca-vol.hot{background:#2a1f00;color:var(--accent);border-color:#4a3600}
.ca-ago{margin-left:auto;font-size:0.6667rem;color:var(--dim);font-family:var(--mono)}
.ca-bars{font-size:0.6667rem;margin-top:3px;font-family:var(--mono);color:var(--dim)}
.ca-note{font-size:0.6667rem;color:var(--dim);margin-top:3px;line-height:1.4}
/* Erwartete Spanne — komprimiert in der Gesamtempfehlung (2026-08-05, die eigene
Karte ist entfallen). Bewusst OHNE Richtungsfarbe und ohne Rahmen: die Zeile
zeigt Streuung, sie darf optisch nicht mit der Bias-Nadel darüber konkurrieren. */
.kx-cone{display:flex;align-items:baseline;gap:0.4444rem;flex-wrap:wrap;
margin:0.3333rem 0 0;padding-top:0.3333rem;border-top:1px solid var(--line)}
.kx-cone-lbl{font-size:0.6667rem;color:var(--dim)}
.kx-cone-item{font-family:var(--mono);font-size:0.7222rem;color:var(--bright)}
.kx-cone-item i{font-style:normal;font-size:0.6111rem;color:var(--dim);margin-right:3px}
.kx-cone-cov{margin-left:auto;font-size:0.6111rem;color:var(--dim)}
/* ⚠ Der Ring zeigt einen SCORE, keine Trefferwahrscheinlichkeit — die Beschriftung
sagt das jetzt mit (gemessen: conf_pct ist nicht kalibriert, in H2 invertiert). */
.kx-selfcal.up{color:var(--up)} .kx-selfcal.down{color:var(--down)}
.kx-selfcal.dim{color:var(--dim);opacity:.75}
.m-name{font-size:0.7778rem;color:var(--dim);font-weight:600}
/* ── Meldungen (EINHEITLICHES Design: Box + farbiger Links-Akzent) ─────────── */
#card-pos .squeeze-ind, #card-pos .bounce-ind, #card-pos .cur-near,
#card-pos .pos-srhint, #card-pos .pos-stophint, #card-pos .news-conflict,
#card-pos .reasons{
display:block; margin:0 0 0.3889rem; padding:0.4444rem 0.6111rem; border-radius:var(--r-sm);
background:var(--surface-2); border:1px solid var(--border);
border-left:3px solid var(--line);
font-size:0.8889rem; line-height:1.4; font-weight:600; letter-spacing:0; box-shadow:none;
}
/* leere Meldungen ausblenden (cur-near/srhint/reasons ohne Inhalt) */
#card-pos .cur-near:empty, #card-pos .pos-srhint:empty, #card-pos .pos-stophint:empty,
#card-pos .pos-srhint.hidden, #card-pos .pos-stophint.hidden, #card-pos .reasons:empty{display:none}
/* Gegen-/Stop-Seiten-Hinweis (reine Anzeige): hält = grün, bricht = rot */
#card-pos .pos-stophint.hold{color:var(--up); border-left-color:var(--up)}
#card-pos .pos-stophint.break{color:var(--down); border-left-color:var(--down)}
/* News-Konflikt (Flow steht gegen Signal/Position) — bernstein wie Warnungen */
#card-pos .news-conflict.warn{color:var(--accent); border-left-color:var(--accent)}
#card-pos .news-conflict.hidden, #card-pos .news-conflict:empty{display:none}
/* Farbvarianten — Links-Akzent + Textfarbe (Fläche bleibt einheitlich) */
#card-pos .squeeze-ind.idle, #card-pos .bounce-ind.idle,
#card-pos .reasons{color:var(--dim)}
#card-pos .bounce-ind.warn, #card-pos .pos-srhint.warn{
color:var(--accent); border-left-color:var(--accent)}
#card-pos .squeeze-ind.armed, #card-pos .pos-srhint.approach{
color:var(--blue); border-left-color:#1f6feb}
#card-pos .squeeze-ind.fire.long, #card-pos .pos-srhint.run,
#card-pos .cur-near.near-sup{color:var(--up); border-left-color:var(--up)}
#card-pos .squeeze-ind.fire.short, #card-pos .cur-near.near-res{
color:var(--down); border-left-color:var(--down)}
/* Setup/Lauf-Zeilen (Metadaten) fügen sich ein */
#card-pos .kv{padding:3px 0}
/* Header-KURS-Box färbt sich nahe S/R (rot=Widerstand, grün=Support) */
.px span.near-res{color:var(--down)} .px span.near-sup{color:var(--up)}
/* ── Signal ─────────────────────────────── */
.signal{font-size:1.2222rem;font-weight:700;color:var(--dim);margin-bottom:0.3333rem}
.signal.long{color:var(--up)} .signal.short{color:var(--down)}
.reasons{font-size:0.8333rem;color:var(--dim);margin-top:0.3333rem}
.ell-note{font-size:0.8333rem;color:var(--dim);margin-top:0.3333rem}
/* ── Agent ──────────────────────────────── */
.agent-head{font-weight:600;font-size:0.9444rem;margin-bottom:0.2222rem}
.agent-text{font-size:0.8889rem;color:var(--bright)}
.risks{margin:0.4444rem 0 0;padding-left:0.8889rem;font-size:0.8333rem;color:var(--accent)}
.risks li{margin:2px 0}
/* ── Trades ─────────────────────────────── */
/* 5 feste Spalten sprengen 390px — ab hier selbstregelnd */
.trades{display:grid;grid-template-columns:repeat(auto-fit,minmax(58px,1fr));gap:0.35rem}
.trade{background:var(--bg);border:1px solid var(--border);
border-radius:6px;padding:0.3333rem 3px;text-align:center}
.trade .p{font-size:0.8889rem;font-weight:700}
.trade .i{font-size:0.7222rem;color:var(--dim);margin-top:2px}
.up{color:var(--up)} .down{color:var(--down)} .dim{color:var(--dim)}
@media(max-width:360px){
/* main regelt sich seit 19.08. selbst (auto-fit) — hier nicht mehr noetig */
.card:not(.wide){grid-column:1 / -1}
}
/* ── Aktionsleiste ──────────────────────── */
main{padding-bottom:4.1111rem} /* Platz für die fixe Leiste */
#actions{
position:fixed; left:0; right:0; bottom:0; z-index:8;
display:flex; gap:0.3889rem;
padding:0.5rem 0.5rem calc(0.5rem + env(safe-area-inset-bottom));
background:rgba(10,13,19,.86); border-top:1px solid var(--border);
backdrop-filter:blur(10px); -webkit-backdrop-filter:blur(10px);
}
.btn{
flex:1; border:1px solid var(--border); border-radius:var(--r);
padding:0.6667rem 0.2222rem; font-size:0.9444rem; font-weight:700; color:var(--bright);
background:#1a1e24; font-family:inherit; cursor:pointer;
transition:background .12s, opacity .12s, transform .06s; touch-action:manipulation;
}
.btn:active{transform:translateY(1px)}
.btn.long {background:#1a6e35}
.btn.short {background:#8b1a1a}
.btn.close {background:#2d2000; color:var(--accent)}
.btn.tog {flex:.8; font-size:0.8889rem}
.btn.tog.on{background:#1f6feb; color:#fff}
/* Auto-Signal-Entry: bernstein statt blau — gemessen NICHT tragfähig (H1 negativ),
läuft nur auf ausdrücklichen User-Wunsch → Farbe signalisiert „Achtung, aktiv". */
.btn.tog.warn-on{background:#9e6a03; color:#fff}
.btn:disabled{opacity:.32; cursor:default}
/* Empfehlungs-Blinken der LONG/SHORT-Buttons */
@keyframes blkLong {0%,100%{background:#1a6e35}50%{background:#22c55e}}
@keyframes blkShort {0%,100%{background:#8b1a1a}50%{background:#ef4444}}
.btn.long.blink {animation:blkLong .7s ease-in-out infinite}
.btn.short.blink {animation:blkShort .7s ease-in-out infinite}
/* CLOSE blinkt, wenn das Signal gegen die offene Position dreht (Auto-Flip) */
@keyframes blkClose {0%,100%{background:#2d2000;color:var(--accent)}50%{background:#e8a000;color:#000}}
.btn.close.blink {animation:blkClose .6s ease-in-out infinite}
/* (Überdehnungs- & Squeeze-Anzeige nutzen jetzt das einheitliche Meldungs-Design
oben in der Position/Meldungen-Sektion — nur noch Farbvarianten je Zustand.) */
/* Live-Statistik (kompakt) */
.stx-row {display:flex;flex-direction:column;gap:0.4444rem}
.stx-grp {background:var(--card);border:1px solid var(--border);border-radius:8px;padding:0.4444rem 0.5556rem}
.stx-lbl {font-size:0.8333rem;color:var(--text-dim);margin-bottom:0.2778rem;letter-spacing:.3px}
.stx-cells {display:flex;flex-wrap:wrap;gap:0.3333rem 0.7778rem}
.stx-c {font-size:0.8889rem;color:var(--text-dim)}
.stx-c b {font-size:1rem;color:var(--text-bright);margin-left:3px}
/* Charts-Tab: M1/M5/M15/M30/H1 untereinander (Lightweight Charts) */
/* Kurslücken (Gaps): offene Fill-Magnete */
.gaps-list {display:flex;flex-direction:column;gap:0.3333rem}
.gap-row {display:flex;flex-wrap:wrap;gap:0.4444rem;align-items:baseline;font-size:0.9444rem;
padding:0.3333rem 0.5rem;background:var(--card);border:1px solid var(--border);border-radius:7px}
.gap-zone {font-variant-numeric:tabular-nums;color:var(--text-bright);font-weight:600}
.gap-fill {color:var(--text-dim)}
.gap-date {margin-left:auto;font-size:0.8333rem}
/* TF-Ampel (Welle): Wende je M1/M5/M15/M30 via EMA12/50-Kreuzung */
.tf-turns {display:flex;gap:0.3333rem;flex-wrap:wrap;margin:0.4444rem 0 2px}
.tf-chip {display:inline-flex;align-items:center;gap:0.2222rem;padding:3px 0.4444rem;
border-radius:7px;font-size:0.8889rem;background:var(--card);border:1px solid var(--border);
color:var(--text-dim)}
.tf-chip b {font-weight:600;font-size:0.8333rem;letter-spacing:.3px}
.tf-chip.up {color:#3fb950;border-color:#1a4731}
.tf-chip.down {color:#f85149;border-color:#3d1a1a}
.tf-chip.flat {color:var(--dim)}
.tf-turn {font-weight:700}
.tf-ago {font-size:0.7778rem;opacity:.7;background:var(--surface-2);border-radius:4px;padding:0 0.2222rem}
/* Frische Wende: statisch hervorgehoben (kein Blinken) */
.tf-chip.fresh.up {background:#0d2a16;border-color:#3fb950;color:var(--bright)}
.tf-chip.fresh.down {background:#2a0d0d;border-color:#f85149;color:var(--bright)}
/* ── Modal ──────────────────────────────── */
.modal{
position:fixed; inset:0; z-index:20; display:flex;
align-items:center; justify-content:center;
background:#000000aa; padding:1.1111rem;
}
.modal.hidden,.toast.hidden{display:none}
.box{
background:var(--card); border:1px solid var(--accent);
border-radius:14px; padding:1rem; width:100%; max-width:340px;
}
.box-title{font-size:1.0556rem;font-weight:700;margin-bottom:0.4444rem}
.box-msg{font-size:0.9444rem;color:var(--bright);margin-bottom:0.7778rem;white-space:pre-line}
.box-msg.danger{color:var(--down);font-weight:600}
#modal-input.hidden{display:none} /* nur im Token-Modus sichtbar */
#modal-input{
width:100%; padding:0.6111rem; margin-bottom:0.7778rem; font-size:1.0556rem;
background:var(--bg); border:1px solid var(--border); border-radius:8px;
color:var(--bright); font-family:inherit;
}
.box-btns{display:flex;gap:0.5556rem}
.mbtn{
flex:1; padding:0.6667rem; border:none; border-radius:9px; font-size:1rem;
font-weight:700; font-family:inherit; cursor:pointer;
}
.mbtn.ok{background:var(--accent);color:#000}
.mbtn.cancel{background:#1a1e24;color:var(--bright);border:1px solid var(--border)}
/* ── Logs ───────────────────────────────── */
.logbox{
margin:0 0.5556rem 0.5556rem; padding:0.5556rem; background:#000; border:1px solid var(--border);
border-radius:8px; font-size:0.7778rem; line-height:1.45; color:#c9d1d9;
white-space:pre-wrap; word-break:break-word; max-height:70vh; overflow-y:auto;
}
/* ── Statistik ──────────────────────────── */
#stats-body{padding:0 0.5556rem 0.6667rem}
.stat-card{background:var(--card);border:1px solid var(--border);border-radius:10px;
padding:0.5556rem 0.6667rem;margin-bottom:0.5556rem}
.stat-card h3{margin:0 0 0.4444rem;font-size:0.8333rem;letter-spacing:1px;color:var(--accent);
text-transform:uppercase}
.stat-grid{display:grid;grid-template-columns:1fr 1fr;gap:0.2222rem 0.7778rem}
.stat-grid .kv{font-size:0.8889rem}
.stat-grid .kv.net span{color:var(--accent)}
.sub-h{margin:0.7778rem 0.6667rem 0.3333rem;font-size:0.8333rem;letter-spacing:1px;
color:var(--dim);text-transform:uppercase}
.setup-hint{padding:0 0.6667rem 0.3333rem;font-size:0.7778rem}
.setup-row{display:grid;grid-template-columns:1.4fr .9fr 1fr .75fr;gap:0.3333rem;
align-items:baseline;padding:0.3889rem 0.6667rem;border-bottom:1px solid var(--border)}
.setup-name{font-size:0.8333rem;color:var(--bright);word-break:break-word}
.setup-stat{font-size:0.8333rem;text-align:right}
/* ── News ───────────────────────────────── */
.news-sent{margin:0.2222rem 0.5556rem 0.4444rem;font-size:0.8889rem;color:var(--dim)}
#news-body{padding:0 0.5556rem 0.6667rem}
.news-item{display:block;background:var(--card);border:1px solid var(--border);
border-radius:8px;padding:0.4444rem 0.5556rem;margin-bottom:0.4444rem;text-decoration:none}
.news-item .t{font-size:0.8889rem;color:var(--bright);line-height:1.35}
.news-item .s{font-size:0.7222rem;color:var(--dim);margin-top:3px}
/* ── Toast ──────────────────────────────── */
.toast{
position:fixed; left:50%; bottom:84px; transform:translateX(-50%);
z-index:25; background:var(--card); border:1px solid var(--border);
border-radius:10px; padding:0.5556rem 0.8889rem; font-size:0.9444rem; max-width:90%;
box-shadow:0 6px 24px #000a;
}
.toast.ok{border-color:var(--up)} .toast.err{border-color:var(--down)}
/* ── Marktstruktur-Karte (M30, reine Anzeige) ───────────────────────── */
#card-structure h2 .ms-tf{ font-size:0.8333rem; color:var(--dim); font-weight:600;
border:1px solid var(--border); border-radius:var(--r-sm); padding:1px 0.3333rem; margin-left:0.3333rem; }
.ms-top{ display:flex; align-items:center; gap:0.6667rem; flex-wrap:wrap; margin:0.4444rem 0; }
.ms-trend{ font-weight:700; font-size:1.0556rem; }
.ms-trend.up{ color:var(--up); } .ms-trend.down{ color:var(--down); } .ms-trend.dim{ color:var(--dim); }
.ms-swings{ display:flex; align-items:center; gap:2px; flex-wrap:wrap; }
.ms-chip{ font:600 0.8889rem/1 var(--mono); padding:3px 0.3333rem; border-radius:var(--r-sm);
background:var(--surface-2); border:1px solid var(--border); }
.ms-chip.up{ color:var(--up); border-color:#2ea04333; }
.ms-chip.down{ color:var(--down); border-color:#f8514933; }
.ms-chip.dim{ color:var(--dim); }
.ms-arrow{ color:var(--dim); font-size:0.8333rem; }
.ms-bos{ display:flex; align-items:center; gap:0.4444rem; font-size:0.9444rem; margin:0.3333rem 0; }
.ms-bos.hidden{ display:none; }
.ms-bos-lbl{ font:600 0.8333rem/1 var(--mono); color:var(--dim);
border:1px solid var(--border); border-radius:var(--r-sm); padding:2px 0.3333rem; }
.ms-bos .up{ color:var(--up); } .ms-bos .down{ color:var(--down); }
.ms-chan{ margin-top:0.4444rem; }
.ms-chan-head{ display:flex; justify-content:space-between; align-items:baseline; font-size:0.9444rem; }
.ms-chan-head .up{ color:var(--up); font-weight:700; }
.ms-chan-head .down{ color:var(--down); font-weight:700; }
.ms-chan-head .dim{ color:var(--dim); font-weight:700; }
.ms-chan-note{ color:var(--dim); font-size:0.8889rem; }
.ms-chan-track{ position:relative; height:8px; margin:0.3333rem 0 3px;
background:var(--surface-2); border:1px solid var(--border); border-radius:99px; overflow:visible; }
.ms-chan-fill{ height:100%; border-radius:99px 0 0 99px;
background:linear-gradient(90deg,#1f6feb55,#58a6ff88); transition:width .4s; }
.ms-chan-dot{ position:absolute; top:50%; width:12px; height:12px; margin-left:-0.3333rem;
transform:translateY(-50%); border-radius:50%; background:var(--bright);
border:2px solid var(--card); box-shadow:0 0 0 1px var(--border); transition:left .4s; }
.ms-chan-scale{ display:flex; justify-content:space-between; font-size:0.7778rem; color:var(--dim); }
/* ── Auto-Squeeze-Monitor (B4, Statistik-Tab) ───────────────────────── */
.sqm-head{ display:flex; align-items:center; gap:0.5556rem; margin:0.2222rem 0 0.4444rem; }
.sqm-badge{ font:600 0.8889rem/1 var(--mono); padding:3px 0.4444rem; border-radius:var(--r-sm);
background:var(--surface-2); border:1px solid var(--border); }
.sqm-badge.up{ color:var(--up); border-color:#2ea04355; }
.sqm-badge.down{ color:var(--down); border-color:#f8514955; }
.sqm-badge.dim{ color:var(--dim); }
.sqm-grid{ display:grid; grid-template-columns:1fr 1fr; gap:0.5556rem; }
@media(max-width:560px){ .sqm-grid{ grid-template-columns:1fr; } }
.sqm-col{ background:var(--card); border:1px solid var(--border); border-radius:var(--r);
padding:0.5556rem 0.6667rem; }
.sqm-h{ font-size:0.8889rem; color:var(--dim); font-weight:600; margin-bottom:0.3333rem; }
.sqm-row{ display:flex; justify-content:space-between; align-items:baseline;
font-size:0.9444rem; padding:2px 0; border-bottom:1px solid var(--line); }
.sqm-row:last-child{ border-bottom:none; }
.sqm-row b{ font-family:var(--mono); }
.sqm-row b.up{ color:var(--up); } .sqm-row b.down{ color:var(--down); }
.sqm-exp{ font-size:0.8333rem; color:var(--dim); margin-top:0.3333rem; }
.sqm-note{ font-size:0.8889rem; color:var(--dim); margin-top:0.4444rem; line-height:1.4; }
/* Kurs aus Hyperliquid (Markt bei Pepperstone geschlossen) - bewusst ANDERS
gefaerbt als der Broker-Kurs, damit man ihn nicht verwechselt. */
#hdr-price.hl-price{color:var(--accent)}
#hdr-price-lbl{letter-spacing:.3px}
/* ── Manuelle Trades (2026-08-04) ─────────────────────────────────────────
Bewusst NEUTRAL gehalten: die Karte beschreibt die eigene Historie und
sagt nichts voraus. Farbe nur am Vorzeichen der Summe, keine Ampel. */
#card-manual .mt-sub { font-size:0.7222rem; color: var(--dim); font-weight: 400; }
.mt-grid {
display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
gap:0.5556rem; margin-bottom:0.5556rem;
}
.mt-box {
background: var(--surface-2); border: 1px solid var(--border);
border-radius: var(--r-sm); padding:0.5rem 0.6111rem;
}
.mt-lbl { font-size:0.7222rem; color: var(--dim); margin-bottom:3px; }
.mt-val { font-family: var(--mono); font-size:1.1667rem; font-weight: 600; }
.mt-sub2 { font-size:0.6667rem; color: var(--dim); font-family: var(--mono); margin-top:2px; }
.mt-split { display: flex; flex-wrap: wrap; gap:0.4444rem; margin-bottom:0.4444rem; }
.mt-chip {
background: var(--surface-2); border: 1px solid var(--line);
border-radius: var(--r-sm); padding:0.2778rem 0.5556rem;
font-size:0.7222rem; font-family: var(--mono);
}
.mt-note { font-size:0.6667rem; line-height: 1.45; }
/* ── Feste Einsatz-Margin in der Order-Leiste (2026-08-04) ────────────────
Sitzt bewusst bei den Order-Buttons, nicht in der Trade-Leiste: die ist nur
bei offener Position sichtbar, der Einsatz muss aber VORHER einstellbar sein. */
.mg-field { display: inline-flex; flex-direction: column; gap:2px; margin-right:0.4444rem; }
.mg-field label { font-size:0.6111rem; color: var(--dim); line-height: 1; }
.mg-field input {
width: 7ch; min-width: 7ch; padding:0.2778rem 0.3889rem;
background: var(--surface-2); color: var(--bright);
border: 1px solid var(--border); border-radius: var(--r-sm);
font-family: var(--mono); font-size:0.7778rem; text-align: right;
}
.mg-field input:focus { outline: none; border-color: #1f6feb; }
/* aktiv gesetzt = sichtbar hervorgehoben, damit ein fester Einsatz nicht
unbemerkt bestehen bleibt */
.mg-field input.on { border-color: #d29922; color: #d29922; }
/* Prozent-Feld ohne Wirkung, weil links ein FESTER Betrag steht — sichtbar
zurückgenommen, statt zwei scheinbar gleichrangige Felder zu zeigen. */
.mg-field.muted { opacity: .45; }
.mg-field.muted input { border-style: dashed; }
/* HL-Kontext in den Meldungen — neutral, weil gemessen ohne Prognosewert. */
.hl-note{font-size:0.7222rem;color:var(--dim);font-family:var(--mono);
padding:0.2778rem 0;border-top:1px solid var(--line);margin-top:0.2778rem}
.hl-note.hidden{display:none}
/* ── M15 Setup-Bereitschaft (2026-08-08, Ersatz der Gesamtempfehlung) ──────
Sequenzielle Gate-Kette statt Score-Aggregation. Das Status-Banner ist
bewusst das groesste Element der Karte: die gemessene Kern-Leckage sind
diskretionaere Abweichungen, nicht verpasste Gelegenheiten - deshalb muss
auch das NICHT-Handeln ausdruecklich bestaetigt werden. */
#card-m15{border-color:var(--accent)}
.m15-status{font-size:1.0556rem;font-weight:700;letter-spacing:.3px;
padding:0.5556rem 0.6667rem;border-radius:var(--r);margin-bottom:0.5556rem;
background:var(--surface-2);border:1px solid var(--border);color:var(--dim)}
.m15-status.gruen{color:var(--up);border-color:#1d5c2a;background:#0e2413}
.m15-status.gelb {color:var(--accent);border-color:#4a3600;background:#241d05}
.m15-status.rot {color:var(--down);border-color:#5c1a1a;background:#240f0f}
.m15-grid{display:flex;flex-direction:column;gap:0.2778rem}
.m15-item{font-size:0.8333rem;color:var(--dim);padding:0.2222rem 0.4444rem;border-radius:var(--r-sm);
background:var(--surface-2);border:1px solid var(--line)}
.m15-item.ok {color:var(--bright);border-color:#1d5c2a}
.m15-item.warn{color:var(--accent);border-color:#4a3600}
.m15-item.fail{color:var(--down);border-color:#5c1a1a}
/* Raum zum naechsten Level, als zweite Zeile AUF dem Order-Knopf (2026-08-19).
Bewusst kein eigener Layout-Block: `#actions` ist ein flex ohne wrap, eine
zusaetzliche Zeile darin haette die Knopfbreiten verschoben. */
.btn-raum{
display:block; font-size:0.5556rem; font-weight:600; line-height:1.15;
margin-top:2px; opacity:.72; font-family:var(--mono);
}
/* unter dem Gate (0,6×ATR) = die gemessen teure Zone -> deutlich, aber NICHT
rot: es ist eine Warnung, kein Verbot. */
.btn-raum.eng{ opacity:1; color:#ffd479; }
/* Lange Knopf-Beschriftung ("CIRCUIT BREAKER", 2026-08-19) sauber umbrechen
statt ueberlaufen -- 6 Knoepfe teilen sich die Leistenbreite. */
.btn.tog{ line-height:1.1; word-break:break-word; hyphens:auto; }
/* Einsatz je Pfad (2026-08-19): nutzt bewusst das bewaehrte `.tb-field`-Muster
der Trade-Leiste statt eines eigenen. Der erste Entwurf steckte die Inputs in
ein `<b>` innerhalb `.kv` (display:flex; align-items:baseline) und OHNE
`inputmode` — am Handy kam dort keine Zahlentastatur, das Feld war praktisch
nicht bedienbar (User: „Einsatz je Pfad kann ich nichts eingeben"). */
.mg-row{margin-top:0.4444rem;padding-top:0.4444rem;border-top:1px solid var(--line)}
.mg-row .tb-field input{width:7ch}
/* ── M15-Prüfkette als Akkordeon (User-Wunsch 2026-08-20) ─────────────────
⚠ Natives <details>/<summary>: kein JS für das Auf- und Zuklappen, und —
entscheidend — die Elemente bleiben IM DOM, auch wenn zugeklappt. Ein
`display:none`-Container würde den Render NICHT stören (die IDs existieren
weiter), ein Entfernen dagegen schon. */
.m15-akk{border:1px solid var(--line);border-radius:var(--r-sm);
margin-bottom:0.3333rem;background:var(--surface-2)}
.m15-akk > summary{cursor:pointer;padding:0.3889rem 0.5556rem;
font-size:0.8333rem;color:var(--dim);letter-spacing:.3px;
list-style:none;user-select:none}
.m15-akk > summary::-webkit-details-marker{display:none}
.m15-akk > summary::before{content:"▸ ";color:var(--dim)}
.m15-akk[open] > summary::before{content:"▾ "}
.m15-akk > summary:hover{color:var(--bright)}
.m15-akk[open] > summary{border-bottom:1px solid var(--line)}
.m15-akk .m15-item{margin:0.2222rem 0.3333rem}