/* ==========================================================================
   Ensign InfoSecurity Alumni — visual system

   Direction: an operator's field notebook. Deep graphite, warm bone text,
   dry ochre accent, italic serif headlines against monospace metadata.
   Every entry carries a short SHA-style hash and a submitter/approver line,
   like a signed commit — nostalgic for anyone who's ever read a git log.
   ========================================================================== */

:root {
    /* --- palette --- */
    --ink:        #0A0B0D;   /* background */
    --ink-2:      #101216;   /* raised surfaces */
    --hairline:   #1E2127;   /* borders */
    --hairline-2: #2A2E36;   /* stronger dividers */
    --bone:       #EDEAE0;   /* primary text */
    --bone-mut:   #9A9CA3;   /* secondary text */
    --bone-dim:   #6B6E75;   /* tertiary text */
    --ochre:      #C9A25B;   /* accent */
    --ochre-mut:  #8A6E3B;   /* accent hover / muted */
    --danger:     #D46A6A;
    --ok:         #7FB77E;

    /* --- type --- */
    --f-display:  "Instrument Serif", Georgia, "Times New Roman", serif;
    --f-body:     "Inter", -apple-system, "Segoe UI", Roboto, sans-serif;
    --f-mono:     "JetBrains Mono", ui-monospace, "SF Mono", Menlo, Consolas, monospace;

    /* --- spacing scale --- */
    --s-1: 0.25rem;
    --s-2: 0.5rem;
    --s-3: 0.75rem;
    --s-4: 1rem;
    --s-5: 1.5rem;
    --s-6: 2rem;
    --s-7: 3rem;
    --s-8: 5rem;
    --s-9: 8rem;
}

/* --- reset-ish --- */
*, *::before, *::after { box-sizing: border-box; }
html, body { margin: 0; padding: 0; }
img { max-width: 100%; display: block; }
button { font: inherit; cursor: pointer; border: 0; background: 0; color: inherit; padding: 0; }
a { color: inherit; text-decoration: none; }

body {
    background: var(--ink);
    color: var(--bone);
    font-family: var(--f-body);
    font-size: 16px;
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
    text-rendering: optimizeLegibility;
    background-image:
        radial-gradient(circle at 20% 0%, rgba(201, 162, 91, 0.05), transparent 40%),
        radial-gradient(circle at 90% 100%, rgba(201, 162, 91, 0.03), transparent 40%);
    min-height: 100vh;
}

.mono {
    font-family: var(--f-mono);
    font-size: 0.75rem;
    letter-spacing: 0.02em;
    text-transform: lowercase;
    color: var(--bone-mut);
}
.muted { color: var(--bone-dim); }

/* ==========================================================================
   Gate - deliberately content-free.
   A single passphrase field. Reveals nothing about what's behind it.
   ========================================================================== */
.gate {
    min-height: 100vh;
    display: grid;
    place-items: center;
    padding: var(--s-6);
}
.gate__form {
    display: flex;
    flex-direction: column;
    gap: var(--s-3);
    width: 100%;
    max-width: 22rem;
}
.gate__label {
    color: var(--bone-dim);
    letter-spacing: 0.15em;
    font-size: 0.6875rem;
    margin: 0;
    text-align: center;
}
.gate__input {
    width: 100%;
    background: transparent;
    border: 0;
    border-bottom: 1px solid var(--hairline-2);
    padding: var(--s-3) var(--s-2);
    font-family: var(--f-mono);
    font-size: 1rem;
    color: var(--bone);
    outline: none;
    text-align: center;
    letter-spacing: 0.1em;
    transition: border-color 160ms ease;
}
.gate__input:focus { border-bottom-color: var(--ochre); }
.gate__submit {
    align-self: center;
    margin-top: var(--s-3);
    padding: var(--s-2) var(--s-6);
    border: 1px solid var(--hairline-2);
    color: var(--bone-mut);
    background: transparent;
    font-family: var(--f-mono);
    font-size: 0.75rem;
    letter-spacing: 0.15em;
    text-transform: lowercase;
    transition: border-color 160ms ease, color 160ms ease;
    border-radius: 2px;
    cursor: pointer;
}
.gate__submit:hover  { border-color: var(--ochre); color: var(--ochre); }
.gate__submit:focus-visible { outline: 2px solid var(--ochre); outline-offset: 3px; }
.gate__error {
    margin: var(--s-2) 0 0 0;
    color: var(--danger);
    text-align: center;
    font-size: 0.75rem;
}

/* ==========================================================================
   Chrome (top bar)
   ========================================================================== */
.chrome {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: var(--s-4) var(--s-6);
    border-bottom: 1px solid var(--hairline);
    gap: var(--s-4);
    flex-wrap: wrap;
}
.chrome__l { display: flex; align-items: center; gap: var(--s-4); }
.chrome__id {
    color: var(--ochre);
    font-family: var(--f-mono);
    font-size: 0.8125rem;
    letter-spacing: 0.02em;
}
.chrome__who { color: var(--bone-mut); }
.chrome__nav {
    display: flex;
    align-items: center;
    gap: var(--s-5);
    font-family: var(--f-mono);
    font-size: 0.8125rem;
}
.chrome__link {
    color: var(--bone);
    padding-bottom: 3px;
    border-bottom: 1px solid transparent;
    transition: border-color 120ms ease, color 120ms ease;
}
.chrome__link:hover { border-bottom-color: var(--ochre); color: var(--ochre); }
.chrome__link.is-active { border-bottom-color: var(--ochre); color: var(--ochre); }
.chrome__link--muted { color: var(--bone-mut); }
.chrome--admin .chrome__id { color: var(--bone); }

.pill {
    display: inline-block;
    font-family: var(--f-mono);
    font-size: 0.6875rem;
    letter-spacing: 0.05em;
    text-transform: uppercase;
    padding: 2px 6px;
    border: 1px solid var(--hairline-2);
    color: var(--bone-mut);
    border-radius: 2px;
}
.pill--ok   { color: var(--ok);     border-color: rgba(127,183,126,0.35); }
.pill--warn { color: var(--ochre);  border-color: rgba(201,162,91,0.35); }

/* ==========================================================================
   Log (main timeline)
   ========================================================================== */
.log {
    max-width: 62rem;
    margin: 0 auto;
    padding: var(--s-8) var(--s-6) var(--s-9);
}
.log__hero { margin-bottom: var(--s-8); max-width: 40rem; }
.log__eyebrow {
    color: var(--ochre);
    text-transform: uppercase;
    letter-spacing: 0.14em;
    font-size: 0.75rem;
    margin: 0 0 var(--s-5) 0;
}
.log__title {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: clamp(2.75rem, 6vw, 4.5rem);
    line-height: 1;
    letter-spacing: -0.015em;
    margin: 0 0 var(--s-5) 0;
}
.log__title em { color: var(--ochre); font-style: italic; }
.log__lede {
    color: var(--bone-mut);
    font-size: 1.0625rem;
    max-width: 32rem;
    margin: 0;
}
.log__stream {
    display: flex;
    flex-direction: column;
    gap: var(--s-8);
}
.log__foot {
    margin-top: var(--s-9);
    padding-top: var(--s-4);
    border-top: 1px solid var(--hairline);
    color: var(--bone-dim);
}

/* --- one month/year bucket ---------------------------------------------- */
.epoch { position: relative; padding-left: var(--s-6); }
.epoch::before {
    content: "";
    position: absolute;
    left: 0; top: 0.6em; bottom: 0;
    width: 1px;
    background: linear-gradient(to bottom, var(--hairline-2), transparent);
}
.epoch__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: var(--s-4);
    margin-bottom: var(--s-5);
    padding-bottom: var(--s-3);
    border-bottom: 1px solid var(--hairline);
}
.epoch__title {
    font-family: var(--f-display);
    font-weight: 400;
    font-style: italic;
    font-size: clamp(1.5rem, 3vw, 2rem);
    letter-spacing: -0.01em;
    color: var(--bone);
    margin: 0;
}
.epoch__count { flex-shrink: 0; }
.epoch__list {
    list-style: none;
    padding: 0;
    margin: 0;
    display: flex;
    flex-direction: column;
}

.entry { border-bottom: 1px dashed var(--hairline); }
.entry:last-child { border-bottom: 0; }
.entry__btn {
    display: grid;
    grid-template-columns: auto 1fr auto;
    gap: var(--s-5);
    align-items: baseline;
    width: 100%;
    padding: var(--s-4) 0;
    text-align: left;
    transition: color 120ms ease, transform 200ms cubic-bezier(0.2, 0.7, 0.2, 1);
}
.entry__btn:hover { color: var(--ochre); }
.entry__btn:hover .entry__hash { color: var(--ochre); }
.entry__btn:hover .entry__title { color: var(--ochre); }
.entry__btn:focus-visible { outline: 2px solid var(--ochre); outline-offset: 4px; border-radius: 2px; }
.entry__hash {
    color: var(--bone-dim);
    font-weight: 500;
    min-width: 5ch;
}
.entry__title {
    font-size: 1.125rem;
    color: var(--bone);
    line-height: 1.35;
    font-weight: 500;
    transition: color 120ms ease;
}
.entry__meta {
    color: var(--bone-dim);
    text-align: right;
    font-size: 0.75rem;
    white-space: nowrap;
}

@media (max-width: 640px) {
    .entry__btn { grid-template-columns: auto 1fr; gap: var(--s-3) var(--s-4); }
    .entry__meta { grid-column: 1 / -1; text-align: left; }
}

/* --- empty state -------------------------------------------------------- */
.empty {
    padding: var(--s-8) 0;
    border-top: 1px dashed var(--hairline);
    color: var(--bone-mut);
    text-align: center;
}
.empty a { color: var(--ochre); border-bottom: 1px solid currentColor; }

/* ==========================================================================
   Modal
   ========================================================================== */
.modal {
    position: fixed;
    inset: 0;
    display: grid;
    place-items: center;
    padding: var(--s-4);
    z-index: 50;
}
.modal[hidden] { display: none; }
.modal__backdrop {
    position: absolute; inset: 0;
    background: rgba(10, 11, 13, 0.86);
    backdrop-filter: blur(4px);
    cursor: pointer;
}
.modal__panel {
    position: relative;
    background: var(--ink-2);
    border: 1px solid var(--hairline-2);
    max-width: 42rem;
    width: 100%;
    max-height: 90vh;
    overflow: auto;
    padding: var(--s-7) var(--s-6);
}
.modal__close {
    position: absolute;
    top: var(--s-3);
    right: var(--s-4);
    font-size: 1.5rem;
    color: var(--bone-mut);
    line-height: 1;
    padding: var(--s-2);
    transition: color 120ms ease;
}
.modal__close:hover { color: var(--ochre); }

.entry-full__meta {
    font-family: var(--f-mono);
    font-size: 0.75rem;
    color: var(--bone-mut);
    margin: 0 0 var(--s-4) 0;
    display: flex;
    flex-wrap: wrap;
    gap: var(--s-4);
}
.entry-full__meta span { display: inline-flex; gap: 6px; }
.entry-full__meta b { color: var(--bone); font-weight: 500; }
.entry-full__title {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: clamp(1.75rem, 4vw, 2.5rem);
    line-height: 1.1;
    letter-spacing: -0.01em;
    margin: 0 0 var(--s-5) 0;
    color: var(--bone);
}
.entry-full__title em { color: var(--ochre); }
.entry-full__img {
    width: 100%;
    height: auto;
    margin: var(--s-5) 0;
    border: 1px solid var(--hairline);
}
.entry-full__body {
    color: var(--bone);
    font-size: 1rem;
    line-height: 1.7;
    white-space: pre-wrap;
    word-wrap: break-word;
}
.entry-full__foot {
    margin-top: var(--s-6);
    padding-top: var(--s-4);
    border-top: 1px solid var(--hairline);
    font-family: var(--f-mono);
    font-size: 0.75rem;
    color: var(--bone-dim);
    display: flex;
    justify-content: space-between;
    gap: var(--s-4);
    flex-wrap: wrap;
}
.entry-full__hash { color: var(--ochre); }

/* ==========================================================================
   Forms (submit + admin edit)
   ========================================================================== */
.submit, .admin {
    max-width: 46rem;
    margin: 0 auto;
    padding: var(--s-7) var(--s-6) var(--s-9);
}
.admin { max-width: 68rem; }
.submit__hero { margin-bottom: var(--s-7); }

.form { display: flex; flex-direction: column; gap: var(--s-5); }
.form__row { display: flex; flex-direction: column; gap: var(--s-2); }
.form__row--split {
    display: grid;
    grid-template-columns: 1fr 1fr;
    gap: var(--s-5);
}
.form__row-btn { align-self: flex-end; }
@media (max-width: 640px) {
    .form__row--split { grid-template-columns: 1fr; }
}
.form__label {
    font-family: var(--f-mono);
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--bone-mut);
}
.form__input {
    background: var(--ink-2);
    border: 1px solid var(--hairline-2);
    color: var(--bone);
    padding: var(--s-3) var(--s-4);
    font-family: var(--f-body);
    font-size: 0.9375rem;
    transition: border-color 120ms ease;
    outline: none;
    border-radius: 2px;
    width: 100%;
}
.form__input:focus { border-color: var(--ochre); }
.form__input:disabled { opacity: 0.5; cursor: not-allowed; }
.form__input--area { resize: vertical; min-height: 10rem; font-family: var(--f-body); line-height: 1.6; }
.form__input--file {
    padding: var(--s-2);
    background: transparent;
    border: 1px dashed var(--hairline-2);
    font-family: var(--f-mono);
    font-size: 0.8125rem;
}
.form__input--file::file-selector-button {
    background: var(--bone);
    color: var(--ink);
    border: 0;
    padding: var(--s-2) var(--s-4);
    margin-right: var(--s-3);
    font-family: var(--f-mono);
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    cursor: pointer;
    border-radius: 2px;
}
.form__hint { margin: 4px 0 0 0; color: var(--bone-dim); }
.form__check {
    display: flex;
    gap: var(--s-2);
    align-items: center;
    color: var(--bone-mut);
    font-size: 0.8125rem;
    margin-top: var(--s-2);
    cursor: pointer;
}
.form__check em { font-style: italic; color: var(--bone-dim); }

.form__actions { display: flex; gap: var(--s-4); margin-top: var(--s-4); flex-wrap: wrap; }

.btn {
    display: inline-block;
    font-family: var(--f-mono);
    font-size: 0.8125rem;
    text-transform: uppercase;
    letter-spacing: 0.05em;
    padding: var(--s-3) var(--s-5);
    border: 1px solid var(--hairline-2);
    border-radius: 2px;
    background: transparent;
    color: var(--bone);
    transition: all 120ms ease;
    cursor: pointer;
    text-align: center;
}
.btn:hover { border-color: var(--ochre); color: var(--ochre); }
.btn--sm { padding: var(--s-2) var(--s-3); font-size: 0.75rem; }
.btn--primary {
    background: var(--bone); color: var(--ink); border-color: var(--bone);
}
.btn--primary:hover { background: var(--ochre); border-color: var(--ochre); color: var(--ink); }
.btn--ghost { color: var(--bone-mut); }
.btn--ghost:hover { color: var(--bone); border-color: var(--bone); }
.btn--danger { color: var(--danger); border-color: rgba(212,106,106,0.35); }
.btn--danger:hover { color: var(--ink); background: var(--danger); border-color: var(--danger); }

/* --- flashes ------------------------------------------------------------ */
.flash {
    padding: var(--s-3) var(--s-4);
    margin-bottom: var(--s-4);
    border-left: 3px solid var(--bone-mut);
    background: var(--ink-2);
    font-size: 0.9375rem;
    color: var(--bone);
}
.flash--ok  { border-left-color: var(--ok); }
.flash--err { border-left-color: var(--danger); color: var(--danger); }
.flash--reveal {
    border-left-color: var(--ochre);
    padding: var(--s-4);
}
.reveal {
    display: block;
    margin-top: var(--s-2);
    padding: var(--s-3);
    background: var(--ink);
    border: 1px dashed var(--ochre-mut);
    font-family: var(--f-mono);
    font-size: 0.8125rem;
    color: var(--ochre);
    word-break: break-all;
    user-select: all;
}

/* ==========================================================================
   Admin panel
   ========================================================================== */
.admin__title {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: 2rem;
    margin: var(--s-5) 0 var(--s-6) 0;
    color: var(--bone);
}
.admin__title em { color: var(--ochre); }

.reviewlist { list-style: none; padding: 0; margin: 0; display: flex; flex-direction: column; gap: var(--s-6); }
.reviewcard {
    background: var(--ink-2);
    border: 1px solid var(--hairline);
    padding: var(--s-5);
}
.reviewcard__warn {
    display: block;
    margin: 0 0 var(--s-4) 0;
    padding: var(--s-2) var(--s-3);
    background: rgba(201, 162, 91, 0.08);
    border-left: 3px solid var(--ochre);
    color: var(--ochre);
    font-size: 0.75rem;
    letter-spacing: 0.05em;
}
.reviewcard__title {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: 1.75rem;
    line-height: 1.15;
    margin: 0 0 var(--s-5) 0;
    color: var(--bone);
}
.reviewcard__facts {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(11rem, 1fr));
    gap: var(--s-3) var(--s-5);
    margin: 0 0 var(--s-5) 0;
    padding: var(--s-4) 0;
    border-top: 1px solid var(--hairline);
    border-bottom: 1px solid var(--hairline);
}
.reviewcard__fact { margin: 0; }
.reviewcard__fact dt {
    font-size: 0.6875rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--bone-dim);
    margin: 0 0 4px 0;
}
.reviewcard__fact dd {
    margin: 0;
    color: var(--bone);
    font-size: 0.9375rem;
    display: flex;
    align-items: center;
    gap: var(--s-2);
    flex-wrap: wrap;
    word-break: break-word;
}
.reviewcard__fact dd a { color: var(--ochre); border-bottom: 1px solid currentColor; }

.reviewcard__imglink { display: block; margin: 0 0 var(--s-5) 0; }
.reviewcard__img {
    width: 100%;
    max-height: 480px;
    object-fit: contain;
    background: var(--ink);
    border: 1px solid var(--hairline);
    margin-bottom: 0;
}
.reviewcard__subhead {
    font-family: var(--f-mono);
    font-size: 0.75rem;
    text-transform: lowercase;
    letter-spacing: 0.05em;
    color: var(--bone-dim);
    margin: 0 0 var(--s-2) 0;
    font-weight: 500;
}
.reviewcard__body {
    color: var(--bone);
    line-height: 1.65;
    margin-bottom: var(--s-5);
    white-space: pre-wrap;
    word-wrap: break-word;
    padding: var(--s-3) 0;
    border-top: 1px dashed var(--hairline);
}
.reviewcard__actions { display: flex; gap: var(--s-3); flex-wrap: wrap; margin-top: var(--s-4); padding-top: var(--s-4); border-top: 1px solid var(--hairline); }

.panel {
    background: var(--ink-2);
    border: 1px solid var(--hairline);
    padding: var(--s-5);
    margin-bottom: var(--s-6);
}
.panel__title {
    font-family: var(--f-display);
    font-weight: 400;
    font-size: 1.25rem;
    margin: 0 0 var(--s-4) 0;
    color: var(--bone);
}

.table {
    width: 100%;
    border-collapse: collapse;
    font-size: 0.9375rem;
}
.table th, .table td {
    padding: var(--s-3) var(--s-4);
    border-bottom: 1px solid var(--hairline);
    text-align: left;
    vertical-align: middle;
}
.table th {
    font-family: var(--f-mono);
    font-size: 0.75rem;
    text-transform: uppercase;
    letter-spacing: 0.1em;
    color: var(--bone-mut);
    font-weight: 500;
}
.table td.right, .table th.right { text-align: right; }
.table__thumb { width: 72px; padding: var(--s-2) var(--s-3); }
.thumb {
    width: 56px;
    height: 42px;
    object-fit: cover;
    border: 1px solid var(--hairline);
    background: var(--ink);
    display: block;
}

/* --- prefers-reduced-motion --- */
@media (prefers-reduced-motion: reduce) {
    * { transition: none !important; animation: none !important; }
}
