ff14-mitigator/css/analysis.css
xziino 6363c123b0 Add REF player grid for cross-report comparison
When an external reference report is loaded and its roster differs from the
current report, a second player section appears below the main grid showing
all REF report players. REF tanks are hidden by default. Clicking any REF
player card toggles their visibility in the REF timeline rows.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-21 14:55:25 +02:00

287 lines
7.1 KiB
CSS

/* ── Player Grid ─────────────────────────────────────────────────────────── */
.player-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
gap: 6px;
}
.player-card {
background: var(--bg2);
border: 1px solid var(--border);
border-radius: var(--r);
padding: 7px 9px;
display: flex;
align-items: center;
gap: 7px;
cursor: pointer;
transition: opacity 0.15s, border-color 0.15s;
user-select: none;
}
.player-card:hover { border-color: var(--borderem); }
.player-card.player-hidden { opacity: 0.35; border-style: dashed; }
.player-card--ref { border-color: rgba(100, 160, 255, 0.35); }
.player-card--ref:hover { border-color: rgba(100, 160, 255, 0.7); }
.ref-player-label {
font-size: 11px;
color: var(--t3);
text-transform: uppercase;
letter-spacing: 0.06em;
margin: 10px 0 6px;
}
.player-job-icon {
width: 28px;
height: 28px;
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
font-size: 9px;
font-weight: 600;
font-family: var(--font-d);
letter-spacing: 0.03em;
flex-shrink: 0;
}
.player-job-icon.role-tank { background: rgba(74,158,255,.15); color: var(--blue); border: 1px solid rgba(74,158,255,.35); }
.player-job-icon.role-healer { background: rgba(76,175,125,.15); color: var(--green); border: 1px solid rgba(76,175,125,.35); }
.player-job-icon.role-dps { background: rgba(224,92,92,.15); color: var(--red); border: 1px solid rgba(224,92,92,.35); }
.player-name {
font-size: 12px;
color: var(--t1);
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.player-type {
font-size: 10px;
color: var(--t2);
margin-top: 1px;
}
.card-title-row {
display: flex;
align-items: center;
gap: 12px;
margin-bottom: 12px;
}
.card-title-row .card-title { margin-bottom: 0; flex-shrink: 0; }
.filter-input {
width: 200px;
padding: 4px 9px;
font-size: 12px;
margin-left: auto;
}
/* ── External report panel ───────────────────────────────────────────────── */
.ref-ext-row {
margin-top: 10px;
display: flex;
flex-direction: column;
gap: 8px;
}
#ref-ext-panel {
display: flex;
flex-wrap: wrap;
align-items: center;
gap: 8px;
}
.ref-report-input {
width: 200px;
padding: 4px 9px;
font-size: 12px;
}
/* ── AoE Timeline ────────────────────────────────────────────────────────── */
.aoe-event {
display: grid;
grid-template-columns: 52px 1fr;
gap: 14px;
padding: 11px 0;
border-bottom: 1px solid var(--border);
align-items: start;
}
.aoe-event:last-child { border-bottom: none; }
.aoe-time {
font-family: var(--font-d);
font-size: 13px;
color: var(--gold);
padding-top: 2px;
letter-spacing: 0.03em;
}
.aoe-ability {
display: flex;
align-items: center;
gap: 6px;
font-size: 13px;
color: var(--t1);
margin-bottom: 7px;
}
.aoe-total {
font-size: 12px;
color: var(--t2);
margin-left: 6px;
}
.aoe-targets {
display: flex;
flex-wrap: wrap;
gap: 4px;
}
.aoe-target-wrap {
display: flex;
flex-direction: column;
gap: 3px;
}
.aoe-target {
display: flex;
align-items: flex-start;
gap: 5px;
background: var(--bg3);
border: 1px solid var(--border);
border-radius: var(--r);
padding: 3px 8px 4px 6px;
font-size: 11px;
}
.aoe-target--dead {
border-color: rgba(224, 92, 92, 0.6);
background: rgba(224, 92, 92, 0.08);
}
.aoe-target-left {
display: flex;
flex-direction: column;
align-items: center;
gap: 2px;
flex-shrink: 0;
}
.aoe-target-overkill {
font-size: 9px;
font-family: var(--font-d);
color: var(--red);
font-weight: 600;
margin-top: -3px;
}
.aoe-target-job {
font-family: var(--font-d);
font-size: 10px;
font-weight: 600;
letter-spacing: 0.02em;
padding-top: 2px;
flex-shrink: 0;
}
.aoe-target-job.role-tank { color: var(--blue); }
.aoe-target-job.role-healer { color: var(--green); }
.aoe-target-job.role-dps { color: var(--red); }
.aoe-target-body {
display: flex;
flex-direction: column;
gap: 4px;
flex: 1;
min-width: 0;
}
.aoe-target-row {
display: flex;
align-items: center;
gap: 5px;
}
.aoe-target-name { color: var(--t1); }
.aoe-target-dmg { color: var(--t2); margin-left: 2px; }
.aoe-target-absorbed { color: var(--blue); }
/* ── HP Bar ──────────────────────────────────────────────────────────────── */
.aoe-hp-bar {
height: 6px;
background: var(--bg0);
border-radius: 2px;
overflow: hidden;
display: flex;
}
.aoe-hp-remaining {
height: 100%;
}
.aoe-hp-damage {
height: 100%;
background: rgba(224, 92, 92, 0.65);
}
/* ── Reference row ───────────────────────────────────────────────────────── */
.aoe-ref-row {
margin-top: 6px;
padding-top: 6px;
border-top: 1px dashed var(--border);
display: flex;
flex-direction: column;
gap: 4px;
}
.aoe-ref-label {
font-size: 10px;
color: var(--t3);
letter-spacing: 0.05em;
text-transform: uppercase;
display: flex;
align-items: center;
gap: 6px;
}
.aoe-ref-target {
display: flex;
align-items: center;
gap: 5px;
background: var(--bg2);
border: 1px solid var(--border);
border-radius: var(--r);
padding: 2px 8px 2px 6px;
font-size: 11px;
opacity: 0.75;
}
.aoe-delta-worse { font-size: 10px; color: var(--red); }
.aoe-delta-better { font-size: 10px; color: var(--green); }
.aoe-buff-missing {
opacity: 0.5;
border: 1px solid var(--red);
border-radius: 2px;
}
.aoe-buff-ref-unique {
border: 2px solid #3dff6e;
border-radius: 3px;
box-shadow: 0 0 4px #3dff6e;
}
/* ── Target buffs ────────────────────────────────────────────────────────── */
.aoe-target-buffs {
display: flex;
flex-wrap: wrap;
gap: 2px;
padding: 2px 4px;
}
.aoe-target-buff-icon {
width: 16px;
height: 16px;
border-radius: 2px;
object-fit: cover;
cursor: default;
}