@font-face {
  font-family: "DM Sans";
  src: url("../fonts/dm-sans-400.woff2") format("woff2");
  font-weight: 400;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "DM Sans";
  src: url("../fonts/dm-sans-500.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "DM Sans";
  src: url("../fonts/dm-sans-700.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Space Grotesk";
  src: url("../fonts/space-grotesk-500.woff2") format("woff2");
  font-weight: 500;
  font-style: normal;
  font-display: swap;
}

@font-face {
  font-family: "Space Grotesk";
  src: url("../fonts/space-grotesk-700.woff2") format("woff2");
  font-weight: 700;
  font-style: normal;
  font-display: swap;
}

:root {
  --font-body: "DM Sans", sans-serif;
  --font-display: "Space Grotesk", sans-serif;
  --ink-rgb: 24 52 43;
  --ink: rgb(var(--ink-rgb));
  --cream: #f7f5ef;
  --lime: #d5e86c;
  --coral: #f18467;
  --surface: #fff;
  --line: rgb(var(--ink-rgb) / .12);
  --muted: rgb(var(--ink-rgb) / .55);
  --section-space: 4rem;
  --card-space: 1.5rem;
  --content-gap: 1.5rem;
  --calendar-row-space: 1.5rem;
  --calendar-list-space: 1.25rem;
  --nutrition-value-size: clamp(.9rem, 2vw, 1.15rem);
  --nutrition-label-size: clamp(.52rem, 1vw, .62rem);
}

.font-sans { font-family: var(--font-body); }
.font-display,
.display { font-family: var(--font-display); }
.text-ink { color: var(--ink); }
.text-ink\/45 { color: rgb(var(--ink-rgb) / .45); }
.text-ink\/50 { color: rgb(var(--ink-rgb) / .5); }
.text-ink\/55 { color: rgb(var(--ink-rgb) / .55); }
.text-ink\/60 { color: rgb(var(--ink-rgb) / .6); }
.text-ink\/65 { color: rgb(var(--ink-rgb) / .65); }
.text-lime { color: var(--lime); }
.text-coral { color: var(--coral); }

.bg-ink { background-color: var(--ink); }
.bg-ink\/10 { background-color: rgb(var(--ink-rgb) / .1); }
.bg-cream { background-color: var(--cream); }
.bg-lime { background-color: var(--lime); }
.bg-coral { background-color: var(--coral); }

.border-ink { border-color: var(--ink); }
.border-ink\/10 { border-color: rgb(var(--ink-rgb) / .1); }
.border-ink\/15 { border-color: rgb(var(--ink-rgb) / .15); }

/* Tailwind CDN cannot generate these custom color states without a config. */
.hover\:text-coral:hover { color: var(--coral); }
.hover\:bg-coral:hover { background-color: var(--coral); }
.hover\:bg-ink:hover { background-color: var(--ink); }

/* 3. Base and form controls ------------------------------------------------ */

*,
*::before,
*::after {
  box-sizing: border-box;
  scrollbar-width: thin;
  scrollbar-color: rgb(var(--ink-rgb) / .22) transparent;
}

*::-webkit-scrollbar { width: 6px; height: 6px; }
*::-webkit-scrollbar-track { background: transparent; }
*::-webkit-scrollbar-thumb {
  border-radius: 999px;
  background: rgb(var(--ink-rgb) / .22);
}
*::-webkit-scrollbar-thumb:hover { background: var(--coral); }

html { scroll-behavior: smooth; }

html,
body { overflow-x: clip; }

body {
  margin: 0;
  background: var(--cream);
  color: var(--ink);
  font-family: var(--font-body);
}

img {
  display: block;
  height: auto !important;
  aspect-ratio: 3 / 2;
  object-fit: cover;
}

button,
input,
select,
textarea { max-width: 100%; }

input:not([type="checkbox"]):not([type="file"]),
textarea,
select {
  border: 1px solid var(--line);
  background: var(--surface) !important;
  transition: border-color .2s ease, box-shadow .2s ease;
}

input:not([type="checkbox"]):not([type="file"]):hover,
textarea:hover,
select:hover,
input:not([type="checkbox"]):not([type="file"]):focus,
textarea:focus,
select:focus {
  border-color: var(--ink) !important;
  outline: none;
  box-shadow: none;
}

input:not([type="checkbox"]):not([type="file"]),
select,
input[type="file"] { height: 3rem; }

input[type="file"] {
  width: 100%;
  border: 1px solid var(--line);
  border-radius: .75rem;
  background: var(--cream);
  color: var(--ink);
  padding: .62rem .8rem;
  font: inherit;
  font-size: .78rem;
  line-height: 1.5rem;
  transition: border-color .2s ease, box-shadow .2s ease;
}

input[type="file"]::file-selector-button {
  margin-right: .55rem;
  border: 0;
  border-radius: .45rem;
  background: var(--cream);
  color: var(--ink);
  padding: .22rem .55rem;
  font: inherit;
  line-height: 1.25rem;
  cursor: pointer;
}

input[type="file"]:hover,
input[type="file"]:focus {
  border-color: var(--ink);
  outline: none;
  box-shadow: none;
}

textarea {
  height: 5.5rem;
  min-height: 5.5rem;
  max-height: 5.5rem;
  line-height: 1.35rem;
  resize: none;
}

/* 4. Shared layout and navigation ---------------------------------------- */

.page-wrap {
  width: 100%;
  max-width: 80rem;
  margin: auto;
  padding-right: 1.5rem;
  padding-left: 1.5rem;
}

.site-nav {
  position: relative;
  z-index: 40;
}

.site-nav-cta {
  flex: 0 0 auto;
  white-space: nowrap;
}

.site-nav-toggle,
.site-nav-mobile { display: none; }

.nav-link { transition: color .2s ease; }
.nav-link:hover { color: var(--coral); }

nav > a[href="pengaduan.html"] {
  transition: background-color .2s ease, color .2s ease;
}

nav > a[href="pengaduan.html"]:hover {
  background-color: var(--coral) !important;
  color: #fff !important;
}

.site-footer {
  margin-top: 0;
  border-top: 1px solid var(--line);
  padding: 2rem 1.5rem;
}

.grain {
  background-color: var(--ink);
  background-image: radial-gradient(#ffffff14 .7px, transparent .7px);
  background-size: 8px 8px;
}

/* 5. Shared components ----------------------------------------------------- */

.soft-card {
  border: 1px solid var(--line);
  border-radius: 1.5rem;
  background: var(--surface);
  padding: var(--card-space);
}

.content-card { padding: var(--card-space); }

.menu-card,
.lift,
.soft-card { transition: none; }

.menu-card:hover,
.lift:hover,
.soft-card:hover {
  transform: none;
  box-shadow: none;
}

.menu-card,
.soft-card,
main > section.page-wrap > .bg-white { border: 1px solid var(--line); }

.soft-card.menu-card { padding: 0; }
.menu-card > .p-5,
.menu-card > .p-6,
.menu-card > .p-7 { padding: var(--card-space); }
.menu-card h3 { line-height: 1.15; }

.eyebrow {
  font-size: .7rem;
  font-weight: 700;
  letter-spacing: .2em;
  text-transform: uppercase;
}

.explore-card { gap: var(--content-gap); }

.explore-card > a {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  flex: 0 0 auto;
}

.map-frame {
  position: relative;
  min-height: 300px;
  padding: var(--card-space) !important;
  overflow: hidden;
  background: linear-gradient(135deg, #dfe5c2, #c8d7c0);
}

.map-frame::before,
.map-frame::after {
  position: absolute;
  top: 24%;
  left: -10%;
  width: 120%;
  height: 55%;
  border: 2px solid #fff8;
  border-radius: 50%;
  content: "";
  transform: rotate(-18deg);
}

.map-frame::after {
  top: 42%;
  left: 12%;
  width: 80%;
  height: 35%;
  transform: rotate(30deg);
}

/* 6. Home, menu, and content-specific components -------------------------- */

.hero-section {
  padding-right: 0 !important;
  padding-left: 0 !important;
  padding-top: clamp(3.25rem, 7vw, 5rem) !important;
  padding-bottom: clamp(3.25rem, 7vw, 5rem) !important;
}

.hero-section > .page-wrap {
  padding-right: 1.5rem;
  padding-left: 1.5rem;
}

.hero-section .page-wrap > * { min-width: 0; }

.hero-orb {
  position: absolute;
  z-index: 0;
  top: -1.25rem;
  right: -1.25rem;
  width: 6rem;
  height: 6rem;
  border-radius: 9999px;
  background: var(--lime);
}

.hero-meal-card {
  max-width: 88%;
  margin-left: auto;
  background: #e5e8bf;
}

.home-page .hero-meal-card { background: #e5e8bf; }

.home-metrics {
  min-width: 0;
  overflow: hidden !important;
}

.home-metrics > * { min-width: 0; }

.nutrition-grid {
  display: grid;
  grid-template-columns: repeat(2, minmax(0, 1fr));
  gap: .6rem;
}

.nutrition-item {
  display: flex;
  min-width: 0;
  min-height: 4.25rem;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  border-radius: 1rem;
  background: var(--cream);
  padding: .75rem 1rem;
  text-align: center;
}

.nutrition-item strong {
  display: block;
  max-width: 100%;
  font-family: var(--font-display);
  font-size: var(--nutrition-value-size);
  line-height: 1.1;
  overflow-wrap: anywhere;
  white-space: nowrap;
}

.nutrition-item span {
  display: block;
  max-width: 100%;
  margin-top: .3rem;
  color: rgb(var(--ink-rgb) / .53);
  font-size: var(--nutrition-label-size);
  font-weight: 700;
  letter-spacing: .02em;
  line-height: 1.15;
  overflow-wrap: normal;
  white-space: nowrap;
  text-transform: uppercase;
}

.nutrition-item.highlight {
  background: var(--cream);
  color: var(--ink);
}

.nutrition-item.highlight span { color: rgb(var(--ink-rgb) / .53); }
.recipe-components { word-spacing: normal; }

.single-row-nutrition,
.home-page .nutrition-grid {
  display: flex !important;
  flex-wrap: nowrap;
  gap: .5rem;
  width: 100%;
  max-width: 100%;
  overflow: visible;
}

.single-row-nutrition .nutrition-item,
.home-page .nutrition-item {
  min-width: 0;
  flex: 1 1 0;
  min-height: 4rem;
  padding: .6rem .45rem;
}

.single-row-nutrition .nutrition-item strong,
.home-page .nutrition-item strong {
  font-size: var(--nutrition-value-size);
}

.single-row-nutrition .nutrition-item span,
.home-page .nutrition-item span {
  font-size: var(--nutrition-label-size);
}

.recipe-nutrition {
  display: grid !important;
  width: 100%;
  grid-template-columns: repeat(4, minmax(0, 1fr));
  gap: .35rem;
  overflow: visible;
}

.recipe-nutrition .nutrition-item {
  min-width: 0;
  min-height: 4.1rem;
  padding: .7rem .35rem;
}

.recipe-nutrition .nutrition-item strong {
  font-size: var(--nutrition-value-size);
}

.recipe-nutrition .nutrition-item span {
  font-size: var(--nutrition-label-size);
}

.home-page section[class*="bg-white/50"] {
  border-top: 0;
  border-bottom: 0;
  background: transparent;
}

.home-page main > section:nth-child(2) {
  border-top: 1px solid var(--line);
  border-bottom: 1px solid var(--line);
  background: rgb(255 255 255 / .5);
}

[class*="bg-white/70"] { background: var(--surface) !important; }

.recipe-row {
  position: relative;
  row-gap: var(--content-gap) !important;
  border-top: 1px solid var(--line);
  padding: var(--calendar-row-space) 0;
}

.recipe-row:first-child {
  border-top: 0;
  padding-top: 0;
}

.recipe-row:last-child { padding-bottom: 0; }

.menu-calendar-list {
  min-width: 0;
  margin-top: clamp(1.5rem, 3vw, 2rem) !important;
  padding: 1rem var(--calendar-list-space) !important;
}

.menu-calendar-list .recipe-row {
  min-width: 0;
  margin: 0;
}

.menu-calendar-list .recipe-row > div:nth-child(2) {
  row-gap: 1rem;
}

.menu-calendar-list .recipe-row .nutrition-grid {
  margin-top: 0 !important;
}

.menu-calendar-section > .flex {
  gap: var(--content-gap);
}

.menu-calendar-section > .flex > div:first-child {
  min-width: 0;
}

.menu-period-tabs {
  flex: 0 0 auto;
  align-self: flex-end;
}

main > section.page-wrap {
  padding-top: var(--section-space) !important;
  padding-bottom: var(--section-space) !important;
}

main > section.page-wrap + section.page-wrap,
.menu-selection-section + .menu-calendar-section { padding-top: 0 !important; }

/* Calendar spacing is intentionally shared across menu and kitchen pages. */
main > section.menu-calendar-section {
  padding-top: 2.5rem !important;
  padding-bottom: 2.5rem !important;
}

main > section.page-wrap .grid { row-gap: var(--content-gap); }

.complaint-page #ticketInput {
  border: 1px solid #fff !important;
}

.complaint-page #ticketInput:hover,
.complaint-page #ticketInput:focus { border-color: var(--ink) !important; }

.complaint-page #ticketInput,
.complaint-page #trackButton,
#showMenu { height: 3rem; }

.complaint-page #trackButton {
  display: inline-flex;
  align-items: center;
  justify-content: center;
}

.dash-table-wrap {
  max-width: 100%;
  overscroll-behavior-inline: contain;
  scrollbar-color: var(--ink) transparent;
  -webkit-overflow-scrolling: touch;
}

/* 7. Responsive rules ----------------------------------------------------- */

@media (min-width: 1024px) {
  .page-wrap,
  .hero-section > .page-wrap {
    padding-right: 2rem;
    padding-left: 2rem;
  }

  .site-footer {
    padding-right: 2rem;
    padding-left: 2rem;
  }
}

@media (max-width: 1023px) {
  main > section:not(.page-wrap) {
    padding-right: 0 !important;
    padding-left: 0 !important;
  }

  main > section:not(.page-wrap) > .page-wrap,
  .hero-section > .page-wrap {
    padding-right: 1.5rem;
    padding-left: 1.5rem;
  }

  .hero-meal-card > .absolute { display: none; }
}

@media (max-width: 767px) {
  :root {
    --section-space: 3rem;
    --card-space: 1.25rem;
    --content-gap: 1rem;
    --calendar-row-space: 1.5rem;
    --calendar-list-space: 1rem;
  }

  .page-wrap {
    width: 100%;
    padding-right: 1rem;
    padding-left: 1rem;
  }

  main > section:not(.page-wrap) {
    padding-right: 0 !important;
    padding-left: 0 !important;
  }

  main > section:not(.page-wrap):not(.hero-section) {
    padding-top: 0 !important;
    padding-bottom: 0 !important;
  }

  main > section:not(.page-wrap) > .page-wrap,
  .hero-section > .page-wrap {
    padding-right: 1rem;
    padding-left: 1rem;
  }

  main > section:not(.page-wrap):not(.hero-section) > .page-wrap {
    padding-top: 2.75rem !important;
    padding-bottom: 2.75rem !important;
  }

  main > section.page-wrap {
    padding-right: 1rem !important;
    padding-left: 1rem !important;
  }

  .site-footer {
    padding-right: 0;
    padding-left: 0;
  }

  .site-nav {
    gap: .75rem;
    padding-right: 1rem !important;
    padding-left: 1rem !important;
  }

  /* Hide the desktop complaint CTA before JS adds .site-nav/.site-nav-cta.
     This prevents a flash during the initial mobile render. */
  nav > a[href="pengaduan.html"] { display: none; }

  .site-nav-toggle {
    display: inline-flex;
    flex: 0 0 auto;
    min-height: 2.65rem;
    align-items: center;
    justify-content: center;
    border: 1px solid var(--line);
    border-radius: 999px;
    background: var(--surface);
    color: var(--ink);
    padding: .65rem .8rem;
    font: inherit;
    font-size: .75rem;
    font-weight: 700;
    line-height: 1;
    cursor: pointer;
  }

  .site-nav-toggle:hover,
  .site-nav.is-open .site-nav-toggle {
    border-color: var(--ink);
    background: var(--ink);
    color: #fff;
  }

  .site-nav-mobile {
    position: absolute;
    top: calc(100% - .35rem);
    right: 1rem;
    left: 1rem;
    display: grid;
    gap: .2rem;
    border: 1px solid var(--line);
    border-radius: 1rem;
    background: var(--surface);
    padding: .45rem;
    box-shadow: 0 1rem 2.5rem rgb(var(--ink-rgb) / .14);
    opacity: 0;
    pointer-events: none;
    transform: translateY(-.35rem);
    transition: opacity .18s ease, transform .18s ease;
  }

  .site-nav.is-open .site-nav-mobile {
    opacity: 1;
    pointer-events: auto;
    transform: translateY(0);
  }

  .site-nav-mobile-link {
    border-radius: .7rem;
    color: var(--ink);
    padding: .75rem .8rem;
    font-size: .82rem;
    font-weight: 600;
    text-decoration: none;
  }

  .site-nav-mobile-link:hover,
  .site-nav-mobile-link.is-active {
    background: var(--cream);
    color: var(--coral);
  }

  .site-nav-mobile-cta {
    display: block;
    border-radius: .7rem;
    background: var(--ink);
    color: #fff;
    padding: .78rem .8rem;
    font-size: .82rem;
    font-weight: 700;
    text-align: center;
    text-decoration: none;
  }

  .site-nav-mobile-cta:hover { background: var(--coral); }

  .hero-meal-card { max-width: 100%; }

  .recipe-row {
    row-gap: 1.25rem !important;
    padding: var(--calendar-row-space) 0;
  }

  .menu-period-tabs {
    width: 100%;
    display: grid !important;
    grid-template-columns: repeat(2, minmax(0, 1fr));
    border-radius: .9rem;
  }

  main > section.menu-calendar-section {
    padding-top: 2rem !important;
    padding-bottom: 2rem !important;
  }

  .menu-calendar-section > .flex { gap: 1.25rem; }

  .menu-calendar-section .recipe-row { padding: var(--calendar-row-space) 0; }

  .menu-calendar-section .recipe-row > div:first-child {
    padding-right: .25rem;
  }

  .menu-period-tabs button {
    width: 100%;
    min-width: 0;
    padding-right: .5rem;
    padding-left: .5rem;
    white-space: nowrap;
  }

  .explore-card > a {
    align-self: flex-start;
    margin-top: var(--content-gap) !important;
  }

  .home-feedback > div {
    display: flex;
    flex-direction: column;
    gap: 1.25rem;
    padding: var(--card-space);
  }

  .home-feedback > div > a {
    width: 100%;
    margin-top: 0;
    text-align: center;
  }
}

@media (max-width: 360px) {
  .page-wrap { padding-right: 1rem; padding-left: 1rem; }
  .site-nav-cta { padding-right: .75rem !important; padding-left: .75rem !important; }
  .site-nav-toggle { padding-right: .65rem; padding-left: .65rem; }
}
