/* =========================================================
     Timeline (tline-*) – conflict-free, token-driven, s5rt
     ========================================================= */
.tline-wrap {
    --tline-pad-x: var(--spacing-md);
    --tline-gap-y: var(--spacing-lg);
    --tline-line: 2px;
    --tline-dot: 12px;
    --tline-col-date: var(--color-primary);
    --tline-col-line: var(--color-secondary);
    --tline-col-active: var(--text-primary);
    --tline-col-dim: color-mix(in oklab, var(--text-primary) 35%, transparent);
    position: relative;
    margin: var(--spacing-lg) auto;
    padding: 0 var(--tline-pad-x);
    max-width: 900px;
}

/* vertical spine */
.tline-wrap::before {
    content: "";
    position: absolute;
    left: calc(var(--tline-pad-x) + 12px);
    top: 0;
    bottom: 0;
    width: var(--tline-line);
    background: var(--tline-col-line);
    opacity: .7;
}

.tline-item {
    position: relative;
    display: grid;
    grid-template-columns: 42px 1fr;
    gap: var(--spacing-sm);
    margin: var(--tline-gap-y) 0;
    opacity: .35;
    transition: opacity .25s ease, transform .25s ease, filter .25s ease;
    filter: grayscale(.25);
}

.tline-item.is-active {
    opacity: 1;
    filter: none;
}

/* dot on the spine */
.tline-dot {
    grid-column: 1;
    position: relative;
    width: var(--tline-dot);
    height: var(--tline-dot);
    border-radius: 999px;
    background: var(--color-bg);
    border: 2px solid var(--tline-col-line);
    margin-left: 6px;
    /* center over the spine */
    margin-top: .25rem;
    box-shadow: var(--stn-shadow);
    z-index: 1;
}

.tline-card {
    grid-column: 2;
    background: var(--color-bg-alt);
    border: 1px solid var(--color-secondary);
    border-radius: var(--stn-radius);
    padding: var(--spacing-sm) var(--spacing-md);
    color: var(--text-on-bg);
}

.tline-head {
    display: flex;
    gap: var(--spacing-sm);
    align-items: baseline;
    flex-wrap: wrap;
    border-bottom: 1px solid var(--color-secondary);
    padding-bottom: var(--spacing-xs);
    margin-bottom: var(--spacing-xs);
}

.tline-date {
    font-family: var(--font-heading);
    font-weight: 700;
    color: var(--tline-col-date);
}

.tline-brief {
    font-family: var(--font-heading);
    color: var(--text-primary);
}

.tline-body {
    margin: var(--spacing-xs) 0;
}

.tline-body p {
    margin: .4rem 0;
}

/* Gallery toggle (± icon square) */
.tline-gbtn {
    display: inline-flex;
    align-items: center;
    gap: .5rem;
    background: var(--color-primary);
    color: var(--text-on-primary);
    border: 0;
    border-radius: var(--stn-radius);
    padding: .25rem .5rem;
    cursor: pointer;
    font-size: var(--font-size-xs);
    transition: background .2s ease;
}

.tline-gbtn:hover {
    background: var(--color-accent);
}

.tline-caret {
    --csize: 1em;
    --stroke: 2px;
    position: relative;
    width: var(--csize);
    height: var(--csize);
    flex: 0 0 auto;
}

.tline-caret::before,
.tline-caret::after {
    content: "";
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    background: currentColor;
    border-radius: var(--stn-radius);
}

.tline-caret::before {
    width: 100%;
    height: var(--stroke);
}

/* horizontal */
.tline-caret::after {
    width: var(--stroke);
    height: 100%;
}

/* vertical */
.tline-gbtn[aria-expanded="true"] .tline-caret::after {
    transform: translate(-50%, -50%) scaleY(0);
    opacity: 0;
}

/* Gallery (collapsed by default, animated height) */
.tline-gallery {
    overflow: hidden;
    max-height: 0;
    transition: max-height .25s ease;
    padding-top: 0;
    margin-top: 0;
}

.tline-gallery.in {
    /* set via JS max-height to scrollHeight for smooth expand */
    padding-top: var(--spacing-xs);
    margin-top: var(--spacing-xs);
}

.tline-gimgs {
    display: grid;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    gap: var(--spacing-sm);
}

.tline-gimgs img {
    display: block;
    width: 100%;
    height: auto;
    border-radius: var(--stn-radius);
    border: 1px solid var(--color-secondary);
    background: var(--color-bg);
}