:root { --teal-dark: #0d5c63; --teal-mid: #0e7c86; --teal-light: #18a8b5; --teal-pale: #e6f7f8; --accent: #ff5c5c; --text-dark: #1a2e35; --text-muted: #6b8890; --border: #d6eaec; --card-bg: #ffffff; --bg-page: #f0f6f7; --radius-lg: 14px; --radius-sm: 8px; --shadow-card: 0 2px 12px rgba(13,92,99,.10), 0 1px 3px rgba(0,0,0,.06); --shadow-hover: 0 6px 24px rgba(13,92,99,.18); } * { box-sizing: border-box; margin: 0; padding: 0; } body, .canvass-wrapper { font-family: 'DM Sans', sans-serif; background: var(--bg-page); color: var(--text-dark); } /* ── HEADER ─────────────────────────────────────────── */ .cv-header { background: linear-gradient(135deg, var(--teal-dark) 0%, var(--teal-mid) 55%, var(--teal-light) 100%); padding: 28px 32px 24px; border-radius: var(--radius-lg) var(--radius-lg) 0 0; position: relative; overflow: hidden; } .cv-header::before { content: ''; position: absolute; inset: 0; background: url("data:image/svg+xml,%3Csvg width='60' height='60' viewBox='0 0 60 60' xmlns='http://www.w3.org/2000/svg'%3E%3Cg fill='none' fill-rule='evenodd'%3E%3Cg fill='%23ffffff' fill-opacity='0.04'%3E%3Cpath d='M36 34v-4h-2v4h-4v2h4v4h2v-4h4v-2h-4zm0-30V0h-2v4h-4v2h4v4h2V6h4V4h-4zM6 34v-4H4v4H0v2h4v4h2v-4h4v-2H6zM6 4V0H4v4H0v2h4v4h2V6h4V4H6z'/%3E%3C/g%3E%3C/g%3E%3C/svg%3E"); } .cv-header-inner { position: relative; z-index: 1; display: flex; align-items: flex-start; gap: 14px; } .cv-header-icon { font-size: 2rem; color: rgba(255,255,255,.85); margin-top: 2px; } .cv-header h1 { font-family: 'Space Grotesk', sans-serif; font-size: 1.75rem; font-weight: 700; color: #fff; line-height: 1.2; } .cv-header p { font-size: .875rem; color: rgba(255,255,255,.75); margin-top: 4px; } /* ── OUTER WRAPPER ───────────────────────────────────── */ .canvass-wrapper { max-width: 1400px; margin: 0 auto; padding: 24px 20px 40px; } /* ── TAB NAV ─────────────────────────────────────────── */ .cv-tabs { display: flex; gap: 6px; background: #fff; border-radius: var(--radius-lg); padding: 6px; box-shadow: var(--shadow-card); margin-bottom: 20px; overflow-x: auto; } .cv-tab-btn { flex: 1; min-width: 160px; display: flex; align-items: center; justify-content: center; gap: 8px; padding: 10px 18px; border: none; border-radius: var(--radius-sm); background: transparent; color: var(--text-muted); font-family: 'DM Sans', sans-serif; font-size: .875rem; font-weight: 600; cursor: pointer; transition: all .2s ease; white-space: nowrap; } .cv-tab-btn i { font-size: .95rem; } .cv-tab-btn:hover { background: var(--teal-pale); color: var(--teal-dark); } .cv-tab-btn.active { background: var(--teal-mid); color: #fff; box-shadow: 0 2px 8px rgba(14,124,134,.35); } /* ── TAB PANELS ─────────────────────────────────────── */ .cv-panel { display: none; } .cv-panel.active { display: block; } /* ── FILTER BAR ─────────────────────────────────────── */ .cv-filters { display: flex; flex-wrap: wrap; gap: 10px; align-items: center; margin-bottom: 18px; } .cv-search-box { display: flex; align-items: center; background: #fff; border: 1.5px solid var(--border); border-radius: var(--radius-sm); padding: 0 12px; gap: 8px; flex: 1; min-width: 160px; max-width: 260px; transition: border-color .2s; } .cv-search-box:focus-within { border-color: var(--teal-mid); } .cv-search-box i { color: var(--text-muted); font-size: .85rem; } .cv-search-box input { border: none; outline: none; background: transparent; padding: 9px 0; font-family: 'DM Sans', sans-serif; font-size: .875rem; color: var(--text-dark); width: 100%; } .cv-search-box input::placeholder { color: var(--text-muted); } .cv-page-size { display: flex; align-items: center; gap: 8px; margin-left: auto; } .cv-page-size label { font-size: .8rem; color: var(--text-muted); font-weight: 500; } .cv-page-size select { border: 1.5px solid var(--border); border-radius: var(--radius-sm); padding: 8px 12px; font-family: 'DM Sans', sans-serif; font-size: .875rem; color: var(--text-dark); cursor: pointer; outline: none; background: #fff; transition: border-color .2s; } .cv-page-size select:focus { border-color: var(--teal-mid); } .cv-result-count { font-size: .8rem; color: var(--text-muted); font-weight: 500; white-space: nowrap; } /* ── SUPPLIER PILLS ─────────────────────────────────── */ .cv-supplier-pills { display: flex; flex-wrap: wrap; gap: 8px; margin-bottom: 18px; } .cv-pill { display: inline-flex; align-items: center; gap: 6px; padding: 6px 14px; border-radius: 50px; border: 1.5px solid var(--border); background: #fff; color: var(--text-muted); font-size: .8rem; font-weight: 600; cursor: pointer; transition: all .2s; white-space: nowrap; } .cv-pill i { font-size: .8rem; } .cv-pill:hover { border-color: var(--teal-mid); color: var(--teal-dark); background: var(--teal-pale); } .cv-pill.active { border-color: var(--teal-mid); color: #fff; background: var(--teal-mid); } /* ── CARD GRID ──────────────────────────────────────── */ .cv-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(340px, 1fr)); gap: 18px; min-height: 200px; } /* ── SINGLE CARD ────────────────────────────────────── */ .cv-card { background: var(--card-bg); border-radius: var(--radius-lg); box-shadow: var(--shadow-card); border: 1px solid var(--border); overflow: hidden; display: flex; flex-direction: column; transition: box-shadow .25s, transform .25s; } .cv-card:hover { box-shadow: var(--shadow-hover); transform: translateY(-2px); } .cv-card-header { background: linear-gradient(135deg, var(--teal-dark), var(--teal-mid)); padding: 14px 16px 12px; display: flex; justify-content: space-between; align-items: flex-start; gap: 8px; } .cv-card-header-left { flex: 1; min-width: 0; } .cv-card-supplier-code { font-size: .72rem; color: rgba(255,255,255,.7); font-weight: 600; letter-spacing: .04em; text-transform: uppercase; margin-bottom: 2px; } .cv-card-supplier-name { font-family: 'Space Grotesk', sans-serif; font-size: 1rem; font-weight: 700; color: #fff; line-height: 1.25; word-break: break-word; } .cv-card-email { font-size: .78rem; color: rgba(255,255,255,.7); margin-top: 4px; display: flex; align-items: center; gap: 5px; } .cv-card-body { padding: 14px 16px; flex: 1; display: flex; flex-direction: column; gap: 12px; } .cv-agg-row { display: flex; gap: 8px; } .cv-agg-badge { flex: 1; background: var(--teal-pale); border: 1px solid var(--border); border-radius: var(--radius-sm); padding: 8px 10px; display: flex; flex-direction: column; align-items: flex-start; gap: 2px; } .cv-agg-badge .label { font-size: .68rem; text-transform: uppercase; letter-spacing: .05em; color: var(--text-muted); font-weight: 600; } .cv-agg-badge .value { font-size: .82rem; color: var(--teal-dark); font-weight: 600; word-break: break-all; line-height: 1.3; } .cv-item-names { font-size: .82rem; color: var(--text-dark); line-height: 1.55; } .cv-item-names .item-label { font-size: .68rem; text-transform: uppercase; letter-spacing: .05em; color: var(--text-muted); font-weight: 600; margin-bottom: 4px; } .cv-card-footer { padding: 10px 16px 14px; display: flex; gap: 8px; border-top: 1px solid var(--border); } .cv-btn { flex: 1; padding: 8px 14px; border-radius: var(--radius-sm); border: none; cursor: pointer; font-family: 'DM Sans', sans-serif; font-size: .82rem; font-weight: 600; display: flex; align-items: center; justify-content: center; gap: 6px; transition: all .2s; } .cv-btn-primary { background: var(--teal-mid); color: #fff; } .cv-btn-primary:hover { background: var(--teal-dark); } .cv-btn-outline { background: transparent; color: var(--teal-dark); border: 1.5px solid var(--teal-mid); } .cv-btn-outline:hover { background: var(--teal-pale); } /* ── LOADING / EMPTY ────────────────────────────────── */ .cv-state { display: flex; flex-direction: column; align-items: center; justify-content: center; padding: 60px 20px; gap: 12px; } .cv-state i { font-size: 2.5rem; color: var(--border); } .cv-state p { color: var(--text-muted); font-size: .9rem; } .cv-spinner { width: 36px; height: 36px; border: 3px solid var(--border); border-top-color: var(--teal-mid); border-radius: 50%; animation: spin .7s linear infinite; } @@keyframes spin { to { transform: rotate(360deg); } } /* ── PAGINATION ─────────────────────────────────────── */ .cv-pagination { display: flex; align-items: center; justify-content: space-between; flex-wrap: wrap; gap: 12px; margin-top: 24px; padding: 12px 0; } .cv-pagination-info { font-size: .82rem; color: var(--text-muted); } .cv-page-btns { display: flex; gap: 4px; } .cv-page-btn { width: 36px; height: 36px; display: flex; align-items: center; justify-content: center; border-radius: var(--radius-sm); border: 1.5px solid var(--border); background: #fff; color: var(--text-dark); font-family: 'DM Sans', sans-serif; font-size: .85rem; font-weight: 600; cursor: pointer; transition: all .18s; } .cv-page-btn:hover:not(:disabled) { border-color: var(--teal-mid); color: var(--teal-mid); background: var(--teal-pale); } .cv-page-btn.active { background: var(--teal-mid); border-color: var(--teal-mid); color: #fff; } .cv-page-btn:disabled { opacity: .35; cursor: default; }