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

    body {
      font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
      background: #FDFCFA;
      color: #1A1A1A;
      -webkit-font-smoothing: antialiased;
      -moz-osx-font-smoothing: grayscale;
    }

    .layout { display: flex; min-height: 100vh; }

    /* ─── Sidebar ─── */
    .sidebar {
      width: 230px;
      min-width: 230px;
      padding: 36px 28px;
      position: fixed;
      top: 0; left: 0; bottom: 0;
      overflow-y: auto;
      background: #F5F4F0;
      border-right: 1px solid #E8E6E1;
      display: flex;
      flex-direction: column;
      z-index: 40;
      transition: transform 0.3s ease;
    }
    .sidebar::-webkit-scrollbar { width: 0; }

    .brand {
      font-size: 14px;
      font-weight: 700;
      letter-spacing: 0.18em;
      margin-bottom: 44px;
      color: #1A1A1A;
      text-transform: uppercase;
    }

    .filter-section { margin-bottom: 32px; }

    .filter-title {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.14em;
      text-transform: uppercase;
      color: #A0A0A0;
      margin-bottom: 14px;
      cursor: pointer;
      display: flex;
      justify-content: space-between;
      align-items: center;
    }

    .filter-list {
      list-style: none;
      max-height: 0;
      overflow: hidden;
      transition: max-height 0.25s ease;
    }
    .filter-section.open .filter-list {
      max-height: 240px;
      overflow-y: auto;
    }
    .filter-section.open .filter-list::-webkit-scrollbar { width: 3px; }
    .filter-section.open .filter-list::-webkit-scrollbar-thumb { background: #D0D0D0; border-radius: 3px; }
    body.dark .filter-section.open .filter-list::-webkit-scrollbar-thumb { background: #3A3836; }

    .filter-search {
      width: 100%;
      padding: 6px 10px;
      border: 1px solid #E0DDD8;
      border-radius: 6px;
      font-size: 12px;
      font-family: inherit;
      background: #FDFCFA;
      color: #1A1A1A;
      margin-bottom: 8px;
      outline: none;
      transition: border-color 0.15s;
      max-height: 0;
      overflow: hidden;
      opacity: 0;
      margin: 0;
      padding: 0;
      border: none;
      transition: all 0.2s ease;
    }
    .filter-section.open .filter-search {
      max-height: 40px;
      opacity: 1;
      padding: 6px 10px;
      border: 1px solid #E0DDD8;
      margin-bottom: 8px;
    }
    .filter-search:focus { border-color: #999; }
    body.dark .filter-search { background: #1A1918; border-color: #2A2826; color: #C8C5BE; }
    body.dark .filter-search:focus { border-color: #555; }

    .filter-chevron::after {
      content: '\203A';
      font-size: 14px;
      color: #BBB;
      transition: transform 0.2s ease;
      display: inline-block;
    }
    .filter-section.open .filter-chevron::after {
      transform: rotate(90deg);
    }

    .filter-item {
      padding: 5px 0;
      font-size: 13px;
      color: #888;
      cursor: pointer;
      transition: color 0.15s;
      user-select: none;
      display: flex;
      align-items: center;
      gap: 8px;
    }
    .filter-item::before {
      content: '';
      width: 12px; height: 12px;
      border-radius: 3px;
      border: 1.5px solid #D0D0D0;
      background: transparent;
      transition: all 0.15s;
      flex-shrink: 0;
    }
    .filter-item:hover { color: #444; }
    .filter-item:hover::before { border-color: #AAA; }
    .filter-item.active { color: #1A1A1A; font-weight: 600; }
    .filter-item.active::before { background: #1A1A1A; border-color: #1A1A1A; }

    .sidebar-footer {
      margin-top: auto;
      padding-top: 24px;
      font-size: 10px;
      color: #C0C0C0;
      letter-spacing: 0.05em;
    }

    .clear-filters {
      display: none;
      font-size: 11px;
      color: #999;
      cursor: pointer;
      margin-bottom: 24px;
      transition: color 0.15s;
    }
    .clear-filters:hover { color: #1A1A1A; }
    .clear-filters.visible { display: block; }

    /* ─── Main ─── */
    .main {
      margin-left: 230px;
      flex: 1;
      padding: 36px 44px;
    }

    .product-count {
      font-size: 11px;
      color: #B0B0B0;
      margin-bottom: 28px;
      letter-spacing: 0.03em;
    }

    /* ─── Grid ─── */
    .product-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(230px, 1fr));
      gap: 36px 24px;
    }

    .product-card {
      cursor: pointer;
      transition: transform 0.25s ease;
      animation: cardIn 0.35s ease both;
      color: inherit;
      text-decoration: none;
    }
    .product-card:hover { transform: translateY(-5px); }
    .product-card.hidden { display: none; }

    @keyframes cardIn {
      from { opacity: 0; transform: translateY(12px); }
      to { opacity: 1; transform: translateY(0); }
    }

    .card-image {
      background: #FFFFFF;
      border-radius: 10px;
      padding: 24px 20px;
      display: flex;
      align-items: center;
      justify-content: center;
      aspect-ratio: 3 / 4;
      margin-bottom: 14px;
      transition: box-shadow 0.25s ease;
      position: relative;
      overflow: hidden;
    }
    .product-card:hover .card-image {
      box-shadow: 0 12px 40px rgba(0,0,0,0.10);
    }

    .card-image svg {
      width: 65%;
      height: auto;
      filter: drop-shadow(0 6px 16px rgba(0,0,0,0.09));
    }

    .card-image .placeholder {
      width: 60%;
      aspect-ratio: 3 / 4;
      background: #E8E6E1;
      border-radius: 6px;
    }

    .card-image img.coffee-photo {
      width: 80%;
      height: 80%;
      object-fit: contain;
      mix-blend-mode: multiply;
      transition: transform 0.1s ease-out, filter 0.3s ease;
      will-change: transform, filter;
      filter: drop-shadow(0 4px 8px rgba(0,0,0,0.08));
    }
    .product-card:hover .card-image img.coffee-photo {
      filter: drop-shadow(0 20px 30px rgba(0,0,0,0.18)) drop-shadow(0 8px 10px rgba(0,0,0,0.10));
    }
    .product-card:hover .card-image img.coffee-photo {
      filter: drop-shadow(0 10px 24px rgba(0,0,0,0.14));
    }

    .modal-image img.coffee-photo {
      width: 95%;
      max-width: 320px;
      object-fit: contain;
      mix-blend-mode: multiply;
      transition: transform 0.1s ease-out, filter 0.3s ease;
      will-change: transform;
      filter: drop-shadow(0 8px 16px rgba(0,0,0,0.10));
      cursor: grab;
    }
    .modal-image:hover img.coffee-photo {
      filter: drop-shadow(0 24px 40px rgba(0,0,0,0.18)) drop-shadow(0 10px 12px rgba(0,0,0,0.10));
    }

    .card-info { padding: 0 2px; }

    .card-roaster {
      display: block;
      font-size: 10px;
      font-weight: 500;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #B0B0B0;
      margin-bottom: 3px;
    }

    .card-name {
      display: block;
      font-size: 14px;
      font-weight: 500;
      color: #1A1A1A;
      margin-bottom: 4px;
    }

    .card-price {
      font-size: 13px;
      color: #999;
    }

    .card-rating {
      display: inline-flex;
      align-items: center;
      gap: 3px;
      font-size: 11px;
      color: #C8A55A;
      font-weight: 500;
      margin-top: 2px;
    }
    .card-rating .star { font-size: 10px; }

    .modal-rating {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      font-size: 13px;
      color: #C8A55A;
      font-weight: 500;
      margin-bottom: 10px;
    }
    .modal-rating .stars { letter-spacing: 1px; font-size: 12px; }
    .modal-rating .rating-val { color: #888; font-size: 12px; font-weight: 400; }

    .empty-state {
      grid-column: 1 / -1;
      text-align: center;
      padding: 80px 20px;
      color: #C0C0C0;
      font-size: 14px;
    }

    .load-more-wrap {
      grid-column: 1 / -1;
      display: flex;
      justify-content: center;
      padding: 32px 0 16px;
    }
    .load-more-btn {
      padding: 10px 32px;
      background: #1A1A1A;
      color: #fff;
      border: none;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 500;
      letter-spacing: 0.04em;
      cursor: pointer;
      font-family: inherit;
      transition: background 0.15s, transform 0.1s;
    }
    .load-more-btn:hover { background: #333; }
    .load-more-btn:active { transform: scale(0.98); }

    /* ─── Infinite scroll sentinel ─── */
    .scroll-sentinel {
      grid-column: 1 / -1;
      height: 80px;
      display: flex;
      align-items: center;
      justify-content: center;
    }
    .scroll-sentinel::after {
      content: '';
      width: 22px;
      height: 22px;
      border-radius: 50%;
      border: 2px solid rgba(0,0,0,0.07);
      border-top-color: rgba(0,0,0,0.28);
      animation: spin 0.75s linear infinite;
    }
    @keyframes spin { to { transform: rotate(360deg); } }

    .loading-state {
      grid-column: 1 / -1;
      text-align: center;
      padding: 80px 20px;
      color: #C0C0C0;
      font-size: 14px;
    }

    /* ─── Modal ─── */
    .modal-overlay {
      display: none;
      position: fixed;
      inset: 0;
      background: rgba(0,0,0,0.45);
      z-index: 100;
      align-items: center;
      justify-content: center;
      backdrop-filter: blur(2px);
      opacity: 0;
      transition: opacity 0.2s ease;
    }
    .modal-overlay.active { display: flex; opacity: 1; }

    .modal {
      background: #fff;
      border-radius: 18px;
      max-width: 740px;
      width: 92%;
      max-height: 88vh;
      overflow-y: auto;
      display: flex;
      flex-direction: column;
      gap: 0;
      padding: 44px;
      position: relative;
      animation: modalIn 0.25s ease;
    }

    .modal-top {
      display: flex;
      gap: 36px;
    }
    @keyframes modalIn {
      from { opacity: 0; transform: scale(0.96) translateY(10px); }
      to { opacity: 1; transform: scale(1) translateY(0); }
    }

    .modal-close {
      position: absolute;
      top: 18px; right: 22px;
      background: none;
      border: none;
      font-size: 22px;
      cursor: pointer;
      color: #BBB;
      transition: color 0.15s;
      line-height: 1;
    }
    .modal-close:hover { color: #333; }

    .modal-expand {
      position: absolute;
      top: 18px; right: 54px;
      font-size: 17px;
      line-height: 1;
      text-decoration: none;
      color: #BBB;
      cursor: pointer;
      transition: color 0.15s, transform 0.15s;
    }
    .modal-expand:hover { color: #a8662f; transform: translate(1px, -1px); }
    body.dark .modal-expand { color: #3A3836; }
    body.dark .modal-expand:hover { color: #d99a4e; }

    .modal-image {
      flex: 0 0 42%;
      display: flex;
      align-items: center;
      justify-content: center;
      background: #FAFAF8;
      border-radius: 12px;
      padding: 30px;
    }
    .modal-image svg {
      width: 85%;
      max-width: 200px;
      filter: drop-shadow(0 10px 28px rgba(0,0,0,0.1));
    }

    .modal-details {
      flex: 1;
      display: flex;
      flex-direction: column;
      justify-content: center;
      gap: 6px;
    }

    .modal-roaster {
      font-size: 11px;
      font-weight: 600;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: #999;
    }

    .modal-name {
      font-size: 26px;
      font-weight: 700;
      color: #1A1A1A;
      line-height: 1.2;
      margin-bottom: 2px;
    }

    .modal-price {
      font-size: 18px;
      color: #888;
      margin-bottom: 12px;
    }

    .modal-meta {
      display: flex;
      flex-wrap: wrap;
      gap: 6px 16px;
      font-size: 12px;
      color: #999;
      margin-bottom: 16px;
    }
    .modal-meta span { display: flex; align-items: center; gap: 4px; }
    .modal-meta .dot { width: 3px; height: 3px; border-radius: 50%; background: #ccc; }

    .modal-notes-label {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #BBB;
      margin-bottom: 8px;
    }

    .modal-notes {
      display: flex;
      flex-wrap: wrap;
      gap: 6px;
      margin-bottom: 24px;
    }

    .note-tag {
      display: inline-block;
      padding: 5px 12px;
      background: #F5F4F0;
      border-radius: 20px;
      font-size: 12px;
      color: #666;
    }

    .btn-cart {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      padding: 12px 28px;
      background: #1A1A1A;
      color: #fff;
      border: none;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 600;
      letter-spacing: 0.05em;
      cursor: pointer;
      transition: background 0.15s, transform 0.1s;
      align-self: flex-start;
    }
    .btn-cart:hover { background: #333; }
    .btn-cart:active { transform: scale(0.98); }

    /* ─── Related Products ─── */
    .modal-related {
      border-top: 1px solid #F0EEE9;
      margin-top: 32px;
      padding-top: 24px;
    }

    .modal-related-label {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: #BBB;
      margin-bottom: 14px;
    }

    .modal-related-scroll {
      display: flex;
      gap: 12px;
      overflow-x: auto;
      padding-bottom: 6px;
      scrollbar-width: none;
    }
    .modal-related-scroll::-webkit-scrollbar { display: none; }

    .related-card {
      flex: 0 0 150px;
      cursor: pointer;
      transition: transform 0.2s ease;
      color: inherit;
      text-decoration: none;
    }
    .related-card:hover { transform: translateY(-4px); }

    .related-card-img {
      background: #FAFAF8;
      border-radius: 8px;
      padding: 10px;
      width: 150px;
      height: 150px;
      display: flex;
      align-items: center;
      justify-content: center;
      margin-bottom: 8px;
      transition: box-shadow 0.2s ease;
    }
    .related-card:hover .related-card-img {
      box-shadow: 0 6px 20px rgba(0,0,0,0.07);
    }
    .related-card-img svg { width: 72%; height: auto; filter: drop-shadow(0 4px 10px rgba(0,0,0,0.08)); }
    .related-card-img img.coffee-photo { width: 80%; height: 80%; object-fit: contain; mix-blend-mode: multiply; max-height: 130px; }

    .related-card-roaster {
      font-size: 9px;
      font-weight: 500;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      color: #BBB;
      margin-bottom: 2px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .related-card-name {
      font-size: 11px;
      font-weight: 500;
      color: #333;
      margin-bottom: 2px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .related-card-price {
      font-size: 11px;
      color: #999;
    }

    /* ─── Favorites ─── */
    .card-img-wrap { position: relative; }

    .card-fav {
      position: absolute;
      top: 8px; right: 8px;
      background: rgba(255,255,255,0.88);
      border: none;
      border-radius: 50%;
      width: 30px; height: 30px;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      font-size: 15px;
      line-height: 1;
      transition: all 0.2s ease;
      opacity: 0;
      z-index: 5;
      backdrop-filter: blur(4px);
      color: #888;
      padding: 0;
    }
    .product-card:hover .card-fav { opacity: 1; }
    .card-fav.active { opacity: 1; color: #E05A5A; }
    .card-fav:hover { transform: scale(1.15); background: rgba(255,255,255,0.98); }
    .card-fav.active:hover { color: #C03A3A; }

    .fav-toggle {
      flex-shrink: 0;
      padding: 9px 14px;
      border: 1px solid #E8E6E1;
      border-radius: 8px;
      font-size: 12px;
      font-family: inherit;
      background: #fff;
      color: #888;
      cursor: pointer;
      outline: none;
      transition: all 0.15s;
      white-space: nowrap;
    }
    .fav-toggle:hover { border-color: #AAAAAA; color: #555; }
    .fav-toggle.active { background: #FFF5F5; border-color: #F0AAAA; color: #D04040; }

    /* ─── Mobile toggle ─── */
    .menu-toggle {
      display: none;
      position: fixed;
      bottom: 24px; left: 50%; transform: translateX(-50%);
      z-index: 50;
      padding: 10px 22px;
      background: #1A1A1A;
      color: #fff;
      border: none;
      border-radius: 24px;
      font-size: 13px;
      font-weight: 500;
      cursor: pointer;
      box-shadow: 0 4px 20px rgba(0,0,0,0.2);
      font-family: inherit;
    }

    .sidebar-backdrop {
      display: none;
      position: fixed;
      inset: 0;
      background: rgba(0,0,0,0.3);
      z-index: 35;
    }

    /* ─── Controls bar (search + sort) ─── */
    .controls-bar {
      display: flex;
      align-items: center;
      gap: 10px;
      margin-bottom: 18px;
    }

    .search-wrap {
      position: relative;
      flex: 1;
      max-width: 400px;
    }

    .search-input {
      width: 100%;
      padding: 9px 34px 9px 14px;
      border: 1px solid #E8E6E1;
      border-radius: 8px;
      font-size: 13px;
      font-family: inherit;
      background: #fff;
      color: #1A1A1A;
      outline: none;
      transition: border-color 0.15s;
    }
    .search-input:focus { border-color: #AAAAAA; }
    .search-input::placeholder { color: #C8C6C2; }

    .search-clear {
      position: absolute;
      right: 9px;
      top: 50%;
      transform: translateY(-50%);
      background: none;
      border: none;
      color: #C0C0C0;
      cursor: pointer;
      font-size: 20px;
      line-height: 1;
      padding: 0;
      display: none;
      transition: color 0.15s;
    }
    .search-clear.visible { display: block; }
    .search-clear:hover { color: #555; }

    .search-hint {
      position: absolute;
      right: 9px;
      top: 50%;
      transform: translateY(-50%);
      display: flex;
      align-items: center;
      gap: 2px;
      font-family: inherit;
      font-size: 11px;
      font-weight: 500;
      color: #8C8A86;
      background: #F4F2ED;
      border: 1px solid #E8E6E1;
      border-radius: 5px;
      padding: 2px 6px;
      pointer-events: none;
      transition: opacity 0.15s;
    }
    .search-hint.hidden { display: none; }

    .sort-select {
      flex-shrink: 0;
      padding: 9px 30px 9px 12px;
      border: 1px solid #E8E6E1;
      border-radius: 8px;
      font-size: 12px;
      font-family: inherit;
      background: #fff;
      color: #888;
      cursor: pointer;
      outline: none;
      transition: border-color 0.15s;
      appearance: none;
      -webkit-appearance: none;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='5'%3E%3Cpath d='M0 0l5 5 5-5z' fill='%23C0C0C0'/%3E%3C/svg%3E");
      background-repeat: no-repeat;
      background-position: right 10px center;
    }
    .sort-select:focus { border-color: #AAAAAA; }

    /* ─── View toggle ─── */
    .view-toggle {
      display: flex;
      flex-shrink: 0;
    }
    .view-btn {
      padding: 9px 11px;
      border: 1px solid #E8E6E1;
      background: #fff;
      color: #C8C6C2;
      cursor: pointer;
      font-size: 15px;
      line-height: 1;
      transition: all 0.15s;
      font-family: inherit;
    }
    .view-btn:first-child { border-radius: 8px 0 0 8px; border-right: none; }
    .view-btn:last-child  { border-radius: 0 8px 8px 0; }
    .view-btn.active { background: #F5F4F0; color: #555; border-color: #D5D3CE; }
    .view-btn:not(.active):hover { background: #FAFAF8; color: #999; }

    /* ─── List view layout ─── */
    .product-grid.list-view {
      grid-template-columns: 1fr;
      gap: 0;
      border-top: 1px solid #F0EEE9;
    }
    .product-grid.list-view .load-more-wrap {
      border-top: 1px solid #F0EEE9;
      padding: 24px 0;
    }
    .product-grid.list-view .empty-state { border-top: none; }
    .product-grid.list-view .product-card {
      animation: none;
      display: grid;
      grid-template-columns: 60px 190px 160px 1fr 56px 32px;
      align-items: center;
      gap: 16px;
      padding: 9px 6px;
      border-bottom: 1px solid #F0EEE9;
      border-radius: 0;
      transition: background 0.15s;
    }
    .product-grid.list-view .product-card:hover {
      transform: none;
      background: #FAFAF8;
    }
    .list-thumb { width: 60px; flex-shrink: 0; }
    .list-thumb .card-image {
      aspect-ratio: 1 / 1;
      padding: 6px;
      margin-bottom: 0;
      border-radius: 8px;
    }
    .list-thumb .card-image svg  { width: 80%; }
    .list-thumb .card-image img.coffee-photo { width: 100%; height: 100%; }
    .list-info { display: flex; flex-direction: column; gap: 1px; min-width: 0; }
    .list-info .card-roaster { margin-bottom: 2px; }
    .list-info .card-name { font-size: 13px; margin-bottom: 0; }
    .list-origin { font-size: 12px; color: #A8A8A8; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; }
    .list-notes  { display: flex; gap: 4px; flex-wrap: nowrap; overflow: hidden; }
    .list-notes .note-tag { font-size: 11px; padding: 3px 9px; white-space: nowrap; }
    .product-grid.list-view .card-price {
      text-align: right;
      font-size: 13px;
      color: #888;
      white-space: nowrap;
    }
    .list-fav {
      width: 32px; height: 32px;
      background: none; border: none;
      cursor: pointer;
      font-size: 15px;
      color: #DDD;
      display: flex; align-items: center; justify-content: center;
      border-radius: 50%;
      transition: all 0.15s;
      flex-shrink: 0;
    }
    .list-fav:hover { color: #E05A5A; transform: scale(1.15); }
    .list-fav.active { color: #E05A5A; }

    @media (max-width: 840px) {
      .product-grid.list-view .product-card {
        grid-template-columns: 48px 1fr 48px 28px;
      }
      .product-grid.list-view .list-origin,
      .product-grid.list-view .list-notes { display: none; }
    }

    /* ─── Responsive ─── */
    @media (max-width: 840px) {
      .sidebar { transform: translateX(-100%); }
      .sidebar.open { transform: translateX(0); }
      .sidebar-backdrop.open { display: block; }
      .main { margin-left: 0; padding: 28px 20px; }
      .menu-toggle { display: block; }
      .modal { padding: 28px; }
      .modal-top { flex-direction: column; gap: 24px; }
      .modal-image { flex: none; min-height: 200px; }
      .modal-related { margin-top: 24px; }
      .product-grid { grid-template-columns: repeat(auto-fill, minmax(160px, 1fr)); gap: 20px 16px; }
      .controls-bar { flex-wrap: wrap; }
      .search-wrap { max-width: 100%; }
    }

    /* ─── Cart ─── */
    .cart-btn {
      position: relative;
      flex-shrink: 0;
      padding: 9px 13px;
      border: 1px solid #E8E6E1;
      border-radius: 8px;
      background: #fff;
      color: #888;
      cursor: pointer;
      font-size: 15px;
      line-height: 1;
      transition: all 0.15s;
      font-family: inherit;
    }
    .cart-btn:hover { border-color: #AAAAAA; color: #555; }

    .cart-count {
      position: absolute;
      top: -6px; right: -6px;
      background: #1A1A1A;
      color: #fff;
      border-radius: 50%;
      width: 18px; height: 18px;
      font-size: 10px;
      font-weight: 700;
      display: none;
      align-items: center;
      justify-content: center;
      letter-spacing: 0;
    }
    .cart-count.visible { display: flex; }

    .cart-drawer-overlay {
      display: none;
      position: fixed;
      inset: 0;
      background: rgba(0,0,0,0.35);
      z-index: 200;
      backdrop-filter: blur(1px);
      transition: opacity 0.25s;
    }
    .cart-drawer-overlay.open { display: block; }

    .cart-drawer {
      position: fixed;
      top: 0; right: 0; bottom: 0;
      width: 380px;
      max-width: 92vw;
      background: #fff;
      z-index: 201;
      display: flex;
      flex-direction: column;
      transform: translateX(100%);
      transition: transform 0.3s cubic-bezier(0.4, 0, 0.2, 1);
      box-shadow: -4px 0 32px rgba(0,0,0,0.12);
    }
    .cart-drawer.open { transform: translateX(0); }

    .cart-header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      padding: 22px 24px;
      border-bottom: 1px solid #F0EEE9;
    }
    .cart-title {
      font-size: 15px;
      font-weight: 600;
      color: #1A1A1A;
      letter-spacing: 0.02em;
    }
    .cart-close {
      background: none; border: none;
      font-size: 22px;
      cursor: pointer;
      color: #BBB;
      transition: color 0.15s;
      line-height: 1; padding: 0;
    }
    .cart-close:hover { color: #333; }

    .cart-items {
      flex: 1;
      overflow-y: auto;
      padding: 8px 24px;
    }
    .cart-items::-webkit-scrollbar { width: 0; }

    .cart-empty {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      height: 100%;
      color: #C0C0C0;
      gap: 10px;
      font-size: 14px;
      padding-bottom: 60px;
    }
    .cart-empty-icon { font-size: 36px; }

    .cart-item {
      display: flex;
      align-items: center;
      gap: 14px;
      padding: 14px 0;
      border-bottom: 1px solid #F5F4F0;
    }
    .cart-item:last-child { border-bottom: none; }

    .cart-item-bag {
      width: 52px; height: 68px;
      background: #FAFAF8;
      border-radius: 8px;
      display: flex;
      align-items: center;
      justify-content: center;
      flex-shrink: 0;
      overflow: hidden;
    }
    .cart-item-bag svg { width: 70%; height: auto; }
    .cart-item-bag img { width: 80%; height: 80%; object-fit: contain; mix-blend-mode: multiply; }

    .cart-item-info { flex: 1; min-width: 0; }
    .cart-item-roaster {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #B0B0B0;
      margin-bottom: 2px;
    }
    .cart-item-name {
      font-size: 13px;
      font-weight: 500;
      color: #1A1A1A;
      margin-bottom: 4px;
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
    }
    .cart-item-price { font-size: 13px; color: #999; }

    .cart-qty { display: flex; align-items: center; gap: 8px; flex-shrink: 0; }
    .qty-btn {
      width: 26px; height: 26px;
      border: 1px solid #E8E6E1;
      border-radius: 50%;
      background: #fff;
      color: #666;
      font-size: 16px;
      line-height: 1;
      cursor: pointer;
      display: flex;
      align-items: center;
      justify-content: center;
      transition: all 0.15s;
      padding: 0;
      font-family: inherit;
    }
    .qty-btn:hover { border-color: #AAA; color: #1A1A1A; background: #F5F4F0; }
    .qty-num {
      font-size: 13px;
      font-weight: 500;
      color: #1A1A1A;
      min-width: 18px;
      text-align: center;
    }

    .cart-footer {
      padding: 20px 24px;
      border-top: 1px solid #F0EEE9;
      background: #FDFCFA;
    }
    .cart-subtotal {
      display: flex;
      justify-content: space-between;
      align-items: baseline;
      margin-bottom: 14px;
    }
    .cart-subtotal-label { font-size: 13px; color: #888; }
    .cart-subtotal-amt { font-size: 18px; font-weight: 700; color: #1A1A1A; }
    .cart-checkout-btn {
      display: block;
      width: 100%;
      padding: 13px;
      background: #1A1A1A;
      color: #fff;
      border: none;
      border-radius: 10px;
      font-size: 14px;
      font-weight: 600;
      letter-spacing: 0.04em;
      cursor: pointer;
      font-family: inherit;
      transition: background 0.15s, transform 0.1s;
    }
    .cart-checkout-btn:hover { background: #333; }
    .cart-checkout-btn:active { transform: scale(0.99); }

    .btn-cart.in-cart { background: #F0F0EE; color: #555; }
    .btn-cart.in-cart:hover { background: #E4E4E0; }
    .btn-cart-added {
      background: #2A6A2A !important;
      color: #fff !important;
    }

    /* ─── Dark Mode Toggle Button ─── */
    .dark-btn {
      flex-shrink: 0;
      padding: 9px 11px;
      border: 1px solid #E8E6E1;
      border-radius: 8px;
      background: #fff;
      color: #888;
      cursor: pointer;
      font-size: 14px;
      line-height: 1;
      transition: all 0.15s;
      font-family: inherit;
    }
    .dark-btn:hover { border-color: #AAAAAA; color: #555; }

    /* ─── Dark Mode ─── */
    body.dark {
      background: #0F0F0D;
      color: #E8E5DE;
    }
    body.dark .sidebar {
      background: #161614;
      border-right-color: #2A2826;
    }
    body.dark .brand { color: #E8E5DE; }
    body.dark .filter-title { color: #444; }
    body.dark .filter-item { color: #555; }
    body.dark .filter-item::before { border-color: #3A3836; }
    body.dark .filter-item:hover { color: #A0A0A0; }
    body.dark .filter-item:hover::before { border-color: #555; }
    body.dark .filter-item.active { color: #E8E5DE; }
    body.dark .filter-item.active::before { background: #E8E5DE; border-color: #E8E5DE; }
    body.dark .clear-filters { color: #555; }
    body.dark .clear-filters:hover { color: #CCC; }
    body.dark .sidebar-footer { color: #333; }

    body.dark .controls-bar { /* inherits body bg */ }
    body.dark .search-input {
      background: #1C1A18;
      border-color: #2A2826;
      color: #E8E5DE;
    }
    body.dark .search-input::placeholder { color: #444; }
    body.dark .search-input:focus { border-color: #4A4846; }
    body.dark .search-clear { color: #444; }
    body.dark .search-clear:hover { color: #AAA; }
    body.dark .search-hint {
      color: #555;
      background: #1C1A18;
      border-color: #2A2826;
    }
    body.dark .sort-select {
      background: #1C1A18;
      border-color: #2A2826;
      color: #C8C5BE;
      background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='5'%3E%3Cpath d='M0 0l5 5 5-5z' fill='%23777'/%3E%3C/svg%3E");
    }
    body.dark .sort-select:focus { border-color: #4A4846; }
    body.dark .sort-select option {
      background: #1C1A18;
      color: #C8C5BE;
    }
    body.dark .fav-toggle {
      background: #1C1A18;
      border-color: #2A2826;
      color: #666;
    }
    body.dark .fav-toggle:hover { border-color: #4A4846; color: #999; }
    body.dark .fav-toggle.active { background: #2A1010; border-color: #6A2828; color: #D06060; }
    body.dark .view-btn {
      background: #1C1A18;
      border-color: #2A2826;
      color: #444;
    }
    body.dark .view-btn.active { background: #252320; color: #888; border-color: #3A3836; }
    body.dark .view-btn:not(.active):hover { background: #201E1C; color: #777; }
    body.dark .cart-btn {
      background: #1C1A18;
      border-color: #2A2826;
      color: #666;
    }
    body.dark .cart-btn:hover { border-color: #4A4846; color: #999; }
    body.dark .dark-btn {
      background: #1C1A18;
      border-color: #2A2826;
      color: #666;
    }
    body.dark .dark-btn:hover { border-color: #4A4846; color: #999; }
    body.dark .product-count { color: #444; }
    body.dark .menu-toggle { background: #2A2826; color: #CCC; }

    body.dark .card-image { background: #1C1A18; }
    body.dark .product-card:hover .card-image { box-shadow: 0 8px 30px rgba(0,0,0,0.4); }
    body.dark .card-image img.coffee-photo { mix-blend-mode: normal; }
    body.dark .card-fav {
      background: rgba(28,26,24,0.88);
      color: #888;
    }
    body.dark .card-fav:hover { background: rgba(40,38,36,0.98); }
    body.dark .card-fav.active { color: #E05A5A; }
    body.dark .card-roaster { color: #4A4846; }
    body.dark .card-name { color: #D8D5CE; }
    body.dark .card-price { color: #555; }

    body.dark .product-grid.list-view { border-top-color: #2A2826; }
    body.dark .product-grid.list-view .load-more-wrap { border-top-color: #2A2826; }
    body.dark .product-grid.list-view .product-card { border-bottom-color: #2A2826; }
    body.dark .product-grid.list-view .product-card:hover { background: #161614; }
    body.dark .list-origin { color: #444; }
    body.dark .list-fav { color: #333; }
    body.dark .list-fav:hover { color: #E05A5A; }
    body.dark .list-fav.active { color: #E05A5A; }

    body.dark .note-tag { background: #222018; color: #777; }

    body.dark .load-more-btn { background: #E8E5DE; color: #1A1A1A; }
    body.dark .load-more-btn:hover { background: #D4D1CA; }
    body.dark .scroll-sentinel::after {
      border-color: rgba(255,255,255,0.08);
      border-top-color: rgba(255,255,255,0.36);
    }
    body.dark .empty-state { color: #444; }
    body.dark .loading-state { color: #444; }

    body.dark .modal-overlay { background: rgba(0,0,0,0.65); }
    body.dark .modal { background: #1A1918; }
    body.dark .modal-close { color: #3A3836; }
    body.dark .modal-close:hover { color: #999; }
    body.dark .modal-image { background: #111110; }
    body.dark .modal-image img.coffee-photo { mix-blend-mode: normal; }
    body.dark .modal-roaster { color: #555; }
    body.dark .modal-name { color: #E8E5DE; }
    body.dark .modal-price { color: #777; }
    body.dark .modal-meta { color: #555; }
    body.dark .modal-meta .dot { background: #2A2826; }
    body.dark .modal-notes-label { color: #444; }
    body.dark .btn-cart { background: #E8E5DE; color: #1A1A1A; }
    body.dark .btn-cart:hover { background: #D4D1CA; }
    body.dark .btn-cart.in-cart { background: #252320; color: #666; }
    body.dark .btn-cart.in-cart:hover { background: #2A2826; }

    body.dark .modal-related { border-top-color: #2A2826; }
    body.dark .modal-related-label { color: #444; }
    body.dark .related-card-img { background: #111110; }
    body.dark .related-card-img img.coffee-photo { mix-blend-mode: normal; }
    body.dark .related-card:hover .related-card-img { box-shadow: 0 6px 20px rgba(0,0,0,0.35); }
    body.dark .related-card-roaster { color: #444; }
    body.dark .related-card-name { color: #BBB; }
    body.dark .related-card-price { color: #555; }

    body.dark .cart-drawer { background: #1A1918; }
    body.dark .cart-header { border-bottom-color: #2A2826; }
    body.dark .cart-title { color: #E8E5DE; }
    body.dark .cart-close { color: #3A3836; }
    body.dark .cart-close:hover { color: #999; }
    body.dark .cart-item { border-bottom-color: #2A2826; }
    body.dark .cart-item-roaster { color: #555; }
    body.dark .cart-item-name { color: #CCC; }
    body.dark .cart-item-price { color: #666; }
    body.dark .qty-btn { border-color: #2A2826; color: #666; background: #222018; }
    body.dark .qty-btn:hover { background: #2A2826; color: #AAA; }
    body.dark .cart-footer { border-top-color: #2A2826; background: #1A1918; }
    body.dark .cart-subtotal-label { color: #555; }
    body.dark .cart-subtotal-amt { color: #E8E5DE; }
    body.dark .cart-checkout-btn { background: #E8E5DE; color: #1A1A1A; }
    body.dark .cart-checkout-btn:hover { background: #D4D1CA; }
    body.dark .cart-empty { color: #3A3836; }
    body.dark .placeholder { background: #252320; }
    body.dark .modal-rating .rating-val { color: #555; }

    /* ════════════════════════════════════════
       CARD BADGES (process, flavor, certs)
       ════════════════════════════════════════ */
    .card-badges {
      display: flex;
      flex-wrap: wrap;
      gap: 4px;
      margin-top: 6px;
    }
    .card-badge {
      display: inline-flex;
      align-items: center;
      padding: 2px 7px;
      border-radius: 10px;
      font-size: 10px;
      font-weight: 500;
      letter-spacing: 0.02em;
      line-height: 1.4;
    }
    .card-badge--process {
      background: #EDE8E0;
      color: #6B5E4E;
    }
    .card-badge--cert {
      background: #E4EDE4;
      color: #3A6B3A;
    }
    .card-flavor-dots {
      display: flex;
      gap: 3px;
      margin-top: 5px;
    }
    .card-flavor-dot {
      width: 7px;
      height: 7px;
      border-radius: 50%;
      font-size: 0;
      line-height: 0;
      background: none;
    }

    /* Card hover overlay */
    .card-hover-info {
      position: absolute;
      bottom: 0;
      left: 0;
      right: 0;
      padding: 10px 12px;
      background: linear-gradient(transparent, rgba(0,0,0,0.65));
      border-radius: 0 0 10px 10px;
      opacity: 0;
      transition: opacity 0.25s ease;
      display: flex;
      flex-direction: column;
      gap: 3px;
    }
    .product-card:hover .card-hover-info {
      opacity: 1;
    }
    .card-hover-info span {
      font-size: 10px;
      color: rgba(255,255,255,0.88);
      letter-spacing: 0.03em;
    }

    body.dark .card-badge--process { background: #2A2620; color: #A89878; }
    body.dark .card-badge--cert { background: #1E2A1E; color: #6AA86A; }

    /* ════════════════════════════════════════
       ENRICHED MODAL
       ════════════════════════════════════════ */
    .modal {
      max-width: 820px;
    }

    .modal-availability {
      display: inline-flex;
      align-items: center;
      padding: 3px 10px;
      border-radius: 12px;
      font-size: 11px;
      font-weight: 500;
      letter-spacing: 0.03em;
      margin-bottom: 8px;
    }
    .modal-availability--in-stock { background: #E6F4E6; color: #2D6A2D; }
    .modal-availability--limited { background: #FFF3E0; color: #A06A20; }
    .modal-availability--seasonal { background: #E8F0FA; color: #3A6A9A; }
    .modal-availability--sold-out { background: #F4E6E6; color: #8A3030; }
    .modal-availability--preorder { background: #F0E6FA; color: #6A3A9A; }

    body.dark .modal-availability--in-stock { background: #1A2E1A; color: #6AB06A; }
    body.dark .modal-availability--limited { background: #2E2618; color: #C4962A; }
    body.dark .modal-availability--seasonal { background: #18222E; color: #6A9AD4; }
    body.dark .modal-availability--sold-out { background: #2E1818; color: #C06060; }
    body.dark .modal-availability--preorder { background: #221830; color: #A070D4; }

    .modal-description {
      font-size: 13.5px;
      line-height: 1.65;
      color: #555;
      margin: 12px 0 20px;
      border-left: 2px solid #E8E6E1;
      padding-left: 14px;
    }
    body.dark .modal-description { color: #888; border-left-color: #2A2826; }

    .modal-sca-badge {
      display: inline-flex;
      align-items: center;
      gap: 6px;
      padding: 6px 14px;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 600;
      background: linear-gradient(135deg, #FFF8E8, #FDF2D0);
      color: #8A6A1A;
      border: 1px solid #E8D8A8;
      margin-bottom: 10px;
    }
    .modal-sca-badge .sca-label {
      font-size: 10px;
      font-weight: 500;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      color: #B8A060;
    }
    body.dark .modal-sca-badge {
      background: linear-gradient(135deg, #2A2410, #2E2814);
      color: #D4B860;
      border-color: #4A3C18;
    }
    body.dark .modal-sca-badge .sca-label { color: #8A7A40; }

    /* Details grid */
    .modal-details-grid {
      display: grid;
      grid-template-columns: repeat(auto-fill, minmax(140px, 1fr));
      gap: 12px;
      margin: 16px 0 20px;
      padding: 16px;
      background: #FAFAF8;
      border-radius: 10px;
    }
    .modal-detail-item {
      display: flex;
      flex-direction: column;
      gap: 3px;
    }
    .modal-detail-label {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #B0B0B0;
    }
    .modal-detail-value {
      font-size: 13px;
      font-weight: 500;
      color: #333;
    }
    body.dark .modal-details-grid { background: #141312; }
    body.dark .modal-detail-label { color: #555; }
    body.dark .modal-detail-value { color: #BBB; }

    /* Flavor tags */
    .modal-flavor-section {
      margin: 12px 0 20px;
    }
    .modal-flavor-tags {
      display: flex;
      flex-wrap: wrap;
      gap: 6px;
    }
    .flavor-pill {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      padding: 4px 11px;
      border-radius: 14px;
      font-size: 11.5px;
      font-weight: 500;
    }
    .flavor-pill .flavor-dot {
      width: 7px;
      height: 7px;
      border-radius: 50%;
      flex-shrink: 0;
    }

    /* Brew rec card */
    .modal-brew-card {
      display: flex;
      align-items: stretch;
      gap: 0;
      margin: 12px 0 20px;
      background: #FAFAF8;
      border-radius: 10px;
      overflow: hidden;
      border: 1px solid #F0EEE9;
    }
    .brew-method-label {
      display: flex;
      align-items: center;
      justify-content: center;
      padding: 14px 18px;
      background: #1A1A1A;
      color: #fff;
      font-size: 11px;
      font-weight: 600;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      writing-mode: vertical-lr;
      text-orientation: mixed;
      transform: rotate(180deg);
      min-width: 36px;
    }
    .brew-params {
      display: flex;
      flex: 1;
      align-items: center;
      justify-content: space-around;
      padding: 14px 10px;
      gap: 6px;
    }
    .brew-param {
      display: flex;
      flex-direction: column;
      align-items: center;
      gap: 4px;
      text-align: center;
    }
    .brew-param-val {
      font-size: 18px;
      font-weight: 700;
      color: #1A1A1A;
      line-height: 1;
    }
    .brew-param-unit {
      font-size: 10px;
      color: #999;
      letter-spacing: 0.04em;
    }
    .brew-param-label {
      font-size: 9px;
      font-weight: 600;
      letter-spacing: 0.08em;
      text-transform: uppercase;
      color: #B0B0B0;
    }
    body.dark .modal-brew-card { background: #141312; border-color: #2A2826; }
    body.dark .brew-method-label { background: #E8E5DE; color: #1A1A1A; }
    body.dark .brew-param-val { color: #E8E5DE; }
    body.dark .brew-param-unit { color: #666; }
    body.dark .brew-param-label { color: #555; }

    /* Food pairings */
    .modal-pairings {
      display: flex;
      flex-wrap: wrap;
      gap: 6px;
      margin: 8px 0 20px;
    }
    .pairing-tag {
      display: inline-block;
      padding: 4px 11px;
      background: #FFF8EE;
      border: 1px solid #F0E4CC;
      border-radius: 14px;
      font-size: 12px;
      color: #8A6A2A;
    }
    body.dark .pairing-tag { background: #1E1A10; border-color: #3A3018; color: #C4A050; }

    /* Bag sizes */
    .modal-bag-sizes {
      display: flex;
      flex-wrap: wrap;
      gap: 8px;
      margin: 8px 0 20px;
    }
    .bag-size-option {
      display: flex;
      flex-direction: column;
      align-items: center;
      padding: 10px 18px;
      border: 1px solid #E8E6E1;
      border-radius: 8px;
      cursor: default;
      transition: border-color 0.15s;
    }
    .bag-size-option:hover { border-color: #CCC; }
    .bag-size-label {
      font-size: 13px;
      font-weight: 600;
      color: #1A1A1A;
    }
    .bag-size-price {
      font-size: 12px;
      color: #888;
      margin-top: 2px;
    }
    body.dark .bag-size-option { border-color: #2A2826; }
    body.dark .bag-size-option:hover { border-color: #4A4846; }
    body.dark .bag-size-label { color: #D8D5CE; }
    body.dark .bag-size-price { color: #666; }

    /* Certifications badges */
    .modal-certs {
      display: flex;
      flex-wrap: wrap;
      gap: 6px;
      margin: 8px 0 20px;
    }
    .cert-badge {
      display: inline-flex;
      align-items: center;
      gap: 5px;
      padding: 4px 11px;
      background: #E8F5E8;
      border-radius: 14px;
      font-size: 11.5px;
      font-weight: 500;
      color: #2A6A2A;
    }
    .cert-badge::before {
      content: '\2713';
      font-size: 10px;
      font-weight: 700;
    }
    body.dark .cert-badge { background: #1A2A1A; color: #5AB05A; }

    /* Purchase CTA */
    .modal-actions {
      display: flex;
      gap: 10px;
      align-items: center;
      flex-wrap: wrap;
      margin-top: 4px;
    }
    .btn-purchase {
      display: inline-flex;
      align-items: center;
      gap: 6px;
      padding: 12px 24px;
      background: #fff;
      color: #1A1A1A;
      border: 1.5px solid #1A1A1A;
      border-radius: 8px;
      font-size: 13px;
      font-weight: 600;
      letter-spacing: 0.04em;
      cursor: pointer;
      transition: all 0.15s;
      text-decoration: none;
      font-family: inherit;
    }
    .btn-purchase:hover { background: #1A1A1A; color: #fff; }
    .btn-purchase .arrow { font-size: 11px; transition: transform 0.15s; }
    .btn-purchase:hover .arrow { transform: translateX(2px); }
    body.dark .btn-purchase {
      background: transparent;
      color: #D8D5CE;
      border-color: #D8D5CE;
    }
    body.dark .btn-purchase:hover { background: #E8E5DE; color: #1A1A1A; }

    /* Roaster info */
    .modal-roaster-info {
      border-top: 1px solid #F0EEE9;
      margin-top: 24px;
      padding-top: 20px;
    }
    .roaster-info-header {
      display: flex;
      align-items: center;
      justify-content: space-between;
      margin-bottom: 12px;
    }
    .roaster-info-title {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: #BBB;
    }
    .roaster-social {
      display: flex;
      gap: 10px;
    }
    .roaster-social a {
      font-size: 11px;
      color: #999;
      text-decoration: none;
      transition: color 0.15s;
    }
    .roaster-social a:hover { color: #1A1A1A; }
    .roaster-info-body {
      display: grid;
      grid-template-columns: 1fr 1fr;
      gap: 12px 28px;
    }
    .roaster-info-detail {
      display: flex;
      flex-direction: column;
      gap: 2px;
    }
    .roaster-info-label {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.06em;
      text-transform: uppercase;
      color: #B0B0B0;
    }
    .roaster-info-value {
      font-size: 12.5px;
      color: #555;
      line-height: 1.5;
    }
    .roaster-info-story {
      grid-column: 1 / -1;
    }
    .roaster-info-story .roaster-info-value {
      font-size: 12.5px;
      line-height: 1.6;
    }
    body.dark .modal-roaster-info { border-top-color: #2A2826; }
    body.dark .roaster-info-title { color: #444; }
    body.dark .roaster-social a { color: #555; }
    body.dark .roaster-social a:hover { color: #CCC; }
    body.dark .roaster-info-label { color: #444; }
    body.dark .roaster-info-value { color: #888; }

    /* Similar coffees (from data) */
    .modal-similar {
      border-top: 1px solid #F0EEE9;
      margin-top: 20px;
      padding-top: 20px;
    }
    .modal-similar-label {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.12em;
      text-transform: uppercase;
      color: #BBB;
      margin-bottom: 12px;
    }
    body.dark .modal-similar { border-top-color: #2A2826; }
    body.dark .modal-similar-label { color: #444; }

    /* Section labels reusable */
    .modal-section-label {
      font-size: 10px;
      font-weight: 600;
      letter-spacing: 0.1em;
      text-transform: uppercase;
      color: #BBB;
      margin-bottom: 8px;
    }
    body.dark .modal-section-label { color: #444; }

    /* Modal responsive for enriched content */
    @media (max-width: 840px) {
      .modal-details-grid {
        grid-template-columns: repeat(2, 1fr);
      }
      .modal-brew-card {
        flex-direction: column;
      }
      .brew-method-label {
        writing-mode: horizontal-tb;
        transform: none;
        padding: 10px 14px;
        min-width: auto;
      }
      .brew-params {
        flex-wrap: wrap;
      }
      .roaster-info-body {
        grid-template-columns: 1fr;
      }
    }

    /* ═══ Flavor tag color palette (SCA wheel) ═══ */
    .flavor-pill--fruity { background: #FFF0F0; color: #B04040; }
    .flavor-pill--floral { background: #FAF0FF; color: #8A40B0; }
    .flavor-pill--sweet { background: #FFF6E8; color: #A07020; }
    .flavor-pill--nutty, .flavor-pill--nutty-cocoa { background: #F6F0E8; color: #6A5030; }
    .flavor-pill--chocolatey { background: #F0EAE0; color: #5A3A20; }
    .flavor-pill--spicy { background: #FFF0E4; color: #C05A20; }
    .flavor-pill--roasted { background: #EAE4DE; color: #4A3A2E; }
    .flavor-pill--cereal { background: #F8F4E6; color: #7A6A30; }
    .flavor-pill--green { background: #ECFAEC; color: #2A6A2A; }
    .flavor-pill--sour { background: #F0FAFA; color: #2A7A7A; }
    .flavor-pill--fermented { background: #FAF0F0; color: #7A3A3A; }
    .flavor-pill--other { background: #F5F4F0; color: #666; }
    .flavor-pill--stone-fruit { background: #FFF4E8; color: #B06030; }
    .flavor-pill--berry { background: #F8F0FA; color: #7A3080; }
    .flavor-pill--tropical { background: #F0FAF0; color: #30803A; }
    .flavor-pill--citrus { background: #FFFAE0; color: #8A7A10; }
    .flavor-pill--caramel { background: #FFF4E4; color: #A06A10; }
    .flavor-pill--honey { background: #FFF8E8; color: #9A7A20; }
    .flavor-pill--winey { background: #FAE8F0; color: #8A2050; }
    .flavor-pill--savory { background: #F0F0EA; color: #5A5A40; }

    body.dark .flavor-pill--fruity { background: #2A1414; color: #D86868; }
    body.dark .flavor-pill--floral { background: #221428; color: #B870D8; }
    body.dark .flavor-pill--sweet { background: #2A2010; color: #C8A040; }
    body.dark .flavor-pill--nutty, body.dark .flavor-pill--nutty-cocoa { background: #221C12; color: #A88858; }
    body.dark .flavor-pill--chocolatey { background: #201810; color: #A07840; }
    body.dark .flavor-pill--spicy { background: #2A1A0A; color: #E08040; }
    body.dark .flavor-pill--roasted { background: #1E1812; color: #8A7A68; }
    body.dark .flavor-pill--cereal { background: #22200E; color: #A89840; }
    body.dark .flavor-pill--green { background: #122812; color: #50A850; }
    body.dark .flavor-pill--sour { background: #0E2222; color: #50A8A8; }
    body.dark .flavor-pill--fermented { background: #221414; color: #A86060; }
    body.dark .flavor-pill--other { background: #1E1E1A; color: #888; }
    body.dark .flavor-pill--stone-fruit { background: #2A1A0A; color: #D89048; }
    body.dark .flavor-pill--berry { background: #221028; color: #B060B0; }
    body.dark .flavor-pill--tropical { background: #0E220E; color: #50B060; }
    body.dark .flavor-pill--citrus { background: #2A280A; color: #C4B830; }
    body.dark .flavor-pill--caramel { background: #2A2008; color: #D4A030; }
    body.dark .flavor-pill--honey { background: #2A240E; color: #C8A840; }
    body.dark .flavor-pill--winey { background: #220A18; color: #C84878; }
    body.dark .flavor-pill--savory { background: #1A1A14; color: #8A8A68; }

    /* Flavor dot colors for cards */
    .fd-fruity { background: #E06060; }
    .fd-floral { background: #B060D0; }
    .fd-sweet { background: #D4A030; }
    .fd-nutty, .fd-nutty-cocoa { background: #9A7040; }
    .fd-chocolatey { background: #7A5030; }
    .fd-spicy { background: #E07030; }
    .fd-roasted { background: #6A5A4A; }
    .fd-green { background: #40A040; }
    .fd-sour { background: #40A0A0; }
    .fd-stone-fruit { background: #D08040; }
    .fd-berry { background: #A040A0; }
    .fd-tropical { background: #40B050; }
    .fd-citrus { background: #C0B020; }
    .fd-caramel { background: #D49020; }
    .fd-honey { background: #D4A830; }
    .fd-winey { background: #C04070; }
    .fd-savory { background: #808060; }
    .fd-cereal { background: #A09030; }
    .fd-fermented { background: #A05050; }
    .fd-other { background: #999; }

    /* ═══ Mini map in modal ═══ */
    .modal-map { margin: 16px 0; border-radius: 10px; overflow: hidden; border: 1px solid #E8E6E1; }
    .modal-map img { width: 100%; height: auto; display: block; }
    body.dark .modal-map { border-color: #2A2826; }

    /* ═══ Roaster favicon on cards ═══ */
    .card-roaster-icon {
      position: absolute;
      top: 10px;
      left: 10px;
      width: 18px;
      height: 18px;
      border-radius: 4px;
      opacity: 0.7;
      z-index: 2;
    }
    .product-card:hover .card-roaster-icon { opacity: 1; }
