:root { --ink:#16191f; --muted:#5f6b7a; --line:#e3e6ea; --accent:#005eb8; --bg:#f6f7f9; } * { box-sizing: border-box; } body { margin:0; font-family: -apple-system, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; color:var(--ink); background:var(--bg); } .topbar { display:flex; justify-content:space-between; align-items:center; padding:12px 24px; background:#0f1b2a; color:#fff; } .brand { font-weight:700; font-size:18px; } .brand span { color:#7cc4ff; } #auth-area { display:flex; gap:14px; align-items:center; } .dash-link { color:#7cc4ff; text-decoration:none; font-size:14px; border:1px solid #2c4a6b; padding:6px 10px; border-radius:6px; } .dash-link:hover, .dash-link:focus-visible { background:#16304d; } button { font:inherit; padding:8px 14px; border-radius:6px; border:1px solid var(--accent); background:var(--accent); color:#fff; cursor:pointer; } button:focus-visible, input:focus-visible { outline:3px solid #ffb703; outline-offset:2px; } main { max-width:1280px; margin:0 auto; padding:24px; } .panel { background:#fff; border:1px solid var(--line); border-radius:10px; padding:24px; } .muted { color:var(--muted); } .small { font-size:13px; margin-top:-6px; } .searchbar { display:flex; gap:12px; flex-wrap:wrap; align-items:center; background:#fff; padding:14px; border:1px solid var(--line); border-radius:10px; } .searchbar input[type=search] { flex:1 1 320px; padding:10px 12px; font-size:16px; border:1px solid #aab3bf; border-radius:6px; } .modes { border:0; display:flex; gap:14px; margin:0; padding:0; } .layout { display:grid; grid-template-columns: 1fr 320px; gap:20px; margin-top:18px; } @media (max-width: 900px) { .layout { grid-template-columns: 1fr; } } .grid { list-style:none; margin:0; padding:0; display:grid; grid-template-columns: repeat(auto-fill, minmax(190px,1fr)); gap:14px; } .card { background:#fff; border:1px solid var(--line); border-radius:10px; padding:10px; display:flex; flex-direction:column; gap:8px; } .card .thumb { background:#fff; border:0; padding:0; cursor:pointer; text-align:left; color:inherit; } .card img { width:100%; height:200px; object-fit:contain; background:#fff; } .card .title { font-size:14px; line-height:1.3; display:-webkit-box; -webkit-line-clamp:3; -webkit-box-orient:vertical; overflow:hidden; } .card .rank { font-size:12px; color:var(--muted); } .stars { color:#b26b00; font-size:13px; } .card .cart { margin-top:auto; background:#fff; color:var(--accent); } .events { background:#fff; border:1px solid var(--line); border-radius:10px; padding:14px; max-height:80vh; overflow:auto; position:sticky; top:12px; } .events h2 { font-size:16px; margin:0 0 8px; } /* live event log: one colour per event type */ .ev.query { --c:#8a3ffc; --bg:#f4eeff; } .ev.impression { --c:#5f6b7a; --bg:#f2f4f7; } .ev.click { --c:#005eb8; --bg:#e8f2fc; } .ev.add_to_cart { --c:#b26b00; --bg:#fff4e0; } .ev.thumbs_up { --c:#1d8102; --bg:#e9f6e6; } .ev.thumbs_down { --c:#d13212; --bg:#fdecea; } #event-log { list-style:none; padding:0; margin:0; font-family: ui-monospace, Menlo, monospace; font-size:12px; } #event-log li { display:grid; grid-template-columns: 58px 86px 1fr auto; gap:6px; align-items:baseline; padding:4px 6px; margin-bottom:3px; border-left:4px solid var(--c); background:var(--bg); border-radius:4px; } #event-log li.new { animation: flash .8s ease-out; } @keyframes flash { from { box-shadow: 0 0 0 2px var(--c) inset; } to { box-shadow: none; } } #event-log time { color:var(--muted); } #event-log .tag { color:var(--c); font-weight:700; } #event-log .msg { overflow:hidden; text-overflow:ellipsis; white-space:nowrap; } #event-log .st { color:var(--muted); font-size:11px; } #event-log li[data-status="sent"] .st { color:#1d8102; } #event-log li[data-status="failed"] .st, #event-log li[data-status="retrying"] .st { color:#d13212; } .legend { list-style:none; display:flex; flex-wrap:wrap; gap:4px; padding:0; margin:0 0 10px; font-size:11px; } .legend li { padding:1px 6px; border-left:3px solid var(--c); background:var(--bg); color:var(--c); border-radius:3px; } @media (prefers-reduced-motion: reduce) { #event-log li.new { animation:none; } } /* small icon-only feedback buttons */ .rank-row { display:flex; justify-content:space-between; align-items:center; } .vote { display:flex; gap:4px; } .vote-btn { width:30px; height:26px; padding:0; font-size:15px; line-height:1; background:#fff; color:var(--ink); border:1px solid var(--line); border-radius:6px; } .vote-btn:hover:not(:disabled) { border-color:#aab3bf; } .vote-btn[aria-pressed="true"].thumbs_up { background:#e9f6e6; border-color:#1d8102; } .vote-btn[aria-pressed="true"].thumbs_down { background:#fdecea; border-color:#d13212; } .vote-btn:disabled { cursor:default; } .vote-btn:disabled[aria-pressed="false"] { opacity:.35; } #dlg-vote { margin:8px 0; } /* sample query chips */ .samples-wrap { display:flex; gap:8px; align-items:center; flex-wrap:wrap; margin-bottom:10px; } .small-label { font-size:13px; } .samples { display:flex; gap:6px; flex-wrap:wrap; } .chip { padding:4px 10px; font-size:13px; border-radius:16px; background:#fff; color:var(--accent); border:1px solid #b8d4ef; } .chip:hover { background:#e8f2fc; } .pill { background:var(--accent); color:#fff; border-radius:12px; padding:1px 8px; font-size:12px; } dialog { border:0; border-radius:12px; max-width:520px; width:92vw; padding:20px; } dialog img { width:100%; max-height:340px; object-fit:contain; } .dialog-close { text-align:right; } .dialog-close button { background:#fff; color:var(--ink); border-color:var(--line); } .visually-hidden { position:absolute; width:1px; height:1px; overflow:hidden; clip:rect(0 0 0 0); white-space:nowrap; } /* event flow diagram */ .flow { position:relative; display:flex; justify-content:space-between; align-items:flex-start; padding:6px 2px 10px; margin-bottom:10px; border-bottom:1px solid var(--line); } .flow-line { position:absolute; left:22px; right:22px; top:24px; height:2px; background:#d5dbe1; } .flow { padding-left:14px; padding-right:14px; } .flow-line { left:40px; right:40px; } .flow .node { position:relative; z-index:1; display:flex; flex-direction:column; align-items:center; gap:4px; width:64px; } .flow .node img, .flow .node svg { width:32px; height:32px; border-radius:6px; background:#fff; } .flow .node span { font-size:9.5px; line-height:1.15; text-align:center; color:var(--muted); } .flow .node.hit img, .flow .node.hit svg { box-shadow:0 0 0 3px var(--c, #005eb8); transition:box-shadow .15s; } .flow .ball { position:absolute; z-index:2; top:19px; left:0; width:12px; height:12px; border-radius:50%; background:var(--c); box-shadow:0 0 6px var(--c); pointer-events:none; } .flow .ball.failed { --c:#d13212; } /* new implicit signals */ .ev.dwell { --c:#0e7c86; --bg:#e6f6f7; } .ev.abandon { --c:#414d5c; --bg:#e9ebed; } .ev.reformulate { --c:#c7166a; --bg:#fdeaf3; } /* tabs */ .tabs { display:flex; gap:4px; border-bottom:1px solid var(--line); margin-bottom:8px; } .tabs [role="tab"] { background:#fff; color:var(--muted); border:1px solid transparent; border-bottom:0; border-radius:6px 6px 0 0; padding:6px 10px; font-size:13px; } .tabs [role="tab"][aria-selected="true"] { color:var(--ink); border-color:var(--line); font-weight:600; margin-bottom:-1px; background:#fff; } .tabs .pill { font-size:11px; } /* session journey */ #session-timeline { list-style:none; margin:0; padding:0; } .jcard { border:1px solid var(--line); border-left:4px solid #8a3ffc; border-radius:6px; padding:8px; margin-bottom:8px; } .jcard.engaged { border-left-color:#1d8102; } .jcard.abandoned { border-left-color:#414d5c; background:#fafafa; } .jhead { font-size:13px; display:flex; flex-wrap:wrap; gap:4px; align-items:baseline; } .jhead .muted { font-size:12px; } .jbadge { margin-left:auto; font-size:11px; padding:1px 7px; border-radius:10px; background:#f4eeff; color:#8a3ffc; } .jbadge.engaged { background:#e9f6e6; color:#1d6b02; } .jbadge.abandoned { background:#e9ebed; color:#414d5c; } .jsteps { list-style:none; margin:6px 0 0; padding:0; display:flex; flex-wrap:wrap; gap:4px; } .jsteps li { font-size:12px; padding:2px 7px; border-radius:10px; background:var(--bg); color:var(--c); border:1px solid var(--c); }