/* ---------------------------------------------------------------------------
 * BATTLE MVP - Battle Journey
 *
 * NAMESPACE: .jn-*  only. Nothing here touches .hx-* (owned by the HUB nav
 * and shell) or .cc-* (Command Center). The .hx-bar class in particular is
 * the module bar - a stray rule on it collapses the whole menu.
 *
 * COLOUR: derived from --bm-ink-rgb so the light theme flips with the base
 * token instead of needing a parallel table. Muted steps are declared here
 * rather than reused from --bm-mu3, which resolves darker than its own
 * fallback and made labels unreadable in Command Center v2.
 *
 * FILL BARS ARE FLEX CHILDREN ON PURPOSE. A <span> with a width only obeys
 * it while it is a grid or flex item; as a plain child it stays display:inline
 * and silently renders full width - which is how every DNA axis once read 100.
 * ------------------------------------------------------------------------- */

.jn-wrap {
    --jn-ink:    rgb(var(--bm-ink-rgb, 234, 241, 255));
    --jn-mu1:    rgba(var(--bm-ink-rgb, 234, 241, 255), .72);
    --jn-mu2:    rgba(var(--bm-ink-rgb, 234, 241, 255), .52);
    --jn-mu3:    rgba(var(--bm-ink-rgb, 234, 241, 255), .34);
    --jn-line:   rgba(var(--bm-ink-rgb, 234, 241, 255), .12);
    --jn-line2:  rgba(var(--bm-ink-rgb, 234, 241, 255), .07);
    --jn-card:   var(--bm-card, #0c1218);
    --jn-acc:    var(--bm-accent, #00ffa6);
    --jn-pos:    var(--bm-accent, #00ffa6);
    --jn-neg:    #ff5c72;
    --jn-warn:   #ffcc55;

    display: flex;
    flex-direction: column;
    gap: 16px;
    color: var(--jn-ink);
}

/* ---- header ------------------------------------------------------------ */

.jn-head {
    display: flex;
    align-items: flex-end;
    justify-content: space-between;
    gap: 16px;
    flex-wrap: wrap;
}
.jn-head h1 {
    margin: 0;
    font-size: 26px;
    line-height: 1.15;
    letter-spacing: .01em;
}
.jn-sub {
    margin: 6px 0 0;
    font-size: 13px;
    color: var(--jn-mu2);
    max-width: 68ch;
}
.jn-viewing {
    display: flex;
    align-items: baseline;
    gap: 8px;
    padding: 8px 12px;
    border: 1px solid var(--jn-line);
    border-radius: 10px;
    background: rgba(var(--bm-ink-rgb, 234, 241, 255), .03);
}
.jn-viewing-lbl  { font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: var(--jn-mu2); }
.jn-viewing-nick { font-size: 14px; font-weight: 700; }

/* ---- cards ------------------------------------------------------------- */

.jn-card {
    background: var(--jn-card);
    border: 1px solid var(--jn-line);
    border-radius: 14px;
    padding: 18px 18px 20px;
}
.jn-h {
    margin: 0;
    font-size: 15px;
    text-transform: uppercase;
    letter-spacing: .09em;
    color: var(--jn-ink);
}
.jn-hsub {
    margin: 5px 0 14px;
    font-size: 12.5px;
    color: var(--jn-mu2);
}
.jn-h3 {
    margin: 22px 0 10px;
    font-size: 12px;
    text-transform: uppercase;
    letter-spacing: .09em;
    color: var(--jn-mu1);
}
.jn-note {
    margin: 12px 0 0;
    font-size: 12.5px;
    color: var(--jn-mu2);
}
.jn-warn {
    margin: 12px 0 0;
    padding: 10px 12px;
    font-size: 12.5px;
    color: var(--jn-warn);
    border: 1px solid rgba(255, 204, 85, .3);
    border-radius: 10px;
    background: rgba(255, 204, 85, .06);
}
.jn-mono { font-family: ui-monospace, SFMono-Regular, Menlo, monospace; }
.jn-pos  { color: var(--jn-pos); }
.jn-neg  { color: var(--jn-neg); }
.ta-r    { text-align: right; }

.jn-grid {
    display: grid;
    grid-template-columns: minmax(0, 1.55fr) minmax(0, 1fr);
    gap: 16px;
    align-items: start;
}
.jn-col { display: flex; flex-direction: column; gap: 16px; min-width: 0; }

/* ---- empty / unranked -------------------------------------------------- */

.jn-empty {
    padding: 60px 20px;
    text-align: center;
    background: var(--jn-card);
    border: 1px solid var(--jn-line);
    border-radius: 14px;
}
.jn-empty-ico { font-size: 40px; margin-bottom: 10px; }
.jn-empty h2  { margin: 0 0 8px; font-size: 20px; }
.jn-empty p   { margin: 0; color: var(--jn-mu2); font-size: 13.5px; }

.jn-unranked { display: flex; gap: 16px; align-items: flex-start; }
.jn-unranked-ico { font-size: 34px; line-height: 1; }
.jn-unranked h2 { margin: 0 0 6px; font-size: 18px; }
.jn-unranked p  { margin: 0 0 14px; font-size: 13px; color: var(--jn-mu2); max-width: 60ch; }
.jn-cta {
    display: inline-block;
    padding: 9px 18px;
    border-radius: 10px;
    background: var(--jn-acc);
    color: #04120c;
    font-weight: 800;
    font-size: 13px;
    letter-spacing: .04em;
    text-decoration: none;
}
.jn-cta:hover { filter: brightness(1.08); }

/* ---- rank -------------------------------------------------------------- */

.jn-rank-main {
    display: flex;
    align-items: center;
    gap: 20px;
    flex-wrap: wrap;
}
.jn-rank-ico  { width: 96px; height: 96px; flex: none; }
.jn-rank-nums { min-width: 150px; }
.jn-rank-lbl  { font-size: 11px; text-transform: uppercase; letter-spacing: .09em; color: var(--jn-mu2); }
.jn-rank-tier { font-size: 40px; font-weight: 900; line-height: 1.05; }
.jn-rank-br b { font-size: 22px; font-weight: 800; }
.jn-rank-br span { font-size: 12px; color: var(--jn-mu2); letter-spacing: .08em; }

.jn-rank-facts {
    display: flex;
    gap: 28px;
    margin: 0 0 0 auto;
    flex-wrap: wrap;
}
.jn-rank-facts dt { font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: var(--jn-mu2); }
.jn-rank-facts dd { margin: 4px 0 0; font-size: 16px; font-weight: 700; }

.jn-prog { margin-top: 20px; }
.jn-prog-top {
    display: flex;
    justify-content: space-between;
    gap: 12px;
    font-size: 12px;
    color: var(--jn-mu1);
    margin-bottom: 7px;
}
.jn-prog-track {
    display: flex;                 /* see the fill-bar note at the top */
    height: 10px;
    border-radius: 6px;
    background: var(--jn-line2);
    overflow: hidden;
}
.jn-prog-fill {
    display: block;
    height: 100%;
    border-radius: 6px;
    background: linear-gradient(90deg, var(--jn-acc), rgba(var(--bm-ink-rgb, 234, 241, 255), .35));
}
.jn-prog-note { margin-top: 8px; font-size: 11.5px; color: var(--jn-mu3); }

/* ---- ladder ------------------------------------------------------------ */

.jn-ladder {
    list-style: none;
    margin: 0;
    padding: 0;
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    gap: 8px;
}
.jn-step {
    display: grid;
    grid-template-columns: 32px 1fr;
    grid-template-areas: "ico tier" "ico from" "state state";
    align-items: center;
    gap: 2px 10px;
    padding: 10px 12px;
    border: 1px solid var(--jn-line);
    border-radius: 10px;
    background: rgba(var(--bm-ink-rgb, 234, 241, 255), .02);
}
.jn-step-ico  { grid-area: ico; width: 32px; height: 32px; opacity: .45; }
.jn-step-tier { grid-area: tier; font-size: 16px; font-weight: 800; line-height: 1.1; }
.jn-step-from { grid-area: from; font-size: 11px; color: var(--jn-mu3); }
.jn-step-state {
    grid-area: state;
    margin-top: 6px;
    font-size: 10px;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--jn-mu3);
}
.jn-step.is-reached .jn-step-ico   { opacity: 1; }
.jn-step.is-reached .jn-step-state { color: var(--jn-mu1); }
.jn-step.is-current {
    border-color: var(--jn-acc);
    background: rgba(0, 255, 166, .06);
    box-shadow: 0 0 0 1px rgba(0, 255, 166, .18);
}
.jn-step.is-current .jn-step-ico   { opacity: 1; }
.jn-step.is-current .jn-step-state { color: var(--jn-acc); font-weight: 700; }
.jn-step.is-ahead .jn-step-tier    { color: var(--jn-mu3) !important; }

/* ---- chart ------------------------------------------------------------- */

.jn-chart { width: 100%; height: auto; display: block; }
.jn-ax    { stroke: var(--jn-line); stroke-width: 1; }
.jn-axt   { fill: var(--jn-mu3); font-size: 10px; }
.jn-line  { fill: none; stroke: var(--jn-acc); stroke-width: 2.2; stroke-linejoin: round; stroke-linecap: round; }
.jn-dot   { stroke: var(--jn-card); stroke-width: 2; }
.jn-dot.is-win   { fill: var(--jn-acc); }
.jn-dot.is-loss  { fill: var(--jn-neg); }
.jn-dot.is-start { fill: var(--jn-mu3); }
.jn-dott  { fill: var(--jn-mu1); font-size: 11px; font-weight: 700; }

/* ---- tables ------------------------------------------------------------ */

.jn-tblwrap { overflow-x: auto; }
.jn-tbl {
    width: 100%;
    border-collapse: collapse;
    font-size: 13px;
}
.jn-tbl th {
    text-align: left;
    font-size: 10.5px;
    text-transform: uppercase;
    letter-spacing: .08em;
    color: var(--jn-mu3);
    font-weight: 600;
    padding: 0 10px 8px;
    white-space: nowrap;
}
.jn-tbl td {
    padding: 9px 10px;
    border-top: 1px solid var(--jn-line2);
    white-space: nowrap;
}
.jn-tbl a { color: inherit; text-decoration: none; border-bottom: 1px dotted var(--jn-mu3); }
.jn-tbl a:hover { color: var(--jn-acc); border-color: var(--jn-acc); }

.jn-res { font-weight: 700; }
.jn-res.w { color: var(--jn-pos); }
.jn-res.l { color: var(--jn-neg); }
.jn-score { color: var(--jn-mu2); margin-left: 6px; }

.jn-chain td:first-child { color: var(--jn-mu1); }
.jn-chain-sum td {
    border-top: 1px solid var(--jn-line);
    font-weight: 800;
    font-size: 14px;
}

/* ---- breakdown head ---------------------------------------------------- */

.jn-bd-head {
    display: flex;
    align-items: baseline;
    gap: 12px;
    flex-wrap: wrap;
    padding-bottom: 12px;
    border-bottom: 1px solid var(--jn-line2);
    margin-bottom: 12px;
}
.jn-bd-match { color: var(--jn-acc); font-weight: 700; text-decoration: none; font-size: 13px; }
.jn-bd-map   { font-size: 13px; color: var(--jn-mu1); }
.jn-bd-br    { margin-left: auto; font-size: 14px; color: var(--jn-mu1); }
.jn-bd-br b  { font-size: 18px; color: var(--jn-ink); }

.jn-bd-e {
    display: flex;
    align-items: baseline;
    gap: 10px;
    flex-wrap: wrap;
    margin-bottom: 14px;
    font-size: 12.5px;
    color: var(--jn-mu2);
}
.jn-bd-e b  { font-size: 16px; color: var(--jn-ink); }
.jn-bd-e em { font-style: normal; color: var(--jn-mu3); font-size: 11.5px; }

/* ---- milestones -------------------------------------------------------- */

.jn-ms { list-style: none; margin: 0; padding: 0 0 0 4px; }
.jn-ms-i {
    position: relative;
    display: flex;
    gap: 14px;
    padding: 0 0 18px 0;
}
.jn-ms-i:last-child { padding-bottom: 0; }
.jn-ms-i::before {
    content: "";
    position: absolute;
    left: 5px;
    top: 16px;
    bottom: 0;
    width: 1px;
    background: var(--jn-line);
}
.jn-ms-i:last-child::before { display: none; }
.jn-ms-dot {
    flex: none;
    width: 11px;
    height: 11px;
    margin-top: 4px;
    border-radius: 50%;
    border: 2px solid var(--jn-mu3);
    background: var(--jn-card);
}
.jn-ms-i.is-on .jn-ms-dot { border-color: var(--jn-acc); background: var(--jn-acc); }
.jn-ms-body { min-width: 0; }
.jn-ms-t { font-size: 13.5px; font-weight: 700; }
.jn-ms-d { margin-top: 3px; font-size: 12px; color: var(--jn-mu2); }
.jn-ms-d a { color: var(--jn-acc); text-decoration: none; }
.jn-ms-d em { font-style: normal; color: var(--jn-mu3); }
.jn-ms-i.is-off .jn-ms-t { color: var(--jn-mu3); }

/* ---- duels ------------------------------------------------------------- */

.jn-duels { display: flex; align-items: baseline; gap: 14px; flex-wrap: wrap; }
.jn-duels-n     { font-size: 18px; font-weight: 800; }
.jn-duels-wl    { font-size: 13px; color: var(--jn-mu1); }
.jn-duels-since { font-size: 12px; color: var(--jn-mu3); margin-left: auto; }

/* ---- season ------------------------------------------------------------ */

.jn-se-top { display: flex; align-items: baseline; gap: 10px; }
.jn-se-code {
    font-size: 12px;
    font-weight: 800;
    letter-spacing: .1em;
    padding: 3px 8px;
    border-radius: 6px;
    border: 1px solid var(--jn-line);
    color: var(--jn-mu1);
}
.jn-se-title { font-size: 15px; font-weight: 700; }
.jn-se-win   { margin-top: 8px; font-size: 12.5px; color: var(--jn-mu2); }
.jn-se-days  { margin-top: 4px; font-size: 12.5px; color: var(--jn-mu1); }
.jn-se-reset {
    margin-top: 14px;
    padding-top: 14px;
    border-top: 1px solid var(--jn-line2);
}
.jn-se-reset-t { font-size: 11px; text-transform: uppercase; letter-spacing: .08em; color: var(--jn-mu2); }
.jn-se-reset-d { margin-top: 5px; font-size: 12.5px; color: var(--jn-mu1); }
.jn-se-proj    { margin-top: 10px; font-size: 14px; font-weight: 700; }
.jn-se-proj-h  { margin-top: 3px; font-size: 11.5px; color: var(--jn-mu3); }

/* ---- debug ------------------------------------------------------------- */

.jn-dbg {
    margin: 16px 0 0;
    padding: 12px;
    font-size: 11px;
    opacity: .6;
    border: 1px dashed var(--jn-line);
    border-radius: 8px;
    overflow: auto;
}

/* ---- responsive -------------------------------------------------------- */

@media (max-width: 1100px) {
    .jn-grid { grid-template-columns: minmax(0, 1fr); }
    .jn-rank-facts { margin-left: 0; }
}

@media (max-width: 640px) {
    .jn-head h1 { font-size: 21px; }
    .jn-rank-ico { width: 72px; height: 72px; }
    .jn-rank-tier { font-size: 32px; }
    .jn-rank-facts { gap: 18px; }
    .jn-ladder { grid-template-columns: repeat(auto-fill, minmax(128px, 1fr)); }
    .jn-card { padding: 14px 14px 16px; }
}
