/* ==========================================================================
   Slidin' Ranch Recipes
   Built to be read at arm's length, on a phone propped against a mixing bowl.
   ========================================================================== */

:root {
    --ink:        #16181d;
    --ink-soft:   #5b616b;
    --ink-faint:  #8b919b;
    --paper:      #ffffff;
    --paper-warm: #f6f6f4;
    --rule:       #e2e4e0;
    --pine:       #0f5c4a;
    --pine-soft:  #e6efeb;
    --done:       #a7aeb6;

    --display: "Big Shoulders Display", "Archivo Narrow", "Oswald",
               "Helvetica Neue Condensed", Impact, sans-serif;
    --body:    "IBM Plex Sans", -apple-system, BlinkMacSystemFont, "Segoe UI",
               Roboto, sans-serif;
    --mono:    "IBM Plex Mono", ui-monospace, SFMono-Regular, Menlo, monospace;

    --measure: 40rem;
    --step:    clamp(1rem, 0.9rem + 0.4vw, 1.125rem);
    --radius:  3px;
}

@media (prefers-color-scheme: dark) {
    :root {
        --ink:        #ecedee;
        --ink-soft:   #a2a8b0;
        --ink-faint:  #767c85;
        --paper:      #14161a;
        --paper-warm: #1c1f24;
        --rule:       #2b2f36;
        --pine:       #6bc4a3;
        --pine-soft:  #16302a;
        --done:       #5a616a;
    }
}

*, *::before, *::after { box-sizing: border-box; }

html { -webkit-text-size-adjust: 100%; }

body {
    margin: 0;
    background: var(--paper);
    color: var(--ink);
    font-family: var(--body);
    font-size: var(--step);
    line-height: 1.55;
    -webkit-font-smoothing: antialiased;
}

a { color: var(--pine); text-decoration-thickness: 1px; text-underline-offset: 2px; }

:focus-visible {
    outline: 2px solid var(--pine);
    outline-offset: 2px;
    border-radius: var(--radius);
}

.wrap {
    max-width: var(--measure);
    margin: 0 auto;
    padding: 1.5rem 1.25rem 5rem;
}

/* ---- Masthead ---------------------------------------------------------- */

.masthead {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    padding-bottom: 0.75rem;
    border-bottom: 2px solid var(--ink);
    margin-bottom: 1.75rem;
}

.masthead__name {
    font-family: var(--display);
    font-size: 1.5rem;
    font-weight: 800;
    letter-spacing: 0.02em;
    text-transform: uppercase;
    color: var(--ink);
    text-decoration: none;
    line-height: 1;
}

.masthead__link {
    font-family: var(--mono);
    font-size: 0.7rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    color: var(--ink-soft);
    text-decoration: none;
}
.masthead__link:hover { color: var(--pine); }

/* ---- Eyebrow labels ---------------------------------------------------- */

.eyebrow {
    font-family: var(--mono);
    font-size: 0.68rem;
    font-weight: 500;
    letter-spacing: 0.14em;
    text-transform: uppercase;
    color: var(--ink-faint);
    margin: 0 0 0.6rem;
}

/* ---- Import form ------------------------------------------------------- */

.lede {
    font-family: var(--display);
    font-size: clamp(2.4rem, 9vw, 3.6rem);
    font-weight: 800;
    line-height: 0.92;
    letter-spacing: -0.005em;
    text-transform: uppercase;
    margin: 0 0 0.75rem;
}

.lede em {
    font-style: normal;
    color: var(--pine);
}

.sub {
    color: var(--ink-soft);
    margin: 0 0 2rem;
    max-width: 32rem;
}

.tabs {
    display: flex;
    gap: 0.25rem;
    border-bottom: 1px solid var(--rule);
    margin-bottom: 1.25rem;
}

.tab {
    appearance: none;
    background: none;
    border: 0;
    border-bottom: 2px solid transparent;
    margin-bottom: -1px;
    padding: 0.5rem 0.85rem;
    font-family: var(--mono);
    font-size: 0.72rem;
    letter-spacing: 0.08em;
    text-transform: uppercase;
    color: var(--ink-soft);
    cursor: pointer;
}
.tab:hover { color: var(--ink); }
.tab[aria-selected="true"] {
    color: var(--ink);
    border-bottom-color: var(--pine);
}

.field { margin-bottom: 1rem; }

.field__label {
    display: block;
    font-family: var(--mono);
    font-size: 0.68rem;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    color: var(--ink-faint);
    margin-bottom: 0.35rem;
}

.input, .textarea {
    width: 100%;
    padding: 0.7rem 0.8rem;
    font-family: var(--body);
    font-size: 1rem;
    color: var(--ink);
    background: var(--paper);
    border: 1.5px solid var(--rule);
    border-radius: var(--radius);
}
.input:focus, .textarea:focus {
    border-color: var(--pine);
    outline: none;
}
.textarea {
    min-height: 12rem;
    resize: vertical;
    font-family: var(--mono);
    font-size: 0.85rem;
    line-height: 1.5;
}

.btn {
    appearance: none;
    display: inline-flex;
    align-items: center;
    justify-content: center;
    gap: 0.5rem;
    width: 100%;
    padding: 0.85rem 1.25rem;
    background: var(--pine);
    color: #fff;
    border: 0;
    border-radius: var(--radius);
    font-family: var(--mono);
    font-size: 0.78rem;
    font-weight: 500;
    letter-spacing: 0.1em;
    text-transform: uppercase;
    cursor: pointer;
}
.btn:hover:not(:disabled) { filter: brightness(1.12); }
.btn:disabled { opacity: 0.55; cursor: progress; }

@media (prefers-color-scheme: dark) {
    .btn { color: #0c1512; }
}

.hint {
    font-size: 0.82rem;
    color: var(--ink-faint);
    margin-top: 0.6rem;
}

.notice {
    padding: 0.85rem 1rem;
    border-left: 3px solid var(--pine);
    background: var(--pine-soft);
    border-radius: 0 var(--radius) var(--radius) 0;
    font-size: 0.9rem;
    margin-bottom: 1.25rem;
}
.notice--error {
    border-left-color: #b4342a;
    background: color-mix(in srgb, #b4342a 8%, transparent);
}

/* ---- Progress readout -------------------------------------------------- */

.progress {
    display: none;
    align-items: center;
    gap: 0.6rem;
    margin-top: 1rem;
    font-family: var(--mono);
    font-size: 0.78rem;
    color: var(--ink-soft);
}
.progress.is-on { display: flex; }

.progress__dot {
    width: 8px;
    height: 8px;
    background: var(--pine);
    border-radius: 50%;
    animation: pulse 1.1s ease-in-out infinite;
}
@keyframes pulse {
    0%, 100% { opacity: 0.25; transform: scale(0.8); }
    50%      { opacity: 1;    transform: scale(1); }
}

/* ---- Recent list ------------------------------------------------------- */

.recent { margin-top: 3rem; }

.recent__list {
    list-style: none;
    margin: 0;
    padding: 0;
    border-top: 1px solid var(--rule);
}

.recent__item { border-bottom: 1px solid var(--rule); }

.recent__link {
    display: grid;
    grid-template-columns: 1fr auto;
    align-items: baseline;
    gap: 1rem;
    padding: 0.8rem 0;
    text-decoration: none;
    color: var(--ink);
}
.recent__link:hover .recent__title { color: var(--pine); }

.recent__title {
    font-family: var(--display);
    font-size: 1.3rem;
    font-weight: 600;
    letter-spacing: 0.01em;
    line-height: 1.1;
}

.recent__meta {
    font-family: var(--mono);
    font-size: 0.68rem;
    letter-spacing: 0.05em;
    color: var(--ink-faint);
    text-transform: uppercase;
    white-space: nowrap;
}

/* ---- Recipe page ------------------------------------------------------- */

.recipe__title {
    font-family: var(--display);
    font-size: clamp(2.3rem, 8.5vw, 3.4rem);
    font-weight: 800;
    line-height: 0.94;
    letter-spacing: -0.005em;
    text-transform: uppercase;
    margin: 0 0 0.75rem;
}

.recipe__desc {
    color: var(--ink-soft);
    margin: 0 0 1.25rem;
}

.recipe__photo {
    width: 100%;
    aspect-ratio: 3 / 2;
    object-fit: cover;
    border-radius: var(--radius);
    background: var(--paper-warm);
    margin-bottom: 1.5rem;
    display: block;
}

/* Facts strip: mono labels over condensed values. */
.facts {
    display: flex;
    flex-wrap: wrap;
    gap: 0 2rem;
    padding: 0.9rem 0;
    border-top: 1px solid var(--rule);
    border-bottom: 1px solid var(--rule);
    margin-bottom: 2rem;
}

.fact__label {
    font-family: var(--mono);
    font-size: 0.62rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--ink-faint);
    display: block;
}

.fact__value {
    font-family: var(--display);
    font-size: 1.35rem;
    font-weight: 700;
    line-height: 1.2;
    letter-spacing: 0.01em;
}

.section { margin-bottom: 2.5rem; }

.section__head {
    display: flex;
    align-items: baseline;
    justify-content: space-between;
    gap: 1rem;
    border-bottom: 2px solid var(--ink);
    padding-bottom: 0.35rem;
    margin-bottom: 1rem;
}

.section__title {
    font-family: var(--display);
    font-size: 1.6rem;
    font-weight: 700;
    letter-spacing: 0.03em;
    text-transform: uppercase;
    margin: 0;
    line-height: 1;
}

/* ---- The ledger: quantities in a mono column, items on one baseline ---- */

.ledger {
    list-style: none;
    margin: 0;
    padding: 0;
}

.ledger__group {
    font-family: var(--mono);
    font-size: 0.68rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--pine);
    padding: 1rem 0 0.4rem;
}
.ledger__group:first-child { padding-top: 0; }

.ledger__row {
    display: grid;
    grid-template-columns: minmax(5.5rem, max-content) 1fr;
    gap: 0 1rem;
    align-items: baseline;
    padding: 0.42rem 0;
    border-bottom: 1px dotted var(--rule);
    cursor: pointer;
    user-select: none;
}
.ledger__row:hover .ledger__item { color: var(--pine); }

.ledger__qty {
    font-family: var(--mono);
    font-size: 0.85rem;
    font-variant-numeric: tabular-nums;
    color: var(--ink);
    white-space: nowrap;
}

.ledger__item { transition: color 0.12s ease; }

.ledger__row.is-done .ledger__qty,
.ledger__row.is-done .ledger__item {
    color: var(--done);
    text-decoration: line-through;
    text-decoration-thickness: 1px;
}

/* ---- Steps ------------------------------------------------------------- */

.steps {
    list-style: none;
    margin: 0;
    padding: 0;
    counter-reset: step;
}

.step__group {
    font-family: var(--mono);
    font-size: 0.68rem;
    letter-spacing: 0.12em;
    text-transform: uppercase;
    color: var(--pine);
    padding: 1.25rem 0 0.5rem;
}
.step__group:first-child { padding-top: 0; }

.step {
    display: grid;
    grid-template-columns: 2.5rem 1fr;
    gap: 0 0.75rem;
    padding: 0.9rem 0;
    border-bottom: 1px solid var(--rule);
    cursor: pointer;
}

.step::before {
    counter-increment: step;
    content: counter(step, decimal-leading-zero);
    font-family: var(--mono);
    font-size: 0.8rem;
    font-variant-numeric: tabular-nums;
    color: var(--pine);
    padding-top: 0.2rem;
}

.step__body { margin: 0; }

.step.is-done .step__body { color: var(--done); }
.step.is-done::before { color: var(--done); }

.timer {
    appearance: none;
    display: inline-flex;
    align-items: center;
    gap: 0.3rem;
    margin-left: 0.4rem;
    padding: 0.1rem 0.45rem;
    background: var(--pine-soft);
    color: var(--pine);
    border: 1px solid color-mix(in srgb, var(--pine) 30%, transparent);
    border-radius: 999px;
    font-family: var(--mono);
    font-size: 0.7rem;
    cursor: pointer;
    vertical-align: baseline;
}
.timer:hover { background: color-mix(in srgb, var(--pine) 18%, transparent); }
.timer.is-running { background: var(--pine); color: var(--paper); }

/* ---- Notes and source -------------------------------------------------- */

.notes {
    background: var(--paper-warm);
    border-radius: var(--radius);
    padding: 1rem 1.15rem;
    font-size: 0.92rem;
    white-space: pre-wrap;
}

.source {
    border-top: 1px solid var(--rule);
    padding-top: 1.25rem;
    font-size: 0.85rem;
    color: var(--ink-soft);
}
.source__url {
    font-family: var(--mono);
    font-size: 0.76rem;
    word-break: break-all;
}

/* ---- Toolbar ----------------------------------------------------------- */

.toolbar {
    position: sticky;
    bottom: 0;
    display: flex;
    gap: 0.5rem;
    padding: 0.6rem 0;
    background: linear-gradient(to top, var(--paper) 65%, transparent);
}

.tool {
    appearance: none;
    flex: 1;
    padding: 0.65rem 0.5rem;
    background: var(--paper);
    color: var(--ink);
    border: 1.5px solid var(--rule);
    border-radius: var(--radius);
    font-family: var(--mono);
    font-size: 0.7rem;
    letter-spacing: 0.06em;
    text-transform: uppercase;
    cursor: pointer;
}
.tool:hover { border-color: var(--pine); color: var(--pine); }
.tool[aria-pressed="true"] {
    background: var(--pine);
    border-color: var(--pine);
    color: #fff;
}
@media (prefers-color-scheme: dark) {
    .tool[aria-pressed="true"] { color: #0c1512; }
}

/* ---- Cook mode: bigger type, quieter chrome ---------------------------- */

body.cook-mode { --step: 1.3rem; }
body.cook-mode .recipe__photo,
body.cook-mode .recipe__desc,
body.cook-mode .source { display: none; }
body.cook-mode .ledger__row { padding: 0.7rem 0; }
body.cook-mode .step { padding: 1.15rem 0; }
body.cook-mode .wrap { max-width: 48rem; }

/* ---- Copy-link confirmation ------------------------------------------- */

.toast {
    position: fixed;
    left: 50%;
    bottom: 5rem;
    transform: translate(-50%, 1rem);
    background: var(--ink);
    color: var(--paper);
    padding: 0.6rem 1rem;
    border-radius: var(--radius);
    font-family: var(--mono);
    font-size: 0.75rem;
    letter-spacing: 0.05em;
    opacity: 0;
    pointer-events: none;
    transition: opacity 0.18s ease, transform 0.18s ease;
    z-index: 50;
}
.toast.is-on { opacity: 1; transform: translate(-50%, 0); }

/* ---- Result card ------------------------------------------------------- */

.result {
    border: 1.5px solid var(--pine);
    border-radius: var(--radius);
    padding: 1.15rem;
    margin-bottom: 1.5rem;
}

.result__link {
    display: block;
    font-family: var(--mono);
    font-size: 1rem;
    word-break: break-all;
    margin: 0.5rem 0 0.9rem;
}

.row { display: flex; gap: 0.5rem; }
.row .tool { flex: 1; }

@media (prefers-reduced-motion: reduce) {
    *, *::before, *::after {
        animation-duration: 0.001ms !important;
        transition-duration: 0.001ms !important;
    }
}

/* ---- Print: one clean page, no chrome ---------------------------------- */

@media print {
    :root { --ink: #000; --ink-soft: #333; --paper: #fff; --rule: #ccc; --pine: #000; }
    .masthead, .toolbar, .toast, .timer { display: none !important; }
    body { font-size: 11pt; }
    .wrap { max-width: none; padding: 0; }
    .recipe__photo { max-height: 2.5in; }
    .step, .ledger__row { break-inside: avoid; }
}
