  :root{--bg:#f7f4eb;--card:#fffdf8;--ink:#1a1a1a;--muted:#5b5348;--line:#e2dacb;--coffee:#3d2b1f;--note:#8a5a00;--serif:'Times New Roman',Times,serif;--sans:Arial,Helvetica,sans-serif}
  *,*::before,*::after{box-sizing:border-box}
  html,body{margin:0;background:var(--bg);color:var(--ink);font-family:var(--sans);font-size:15px;line-height:1.5}
  [hidden]{display:none!important}
  .wrap{max-width:960px;margin:0 auto;padding:28px 16px 48px}
  h1{font-family:var(--serif);font-size:28px;font-weight:bold;margin:0 0 20px;color:var(--coffee)}
  .grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:16px}
  .brand{background:var(--card);border:1px solid var(--line);border-radius:14px;padding:16px;display:flex;flex-direction:column;gap:10px;min-width:0}
  .logo{display:block;max-width:100%;max-height:96px;width:auto;height:auto;object-fit:contain;align-self:flex-start;border-radius:8px}
  h2{font-family:var(--serif);font-size:21px;margin:0;overflow-wrap:anywhere}
  .intro{margin:0;color:var(--muted);overflow-wrap:anywhere}
  .flag{list-style:none;margin:0;padding:0;display:flex;flex-direction:column;gap:8px}
  .flag li{display:flex;align-items:center;gap:10px;border-top:1px solid var(--line);padding-top:8px;min-width:0}
  .thumb{width:44px;height:44px;object-fit:cover;border-radius:8px;flex:none}
  .fname{flex:1;min-width:0;overflow-wrap:anywhere}
  .fname small{display:block;color:var(--muted)}
  .price{font-weight:bold;white-space:nowrap}
  .note{margin:0;color:var(--note);font-weight:bold;font-size:14px}
  .go{display:block;text-align:center;background:var(--coffee);color:#fff;border-radius:12px;padding:12px 16px;font-weight:bold;font-size:16px;text-decoration:none;margin-top:auto}
  .empty{color:var(--muted);font-size:17px}
  /* ---- PBI-050 new states (G-17 it/design/PBI-050/mock-home.html; everything above is the live page CSS of platform/moc/app/Home.html verbatim) ---- */
  /* H1 loading: three grey cards with the shape of a brand card, no text (aria-hidden; the grid is aria-busy) */
  .skel{animation:skel 1.4s ease-in-out infinite alternate}
  @keyframes skel{from{opacity:.55}to{opacity:1}}
  @media (prefers-reduced-motion:reduce){.skel{animation:none}}
  .sk{display:block;height:14px;border-radius:7px;background:#ece4d6}
  .sk.lg{width:96px;height:64px;border-radius:8px}.sk.t{height:22px;width:60%}.sk.w9{width:92%}.sk.w7{width:70%}
  .sk.row{height:44px;border-radius:8px;background:#f1ebe0}.sk.go{height:48px;border-radius:12px;margin-top:auto}
  /* H2 failure: red box + Thử lại, same pattern as the store. Text #a3261b on --card = 6.9:1 */
  .failbox{background:var(--card);border:1px solid #e3bdb5;border-left:4px solid #a3261b;border-radius:14px;padding:14px 16px;max-width:560px}
  .failmsg{margin:0 0 12px;color:#a3261b;font-size:15px}
  .retry{display:block;width:100%;max-width:280px;border:0;background:var(--coffee);color:#fff;border-radius:12px;padding:12px 16px;min-height:48px;font:bold 16px var(--sans);cursor:pointer}
  .retry:focus-visible{outline:2px solid var(--coffee);outline-offset:2px}
  h1 a{color:inherit;text-decoration:none}   /* 404.html: the title is the way back */
