/* Hops n Grains menus. The chrome is the shelf; the menus are the paper standing on it. Brass is the taproom's metal, the logo's teal is the only active colour, and the paper of the photographed menus is the brightest thing on the page. */ @font-face { font-family: 'Archivo'; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap; src: url('/assets/fonts/archivo-latin.woff2') format('woff2'); unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD; } @font-face { font-family: 'Archivo'; font-style: normal; font-weight: 100 900; font-stretch: 62% 125%; font-display: swap; src: url('/assets/fonts/archivo-latin-ext.woff2') format('woff2'); unicode-range: U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF; } :root { --steel: #101719; --rail: #182125; --paper: #efeae0; --accent: #0088aa; --copper: #c08544; --ink: #e8e5dd; --ink-dim: #8f979a; --ink-on-paper: #1b1f22; --brass-edge: color-mix(in srgb, var(--copper) 42%, transparent); --hairline: color-mix(in srgb, var(--copper) 26%, transparent); --hairline-soft: color-mix(in srgb, var(--copper) 14%, transparent); --sheet-shadow: color-mix(in srgb, #000 45%, transparent); --step-0: 1rem; --step-1: 1.25rem; --step-2: 1.55rem; --page-max: 780px; --content-max: 52rem; } *, *::before, *::after { box-sizing: border-box; } html { -webkit-text-size-adjust: 100%; } body { margin: 0; background: var(--steel); color: var(--ink); font-family: 'Archivo', system-ui, -apple-system, 'Segoe UI', Roboto, sans-serif; font-size: var(--step-0); line-height: 1.5; -webkit-font-smoothing: antialiased; } a { color: inherit; text-decoration: none; } :focus-visible { outline: 2px solid var(--accent); outline-offset: 3px; } /* ---------- Landing: the menus as tap handles ---------- Each category is a card whose face is the first page of that menu, so the navigation is made of the restaurant's own paper. The row scrolls sideways and snaps; on a wide screen it wraps into a grid instead. */ .landing { max-width: var(--content-max); margin: 0 auto; padding: 0 0 3rem; } .masthead { padding: clamp(2.2rem, 10vh, 4.5rem) 1.1rem 1.5rem; } .wordmark { margin: 0; font-size: clamp(1.95rem, 8.5vw, 2.9rem); font-weight: 700; font-stretch: 118%; letter-spacing: -0.025em; line-height: 1; } .masthead__tagline { margin: 0.5rem 0 0; color: var(--ink-dim); font-size: 0.98rem; } .shelves { display: flex; gap: 0.85rem; padding: 0.15rem 0 1rem 1.1rem; overflow-x: auto; scroll-snap-type: x mandatory; /* snap against the same inset the first card starts at, so nothing is ever left half-scrolled under the screen edge */ scroll-padding-left: 1.1rem; scrollbar-width: none; -webkit-overflow-scrolling: touch; } .shelves::-webkit-scrollbar { display: none; } .shelf { position: relative; flex: 0 0 10.5rem; height: 15rem; overflow: hidden; background: var(--paper); box-shadow: 0 1px 0 var(--sheet-shadow); scroll-snap-align: start; } .shelf__peek { position: absolute; top: 0; right: 0; bottom: 3.2rem; left: 0; display: block; } .shelf__peek img { display: block; width: 100%; height: 100%; object-fit: cover; object-position: top center; transition: transform 0.4s cubic-bezier(0.2, 0.7, 0.2, 1); } .shelf__name { position: absolute; right: 0; bottom: 3.2rem; left: 0; padding: 0.45rem 0.6rem; background: color-mix(in srgb, var(--steel) 88%, transparent); font-size: 1.05rem; font-weight: 700; letter-spacing: -0.01em; } .shelf__pages { position: absolute; right: 0; bottom: 0; left: 0; height: 3.2rem; padding: 0.85rem 0.6rem; background: var(--paper); color: var(--ink-on-paper); font-size: 0.8rem; font-variant-numeric: tabular-nums; } .shelf:hover .shelf__name, .shelf:focus-visible .shelf__name { background: color-mix(in srgb, var(--accent) 90%, transparent); color: var(--steel); } .shelf:hover .shelf__peek img, .shelf:focus-visible .shelf__peek img { transform: scale(1.04); } .empty { max-width: 34ch; margin: 1rem 1.1rem 0; color: var(--ink-dim); font-size: var(--step-1); } /* ---------- Section page: the bar and the switcher ---------- */ .bar { position: sticky; top: 0; z-index: 20; display: flex; align-items: center; gap: 0.7rem; padding: 0.5rem 0.85rem 0.45rem; background: color-mix(in srgb, var(--rail) 94%, transparent); backdrop-filter: blur(6px); } .bar__brand { display: flex; align-items: center; } .bar__brand img { display: block; width: 24px; height: 24px; } .bar__nav { display: flex; flex: 1 1 auto; gap: 0.15rem; overflow-x: auto; scrollbar-width: none; -webkit-overflow-scrolling: touch; } .bar__nav::-webkit-scrollbar { display: none; } .bar__link { padding: 0.35rem 0.65rem; background: color-mix(in srgb, var(--ink) 9%, transparent); color: var(--ink-dim); font-size: 0.95rem; white-space: nowrap; } .bar__link:hover { color: var(--ink); background: color-mix(in srgb, var(--ink) 15%, transparent); } .bar__link.is-current { background: var(--accent); color: var(--steel); font-weight: 700; } .pour { position: absolute; right: 0; bottom: 0; left: 0; height: 2px; background: var(--hairline-soft); } .pour__fill { display: block; width: 0; height: 100%; background: var(--copper); } /* ---------- The pages themselves ---------- */ .section-heading { display: flex; align-items: baseline; justify-content: space-between; gap: 1rem; max-width: var(--page-max); margin: 1.2rem auto 0.75rem; padding: 0 0.9rem; } .section-heading__label { font-size: var(--step-2); font-weight: 700; letter-spacing: -0.02em; } .section-heading__date { color: var(--ink-dim); font-size: 0.88rem; font-variant-numeric: tabular-nums; } .notice { max-width: var(--page-max); margin: 0 auto 1rem; padding: 0.6rem 0.8rem; border-left: 2px solid var(--copper); background: var(--rail); font-size: 0.95rem; } .notice a { color: var(--accent); text-decoration: underline; } .notice--admin { max-width: none; border-left-color: var(--accent); background: color-mix(in srgb, var(--accent) 20%, var(--rail)); } .pages { max-width: var(--page-max); margin: 0 auto; padding: 0 0.7rem 1.25rem; } .page { margin: 0 0 0.6rem; background: var(--paper); box-shadow: 0 1px 0 color-mix(in srgb, #000 35%, transparent); } .page__zoom { display: block; } .page img { display: block; width: 100%; height: auto; } /* ---------- Footer: page index and older menus ---------- */ .foot { max-width: var(--page-max); margin: 0 auto 4.5rem; padding: 0 0.9rem 1rem; border-top: 1px solid var(--hairline-soft); } .fold { padding: 0.7rem 0; border-bottom: 1px solid var(--hairline-soft); } .fold summary { color: var(--ink-dim); font-size: 0.92rem; cursor: pointer; } .fold[open] summary { color: var(--ink); } .index { display: flex; flex-wrap: wrap; gap: 0.4rem; margin: 0; padding: 0.85rem 0 0; list-style: none; } .index a { display: block; min-width: 2.3rem; padding: 0.3rem 0.45rem; background: var(--rail); font-variant-numeric: tabular-nums; text-align: center; } .index a:hover, .index a:focus-visible { background: var(--accent); color: var(--steel); } .older { margin: 0.5rem 0 0; padding: 0; list-style: none; } .older a { display: flex; justify-content: space-between; gap: 1rem; padding: 0.45rem 0.15rem; } .older__label { font-weight: 500; } .older__date { color: var(--ink-dim); font-size: 0.88rem; font-variant-numeric: tabular-nums; } .fold__back { margin: 0.7rem 0 0; } .fold__back a { color: var(--accent); text-decoration: underline; } /* ---------- Counter and zoom ---------- */ .counter { position: fixed; right: 0.85rem; bottom: calc(0.85rem + env(safe-area-inset-bottom)); z-index: 30; display: inline-flex; align-items: baseline; gap: 0.3rem; padding: 0.45rem 0.7rem; border: 1px solid var(--brass-edge); background: var(--paper); color: var(--ink-on-paper); font: inherit; font-size: 0.88rem; font-variant-numeric: tabular-nums; cursor: pointer; } .counter[hidden] { display: none; } .counter__total { color: color-mix(in srgb, var(--ink-on-paper) 55%, transparent); } .zoom { position: fixed; inset: 0; z-index: 50; overflow: auto; background: rgba(6, 9, 10, 0.96); -webkit-overflow-scrolling: touch; } .zoom img { display: block; width: min(100%, 1600px); height: auto; margin: 0 auto; } .zoom__close { position: fixed; top: 0.6rem; right: 0.6rem; z-index: 1; padding: 0.5rem 0.75rem; border: 1px solid var(--brass-edge); background: var(--paper); color: var(--ink-on-paper); font: inherit; cursor: pointer; } /* ---------- Wider screens ---------- */ @media (min-width: 62rem) { .shelves { display: grid; grid-template-columns: repeat(auto-fill, minmax(10.5rem, 1fr)); gap: 1rem; padding: 0.15rem 1.1rem 1rem; overflow: visible; } .shelf { height: 16rem; } .pages { max-width: 820px; } } @media print { .bar, .sheet, .counter, .fold, .notice { display: none; } body { background: #fff; color: #000; } .page { break-inside: avoid; } } @media (prefers-reduced-motion: reduce) { *, *::before, *::after { animation: none !important; transition: none !important; scroll-behavior: auto !important; } }