/* ===== PharmaPOS — Premium UI theme ===== */
:root{
  --brand:#5b5fef; --brand-dark:#4347c7; --brand-light:#eef0ff;
  --accent:#17c3b2; --warn:#f59e0b; --danger:#ef4444; --success:#22c55e;
  --ink:#111827; --muted:#6b7280; --soft:#f6f7fb; --card-radius:16px;
  --shadow-sm:0 1px 2px rgba(17,24,39,.06), 0 1px 1px rgba(17,24,39,.04);
  --shadow-md:0 8px 24px -8px rgba(76,81,191,.18), 0 2px 8px rgba(17,24,39,.04);
  --shadow-lg:0 20px 40px -16px rgba(76,81,191,.28);
}
body{ background:var(--soft); color:var(--ink); font-family:'Plus Jakarta Sans',system-ui,-apple-system,sans-serif; }

/* ---- Cards ---- */
.card{ border:none; border-radius:var(--card-radius); box-shadow:var(--shadow-sm); transition:box-shadow .25s ease, transform .25s ease; }
.card:hover{ box-shadow:var(--shadow-md); }
.stat-card{ border-radius:var(--card-radius); background:#fff; box-shadow:var(--shadow-sm); transition:transform .2s ease, box-shadow .2s ease; position:relative; overflow:hidden; }
.stat-card:hover{ transform:translateY(-3px); box-shadow:var(--shadow-md); }
.stat-card .stat-icon{ width:46px; height:46px; border-radius:12px; display:flex; align-items:center; justify-content:center; font-size:1.3rem; }

/* ---- Buttons: subtle lift + ripple-ish feel ---- */
.btn{ border-radius:10px; font-weight:600; transition:transform .15s ease, box-shadow .15s ease, filter .15s ease; }
.btn:active{ transform:scale(.97); }
.btn-primary{ background:linear-gradient(135deg,var(--brand),var(--brand-dark)); border:none; box-shadow:0 4px 12px -4px rgba(91,95,239,.55); }
.btn-primary:hover{ filter:brightness(1.07); box-shadow:0 6px 18px -4px rgba(91,95,239,.65); transform:translateY(-1px); }
.btn-success{ background:linear-gradient(135deg,#22c55e,#16a34a); border:none; }
.btn-lg{ border-radius:12px; }

/* ---- Navbar ---- */
.navbar.bg-primary{ background:linear-gradient(120deg,var(--brand-dark),var(--brand) 55%,#6f73ff) !important; box-shadow:0 2px 16px rgba(76,81,191,.25); }
.navbar .nav-link{ font-weight:500; opacity:.92; transition:opacity .15s, transform .15s; }
.navbar .nav-link:hover{ opacity:1; transform:translateY(-1px); }
.navbar-brand{ letter-spacing:.2px; }
.navbar-brand i, .navbar .nav-link i{ transition:transform .2s ease; }
.navbar-brand:hover i{ transform:rotate(-8deg) scale(1.1); }

/* ---- Badges ---- */
.badge{ border-radius:7px; font-weight:600; letter-spacing:.2px; }

/* ---- Tables ---- */
.table-hover tbody tr{ transition:background-color .15s ease; }
.table-hover tbody tr:hover{ background-color:var(--brand-light); }

/* ---- Auth screens ---- */
.auth-wrap{ min-height:100vh; display:flex; align-items:center; justify-content:center; background:radial-gradient(circle at top left,#6f73ff,var(--brand) 45%,var(--brand-dark) 100%); }
.auth-card{ max-width:420px; width:100%; border-radius:20px; box-shadow:var(--shadow-lg); animation:floatIn .5s ease both; }

/* ---- Modals ---- */
.modal-content{ border-radius:18px; border:none; box-shadow:var(--shadow-lg); }

/* ---- Fade/lift entrance for cards on load ---- */
@keyframes floatIn{ from{ opacity:0; transform:translateY(14px) scale(.98); } to{ opacity:1; transform:translateY(0) scale(1); } }
.card, .stat-card{ animation:floatIn .4s ease both; }

/* ---- Icon chips used across dashboards ---- */
.icon-chip{ width:40px; height:40px; border-radius:11px; display:inline-flex; align-items:center; justify-content:center; background:var(--brand-light); color:var(--brand); font-size:1.1rem; }

/* ---- Pulse for notification bell ---- */
@keyframes pulseDot{ 0%{ box-shadow:0 0 0 0 rgba(239,68,68,.55);} 70%{ box-shadow:0 0 0 7px rgba(239,68,68,0);} 100%{ box-shadow:0 0 0 0 rgba(239,68,68,0);} }
.badge.bg-danger.rounded-pill{ animation:pulseDot 1.8s infinite; }

/* ---- Scrollbar polish ---- */
::-webkit-scrollbar{ width:10px; height:10px; }
::-webkit-scrollbar-thumb{ background:#d7d9f0; border-radius:10px; }
::-webkit-scrollbar-thumb:hover{ background:var(--brand); }

/* ===== Sidebar shell ===== */
:root{ --sb-w:252px; --sb-bg-1:#141934; --sb-bg-2:#1f2550; --sb-bg-3:#2d2f8c; }
body.has-sidebar{ background:var(--soft); }
.pp-sidebar{
  position:fixed; top:0; left:0; bottom:0; width:var(--sb-w); z-index:1040;
  background:linear-gradient(180deg,var(--sb-bg-1),var(--sb-bg-2) 60%,var(--sb-bg-3));
  display:flex; flex-direction:column; overflow-y:auto; overflow-x:hidden;
  box-shadow:4px 0 24px rgba(10,12,30,.25);
  transition:transform .25s ease;
}
.pp-brand{ padding:20px 18px 14px; }
.pp-brand a{ display:flex; align-items:center; gap:10px; color:#fff; text-decoration:none; font-weight:800; font-size:1.15rem; }
.pp-brand i{ font-size:1.6rem; color:#ffc93c; }
.pp-nav{ flex:1; padding:6px 10px 10px; }
.side-link{
  display:flex; align-items:center; gap:12px; padding:11px 12px; margin:2px 0;
  border-radius:11px; color:rgba(255,255,255,.78); text-decoration:none; font-weight:600; font-size:.92rem;
  transition:background .15s ease, color .15s ease; cursor:pointer;
}
.side-link i:first-child{ font-size:1.2rem; width:20px; text-align:center; flex-shrink:0; }
.side-link .side-caret{ margin-left:auto; font-size:.85rem; transition:transform .2s ease; }
.side-link.collapsed .side-caret{ transform:rotate(-90deg); }
.side-link:hover{ background:rgba(255,255,255,.08); color:#fff; }
.side-link.active{ background:linear-gradient(120deg,#ffc93c,#ffb703); color:#1a1a2e; box-shadow:0 4px 14px -4px rgba(255,201,60,.5); }
.side-link-accent{ color:#7dd8ff; }
.side-sub{ display:flex; flex-direction:column; padding:2px 0 6px 40px; }
.side-sub a{ padding:8px 10px; border-radius:8px; color:rgba(255,255,255,.62); text-decoration:none; font-size:.86rem; font-weight:500; }
.side-sub a:hover{ background:rgba(255,255,255,.07); color:#fff; }
.side-sub a.active{ color:#ffc93c; font-weight:700; }
.pp-sidebar-footer{ padding:10px; border-top:1px solid rgba(255,255,255,.08); }
.pp-user{ display:flex; align-items:center; gap:10px; padding:10px 12px; }
.pp-user-avatar{ width:38px; height:38px; border-radius:50%; background:linear-gradient(135deg,#ffc93c,#ff8a3c); color:#1a1a2e; font-weight:800; display:flex; align-items:center; justify-content:center; flex-shrink:0; }
.pp-user-name{ color:#fff; font-weight:700; font-size:.85rem; line-height:1.2; }
.pp-user-role{ color:rgba(255,255,255,.55); font-size:.72rem; }

.pp-main{ margin-left:var(--sb-w); min-height:100vh; display:flex; flex-direction:column; }
.pp-topbar{ display:flex; align-items:center; gap:12px; padding:14px 22px; background:#fff; box-shadow:var(--shadow-sm); position:sticky; top:0; z-index:1020; }
.pp-topbar-title{ font-weight:700; font-size:1.05rem; color:var(--ink); }
.pp-content{ padding:22px; flex:1; }
.sidebar-toggle, .sidebar-toggle-inline{ border:none; background:#fff; box-shadow:var(--shadow-sm); border-radius:10px; width:40px; height:40px; }
.sidebar-toggle{ position:fixed; top:14px; left:14px; z-index:1050; }
.sidebar-backdrop{ display:none; position:fixed; inset:0; background:rgba(10,12,30,.5); z-index:1030; }

@media (max-width: 991.98px){
  .pp-sidebar{ transform:translateX(-100%); }
  .pp-sidebar.open{ transform:translateX(0); }
  .pp-main{ margin-left:0; }
  .sidebar-backdrop.show{ display:block; }
}
@media (min-width: 992px){ .sidebar-toggle{ display:none; } }

/* ---- Dashboard status rings + quick-action tiles ---- */
.status-ring-card{ background:linear-gradient(135deg,#fafbff,#f3f4ff); }
.status-ring{
  width:76px; height:76px; border-radius:50%; margin:0 auto; display:flex; align-items:center; justify-content:center;
  color:#fff; font-size:1.6rem; box-shadow:0 8px 20px -8px rgba(0,0,0,.25); position:relative;
}
.status-ring::after{ content:''; position:absolute; inset:7px; border-radius:50%; background:#fff; }
.status-ring i{ position:relative; z-index:1; -webkit-text-stroke:0; color:inherit; filter:none; }
.status-ring[style*="22c55e"] i{ color:#22c55e; }
.status-ring[style*="f59e0b"] i{ color:#f59e0b; }
.status-ring[style*="ef4444"] i{ color:#ef4444; }
.quick-tile{ display:flex; flex-direction:column; align-items:center; gap:8px; text-align:center; color:var(--ink); font-weight:600; font-size:.82rem; }
.quick-tile-icon{ width:54px; height:54px; border-radius:16px; display:flex; align-items:center; justify-content:center; color:#fff; font-size:1.4rem; box-shadow:0 8px 18px -8px rgba(0,0,0,.35); transition:transform .15s ease; }
.quick-tile:hover .quick-tile-icon{ transform:translateY(-3px) scale(1.05); }

/* ---- Live topbar clock ---- */
.pp-clock{ line-height:1.25; padding:4px 14px; border-radius:10px; background:var(--brand-light); }
.pp-clock-time{ font-weight:800; font-size:.95rem; color:var(--brand-dark); font-variant-numeric:tabular-nums; letter-spacing:.3px; }
.pp-clock-date{ font-size:.7rem; font-weight:600; }

/* ---- Balance / KPI pastel cards ---- */
.balance-card{ border-radius:var(--card-radius); padding:16px 18px; display:flex; align-items:center; gap:14px; position:relative; overflow:hidden; }
.balance-card .balance-icon{ width:48px; height:48px; border-radius:14px; display:flex; align-items:center; justify-content:center; font-size:1.3rem; flex-shrink:0; color:#fff; }
.balance-card .balance-label{ font-size:.76rem; font-weight:700; opacity:.75; text-transform:uppercase; letter-spacing:.3px; }
.balance-card .balance-amount{ font-size:1.25rem; font-weight:800; }
.balance-cash{ background:linear-gradient(135deg,#fff6e0,#ffe8b3); } .balance-cash .balance-icon{ background:#f59e0b; }
.balance-bank{ background:linear-gradient(135deg,#e7f0ff,#c9e0ff); } .balance-bank .balance-icon{ background:#2563eb; }
.balance-online{ background:linear-gradient(135deg,#e8fff6,#c3f7e4); } .balance-online .balance-icon{ background:#17c3b2; }
.balance-total{ background:linear-gradient(135deg,#f1ecff,#dcd0ff); } .balance-total .balance-icon{ background:#7c3aed; }

/* ---- Dark "info" card (medicine status etc.) ---- */
.dark-card{ background:linear-gradient(145deg,#161a3a,#232a63); border-radius:var(--card-radius); color:#fff; }
.dark-card .status-ring::after{ background:#1b2050; }
.dark-card .text-muted{ color:rgba(255,255,255,.55) !important; }

/* ---- Tabbed dashboard cards ---- */
.tab-card{ border-radius:var(--card-radius); overflow:hidden; }
.tab-card-head{ display:flex; align-items:center; justify-content:space-between; gap:10px; padding:14px 16px; flex-wrap:wrap; }
.tab-card-head h6{ margin:0; font-weight:800; }
.tab-pills{ display:flex; gap:6px; background:rgba(0,0,0,.05); padding:4px; border-radius:10px; flex-wrap:wrap; }
.tab-pills .tab-pill{ border:none; background:transparent; font-size:.74rem; font-weight:700; padding:5px 11px; border-radius:7px; color:var(--muted); cursor:pointer; transition:all .15s ease; }
.tab-pills .tab-pill.active{ background:#fff; color:var(--ink); box-shadow:var(--shadow-sm); }
.tab-card-body{ padding:0 16px 16px; }
.tab-pane-custom{ display:none; }
.tab-pane-custom.active{ display:block; }
.pnl-box{ border-radius:12px; padding:14px; text-align:center; }
.pnl-revenue{ background:#eafbea; } .pnl-cost{ background:#fdeaea; } .pnl-profit{ background:#eef0ff; }

/* ---- Expiry + invoices/dues small boxes ---- */
.mini-stat-box{ border-radius:14px; padding:14px 16px; color:#fff; }
.mini-stat-box .mini-stat-label{ font-size:.72rem; font-weight:700; text-transform:uppercase; opacity:.85; letter-spacing:.3px; }
.mini-stat-box .mini-stat-value{ font-size:1.4rem; font-weight:800; }
.box-expired{ background:linear-gradient(135deg,#c0392b,#962d22); }
.box-expiring{ background:linear-gradient(135deg,#ef4444,#b91c1c); }
.box-invoices{ background:linear-gradient(135deg,#2563eb,#1e40af); }
.box-dues{ background:linear-gradient(135deg,#f59e0b,#b45309); }
.help-box{ border-radius:var(--card-radius); background:linear-gradient(135deg,#eef0ff,#dfe3ff); padding:18px; text-align:center; }

/* ===== POS billing screen — purple theme ===== */
:root{ --pos-purple:#6d28d9; --pos-purple-dark:#4c1d95; --pos-purple-light:#f3edff; }
.pos-topbar{ background:linear-gradient(120deg,var(--pos-purple-dark),var(--pos-purple) 70%); border-radius:16px; padding:14px 16px; color:#fff; margin-bottom:14px; }
.pos-topbar .form-select, .pos-topbar .form-control{ border:none; }
.pos-scanner-toggle{ display:inline-flex; align-items:center; gap:8px; background:rgba(255,255,255,.14); border-radius:10px; padding:7px 12px; font-weight:700; font-size:.82rem; cursor:pointer; user-select:none; color:#fff; }
.pos-scanner-toggle .dot{ width:9px; height:9px; border-radius:50%; background:#22c55e; box-shadow:0 0 0 0 rgba(34,197,94,.6); animation:pulseDot2 1.6s infinite; }
.pos-scanner-toggle.paused .dot{ background:#f59e0b; animation:none; }
@keyframes pulseDot2{ 0%{box-shadow:0 0 0 0 rgba(34,197,94,.55);} 70%{box-shadow:0 0 0 6px rgba(34,197,94,0);} 100%{box-shadow:0 0 0 0 rgba(34,197,94,0);} }

.product-grid{ display:grid; grid-template-columns:repeat(auto-fill,minmax(130px,1fr)); gap:10px; max-height:520px; overflow-y:auto; padding-right:4px; }
.product-tile{ background:#fff; border-radius:14px; box-shadow:var(--shadow-sm); padding:10px; text-align:center; position:relative; transition:transform .15s ease, box-shadow .15s ease; cursor:pointer; border:1px solid #f0f0f5; }
.product-tile:hover{ transform:translateY(-3px); box-shadow:var(--shadow-md); border-color:var(--pos-purple); }
.product-tile .pt-icon{ width:52px; height:52px; margin:0 auto 6px; border-radius:12px; background:var(--pos-purple-light); color:var(--pos-purple); display:flex; align-items:center; justify-content:center; font-size:1.5rem; position:relative; }
.product-tile .pt-stock-badge{ position:absolute; top:-6px; right:-6px; background:#f59e0b; color:#fff; font-size:.62rem; font-weight:800; padding:2px 6px; border-radius:20px; box-shadow:var(--shadow-sm); }
.product-tile .pt-name{ font-size:.78rem; font-weight:700; line-height:1.2; margin-bottom:4px; min-height:2.2em; overflow:hidden; display:-webkit-box; -webkit-line-clamp:2; -webkit-box-orient:vertical; }
.product-tile .pt-price{ display:inline-block; background:#eafbea; color:#15803d; font-weight:800; font-size:.75rem; padding:2px 10px; border-radius:20px; margin-bottom:6px; }
.product-tile .pt-batch-btn{ font-size:.68rem; padding:3px 8px; width:100%; }

.pos-cart-card{ background:linear-gradient(160deg,#f6f2ff,#fff); border:1px solid #eee5ff; border-radius:16px; }
.pos-cart-card .table{ margin-bottom:0; }

.pos-pay-bar{ background:linear-gradient(120deg,var(--pos-purple-dark),var(--pos-purple) 75%); border-radius:16px; padding:14px 16px; color:#fff; margin-top:12px; }
.pos-pay-field{ background:rgba(255,255,255,.12); border-radius:10px; padding:8px 10px; }
.pos-pay-field label{ font-size:.68rem; opacity:.8; text-transform:uppercase; font-weight:700; letter-spacing:.3px; display:block; margin-bottom:2px; }
.pos-pay-field .val{ font-size:1rem; font-weight:800; }
.pos-pay-quick-btn{ border:1px solid rgba(255,255,255,.28); background:rgba(255,255,255,.14); color:#fff; border-radius:10px; padding:10px 6px; font-weight:800; font-size:.76rem; width:100%; transition:background .15s ease, transform .1s ease, box-shadow .15s ease; }
.pos-pay-quick-btn:hover{ background:rgba(255,255,255,.26); }
.pos-pay-quick-btn:active{ transform:scale(.97); }
.pos-pay-action{ background:#fff; color:var(--pos-purple-dark); border-color:#fff; }
.pos-pay-action:hover{ background:#f3edff; }
.pos-pay-method.active{ background:#22c55e; border-color:#16a34a; color:#fff; box-shadow:0 6px 16px -6px rgba(34,197,94,.8); }
.pos-pay-method.active::before{ content:"\2713\00a0"; }

/* ---- mobile polish ---- */
.pnl-val{ font-weight:800; font-size:clamp(.95rem,3.6vw,1.25rem); white-space:nowrap; }
.tab-card .table td, .tab-card .table th{ white-space:nowrap; font-size:.82rem; }
@media (max-width: 991.98px){
  .pp-sidebar{ box-shadow:none; }
  .pp-sidebar.open{ box-shadow:4px 0 24px rgba(10,12,30,.25); }
}
/* only the inline topbar toggle is needed; the floating one duplicated it */
.sidebar-toggle{ display:none !important; }

.quick-actions .quick-tile-main .quick-tile-icon{ box-shadow:0 10px 22px -8px rgba(109,40,217,.7); }
.quick-actions .quick-tile-main{ font-weight:800; }
.pp-newsale{ border-radius:10px; font-weight:700; white-space:nowrap; }

/* ---- branding, developer footer, admin alerts ---- */
.pp-brand-logo{ width:38px; height:38px; border-radius:10px; object-fit:contain; background:#fff; padding:3px; flex-shrink:0; }
.pp-brand-text{ overflow:hidden; text-overflow:ellipsis; white-space:nowrap; max-width:170px; line-height:1.15; }
.pp-devfooter{ text-align:center; padding:14px 12px 18px; font-size:.8rem; color:#94a3b8; }
.pp-devfooter a{ color:#6d28d9; }
footer .pp-devfooter{ padding:0; color:#94a3b8; } footer .pp-devfooter a{ color:#cbd5e1; }
.pp-impersonate{ background:#fff3cd; color:#664d03; border-bottom:1px solid #ffe69c; padding:8px 22px; font-size:.88rem; }
.pp-alertbar{ border-radius:14px; padding:12px 16px; margin-bottom:14px; display:flex; gap:12px; align-items:flex-start; border:1px solid transparent; }
.pp-alertbar.warning{ background:#fff8e1; border-color:#ffe08a; color:#6b4e00; }
.pp-alertbar.danger{ background:#fdecec; border-color:#f5b5b5; color:#7a1d1d; }
.pp-alertbar.info{ background:#e8f3ff; border-color:#b6d8ff; color:#0b3a6b; }
.pp-alertbar.success{ background:#e7f7ec; border-color:#a7dfb8; color:#12502a; }
.pp-alertbar .btn-close{ margin-left:auto; }

/* ================= Motion polish (v20261012e) ================= */
body{ animation:ppFade .35s ease both; }
@keyframes ppFade{ from{ opacity:0; } to{ opacity:1; } }
.card:hover{ transform:translateY(-2px); }
.btn{ position:relative; overflow:hidden; transition:transform .15s ease, box-shadow .2s ease, background-color .2s ease; }
.btn:active{ transform:scale(.97); }
.btn-primary:hover{ box-shadow:0 8px 20px -8px rgba(79,70,229,.7); transform:translateY(-1px); }
.fx-ripple{ position:absolute; border-radius:50%; background:rgba(255,255,255,.45); transform:scale(0); animation:fxRipple .6s ease-out forwards; pointer-events:none; }
@keyframes fxRipple{ to{ transform:scale(2.6); opacity:0; } }
.side-link{ transition:background-color .2s ease, transform .2s ease, padding-left .2s ease; }
.side-link:hover{ transform:translateX(3px); }
.side-sub a{ transition:color .2s ease, transform .2s ease; }
.side-sub a:hover{ transform:translateX(3px); }
.table-hover tbody tr{ transition:background-color .2s ease, transform .2s ease; }
.pp-newsale{ animation:ppGlow 3s ease-in-out infinite; }
@keyframes ppGlow{ 0%,100%{ box-shadow:0 0 0 0 rgba(79,70,229,.0); } 50%{ box-shadow:0 0 0 6px rgba(79,70,229,.14); } }
.status-ring{ animation:ringPop .7s cubic-bezier(.2,.9,.3,1.3) both; }
@keyframes ringPop{ from{ transform:scale(.4) rotate(-120deg); opacity:0; } to{ transform:scale(1) rotate(0); opacity:1; } }
.alert{ animation:floatIn .4s ease both; }
.pp-brand-logo, .pp-brand i{ transition:transform .4s ease; }
.pp-brand:hover .pp-brand-logo, .pp-brand:hover i{ transform:rotate(-8deg) scale(1.08); }

/* ---- Wellness reminders ---- */
.well-host{ position:relative; }
.well-btn{ width:36px; height:36px; border-radius:50%; border:0; background:#fee2e2; color:#ef4444; font-size:1.05rem; display:inline-flex; align-items:center; justify-content:center; animation:heartBeat 2.4s ease-in-out infinite; }
.well-btn:hover{ background:#fecaca; }
@keyframes heartBeat{ 0%,60%,100%{ transform:scale(1); } 15%{ transform:scale(1.18); } 30%{ transform:scale(1); } 40%{ transform:scale(1.12); } }
.well-panel{ position:absolute; right:0; top:46px; width:290px; background:#fff; border-radius:16px; box-shadow:0 20px 50px -12px rgba(15,23,42,.35); padding:14px; z-index:1050; opacity:0; transform:translateY(-8px) scale(.97); pointer-events:none; transition:all .2s ease; }
.well-panel.open{ opacity:1; transform:none; pointer-events:auto; }
.well-head{ display:flex; justify-content:space-between; align-items:center; }
.well-sub{ font-size:.78rem; color:#64748b; margin:2px 0 8px; }
.well-row{ display:flex; justify-content:space-between; align-items:center; padding:6px 0; border-bottom:1px solid #f1f5f9; font-size:.88rem; cursor:pointer; }
.well-row small{ color:#94a3b8; }
.well-stats{ display:grid; grid-template-columns:repeat(4,1fr); gap:6px; margin:10px 0; text-align:center; }
.well-stats div{ background:#f8fafc; border-radius:10px; padding:6px 2px; }
.well-stats b{ display:block; font-size:1.05rem; }
.well-stats span{ font-size:.62rem; color:#64748b; }
.well-toasts{ position:fixed; right:18px; bottom:18px; z-index:2000; display:flex; flex-direction:column; gap:10px; }
.well-toast{ width:min(340px,calc(100vw - 36px)); background:#fff; border-radius:16px; box-shadow:0 24px 60px -14px rgba(15,23,42,.45); padding:14px; display:flex; gap:12px; position:relative; overflow:hidden; transform:translateX(120%); opacity:0; transition:all .45s cubic-bezier(.2,.9,.3,1.2); }
.well-toast.in{ transform:none; opacity:1; }
.well-ico{ font-size:2rem; line-height:1; animation:bob2 2s ease-in-out infinite; }
@keyframes bob2{ 50%{ transform:translateY(-4px) rotate(-6deg); } }
.well-body p{ margin:2px 0 8px; font-size:.84rem; color:#475569; }
.well-act{ display:flex; gap:6px; }
.well-bar{ position:absolute; left:0; bottom:0; height:3px; background:linear-gradient(90deg,#22c55e,#06b6d4); animation:wellBar 30s linear forwards; }
@keyframes wellBar{ from{ width:100%; } to{ width:0; } }
.well-overlay{ position:fixed; right:18px; bottom:18px; z-index:2000; width:230px; background:linear-gradient(160deg,#064e3b,#047857); border-radius:18px; box-shadow:0 24px 60px -14px rgba(15,23,42,.45); opacity:0; transform:translateY(20px); transition:all .4s ease; }
.well-overlay.in{ opacity:1; transform:none; }
.well-card{ text-align:center; color:#fff; padding:14px 14px 12px; font-size:.78rem; }
.well-card p{ margin:4px 0 8px; opacity:.85; }
.well-orb{ width:96px; height:96px; border-radius:50%; margin:0 auto 6px; background:radial-gradient(circle at 35% 30%,#a7f3d0,#34d399 55%,#059669); display:flex; align-items:center; justify-content:center; font-weight:700; font-size:.72rem; color:#064e3b; animation:breathe 8s ease-in-out infinite; box-shadow:0 0 30px rgba(52,211,153,.5); }
@keyframes breathe{ 0%,100%{ transform:scale(.7); } 50%{ transform:scale(1.1); } }
.well-time{ font-size:1.3rem; font-weight:800; }
@media (prefers-reduced-motion:reduce){ body,.card,.btn,.pp-newsale,.status-ring,.well-btn,.well-ico,.well-orb,.alert{ animation:none!important; transition:none!important; } .card:hover{ transform:none; } }

/* ================= More motion (v20261012g) ================= */
body.pp-leaving .pp-main, body.pp-leaving .pp-content{ opacity:0; transform:translateY(8px); transition:opacity .16s ease, transform .16s ease; }
.fx-busy{ pointer-events:none; opacity:.85; }
.fx-busy::after{ content:''; display:inline-block; width:.9em; height:.9em; margin-left:.5em; vertical-align:-.12em; border:2px solid currentColor; border-right-color:transparent; border-radius:50%; animation:fxSpin .6s linear infinite; }
@keyframes fxSpin{ to{ transform:rotate(360deg); } }
/* modals & dropdowns */
.modal.fade .modal-dialog{ transform:translateY(24px) scale(.95); transition:transform .3s cubic-bezier(.2,.9,.3,1.25), opacity .25s; }
.modal.show .modal-dialog{ transform:none; }
.dropdown-menu.show{ animation:ddIn .18s ease both; transform-origin:top right; }
@keyframes ddIn{ from{ opacity:0; transform:translateY(-6px) scale(.97); } to{ opacity:1; transform:none; } }
/* forms */
.form-control, .form-select{ transition:border-color .2s ease, box-shadow .25s ease, transform .2s ease; }
.form-control:focus, .form-select:focus{ box-shadow:0 0 0 .22rem rgba(79,70,229,.16); }
.form-check-input{ transition:transform .15s ease, background-color .2s ease, border-color .2s ease, background-position .2s ease; }
.form-check-input:active{ transform:scale(.85); }
.form-check-input:checked{ animation:popCheck .25s ease; }
@keyframes popCheck{ 50%{ transform:scale(1.2); } }
/* tables: rows slide in */
.pp-content tbody tr{ animation:rowIn .35s ease both; }
.pp-content tbody tr:nth-child(1){animation-delay:.04s}.pp-content tbody tr:nth-child(2){animation-delay:.08s}.pp-content tbody tr:nth-child(3){animation-delay:.12s}.pp-content tbody tr:nth-child(4){animation-delay:.16s}.pp-content tbody tr:nth-child(5){animation-delay:.2s}.pp-content tbody tr:nth-child(n+6){animation-delay:.24s}
@keyframes rowIn{ from{ opacity:0; transform:translateX(-10px); } to{ opacity:1; transform:none; } }
/* sidebar active link accent bar + icon wiggle */
.side-link{ position:relative; }
.side-link.active::before{ content:''; position:absolute; left:0; top:20%; bottom:20%; width:3px; border-radius:3px; background:#fbbf24; animation:barIn .3s ease both; }
@keyframes barIn{ from{ transform:scaleY(0); } to{ transform:scaleY(1); } }
.side-link:hover i:first-child{ animation:wiggle .5s ease; }
@keyframes wiggle{ 25%{ transform:rotate(-10deg) scale(1.1); } 60%{ transform:rotate(8deg) scale(1.1); } }
/* badges & icon chips */
.badge{ transition:transform .2s ease; } .badge:hover{ transform:scale(1.08); }
.icon-chip{ transition:transform .25s cubic-bezier(.2,.9,.3,1.4); } .card:hover .icon-chip{ transform:scale(1.12) rotate(-5deg); }
/* shimmer for progress bars */
.progress-bar{ background-image:linear-gradient(110deg,rgba(255,255,255,0) 30%,rgba(255,255,255,.35) 50%,rgba(255,255,255,0) 70%); background-size:200% 100%; animation:shimmer 2.2s linear infinite; }
@keyframes shimmer{ to{ background-position:-200% 0; } }
.alert-dismissible .btn-close{ transition:transform .2s ease; } .alert-dismissible .btn-close:hover{ transform:rotate(90deg); }
@media (prefers-reduced-motion:reduce){ .pp-content tbody tr,.modal.fade .modal-dialog,.dropdown-menu.show,.progress-bar,.side-link.active::before,.form-check-input{ animation:none!important; transition:none!important; } body.pp-leaving .pp-main{ opacity:1; transform:none; } }

/* ================= Delight (v20261012h) ================= */
/* waving greeting emoji */
.wave{ display:inline-block; transform-origin:70% 70%; animation:waveHand 2.6s ease-in-out 1s 2; }
@keyframes waveHand{ 0%,60%,100%{ transform:rotate(0); } 10%,30%{ transform:rotate(14deg); } 20%,40%{ transform:rotate(-8deg); } 50%{ transform:rotate(10deg); } }
/* daily tip strip */
.pp-tip{ display:flex; gap:10px; align-items:center; background:linear-gradient(90deg,#eef2ff,#ecfeff); border-radius:12px; padding:9px 14px; font-size:.86rem; color:#334155; }
.pp-tip i{ color:#f59e0b; }
.pp-tip span{ transition:opacity .4s ease; }
/* sale-complete badge */
.fx-done{ position:fixed; left:50%; top:22px; transform:translateX(-50%); z-index:2600; background:#16a34a; color:#fff; padding:10px 20px; border-radius:30px; font-weight:700; box-shadow:0 14px 34px -10px rgba(22,163,74,.7); animation:doneIn .45s cubic-bezier(.2,.9,.3,1.4) both; }
.fx-done.out{ opacity:0; transform:translateX(-50%) translateY(-14px); transition:all .45s ease; }
@keyframes doneIn{ from{ opacity:0; transform:translateX(-50%) translateY(-30px) scale(.8); } to{ opacity:1; transform:translateX(-50%); } }
@media (prefers-reduced-motion:reduce){ .wave,.fx-done{ animation:none!important; } }
