/* Feed only: navigation and footer are owned by site.css. Colors use its semantic tokens. */
.ggongbab-page-wrap { position:relative; z-index:1; flex:1 0 auto; width:100%; max-width:720px; margin:0 auto; padding:12px 16px 64px; }
.gg-hero { padding:4px 0 10px; }
.gg-hero h1 { font-size:32px; font-weight:900; line-height:38px; letter-spacing:-.05em; color:#1d1d1f; }
.gg-counts { margin-top:10px; min-height:28px; display:inline-flex; align-items:center; padding:4px 11px; gap:7px; font-size:12px; font-weight:700; line-height:18px; color:var(--color-accent); background:var(--color-accent-wash); border:1px solid #efd3c6; border-radius:999px; }
.food-hub-tabs { display:flex; height:46px; gap:4px; padding:4px; margin:8px 0 12px; background:var(--color-surface-muted); border:1px solid var(--color-divider); border-radius:16px; }
.food-hub-tab { flex:1; height:36px; border:0; border-radius:12px; background:transparent; color:var(--color-ink-muted); font-family:inherit; font-size:14px; font-weight:700; cursor:pointer; }
.food-hub-tab[aria-selected="true"] { background:var(--color-ink); color:var(--color-surface); }
.food-hub-tab:focus-visible,.gg-radar-cta:focus-visible,.km-day:focus-visible,.km-meal:focus-visible,.km-fav:focus-visible,.km-expand:focus-visible,.km-cta:focus-visible,.km-stale-toggle:focus-visible,.gg-choose-link:focus-visible,.gg-card:focus-visible { outline:2px solid var(--color-focus); outline-offset:2px; }
.gg-radar { width:100%; padding:18px; margin:0 0 14px; border-radius:24px; background:var(--color-surface); border:1px solid var(--color-divider); box-shadow:inset 4px 0 0 var(--color-accent); }
.gg-radar-label { font-size:12px; font-weight:700; line-height:16px; color:var(--color-ink-muted); }
.gg-radar-title { margin-top:6px; font-size:20px; font-weight:900; line-height:28px; letter-spacing:-.035em; color:#1d1d1f; }
.gg-radar-count { margin-top:8px; font-size:32px; font-weight:900; line-height:36px; letter-spacing:-.04em; color:#1d1d1f; font-variant-numeric:tabular-nums; }
.gg-radar-next { margin-top:8px; font-size:13px; font-weight:500; line-height:20px; color:#3a3a3c; }
.gg-radar-next strong { display:block; font-size:12px; font-weight:700; color:#6e6e73; margin-bottom:2px; }
.gg-radar-cta { margin-top:12px; display:inline-flex; align-items:center; min-height:44px; padding:0 2px; border:0; background:transparent; font:700 13px/16px inherit; color:var(--color-accent); cursor:pointer; }
.gg-card.is-featured { border:1px solid #e3b9a8; background:#fff; box-shadow:0 10px 28px rgba(180,61,39,.08); }
.gg-featured-label { display:inline-flex; height:20px; padding:0 7px; margin-bottom:8px; border-radius:6px; background:var(--color-accent-wash); color:var(--color-accent); font-size:11px; font-weight:800; letter-spacing:.04em; align-items:center; }
.food-hub-menu { padding-top:2px; }
.km-head { display:flex; flex-wrap:wrap; align-items:baseline; gap:8px 12px; margin:4px 0 10px; }
.km-head h2 { font-size:20px; font-weight:900; line-height:26px; letter-spacing:-.03em; color:#1d1d1f; }
.km-date { font-size:13px; font-weight:500; line-height:20px; color:#6e6e73; }
.km-count { font-size:12px; font-weight:700; line-height:18px; color:var(--color-accent); }
/* This week's dates: seven equal columns that fit 360px even with a visible Windows scrollbar,
   so no internal scrolling hides the selected date. Selected = filled ink (like the hub tabs);
   today = a small "오늘" word, not only a color. */
.km-days { display:grid; grid-template-columns:repeat(7,minmax(0,1fr)); gap:4px; margin:0 0 12px; }
.km-day { min-width:0; min-height:54px; padding:7px 0 5px; display:flex; flex-direction:column; align-items:center; justify-content:flex-start; gap:1px; border:1px solid var(--color-divider); border-radius:12px; background:var(--color-surface); color:var(--color-ink-muted); font-family:inherit; cursor:pointer; }
.km-day-dow { font-size:11px; font-weight:700; line-height:14px; }
.km-day-num { font-size:15px; font-weight:800; line-height:19px; color:#1d1d1f; font-variant-numeric:tabular-nums; white-space:nowrap; }
.km-day-today { font-size:10px; font-weight:800; line-height:12px; color:var(--color-accent); white-space:nowrap; }
.km-day.is-today { border-color:#efd3c6; }
.km-day[aria-pressed="true"] { background:var(--color-ink); border-color:var(--color-ink); color:var(--color-surface); }
.km-day[aria-pressed="true"] .km-day-num,.km-day[aria-pressed="true"] .km-day-today { color:var(--color-surface); }
.km-day:not([aria-pressed="true"]):hover { border-color:rgba(30,29,26,.38); }
.km-sub { display:flex; flex-wrap:wrap; align-items:baseline; gap:4px 12px; margin:0 0 10px; }
.km-meals { display:flex; height:44px; gap:3px; padding:3px; margin:0 0 14px; background:var(--color-surface-muted); border:1px solid var(--color-divider); border-radius:13px; }
.km-meal { flex:1; height:36px; border:0; border-radius:10px; background:transparent; color:var(--color-ink-muted); font-family:inherit; font-size:12px; font-weight:700; cursor:pointer; }
.km-meal[aria-pressed="true"] { background:#fff; color:#1d1d1f; box-shadow:0 1px 4px rgba(0,0,0,.08); }
.km-grid { display:grid; grid-template-columns:1fr; gap:12px; }
.km-card { background:#fff; border:1px solid #e8e8ed; border-radius:18px; padding:16px; box-shadow:0 1px 2px rgba(0,0,0,.03),0 6px 20px rgba(28,25,23,.035); }
.km-card-head { display:flex; justify-content:space-between; align-items:flex-start; gap:8px; }
.km-resto { font-size:16px; font-weight:700; line-height:22px; color:#1d1d1f; }
.km-building { display:block; margin-top:2px; font-size:12px; font-weight:600; line-height:16px; color:#86868b; }
.km-fav { width:44px; height:44px; margin:-6px -6px 0 0; flex-shrink:0; border:0; background:transparent; font-size:20px; line-height:44px; color:#9b938a; cursor:pointer; }
.km-fav[aria-pressed="true"] { color:#b45309; }
.km-items { margin:10px 0 0; padding:0; list-style:none; }
.km-items li { font-size:14px; font-weight:500; line-height:22px; color:#3a3a3c; }
.km-items li + li { margin-top:3px; }
.km-expand { margin-top:4px; min-height:36px; border:0; background:transparent; padding:0; font:700 12px/18px inherit; color:var(--color-accent); cursor:pointer; }
.km-meta { display:flex; justify-content:space-between; gap:10px; margin-top:12px; padding-top:10px; border-top:1px solid #f0f0f2; font-size:12px; font-weight:700; }
.km-price { color:#1d1d1f; }
.km-kcal { color:#86868b; }
.km-warn { margin:0 0 12px; padding:12px 14px; border-radius:14px; background:#fff7ed; border:1px solid #fed7aa; color:#9a3412; font-size:13px; line-height:20px; }
.km-stale-toggle,.km-cta { margin-top:8px; height:36px; padding:0 12px; border:0; border-radius:10px; background:#1d1d1f; color:#fff; font:700 13px/16px inherit; cursor:pointer; }
.km-cta.is-ghost { background:#fff; color:#1d1d1f; border:1px solid #d2d2d7; }
.gg-card { scroll-margin-top:calc(var(--gg-nav-offset, 0px) + 16px); }
.gg-filters { position:sticky; top:var(--gg-nav-offset, 0px); z-index:4; margin:0 -16px; padding:10px 16px 12px; background:var(--bg); border-bottom:1px solid var(--color-divider); }
/* Wraps rather than overflowing when longer (English) labels meet a phone width. */
.gg-filter-row { display:flex; flex-wrap:wrap; gap:6px; }
.gg-filter-row + .gg-filter-row { margin-top:8px; }
/* A 34 px pill inside a 44 px tap target (owner 2026-10-16): the 5 px transparent border is the extra
   touch area, the background stops at the padding box, the 1 px ring is an inset shadow, and the
   negative margin keeps the pills exactly where the 34 px ones were. */
.gg-chip { appearance:none; box-sizing:border-box; height:44px; min-width:44px; margin:-5px; padding:0 13px; border-radius:999px; border:5px solid transparent; background:#fff; background-clip:padding-box; box-shadow:inset 0 0 0 1px #e5e5ea; color:#3a3a3c; font-family:inherit; font-size:13px; font-weight:600; line-height:16px; cursor:pointer; white-space:nowrap; }
.gg-chip[aria-pressed="true"] { background-color:#1d1d1f; color:#fff; box-shadow:inset 0 0 0 1px #1d1d1f; }
.gg-chip:hover { box-shadow:inset 0 0 0 1px rgba(30,29,26,.38); }
.gg-chip:focus-visible { outline:2px solid var(--color-focus); outline-offset:-3px; }
@media (forced-colors: active) { .gg-chip { outline:1px solid ButtonText; outline-offset:-6px; } }
.gg-btn:focus-visible,.gg-diagnostic-toggle:focus-visible,.gg-place a:focus-visible { outline:2px solid var(--color-focus); outline-offset:2px; }
.gg-feed { padding-top:9px; }
.gg-day { display:flex; align-items:center; gap:8px; margin:18px 0 10px; font-size:14px; font-weight:700; line-height:20px; color:#3a3a3c; scroll-margin-top:calc(var(--gg-nav-offset, 0px) + 110px); }
.gg-day-rel { display:inline-flex; align-items:center; height:22px; padding:0 7px; border-radius:6px; font-size:12px; font-weight:700; background:var(--color-ink); color:var(--color-surface); }
.gg-day-rel.is-today { background:var(--color-accent); }
.gg-card { width:100%; padding:16px; margin-bottom:12px; border:1px solid #e8e8ed; border-radius:18px; background:#fff; box-shadow:0 1px 2px rgba(0,0,0,.03),0 8px 24px rgba(28,25,23,.04); transition:transform 160ms ease,box-shadow 160ms ease; }
.gg-card-top { display:flex; align-items:center; justify-content:space-between; gap:10px; min-height:28px; }
.gg-time { flex-shrink:0; font-size:16px; font-weight:900; line-height:20px; letter-spacing:-.02em; font-variant-numeric:tabular-nums; color:#1d1d1f; }
.gg-time.is-unknown { font-size:12px; font-weight:600; color:#86868b; }
/* A deadline-only giveaway leads with its sign-up deadline instead of an event time; its badges
   move to their own line rather than squeeze the longer date. */
.gg-card-top.is-deadline { flex-wrap:wrap; row-gap:6px; }
.gg-card-top.is-deadline .gg-card-badges { margin-left:auto; }
.gg-time.is-deadline { flex-shrink:1; min-width:0; font-size:13px; font-weight:800; line-height:18px; letter-spacing:-.01em; color:#9f1239; word-break:keep-all; overflow-wrap:anywhere; }
.gg-time.is-deadline.is-closed { color:#86868b; }
.gg-card-badges { min-width:0; display:flex; align-items:center; justify-content:flex-end; flex-wrap:wrap; gap:6px; }
.gg-food-primary,.gg-reg-badge { display:inline-flex; align-items:center; height:28px; padding:0 9px; border-radius:999px; border:1px solid; font-size:12px; font-weight:700; line-height:16px; max-width:100%; }
.gg-food-primary { background:#fff1f2; border-color:#fecdd3; color:#be123c; }
.gg-food-primary span { overflow:hidden; white-space:nowrap; text-overflow:ellipsis; max-width:22em; }
.gg-food-primary.is-snack { background:#fff7ed; border-color:#fed7aa; color:#c2410c; }
.gg-food-primary.is-refreshment { background:#ecfdf5; border-color:#a7f3d0; color:#047857; }
/* Food stated only in an attached poster: a quieter part of the same badge, never ellipsized. */
.gg-food-primary .gg-food-source { flex-shrink:0; max-width:none; overflow:visible; margin-left:4px; font-weight:500; }
/* A giveaway (prize draw or gift): its own hue, apart from every food colour, and always labelled. */
.gg-gift-badge { display:inline-flex; align-items:center; gap:2px; height:28px; padding:0 9px; border-radius:999px; border:1px solid #ddd6fe; background:#f5f3ff; color:#6d28d9; font-size:12px; font-weight:700; line-height:16px; white-space:nowrap; }
.gg-reg-badge { background:#f3f0ea; border-color:var(--color-divider); color:var(--color-ink); }
.gg-reg-badge.is-free { background:#f0fdf4; border-color:#bbf7d0; color:#166534; }
.gg-title { margin-top:10px; font-size:17px; font-weight:700; line-height:24px; letter-spacing:-.025em; color:#1d1d1f; word-break:keep-all; overflow-wrap:anywhere; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.gg-place { margin-top:5px; font-size:13px; font-weight:500; line-height:20px; color:#515154; overflow-wrap:anywhere; }
.gg-place.is-unknown { color:#86868b; }
.gg-place a { color:var(--color-accent); font-size:12px; font-weight:600; text-decoration:none; white-space:nowrap; }
.gg-place a:hover { text-decoration:underline; }
.gg-giveaway { margin-top:7px; font-size:13px; font-weight:600; line-height:19px; color:#5b21b6; word-break:keep-all; overflow-wrap:anywhere; }
.gg-eligibility,.gg-organizer { margin-top:7px; font-size:12px; font-weight:500; line-height:18px; color:#6e6e73; overflow-wrap:anywhere; }
.gg-deadline { margin-top:8px; font-size:13px; font-weight:700; line-height:18px; color:#9f1239; }
.gg-deadline.is-urgent,.gg-deadline.is-soft { display:inline-flex; padding:6px 8px; border-radius:8px; background:#fef2f2; color:#b91c1c; }
.gg-deadline.is-soft { background:#f5f5f7; color:#86868b; }
.gg-summary { margin-top:9px; font-size:13.5px; font-weight:400; line-height:21px; letter-spacing:-.01em; color:#3a3a3c; word-break:keep-all; overflow-wrap:anywhere; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; overflow:hidden; }
.gg-actions { margin-top:12px; display:flex; flex-wrap:wrap; gap:8px; }
.gg-btn { height:40px; display:inline-flex; align-items:center; justify-content:center; padding:0 13px; border-radius:10px; font-size:13px; font-weight:700; text-decoration:none; background:#fff; border:1px solid #d2d2d7; color:#1d1d1f; }
.gg-btn--primary { background:#1d1d1f; border-color:#1d1d1f; color:#fff; }
.gg-source { margin-top:10px; font-size:12px; line-height:16px; color:var(--color-ink-muted); }
.gg-state { margin-top:28px; padding:28px 20px; border:1px dashed #d2d2d7; border-radius:18px; font-size:13px; line-height:20px; color:#6e6e73; text-align:center; overflow-wrap:anywhere; }
.gg-state strong { display:block; font-size:15px; font-weight:700; line-height:22px; color:#1d1d1f; margin-bottom:6px; }
.gg-state button { margin-top:12px; font:inherit; padding:8px 14px; border:1px solid #d2d2d7; border-radius:10px; background:#fff; cursor:pointer; }
.gg-state code { display:block; margin-top:12px; font-size:11px; text-align:left; }
/* While the hub is still loading (its skeletons are showing) it takes the first screen, so the footer
   starts below it and does not jump when the list lands (owner 2026-10-16, layout shift). */
#ggongbabFeed:has(.gg-skeleton) { min-height:100vh; }
.gg-skeleton { height:128px; border-radius:18px; margin-bottom:12px; background:linear-gradient(90deg,#f2f2f7,#fafafa,#f2f2f7); background-size:200% 100%; animation:gg-shimmer 1.4s ease infinite; }
@keyframes gg-shimmer { from { background-position:200% 0; } to { background-position:-200% 0; } }
/* What the list holds and when it was published: quiet source metadata, not a status badge. */
.gg-feed-note { margin:6px 0 2px; padding:10px 12px; border-radius:12px; background:var(--color-surface-muted); border:1px solid var(--color-divider); font-size:12px; line-height:18px; color:var(--color-ink-muted); word-break:keep-all; overflow-wrap:anywhere; }
.gg-updated { margin-top:2px; font-weight:700; font-variant-numeric:tabular-nums; }
.gg-diagnostic-toggle { position:fixed; right:12px; bottom:12px; z-index:20000; font:700 11px/16px 'Noto Sans KR',sans-serif; padding:6px 9px; border:0; border-radius:999px; background:#111827; color:#fff; cursor:pointer; }
.gg-diagnostic-toggle.is-fixture { background:#7c3aed; }
.gg-diagnostic-panel { position:fixed; right:12px; bottom:48px; z-index:20000; width:calc(100vw - 24px); max-width:320px; max-height:65vh; overflow:auto; padding:16px; border:1px solid #e5e5ea; border-radius:14px; background:#fff; box-shadow:0 8px 30px #0002; font-size:12px; }
.gg-diagnostic-panel dl { display:grid; grid-template-columns:1fr auto; gap:6px; }
.gg-diagnostic-panel dt { color:#6e6e73; }
.gg-diagnostic-panel dd { font-variant-numeric:tabular-nums; font-weight:700; }
/* Past listings: below the live list, muted and flat. No card shadow, accent, food colour or
   primary button, so an ended listing never reads as something to sign up for. */
.gg-archive { margin-top:36px; padding-top:20px; border-top:1px dashed rgba(30,29,26,.22); }
.gg-archive-title { font-size:17px; font-weight:800; line-height:24px; letter-spacing:-.02em; color:#3d3935; }
.gg-archive-lead { margin-top:4px; font-size:13px; line-height:20px; color:var(--color-ink-muted); word-break:keep-all; overflow-wrap:anywhere; }
.gg-archive-state { margin-top:12px; font-size:13px; line-height:20px; color:var(--color-ink-muted); word-break:keep-all; overflow-wrap:anywhere; }
.gg-past-list { list-style:none; margin:12px 0 0; padding:0; }
.gg-past { min-width:0; padding:12px 14px 10px; border-radius:14px; background:var(--color-surface-muted); border:1px solid var(--color-divider); }
.gg-past + .gg-past { margin-top:8px; }
.gg-past-top { display:flex; flex-wrap:wrap; align-items:center; gap:4px 8px; font-size:12px; line-height:18px; color:var(--color-ink-muted); }
.gg-past-badge { display:inline-flex; align-items:center; height:20px; padding:0 7px; border-radius:6px; border:1px dashed rgba(30,29,26,.35); font-weight:800; color:var(--color-ink-muted); }
.gg-past-gift { display:inline-flex; align-items:center; gap:2px; height:20px; padding:0 7px; border-radius:6px; border:1px solid var(--color-divider); font-weight:700; color:var(--color-ink-muted); }
.gg-past-when { font-weight:700; font-variant-numeric:tabular-nums; }
.gg-past-title { margin-top:4px; font-size:15px; font-weight:700; line-height:22px; letter-spacing:-.02em; color:#3d3935; word-break:keep-all; overflow-wrap:anywhere; }
.gg-past-meta,.gg-past-note { margin-top:2px; font-size:12px; line-height:18px; color:var(--color-ink-muted); word-break:keep-all; overflow-wrap:anywhere; }
.gg-past-link { display:inline-flex; align-items:center; gap:4px; min-height:44px; font-size:13px; font-weight:700; color:var(--color-ink); text-decoration:underline; text-underline-offset:3px; }
.gg-archive-more { margin-top:10px; min-height:44px; padding:0 14px; border-radius:10px; border:1px dashed rgba(30,29,26,.3); background:transparent; font-family:inherit; font-size:13px; font-weight:700; line-height:16px; color:var(--color-ink); cursor:pointer; }
.gg-past-link:focus-visible,.gg-archive-more:focus-visible { outline:2px solid var(--color-focus); outline-offset:2px; }
.gg-sr { position:absolute; width:1px; height:1px; margin:-1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; }
.gg-choose { margin-top:32px; padding:18px 18px 16px; border-top:1px solid var(--color-divider); }
.gg-choose-title { font-size:16px; font-weight:800; line-height:22px; letter-spacing:-.02em; color:var(--color-ink); }
.gg-choose-link { display:inline-flex; align-items:center; min-height:44px; margin-top:6px; font-size:14px; font-weight:800; color:var(--color-accent); text-decoration:none; }
.gg-choose-link:hover { text-decoration:underline; text-underline-offset:4px; }
.gg-layout-grid { pointer-events:none; position:fixed; inset:0; z-index:19000; background-image:linear-gradient(#6366f10b 1px,transparent 1px),linear-gradient(90deg,#6366f10b 1px,transparent 1px); background-size:8px 8px; }
@media(min-width:720px) { .ggongbab-page-wrap { padding-left:24px; padding-right:24px; } .gg-filters { margin-left:-24px; margin-right:-24px; padding-left:24px; padding-right:24px; } .gg-hero h1 { font-size:36px; line-height:43px; } .km-grid { grid-template-columns:1fr 1fr; } }
@media(hover:hover) and (min-width:720px) { .gg-card:hover { transform:translateY(-1px); box-shadow:0 2px 4px rgba(0,0,0,.04),0 10px 30px rgba(28,25,23,.065); } }
@media(max-width:320px) { .gg-btn { width:100%; } .gg-chip { padding:0 9px; } .gg-card-top { align-items:flex-start; } }
@media(prefers-reduced-motion:reduce) { .gg-skeleton { animation:none; } .gg-card { transition:none; } .gg-card:hover { transform:none; } html { scroll-behavior:auto; } }
/* Campus food news follows live opportunities; plain rows, independent of cards. */
.gg-news { margin: 2rem 0; padding-top: 1.5rem; border-top: 1px solid var(--color-divider); }
.gg-news h2 { margin: 0 0 1rem; font-size: 1.15rem; }
.gg-news-list { list-style: none; margin: 0; padding: 0; }
.gg-news-row { display: grid; grid-template-columns: 8.5rem minmax(0, 1fr); gap: .5rem 1rem; padding: 1rem 0; border-bottom: 1px solid var(--color-divider); }
.gg-news-row time, .gg-news-source, .gg-news-state { font-size: .83rem; color: var(--color-ink-muted); }
.gg-news-facts { min-width: 0; overflow-wrap: anywhere; }
.gg-news-facts h3 { margin: 0 0 .35rem; font-size: 1rem; line-height: 1.5; }
.gg-news-facts p { margin: .25rem 0; font-size: .9rem; line-height: 1.6; }
.gg-news-source { display: inline-block; margin-top: .3rem; }
@media (max-width: 600px) { .gg-news-row { grid-template-columns: minmax(0, 1fr); gap: .4rem; } }
