shoptracker / frontend /style.css
saann's picture
ShopTracker V1 - FastAPI + PostgreSQL + Frontend
fd0007e
Raw
History Blame Contribute Delete
28.9 kB
:root {
--green: #1A6B3C;
--green-dark: #0F4525;
--green-mid: #2A8A52;
--green-lite: #E6F4ED;
--green-ring: rgba(26,107,60,0.12);
--gold: #D4A017;
--gold-dark: #A87C0D;
--gold-lite: #FDF8E8;
--orange: #FF6B35;
--orange-lite: #FFF1EC;
--surface: #FFFFFF;
--surface2: #F2F6F3;
--surface3: #E6F4ED;
--text: #0C1A10;
--text2: #3A5244;
--text3: #8BA898;
--border: #D4E8DA;
--border2: #C0D9C8;
--danger: #D63031;
--danger-lite: #FDECEA;
--nav-h: 68px;
--r: 18px;
--r-sm: 12px;
--shadow-sm: 0 2px 8px rgba(26,107,60,0.08);
--shadow: 0 4px 20px rgba(26,107,60,0.12);
--shadow-gold: 0 4px 20px rgba(212,160,23,0.25);
--shadow-lg: 0 6px 24px rgba(15,69,37,0.4);
}
* { margin:0; padding:0; box-sizing:border-box; -webkit-tap-highlight-color:transparent; }
body {
font-family: 'Poppins', sans-serif;
background: var(--surface2);
color: var(--text);
max-width: 480px;
margin: 0 auto;
min-height: 100vh;
padding-bottom: calc(var(--nav-h) + 12px);
}
.screen { display:none; }
.screen.active { display:block; }
/* ── TOPBAR ── */
.topbar {
background: linear-gradient(135deg, var(--green-dark) 0%, var(--green) 60%, var(--green-mid) 100%);
padding: 10px 16px 10px;
display: flex; align-items: center; justify-content: space-between;
position: sticky; top:0; z-index:200;
box-shadow: 0 2px 12px rgba(15,69,37,0.3);
}
.topbar-logo { display:flex; align-items:center; gap:10px; flex:1; }
.logo-svg { width:34px; height:34px; flex-shrink:0; }
.logo-wordmark { display:flex; flex-direction:column; line-height:1.1; }
.logo-wordmark .w1 { font-size: 15px; font-weight: 900; color: #fff; letter-spacing: -0.5px; }
.logo-wordmark .w2 { font-size: 8px; font-weight: 600; color: var(--gold); letter-spacing: 1.2px; text-transform: uppercase; }
.logo-wordmark .w3 { font-size: 9px; font-weight: 500; color: rgba(255,255,255,0.65); letter-spacing: 0.3px; }
.topbar-profit {
background: rgba(255,255,255,0.13);
border: 1.5px solid rgba(255,255,255,0.22);
border-radius: 24px; padding: 5px 12px;
display: flex; flex-direction: column; align-items: flex-end; cursor:pointer;
}
.tb-label { font-size: 8px; font-weight: 500; color: rgba(255,255,255,0.65); text-transform: uppercase; letter-spacing: 0.8px; }
.tb-amount { font-size: 14px; font-weight: 800; color: #7BFFB0; line-height: 1.1; }
.topbar-settings {
margin-left:8px; width:32px; height:32px; border-radius:50%;
background:rgba(255,255,255,0.12); border:none; color:#fff;
font-size:15px; cursor:pointer; display:flex; align-items:center; justify-content:center;
}
/* ── OFFLINE BANNER ── */
.offline-banner {
display:none; background:#7f1d1d; color:#fca5a5;
padding:8px 16px; font-size:12px; font-weight:600;
text-align:center; position:sticky; top:54px; z-index:199;
}
.offline-banner.show { display:block; }
/* ── BOTTOM NAV ── */
.bottom-nav {
position:fixed; bottom:0; left:50%; transform:translateX(-50%);
width:100%; max-width:480px; height:var(--nav-h);
background:var(--surface); border-top:1px solid var(--border);
display:flex; align-items:center;
z-index:300; box-shadow:0 -4px 20px rgba(0,0,0,0.06);
}
.nav-item {
flex:1; display:flex; flex-direction:column; align-items:center; gap:2px;
cursor:pointer; padding:8px 4px;
background:none; border:none; position:relative; transition:all 0.15s;
}
.nav-icon { font-size:20px; line-height:1; }
.nav-label { font-size:10px; font-weight:600; color:var(--text3); font-family:'Poppins',sans-serif; }
.nav-item.active .nav-label { color:var(--green); }
.nav-item.active .nav-icon { transform:translateY(-1px); }
.nav-item.active::after {
content: ''; position: absolute; bottom: 2px; left: 50%; transform: translateX(-50%);
width: 18px; height: 3px; background: var(--green); border-radius: 2px;
}
.nav-item.nav-sell .nav-label { color:var(--orange); font-weight:700; }
.nav-item.nav-sell.active::after { background:var(--orange); }
.nav-item.nav-sell.active .nav-label { color:var(--orange); }
/* ── SHARED ── */
.pad { padding:16px; }
.card { background:var(--surface); border-radius:var(--r); border:1px solid var(--border); box-shadow:var(--shadow-sm); }
.card-body { padding:16px; }
.section-label { font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:1px; color:var(--text3); margin-bottom:10px; }
.divider { height:1px; background:var(--border); margin:14px 0; }
/* ── FORMS ── */
.form-group { margin-bottom:14px; }
.form-label { font-size:12px; font-weight:700; color:var(--text2); text-transform:uppercase; letter-spacing:0.6px; margin-bottom:6px; display:flex; align-items:center; gap:5px; }
.form-label .opt { font-size:10px; font-weight:500; color:var(--text3); text-transform:none; letter-spacing:0; }
.form-input {
width:100%; padding:12px 14px;
border:1.5px solid var(--border); border-radius:var(--r-sm);
font-size:15px; font-weight:600; color:var(--text);
background:var(--surface); outline:none;
font-family:'Poppins',sans-serif;
transition:border-color 0.15s, box-shadow 0.15s;
-webkit-appearance:none;
}
.form-input:focus { border-color:var(--green); box-shadow:0 0 0 3px var(--green-ring); }
.form-input::placeholder { color:var(--text3); font-weight:400; font-size:13px; }
select.form-input { cursor:pointer; }
/* ── BUTTONS ── */
.btn {
width:100%; border:none; border-radius:var(--r-sm);
padding:14px; font-size:14px; font-weight:700;
font-family:'Poppins',sans-serif; cursor:pointer;
transition:opacity 0.15s, transform 0.12s;
display:flex; align-items:center; justify-content:center; gap:6px;
}
.btn:active { transform:scale(0.97); opacity:0.9; }
.btn-green { background: linear-gradient(135deg, var(--green-mid), var(--green-dark)); color: white; box-shadow: 0 4px 16px rgba(26,107,60,0.30); }
.btn-gold { background: linear-gradient(135deg, var(--gold), var(--gold-dark)); color: white; box-shadow: var(--shadow-gold); }
.btn-orange { background: linear-gradient(135deg, var(--orange), #FF3D00); color: white; box-shadow: 0 4px 16px rgba(255,107,53,0.35); }
.btn-outline { background:var(--surface); border:1.5px solid var(--border); color:var(--text2); }
.btn-ghost { background:var(--green-lite); color:var(--green); }
.btn-sm { padding:8px 14px; font-size:13px; width:auto; border-radius:8px; }
.btn-xs { padding:6px 10px; font-size:12px; width:auto; border-radius:7px; }
/* ── PILLS ── */
.pill { display:inline-flex; align-items:center; gap:3px; padding:3px 9px; border-radius:20px; font-size:11px; font-weight:700; }
.pill-green { background:var(--green-lite); color:var(--green); }
.pill-gold { background:var(--gold-lite); color:var(--gold); }
.pill-orange { background:var(--orange-lite); color:var(--orange); }
.pill-red { background:var(--danger-lite); color:var(--danger); }
.pill-gray { background:var(--surface3); color:var(--text2); }
/* ── SCREEN HEADER ── */
.screen-header {
background:var(--surface); border-bottom:1px solid var(--border);
padding:12px 16px; display:flex; align-items:center; gap:12px;
position:sticky; top:0; z-index:100;
}
.back-btn {
width:34px; height:34px; border-radius:9px; background:var(--surface3);
border:none; font-size:16px; cursor:pointer;
display:flex; align-items:center; justify-content:center; color:var(--text2);
}
.sh-title { font-size:16px; font-weight:800; color:var(--text); }
.sh-sub { font-size:11px; color:var(--text3); }
/* ── INFO BOX ── */
.info-box { border-radius:var(--r-sm); padding:12px 14px; font-size:13px; font-weight:600; line-height:1.5; }
.info-box.green { background:var(--green-lite); color:var(--green-dark); border-left:3px solid var(--green); }
.info-box.orange { background:var(--orange-lite); color:var(--orange); border-left:3px solid var(--orange); }
/* ── ALERT ── */
.alert-banner {
margin:8px 16px 0; padding:10px 14px; border-radius:var(--r-sm);
background:var(--danger-lite); border:1px solid rgba(220,38,38,0.15);
display:flex; align-items:center; gap:8px;
font-size:13px; font-weight:600; color:var(--danger);
}
/* ═══ HOME SCREEN ═══ */
.home-hero {
background: linear-gradient(160deg, var(--green-dark) 0%, var(--green) 55%, var(--green-mid) 100%);
padding: 18px 20px 24px; position: relative; overflow: hidden;
}
.home-hero::before {
content: ''; position: absolute; top: -30px; right: -30px;
width: 160px; height: 160px; border-radius: 50%; background: rgba(255,255,255,0.05);
}
.hero-shop-info {
display:flex; align-items:center; justify-content:space-between; margin-bottom:12px;
}
.hero-shop-name { font-size:16px; font-weight:800; color:#fff; }
.hero-owner-name { font-size:11px; color:rgba(255,255,255,0.65); margin-top:1px; }
.hero-date-badge {
background:rgba(255,255,255,0.12); border:1px solid rgba(255,255,255,0.2);
border-radius:8px; padding:5px 10px; text-align:right;
}
.hero-date-badge .hdb-day { font-size:18px; font-weight:800; color:#fff; line-height:1; }
.hero-date-badge .hdb-mon { font-size:10px; color:rgba(255,255,255,0.7); font-weight:600; letter-spacing:0.5px; }
.hero-lbl { font-size:11px; font-weight:600; color:rgba(255,255,255,0.65); letter-spacing:0.8px; text-transform: uppercase; }
.hero-amt { font-size:46px; font-weight:900; color:white; line-height:1.1; letter-spacing:-2px; margin:3px 0 2px; }
.hero-amt .cur { font-size:26px; vertical-align:super; font-weight:700; }
.hero-sub { font-size:12px; color:rgba(255,255,255,0.65); font-weight:500; }
.hero-stats { display:flex; gap:8px; margin-top:14px; }
.hero-stat {
flex:1; background:rgba(255,255,255,0.07); border:1px solid rgba(255,255,255,0.1);
border-radius:10px; padding:10px; text-align:center;
}
.hs-val { font-size:15px; font-weight:800; color:white; }
.hs-val.gold { color:var(--gold); }
.hs-lbl { font-size:10px; color:rgba(255,255,255,0.6); font-weight:500; margin-top:2px; }
.quick-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; padding:14px 16px; }
.qa-btn {
background:var(--surface); border-radius:var(--r); padding:16px 12px;
display:flex; flex-direction:column; align-items:center; gap:7px;
border:1.5px solid var(--border); cursor:pointer; transition:all 0.15s;
box-shadow:var(--shadow-sm);
}
.qa-btn:active { transform:scale(0.96); }
.qa-btn.buy { border-color:rgba(5,150,105,0.3); background:var(--green-lite); }
.qa-btn.sell { border-color:rgba(234,88,12,0.3); background:var(--orange-lite); }
.qa-icon { font-size:26px; }
.qa-label { font-size:13px; font-weight:700; color:var(--text); }
.qa-sub { font-size:11px; color:var(--text3); font-weight:500; }
/* Today card */
.glance-card { margin:0 16px 16px; }
.glance-header {
background: var(--gold-lite); border-bottom: 1.5px solid rgba(212,160,23,0.2);
padding: 12px 16px; display: flex; align-items: center; justify-content: space-between;
border-radius: var(--r) var(--r) 0 0;
}
.glance-title { font-size: 13px; font-weight: 700; color: var(--gold-dark); }
.glance-rows { }
.g-row {
display:flex; justify-content:space-between; align-items:center;
padding:10px 14px; border-bottom:1px solid var(--border);
}
.g-row:last-child { border-bottom:none; }
.g-lbl { font-size:13px; color:var(--text2); font-weight:500; }
.g-val { font-size:14px; font-weight:700; color:var(--text); }
.g-val.green { color:var(--green); }
.g-val.orange { color:var(--orange); }
/* ═══ BUY SCREEN ═══ */
.buy-step-card {
background:var(--surface); border-radius:var(--r);
border:1px solid var(--border); box-shadow:var(--shadow-sm); padding:16px;
}
.buy-step-label {
font-size:11px; font-weight:700; text-transform:uppercase;
letter-spacing:1px; color:var(--text3); margin-bottom:12px;
}
.buy-mode-btn {
padding:10px; border-radius:var(--r-sm); font-size:13px; font-weight:700;
font-family:'Poppins',sans-serif; cursor:pointer; border:2px solid var(--border);
background:var(--surface2); color:var(--text2); transition:all 0.15s;
}
.buy-mode-btn.active { background:var(--green-lite); border-color:var(--green); color:var(--green); }
.calc-box {
background:var(--green-lite); border:1px solid rgba(5,150,105,0.15);
border-radius:var(--r-sm); padding:12px 14px; display:none;
}
.calc-box.show { display:block; }
.calc-row { display:flex; justify-content:space-between; align-items:center; padding:3px 0; }
.cr-label { font-size:12px; color:var(--text2); font-weight:500; }
.cr-val { font-size:13px; font-weight:700; color:var(--green); }
.cr-val.warn { color:var(--orange); }
/* ═══ SELL SCREEN ═══ */
.stock-pill-row { display:flex; align-items:center; gap:8px; margin-top:7px; flex-wrap:wrap; }
.price-display {
display:flex; align-items:center; justify-content:space-between;
background:var(--green-lite); border:1.5px solid rgba(5,150,105,0.2);
border-radius:var(--r-sm); padding:11px 14px; cursor:pointer;
}
.pd-label { font-size:9px; font-weight:700; color:var(--text3); text-transform:uppercase; letter-spacing:0.5px; }
.pd-value { font-size:22px; font-weight:800; color:var(--green); line-height:1.2; }
.pd-tap { font-size:11px; color:var(--text3); }
.cart-section {
margin:10px 16px; background:var(--surface); border-radius:var(--r);
border:1px solid var(--border); box-shadow:var(--shadow-sm); display:none;
}
.cart-section.show { display:block; }
.cart-header {
background:var(--green-lite); padding:10px 14px;
display:flex; justify-content:space-between; align-items:center;
border-bottom:1px solid rgba(5,150,105,0.1); border-radius:var(--r) var(--r) 0 0;
}
.ch-title { font-size:13px; font-weight:700; color:var(--green); }
.ch-total { font-size:14px; font-weight:800; color:var(--green-dark); }
.cart-item {
display:flex; align-items:center; justify-content:space-between;
padding:10px 14px; border-bottom:1px solid var(--border);
}
.cart-item:last-child { border-bottom:none; }
.ci-name { font-size:13px; font-weight:600; }
.ci-sub { font-size:11px; color:var(--text3); margin-top:1px; }
.ci-total { font-size:14px; font-weight:700; color:var(--green); }
.ci-remove {
width:26px; height:26px; border-radius:7px;
background:var(--danger-lite); border:none; color:var(--danger);
font-size:13px; cursor:pointer;
display:flex; align-items:center; justify-content:center; margin-left:4px;
}
.ci-edit {
width:26px; height:26px; border-radius:7px;
background:var(--gold-lite); border:none; color:var(--gold);
font-size:13px; cursor:pointer;
display:flex; align-items:center; justify-content:center; margin-left:4px;
}
/* Cart all-zero banner */
.cart-complete-banner {
display:none; margin:0 16px 8px; padding:12px 14px; border-radius:var(--r-sm);
background:var(--green-lite); border:1.5px solid rgba(26,107,60,0.2);
font-size:13px; font-weight:600; color:var(--green-dark);
text-align:center;
}
.cart-complete-banner.show { display:block; }
.item-total-box {
display:none; align-items:center; justify-content:space-between;
background:var(--surface3); border-radius:9px; padding:10px 14px;
margin-top:8px; border:1px solid var(--border);
}
.item-total-box.show { display:flex; }
.itb-label { font-size:12px; color:var(--text3); font-weight:500; }
.itb-value { font-size:18px; font-weight:800; color:var(--text); }
.cart-buttons { display:none; grid-template-columns:1fr 1fr; gap:8px; margin-top:10px; }
.cart-buttons.show { display:grid; }
/* Cart complete β€” only show done */
.cart-buttons.cart-full { grid-template-columns:1fr; }
.final-section { margin:0 16px 12px; display:none; }
.final-section.show { display:block; }
.final-card { background:var(--surface); border-radius:var(--r); border:1px solid var(--border); box-shadow:var(--shadow-sm); overflow:hidden; }
.final-card-header {
background: linear-gradient(135deg, var(--green-dark), var(--green));
padding: 14px 16px; display: flex; justify-content: space-between; align-items: center;
}
.fch-title { font-size:13px; font-weight:700; color:rgba(255,255,255,0.7); }
.fch-amount { font-size:22px; font-weight:800; color:#6ee7b7; }
.final-card-body { padding:14px; }
.profit-preview { display:none; background:var(--green-lite); border-radius:9px; padding:12px 14px; margin-top:10px; }
.profit-preview.show { display:block; }
.pp-row { display:flex; justify-content:space-between; padding:4px 0; }
.pp-label { font-size:12px; color:var(--text2); font-weight:500; }
.pp-val { font-size:14px; font-weight:700; }
.pp-val.green { color:var(--green); }
.pp-val.red { color:var(--danger); }
.pp-val.orange { color:var(--orange); }
/* ═══ DASHBOARD ═══ */
.tab-bar {
display:flex; background:var(--surface); border-bottom:1px solid var(--border);
overflow-x:auto; scrollbar-width:none; position:sticky; top:0; z-index:99;
}
.tab-bar::-webkit-scrollbar { display:none; }
.tab-btn {
flex:1; min-width:68px; padding:12px 6px; border:none; background:none;
font-size:11px; font-weight:700; color:var(--text3); cursor:pointer;
font-family:'Poppins',sans-serif;
border-bottom:2px solid transparent; margin-bottom:-1px;
white-space:nowrap; transition:all 0.15s;
}
.tab-btn.active { color:var(--green); border-bottom-color:var(--green); }
.tab-content { display:none; }
.tab-content.active { display:block; }
.stats-grid { display:grid; grid-template-columns:1fr 1fr; gap:10px; }
.stat-card {
background:var(--surface); border-radius:var(--r); padding:14px;
border:1px solid var(--border); box-shadow:var(--shadow-sm);
display:flex; flex-direction:column; gap:5px;
}
.sc-icon { font-size:20px; }
.sc-label { font-size:10px; color:var(--text3); font-weight:700; text-transform:uppercase; letter-spacing:0.5px; }
.sc-value { font-size:20px; font-weight:800; color:var(--text); line-height:1.2; }
.sc-value.green { color:var(--green); }
.sc-value.orange { color:var(--orange); }
.sc-value.gold { color:var(--gold); }
.stock-row {
background:var(--surface); border-radius:var(--r-sm); padding:12px 14px;
margin-bottom:8px; display:flex; align-items:center; justify-content:space-between;
border:1px solid var(--border);
}
.stock-row.danger { border-left:3px solid var(--danger); }
.stock-row.warning { border-left:3px solid var(--gold); }
.stock-row.good { border-left:3px solid var(--green); }
.sk-name { font-size:13px; font-weight:600; }
.sk-meta { font-size:11px; color:var(--text3); margin-top:2px; }
.sk-qty { font-size:14px; font-weight:800; }
.sk-qty.danger { color:var(--danger); }
.sk-qty.warning { color:var(--gold); }
.sk-qty.good { color:var(--green); }
.top-row {
background:var(--surface); border-radius:var(--r); padding:13px 14px;
margin-bottom:8px; border:1px solid var(--border); box-shadow:var(--shadow-sm);
}
.top-row-header { display:flex; justify-content:space-between; align-items:center; margin-bottom:6px; }
.top-row-name { font-size:14px; font-weight:700; }
.top-row-profit { font-size:15px; font-weight:800; color:var(--green); }
.top-row-stats { display:flex; gap:12px; flex-wrap:wrap; }
.top-stat { font-size:11px; color:var(--text3); }
.top-stat strong { color:var(--text2); }
/* ── EDIT PRICES TAB ── */
.price-row {
display:flex; align-items:center; padding:12px 14px;
border-bottom:1px solid var(--border); gap:10px;
}
.price-row:last-child { border-bottom:none; }
.eci-name { flex:1; font-size:13px; font-weight:600; }
.eci-price { font-size:13px; font-weight:700; color:var(--green); margin-right:4px; }
.eci-edit-btn {
padding:5px 10px; background:var(--gold-lite);
border:1px solid rgba(217,119,6,0.2); border-radius:7px;
font-size:11px; font-weight:700; color:var(--gold);
cursor:pointer; font-family:'Poppins',sans-serif;
}
.eci-edit-row {
display:none; flex-direction:column; gap:10px;
padding:14px; background:var(--surface3);
border-top:1px solid var(--border);
}
.eci-edit-row.show { display:flex; }
.eci-edit-input {
flex:1; padding:8px 12px; border:1.5px solid rgba(217,119,6,0.3);
border-radius:8px; font-size:14px; font-weight:700; color:var(--gold);
background:#fff; outline:none; font-family:'Poppins',sans-serif;
}
.eci-name-input {
flex:1; padding:8px 12px; border:1.5px solid rgba(26,107,60,0.25);
border-radius:8px; font-size:14px; font-weight:700; color:var(--text);
background:#fff; outline:none; font-family:'Poppins',sans-serif;
}
/* ── HISTORY TAB ── */
.hist-filter {
display:flex; align-items:center; gap:6px;
padding:10px 14px; background:var(--surface3);
border-bottom:1px solid var(--border); flex-wrap:wrap;
}
.hist-filter input[type="date"] {
flex:1; min-width:0; padding:6px 9px; font-size:11px; font-weight:600;
border:1px solid var(--border); border-radius:7px; background:var(--surface);
color:var(--text2); font-family:'Poppins',sans-serif; outline:none;
}
.hist-filter input[type="date"]:focus { border-color:var(--green); }
.hist-filter .sep { font-size:11px; color:var(--text3); }
.hist-filter .go-btn {
padding:6px 12px; background:var(--green); color:#fff; border:none;
border-radius:7px; font-size:11px; font-weight:700; cursor:pointer;
font-family:'Poppins',sans-serif; white-space:nowrap;
}
.hist-day-row {
background:var(--surface); margin:0 16px 8px; border-radius:var(--r);
border:1px solid var(--border); overflow:hidden; cursor:pointer;
}
.hdr-head {
display:flex; align-items:center; justify-content:space-between;
padding:12px 14px;
}
.hdr-date { font-size:13px; font-weight:700; color:var(--text); }
.hdr-dow { font-size:11px; color:var(--text3); font-weight:500; }
.hdr-right { display:flex; align-items:center; gap:10px; }
.hdr-profit { font-size:14px; font-weight:800; color:var(--green); }
.hdr-items { font-size:11px; color:var(--text3); font-weight:600; }
.hdr-chevron { font-size:12px; color:var(--text3); transition:transform 0.2s; }
.hdr-chevron.open { transform:rotate(180deg); }
.hdr-detail {
display:none; border-top:1px solid var(--border);
padding:10px 14px; background:var(--surface2);
}
.hdr-detail.show { display:block; }
.hdr-detail-grid {
display:grid; grid-template-columns:1fr 1fr; gap:8px; margin-bottom:8px;
}
.hd-cell { background:var(--surface); border-radius:8px; padding:8px 10px; border:1px solid var(--border); }
.hd-lbl { font-size:10px; color:var(--text3); font-weight:600; text-transform:uppercase; letter-spacing:0.5px; }
.hd-val { font-size:14px; font-weight:800; margin-top:2px; }
.hd-val.green { color:var(--green); }
.hd-val.orange { color:var(--orange); }
.hist-empty { text-align:center; padding:40px 20px; color:var(--text3); }
.hist-loading { text-align:center; padding:30px; color:var(--text3); font-size:13px; }
.hdr-left { display:flex; flex-direction:column; gap:2px; }
.hdr-summary { display:flex; flex-direction:column; align-items:flex-end; gap:1px; }
.hist-section-label {
font-size:11px; font-weight:700; text-transform:uppercase; letter-spacing:0.8px;
color:var(--text3); padding:8px 0 6px; border-top:1px solid var(--border); margin-top:4px;
}
.hist-items-list { border-radius:var(--r-sm); overflow:hidden; border:1px solid var(--border); margin-bottom:4px; }
.hist-sale-row {
display:flex; align-items:center; justify-content:space-between;
padding:10px 12px; background:var(--surface);
border-bottom:1px solid var(--border);
}
.hist-sale-row:last-child { border-bottom:none; }
.hsr-left { flex:1; }
.hsr-name { font-size:13px; font-weight:700; color:var(--text); }
.hsr-meta { font-size:11px; color:var(--text3); margin-top:2px; display:flex; align-items:center; gap:6px; flex-wrap:wrap; }
.hsr-bargain {
background:var(--orange-lite); color:var(--orange);
font-size:10px; font-weight:600; padding:1px 6px; border-radius:10px;
text-decoration:line-through;
}
.hsr-right { text-align:right; }
.hsr-total { font-size:14px; font-weight:800; color:var(--green); }
.hsr-profit { font-size:10px; font-weight:600; color:var(--green-mid); margin-top:1px; }
.hist-buy-row {
display:flex; align-items:center; justify-content:space-between;
padding:10px 12px; background:var(--surface);
border-bottom:1px solid var(--border);
}
.hist-buy-row:last-child { border-bottom:none; }
.hbr-name { font-size:13px; font-weight:700; color:var(--text); }
.hbr-meta { font-size:11px; color:var(--text3); margin-top:2px; }
.hbr-total { font-size:14px; font-weight:800; color:var(--orange); }
.hist-type-bar {
display:flex; gap:6px; padding:10px 14px; background:var(--surface);
border-bottom:1px solid var(--border);
}
.htype-btn {
padding:5px 12px; border-radius:20px; font-size:11px; font-weight:700;
border:1px solid var(--border); background:var(--surface3); color:var(--text2);
cursor:pointer; font-family:'Poppins',sans-serif;
}
.htype-btn.active { background:var(--green); color:#fff; border-color:var(--green); }
/* ── EMPTY STATE ── */
.empty-state { text-align:center; padding:40px 20px; color:var(--text3); }
.es-icon { font-size:44px; margin-bottom:10px; }
.es-title { font-size:14px; font-weight:600; color:var(--text2); margin-bottom:5px; }
.es-sub { font-size:12px; }
/* ── TOAST ── */
.toast {
display: none; position: fixed;
bottom: calc(var(--nav-h) + 16px); left: 50%; transform: translateX(-50%);
background: var(--green-dark); color: white;
padding: 12px 22px; border-radius: 30px; font-size: 13px; font-weight: 600;
z-index: 500; box-shadow: var(--shadow-lg);
white-space: nowrap; max-width: 90vw; text-align: center;
}
.toast.show { display: block; animation: toastIn 0.3s ease; }
@keyframes toastIn {
from { opacity:0; transform:translateX(-50%) translateY(10px); }
to { opacity:1; transform:translateX(-50%) translateY(0); }
}
/* ── SETTINGS MODAL ── */
.modal-backdrop {
display:none; position:fixed; inset:0; background:rgba(0,0,0,0.5); z-index:600; overflow-y:auto;
}
.modal-backdrop.show { display:block; }
.modal-sheet {
background:var(--surface); border-radius:var(--r) var(--r) 0 0;
margin-top:80px; min-height:calc(100vh - 80px);
max-width:480px; margin-left:auto; margin-right:auto;
}
.modal-header {
background:linear-gradient(135deg,var(--green-dark),var(--green));
padding:14px 16px; border-radius:var(--r) var(--r) 0 0;
display:flex; justify-content:space-between; align-items:center;
position:sticky; top:0; z-index:10;
}
.modal-title { font-size:15px; font-weight:800; color:#fff; }
.modal-close {
background:rgba(255,255,255,0.15); border:none; color:#fff;
width:32px; height:32px; border-radius:8px; font-size:18px;
cursor:pointer; display:flex; align-items:center; justify-content:center;
}
.modal-body { padding:16px; }
/* ── CONFIRM DIALOG ── */
.confirm-overlay {
display:none; position:fixed; inset:0; background:rgba(0,0,0,0.5);
z-index:700; align-items:center; justify-content:center;
}
.confirm-overlay.show { display:flex; }
.confirm-box {
background:var(--surface); border-radius:var(--r); padding:20px;
width:calc(100% - 48px); max-width:340px; box-shadow:var(--shadow-lg);
}
.confirm-title { font-size:15px; font-weight:800; margin-bottom:8px; }
.confirm-msg { font-size:13px; color:var(--text2); margin-bottom:18px; line-height:1.5; }
.confirm-btns { display:flex; gap:10px; }
/* ── EDIT CART ITEM ── */
.edit-cart-overlay {
display:none; position:fixed; inset:0; background:rgba(0,0,0,0.5);
z-index:700; align-items:flex-end; justify-content:center;
}
.edit-cart-overlay.show { display:flex; }
.edit-cart-box {
background:var(--surface); border-radius:var(--r) var(--r) 0 0;
padding:20px; width:100%; max-width:480px; box-shadow:var(--shadow-lg);
}
.edit-cart-title { font-size:15px; font-weight:800; margin-bottom:14px; color:var(--text); }
/* ── BUY SCREEN TAB BAR ── */
.buy-tab-bar {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
background: var(--surface);
border-radius: var(--r-sm);
border: 1px solid var(--border);
overflow: hidden;
margin-bottom: 10px;
box-shadow: var(--shadow-sm);
}
.buy-tab-btn {
display: flex;
flex-direction: column;
align-items: center;
justify-content: center;
gap: 3px;
padding: 14px 4px;
border: none;
background: transparent;
cursor: pointer;
font-family: 'Poppins', sans-serif;
border-right: 1px solid var(--border);
transition: background 0.15s;
-webkit-tap-highlight-color: transparent;
}
.buy-tab-btn:last-child { border-right: none; }
.buy-tab-btn:active { opacity: 0.7; }
.btab-icon { font-size: 22px; line-height: 1; }
.btab-label { font-size: 12px; font-weight: 700; color: var(--text3); }
.buy-tab-btn.active { background: var(--green-lite); }
.buy-tab-btn.active .btab-label { color: var(--green); }
.buy-tab-panel {
background: var(--surface);
border-radius: var(--r-sm);
border: 1px solid var(--border);
padding: 14px;
box-sizing: border-box;
width: 100%;
box-shadow: var(--shadow-sm);
}