:root{--c-primary: #2e7d32;--c-primary-dark: #1b5e20;--c-primary-light: #e8f5e9;--c-primary-lighter: #f7fbf7;--c-primary-border: #c8e6c9;--c-accent: #ff8f00;--c-accent-dark: #e65100;--c-accent-light: #fff3e0;--c-accent-border: #ffe0b2;--c-purple: #7b1fa2;--c-purple-dark: #4a148c;--c-purple-light: #f3e5f5;--c-bg: #f5f7fa;--c-surface: #ffffff;--c-text: #303133;--c-text-secondary: #606266;--c-text-muted: #909399;--c-text-placeholder: #c0c4cc;--c-border: #ebeef5;--c-border-strong: #dcdfe6;--c-border-light: #f2f6fc;--c-fill: #fafafa;--c-fill-hover: #f5f7fa;--c-success: #67c23a;--c-success-bg: #f0f9eb;--c-warning: #e6a23c;--c-warning-bg: #fdf6ec;--c-danger: #f56c6c;--c-danger-bg: #fef0f0;--c-info: #409eff;--c-info-bg: #ecf5ff;--r-sm: 4px;--r-md: 6px;--r-lg: 10px;--r-xl: 14px;--r-pill: 999px;--sh-card: 0 2px 8px rgba(0, 0, 0, .04);--sh-raised: 0 4px 16px rgba(46, 125, 50, .15);--sh-modal: 0 12px 40px rgba(0, 0, 0, .16);--sp-1: 4px;--sp-2: 8px;--sp-3: 12px;--sp-4: 16px;--sp-5: 20px;--sp-6: 24px;--sp-8: 32px;--fs-xs: 13px;--fs-sm: 14px;--fs-base: 15px;--fs-md: 16px;--fs-lg: 18px;--fs-xl: 21px;--fs-2xl: 25px;--fs-3xl: 32px;--sidebar-w: 220px;--topbar-h: 56px;--t-fast: .15s ease;--t-base: .2s ease}*,*:before,*:after{box-sizing:border-box}html,body,#root{height:100%}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,PingFang SC,Hiragino Sans GB,Microsoft YaHei,Helvetica Neue,Arial,sans-serif;font-size:var(--fs-md);line-height:1.5;color:var(--c-text);background:var(--c-bg);-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}h1,h2,h3,h4,h5,h6,p,figure{margin:0}ul,ol{margin:0;padding:0;list-style:none}a{color:inherit;text-decoration:none}button,input,select,textarea{font-family:inherit;font-size:inherit;color:inherit}button{cursor:pointer;border:none;background:none;padding:0}table{border-collapse:collapse;border-spacing:0}::-webkit-scrollbar{width:8px;height:8px}::-webkit-scrollbar-thumb{background:#d0d4da;border-radius:var(--r-pill)}::-webkit-scrollbar-thumb:hover{background:#b8bec6}::-webkit-scrollbar-track{background:transparent}.num{font-variant-numeric:tabular-nums;font-feature-settings:"tnum"}:focus-visible{outline:2px solid var(--c-primary);outline-offset:2px}@media (prefers-reduced-motion: reduce){*,*:before,*:after{animation-duration:.01ms!important;animation-iteration-count:1!important;transition-duration:.01ms!important}}.btn{display:inline-flex;align-items:center;justify-content:center;gap:5px;height:32px;padding:0 var(--sp-4);border-radius:var(--r-md);border:1px solid var(--c-border-strong);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-base);white-space:nowrap;transition:all var(--t-fast)}.btn:hover:not(:disabled){border-color:var(--c-primary);color:var(--c-primary)}.btn:disabled{opacity:.55;cursor:not-allowed}.btn.primary{background:var(--c-primary);border-color:var(--c-primary);color:#fff}.btn.primary:hover:not(:disabled){background:var(--c-primary-dark);border-color:var(--c-primary-dark);color:#fff}.btn.accent{background:var(--c-accent);border-color:var(--c-accent);color:#fff}.btn.accent:hover:not(:disabled){background:var(--c-accent-dark);border-color:var(--c-accent-dark);color:#fff}.btn.danger{border-color:#fbc4c4;color:var(--c-danger)}.btn.danger:hover:not(:disabled){background:var(--c-danger-bg);border-color:var(--c-danger);color:var(--c-danger)}.btn.text{border-color:transparent;background:transparent;padding:0 var(--sp-2);height:26px}.btn.text:hover:not(:disabled){background:var(--c-primary-light)}.btn.lg{height:38px;padding:0 var(--sp-6);font-size:var(--fs-lg)}.btn.sm{height:27px;padding:0 10px;font-size:var(--fs-sm)}.link-action{color:var(--c-primary);font-size:var(--fs-base);transition:opacity var(--t-fast)}.link-action:hover{opacity:.75}.link-action.danger{color:var(--c-danger)}.link-action+.link-action{margin-left:var(--sp-3)}.tag{display:inline-block;padding:1px 8px;border-radius:var(--r-sm);font-size:var(--fs-sm);font-weight:500;line-height:1.6;white-space:nowrap}.tag.success{background:var(--c-success-bg);color:var(--c-success)}.tag.warning{background:var(--c-warning-bg);color:var(--c-warning)}.tag.danger{background:var(--c-danger-bg);color:var(--c-danger)}.tag.info{background:var(--c-info-bg);color:var(--c-info)}.tag.neutral{background:var(--c-fill-hover);color:var(--c-text-muted)}.tag.accent{background:var(--c-accent-light);color:var(--c-accent)}.tag.purple{background:var(--c-purple-light);color:var(--c-purple)}.status-dot{display:inline-block;width:6px;height:6px;border-radius:50%;margin-right:6px;vertical-align:middle}.status-dot.green{background:var(--c-success)}.status-dot.orange{background:var(--c-warning)}.status-dot.red{background:var(--c-danger)}.page-head{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-4);margin-bottom:var(--sp-4);flex-wrap:wrap}.page-head .desc{font-size:var(--fs-base);color:var(--c-text-muted);margin-top:2px}.page-head-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.stat-grid{display:grid;grid-template-columns:repeat(4,1fr);gap:var(--sp-4);margin-bottom:var(--sp-5)}.stat-card{background:var(--c-surface);border-radius:var(--r-lg);padding:var(--sp-5);box-shadow:var(--sh-card)}.stat-card .top{display:flex;align-items:flex-start;justify-content:space-between;gap:var(--sp-3)}.stat-card .label{font-size:var(--fs-base);color:var(--c-text-muted)}.stat-card .icon{width:40px;height:40px;border-radius:var(--r-lg);display:flex;align-items:center;justify-content:center;font-size:var(--fs-2xl);flex-shrink:0}.stat-card .icon.green{background:var(--c-primary-light)}.stat-card .icon.orange{background:var(--c-accent-light)}.stat-card .icon.blue{background:var(--c-info-bg)}.stat-card .icon.red{background:var(--c-danger-bg)}.stat-card .icon.purple{background:var(--c-purple-light)}.stat-card .value{margin-top:10px;font-size:var(--fs-3xl);font-weight:700;line-height:1.15;letter-spacing:-.5px;text-align:center;animation:stat-value-in .42s ease-out both}.stat-card .value.danger{color:var(--c-danger)}.stat-card .value.success{color:var(--c-success)}.stat-card .value.info{color:var(--c-info)}.stat-card .value.primary{color:var(--c-primary)}@keyframes stat-value-in{0%{opacity:0;transform:translateY(6px)}to{opacity:1;transform:none}}@media (prefers-reduced-motion: reduce){.stat-card .value{animation:none}}.stat-card .foot{margin-top:6px;font-size:var(--fs-sm);color:var(--c-text-muted);text-align:center}.stat-card .foot .up{color:var(--c-success)}.stat-card .foot .down{color:var(--c-danger)}.card{background:var(--c-surface);border-radius:var(--r-lg);box-shadow:var(--sh-card)}.card-head{padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);flex-wrap:wrap}.card-head h3{font-size:var(--fs-lg);font-weight:600}.card-head h3 .count{font-size:var(--fs-sm);color:var(--c-text-muted);font-weight:400;margin-left:6px}.card-head .extra{font-size:var(--fs-sm);color:var(--c-text-muted)}.card-body{padding:var(--sp-5)}.split-grid{display:grid;grid-template-columns:2fr 1fr;gap:var(--sp-4);margin-bottom:var(--sp-5)}.filter-bar{background:var(--c-surface);border-radius:var(--r-lg);box-shadow:var(--sh-card);padding:var(--sp-4) var(--sp-5);display:flex;align-items:flex-end;gap:var(--sp-4);flex-wrap:wrap;margin-bottom:var(--sp-4)}.filter-item{display:flex;flex-direction:column;gap:5px}.filter-item>label{font-size:var(--fs-sm);color:var(--c-text-muted)}.filter-actions{margin-left:auto;display:flex;gap:var(--sp-2)}.input,.select,.textarea{height:32px;min-width:140px;padding:0 10px;border:1px solid var(--c-border-strong);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-text);font-size:var(--fs-base);outline:none;transition:border-color var(--t-fast)}.textarea{height:auto;min-height:72px;padding:8px 10px;resize:vertical;line-height:1.6}.input:focus,.select:focus,.textarea:focus{border-color:var(--c-primary)}.input::placeholder,.textarea::placeholder{color:var(--c-text-placeholder)}.input:disabled,.select:disabled{background:var(--c-fill-hover);color:var(--c-text-muted);cursor:not-allowed}.select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='10' height='6' viewBox='0 0 10 6'%3E%3Cpath d='M0 0l5 5 5-5' fill='none' stroke='%23909399' stroke-width='1.6' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 10px center;padding-right:28px;cursor:pointer}.form-grid{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-4)}.form-field{display:flex;flex-direction:column;gap:6px}.form-field.full{grid-column:1 / -1}.form-field>label{font-size:var(--fs-base);color:var(--c-text-secondary);font-weight:500}.form-field>label .required{color:var(--c-danger);margin-left:2px}.form-field .input,.form-field .select,.form-field .textarea{min-width:0;width:100%}.form-field .hint{font-size:var(--fs-sm);color:var(--c-text-muted)}.table-wrap{width:100%;overflow-x:auto}table.data-table{width:100%;min-width:720px}table.data-table th{text-align:left;padding:12px var(--sp-4);font-size:var(--fs-base);font-weight:600;color:var(--c-text-secondary);background:var(--c-fill);border-bottom:1px solid var(--c-border);white-space:nowrap}table.data-table td{padding:12px var(--sp-4);font-size:var(--fs-base);border-bottom:1px solid var(--c-border-light);vertical-align:middle}table.data-table tbody tr:hover td{background:var(--c-fill)}table.data-table tbody tr:last-child td{border-bottom:none}table.data-table .col-actions{white-space:nowrap}.cell-strong{font-weight:600}.cell-muted{color:var(--c-text-muted);font-size:var(--fs-sm)}.cell-money{color:var(--c-accent);font-weight:600}.cell-product{display:flex;align-items:center;gap:10px}.cell-product .thumb{width:34px;height:34px;border-radius:var(--r-md);background:var(--c-primary-light);display:flex;align-items:center;justify-content:center;font-size:var(--fs-xl);flex-shrink:0;overflow:hidden}.cell-product .thumb__img{width:100%;height:100%;object-fit:cover}.image-upload{display:flex}.image-upload__empty{width:96px;height:96px;border:1px dashed var(--c-border-strong);border-radius:var(--r-md);background:var(--c-bg);color:var(--c-text-muted);font-size:var(--fs-sm);cursor:pointer;transition:border-color .15s ease,color .15s ease}.image-upload__empty:hover{border-color:var(--c-primary);color:var(--c-primary)}.image-upload__empty:disabled{opacity:.6;cursor:not-allowed}.image-upload__preview{position:relative;width:96px;height:96px;border-radius:var(--r-md);overflow:hidden;border:1px solid var(--c-border)}.image-upload__preview img{width:100%;height:100%;object-fit:cover}.image-upload__remove{position:absolute;top:4px;right:4px;width:20px;height:20px;border-radius:50%;border:none;background:#0000008c;color:#fff;font-size:14px;line-height:20px;text-align:center;cursor:pointer;padding:0}.image-upload__remove:hover{background:#000000bf}.cell-product .name{font-weight:500}.cell-product .sub{font-size:var(--fs-xs);color:var(--c-text-muted);margin-top:1px}.table-toolbar{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-3);padding:var(--sp-4) var(--sp-5);border-bottom:1px solid var(--c-border);flex-wrap:wrap}.table-toolbar h3{font-size:var(--fs-lg);font-weight:600}.table-toolbar .count{font-size:var(--fs-sm);color:var(--c-text-muted);font-weight:400;margin-left:6px}.table-toolbar .actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}.tabs{display:flex;gap:0;background:var(--c-surface);border-bottom:1px solid var(--c-border);border-radius:var(--r-lg) var(--r-lg) 0 0;padding:0 var(--sp-5);overflow-x:auto}.tab{padding:14px var(--sp-5);font-size:var(--fs-md);color:var(--c-text-secondary);position:relative;white-space:nowrap;transition:color var(--t-fast)}.tab:hover{color:var(--c-primary)}.tab.active{color:var(--c-primary);font-weight:600}.tab.active:after{content:"";position:absolute;bottom:-1px;left:50%;transform:translate(-50%);width:32px;height:3px;border-radius:2px;background:var(--c-primary)}.pagination{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4);padding:var(--sp-4) var(--sp-5);flex-wrap:wrap}.pagination .total{font-size:var(--fs-base);color:var(--c-text-secondary)}.page-btns{display:flex;gap:var(--sp-1);flex-wrap:wrap}.page-btn{min-width:32px;height:32px;padding:0 8px;border:1px solid var(--c-border-strong);border-radius:var(--r-sm);background:var(--c-surface);color:var(--c-text-secondary);font-size:var(--fs-base);display:inline-flex;align-items:center;justify-content:center;transition:all var(--t-fast)}.page-btn:hover:not(:disabled){border-color:var(--c-primary);color:var(--c-primary)}.page-btn.active{background:var(--c-primary);border-color:var(--c-primary);color:#fff}.page-btn:disabled{opacity:.45;cursor:not-allowed}.page-btn.ellipsis{border-color:transparent;cursor:default}.state-block{padding:56px var(--sp-6);text-align:center;color:var(--c-text-muted)}.state-block .icon{font-size:40px;margin-bottom:var(--sp-3);opacity:.7}.state-block .title{font-size:var(--fs-md);color:var(--c-text-secondary);margin-bottom:6px}.state-block .desc{font-size:var(--fs-base)}.spinner{width:22px;height:22px;border:2.5px solid var(--c-primary-light);border-top-color:var(--c-primary);border-radius:50%;animation:spin .7s linear infinite;margin:0 auto var(--sp-3)}@keyframes spin{to{transform:rotate(360deg)}}.modal-mask{position:fixed;top:0;right:0;bottom:0;left:0;background:#00000073;display:flex;align-items:center;justify-content:center;padding:var(--sp-4);overflow:hidden;z-index:100;animation:fade-in var(--t-base)}@keyframes fade-in{0%{opacity:0}to{opacity:1}}.modal{width:900px;max-width:100%;height:520px;max-height:100%;display:flex;flex-direction:column;min-height:0;background:var(--c-surface);border-radius:var(--r-xl);box-shadow:var(--sh-modal);animation:modal-up var(--t-base);overflow:hidden}.modal.wide{max-width:100%}@keyframes modal-up{0%{opacity:0;transform:translateY(12px)}to{opacity:1;transform:translateY(0)}}.modal-head{flex-shrink:0;padding:var(--sp-5) var(--sp-6);border-bottom:1px solid var(--c-border);display:flex;align-items:center;justify-content:space-between;gap:var(--sp-4)}.modal-head h3{font-size:var(--fs-lg);font-weight:600}.modal-close{width:30px;height:30px;border-radius:var(--r-md);color:var(--c-text-muted);font-size:var(--fs-xl);display:flex;align-items:center;justify-content:center}.modal-close:hover{background:var(--c-fill-hover);color:var(--c-text)}.modal-body{flex:1 1 auto;min-height:0;display:flex;flex-direction:column;overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch;padding:var(--sp-6)}.modal-body>:only-child{margin-top:auto;margin-bottom:auto}.modal-body::-webkit-scrollbar{width:8px}.modal-body::-webkit-scrollbar-thumb{background:var(--c-border-strong, #cfd8cf);border-radius:4px}.modal-foot{flex-shrink:0;padding:var(--sp-4) var(--sp-6) var(--sp-5);border-top:1px solid var(--c-border);display:flex;justify-content:flex-end;gap:var(--sp-2);background:var(--c-surface)}.modal-list{margin-top:var(--sp-3);max-height:min(380px,36vh);overflow-y:auto;overscroll-behavior:contain;-webkit-overflow-scrolling:touch}.detail-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3) var(--sp-5)}.detail-list .row{display:flex;gap:6px;font-size:var(--fs-base);align-items:baseline}.detail-list .row .k{color:var(--c-text-muted);flex-shrink:0}.detail-list .row .v{color:var(--c-text);font-weight:500;word-break:break-all}.detail-list .row.full{grid-column:1 / -1}.toast-container{position:fixed;top:24px;left:50%;transform:translate(-50%);z-index:200;display:flex;flex-direction:column;gap:var(--sp-3);pointer-events:none}.toast{min-width:260px;max-width:520px;padding:13px var(--sp-5);border-radius:var(--r-lg);background:var(--c-surface);box-shadow:0 8px 24px #0000001f;border-left:4px solid var(--c-info);font-size:var(--fs-lg);font-weight:600;color:var(--c-text);display:flex;align-items:center;gap:var(--sp-3);animation:toast-in var(--t-base)}@keyframes toast-in{0%{opacity:0;transform:translateY(-10px)}to{opacity:1;transform:translateY(0)}}.toast.success{border-left-color:var(--c-success);background:var(--c-success-bg)}.toast.error{border-left-color:var(--c-danger);background:var(--c-danger-bg)}.toast.warning{border-left-color:var(--c-warning);background:var(--c-warning-bg)}.text-muted{color:var(--c-text-muted)}.text-danger{color:var(--c-danger)}.text-success{color:var(--c-success)}.text-accent{color:var(--c-accent)}.mb-4{margin-bottom:var(--sp-4)}.mb-5{margin-bottom:var(--sp-5)}.mt-3{margin-top:var(--sp-3)}.flex-row{display:flex;align-items:center;gap:var(--sp-2)}@media (max-width: 1200px){.stat-grid{grid-template-columns:repeat(2,1fr)}.split-grid{grid-template-columns:1fr}}@media (max-width: 720px){.stat-grid,.form-grid,.detail-list{grid-template-columns:1fr}.filter-bar{padding:var(--sp-4)}.filter-item,.filter-item .input,.filter-item .select{width:100%;min-width:0}.filter-actions{margin-left:0;width:100%}.filter-actions .btn{flex:1}.page-head-actions{width:100%}.page-head-actions .btn{flex:1}.modal-body{padding:var(--sp-4)}.modal-head,.modal-foot{padding-left:var(--sp-4);padding-right:var(--sp-4)}}.confirm-message{font-size:var(--fs-md);line-height:1.8;color:var(--c-text-secondary)}.success-dialog{display:flex;flex-direction:column;align-items:center;text-align:center;padding:var(--sp-2) 0 var(--sp-3)}.success-badge{width:66px;height:66px;margin-bottom:var(--sp-4);border-radius:50%;display:flex;align-items:center;justify-content:center;color:#fff;background:linear-gradient(135deg,var(--c-success),var(--c-primary));box-shadow:0 8px 22px #67c23a52}.success-message{font-size:var(--fs-xl);font-weight:700;color:var(--c-text);line-height:1.6}.success-details{width:100%;margin-top:var(--sp-4);padding:var(--sp-3) var(--sp-4);border-radius:var(--r-lg);background:var(--c-primary-lighter);border:1px solid var(--c-primary-border)}.success-row{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);padding:7px 0;border-bottom:1px dashed var(--c-primary-border)}.success-row:last-child{border-bottom:none}.success-row-k{font-size:var(--fs-md);color:var(--c-text-secondary)}.success-row-v{font-size:var(--fs-md);font-weight:700;color:var(--c-text);font-variant-numeric:tabular-nums}.success-row-v.highlight{font-size:var(--fs-2xl);color:var(--c-primary-dark)}.success-foot{display:flex;align-items:center;justify-content:flex-end;gap:var(--sp-3);width:100%}.login-page{min-height:100vh;position:relative;display:flex;align-items:center;justify-content:center;padding:var(--sp-6);background:radial-gradient(circle at 12% 18%,rgba(46,125,50,.14),transparent 42%),radial-gradient(circle at 88% 82%,rgba(255,143,0,.12),transparent 46%),var(--c-bg)}.login-brand-top{position:absolute;top:var(--sp-6);left:var(--sp-6);display:flex;align-items:center;font-size:var(--fs-xl);font-weight:700;letter-spacing:.5px;color:var(--c-primary-dark)}.login-brand-top-mark{width:30px;height:30px;border-radius:var(--r-md);background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));display:flex;align-items:center;justify-content:center;font-size:16px;box-shadow:0 4px 12px #2e7d3240}.login-card{width:100%;max-width:400px;background:var(--c-surface);border-radius:var(--r-xl);box-shadow:0 16px 48px #0000001a;padding:var(--sp-8) var(--sp-6) var(--sp-6)}.login-brand{text-align:center;margin-bottom:var(--sp-6)}.login-brand .mark{width:56px;height:56px;margin:0 auto var(--sp-3);border-radius:var(--r-xl);background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));display:flex;align-items:center;justify-content:center;font-size:30px;box-shadow:0 8px 20px #2e7d3247}.login-brand h1{font-size:22px;font-weight:700;letter-spacing:.5px}.login-brand p{margin-top:var(--sp-1);font-size:var(--fs-base);color:var(--c-text-muted)}.login-form .field{margin-bottom:var(--sp-4)}.login-form .field>label{display:block;margin-bottom:6px;font-size:var(--fs-base);font-weight:500;color:var(--c-text-secondary)}.login-submit{width:100%;height:42px;margin-top:var(--sp-2);border-radius:var(--r-md);background:linear-gradient(135deg,var(--c-primary),var(--c-primary-dark));color:#fff;font-size:var(--fs-lg);font-weight:600;transition:filter var(--t-base)}.login-submit:hover:not(:disabled){filter:brightness(1.06)}.login-submit:disabled{opacity:.65;cursor:not-allowed}.login-error{margin-bottom:var(--sp-4);padding:9px var(--sp-3);border-radius:var(--r-md);background:var(--c-danger-bg);color:var(--c-danger);font-size:var(--fs-base)}.login-hint{margin-top:var(--sp-5);padding-top:var(--sp-4);border-top:1px solid var(--c-border);text-align:center;font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.9}.icp-link{color:var(--c-text-muted);text-decoration:none}.icp-link:hover{color:var(--c-text-secondary);text-decoration:underline}.login-hint b{color:var(--c-text-secondary);font-weight:600}.login-icp-fixed{position:fixed;bottom:0;left:0;right:0;z-index:5;padding:var(--sp-3) var(--sp-6) var(--sp-4);text-align:center;font-size:var(--fs-sm);color:var(--c-text-muted)}.captcha-field .captcha-inline{display:flex;gap:10px;align-items:stretch}.captcha-figure{flex:0 0 160px;height:44px;display:flex;align-items:center;justify-content:center;border:1px solid var(--c-border);border-radius:var(--r-sm);background:var(--c-fill);overflow:hidden;cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-user-drag:none}.captcha-figure:hover{border-color:var(--c-primary)}.captcha-img{width:160px;height:44px;display:block;pointer-events:none;-webkit-user-drag:none}.captcha-loading{font-size:var(--fs-sm);color:var(--c-text-muted);text-align:center}.login-links{position:absolute;top:var(--sp-6);right:var(--sp-6);display:flex;align-items:center;gap:var(--sp-1)}.login-link-item{display:inline-flex;align-items:center}.login-link{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:var(--r-md);background:transparent;color:var(--c-primary-dark);font-size:var(--fs-md);text-decoration:none;transition:color var(--t-fast),background var(--t-fast)}.login-link-icon{display:inline-flex;align-items:center;justify-content:center;flex-shrink:0;color:inherit}.login-link:hover{background:var(--c-primary-light)}.login-link-divider{color:var(--c-border-strong);font-size:var(--fs-base)}.qr-sub{margin-bottom:var(--sp-3);text-align:center;font-size:var(--fs-base);color:var(--c-text-muted)}.qr-pair{display:flex;justify-content:center;gap:var(--sp-4)}.qr-card{position:relative;flex:1 1 0;max-width:250px;padding:var(--sp-3) var(--sp-4) var(--sp-4);border:1px solid var(--c-border);border-radius:var(--r-xl);background:linear-gradient(180deg,#fff,#fafcfa);box-shadow:0 2px 10px #0000000a;text-align:center;overflow:hidden;transition:transform var(--t-base),box-shadow var(--t-base),border-color var(--t-base),background var(--t-base)}.qr-card:hover{transform:translateY(-2px);box-shadow:0 12px 26px #00000017}.qr-card:before{content:"";position:absolute;top:0;left:0;right:0;height:3px;background:transparent;transition:background var(--t-base)}.qr-card.active{border-color:var(--c-primary);background:linear-gradient(180deg,var(--c-primary-lighter) 0%,#ffffff 58%);box-shadow:0 12px 28px #2e7d322e}.qr-card.active:before{background:linear-gradient(90deg,var(--c-primary),var(--c-primary-dark))}.qr-frame{width:168px;height:168px;margin:0 auto var(--sp-3);padding:10px;background:#fff;border-radius:var(--r-lg);box-shadow:0 0 0 1px var(--c-border-light),0 4px 14px #0000000f;display:flex;align-items:center;justify-content:center}.qr-img{width:100%;height:100%;object-fit:contain}.qr-missing{width:100%;height:100%;border:1px dashed var(--c-border-strong);border-radius:var(--r-sm);background:var(--c-fill);display:flex;flex-direction:column;align-items:center;justify-content:center;gap:6px;color:var(--c-text-muted);font-size:var(--fs-sm)}.qr-missing-icon{font-size:30px;line-height:1;color:var(--c-border-strong)}.qr-name{display:flex;align-items:center;justify-content:center;gap:6px;font-size:var(--fs-md);font-weight:700;color:var(--c-text);letter-spacing:.3px}.qr-icon{font-size:var(--fs-lg);line-height:1}.qr-desc{margin-top:5px;font-size:var(--fs-sm);color:var(--c-text-muted);line-height:1.6}.qr-tip{display:flex;align-items:center;justify-content:center;gap:6px;margin-top:var(--sp-4);padding:9px var(--sp-3);border-radius:var(--r-md);background:var(--c-primary-lighter);font-size:var(--fs-sm);color:var(--c-text-secondary)}.qr-tip-icon{font-size:var(--fs-base);line-height:1}.help-list{display:flex;flex-direction:column;gap:var(--sp-2)}.help-item{display:flex;gap:var(--sp-3);padding:10px var(--sp-3);border-radius:var(--r-md);background:var(--c-fill)}.help-q{flex:none;width:92px;font-size:var(--fs-base);font-weight:600;color:var(--c-text-secondary)}.help-a{flex:1;font-size:var(--fs-base);color:var(--c-text);line-height:1.7}@media (max-width: 640px){.login-page{flex-direction:column}.login-links{position:static;flex-wrap:wrap;justify-content:center;margin-bottom:var(--sp-4)}.login-brand-top{position:static;justify-content:center;margin-bottom:var(--sp-2)}.qr-pair{flex-direction:column;align-items:center}.qr-card{width:100%;max-width:280px}}.pos-shell{display:flex;flex-direction:column;height:100vh;height:100dvh;overflow:hidden;background:var(--c-bg);user-select:none;-webkit-user-select:none;-webkit-tap-highlight-color:transparent}.pos-top{flex-shrink:0;display:flex;align-items:center;gap:var(--sp-4);height:68px;padding:0 var(--sp-4);background:var(--c-surface);border-bottom:1px solid var(--c-border)}.pos-brand{display:flex;align-items:center;gap:var(--sp-2);font-size:var(--fs-xl);font-weight:700;color:var(--c-primary-dark);white-space:nowrap}.pos-brand-mark{font-size:24px}.pos-nav{display:flex;align-items:center;gap:var(--sp-2);flex:1;min-width:0;overflow-x:auto;scrollbar-width:none}.pos-nav::-webkit-scrollbar{display:none}.pos-nav-item,.pos-top-btn{flex-shrink:0;display:flex;align-items:center;gap:6px;height:46px;padding:0 var(--sp-4);border-radius:var(--r-md);border:1px solid transparent;background:var(--c-fill);color:var(--c-text-secondary);font-size:var(--fs-lg);font-weight:600;cursor:pointer;transition:background var(--t-fast),color var(--t-fast)}.pos-nav-item.active,.pos-top-btn{background:var(--c-primary-light);border-color:var(--c-primary-border);color:var(--c-primary-dark)}.pos-top-btn{min-width:84px;justify-content:center}.pos-top-right{display:flex;align-items:center;gap:var(--sp-3);white-space:nowrap}.pos-clock{font-size:var(--fs-md);color:var(--c-text-secondary);font-variant-numeric:tabular-nums}.pos-operator{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--r-pill);background:var(--c-primary-lighter);border:1px solid var(--c-primary-border);font-size:var(--fs-md);color:var(--c-primary-dark);font-weight:600}.pos-main{flex:1;min-height:0;overflow:auto}.pos-page{padding:var(--sp-4)}.pos-toolbar{display:flex;flex-wrap:wrap;align-items:center;gap:var(--sp-3);margin-bottom:var(--sp-3)}.pos-block{background:var(--c-surface);border-radius:var(--r-lg);box-shadow:var(--sh-card);padding:var(--sp-4);margin-bottom:var(--sp-3)}.pos-block-title{display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);margin-bottom:var(--sp-3);font-size:var(--fs-lg);font-weight:700;color:var(--c-text)}.btn.big{height:56px;padding:0 var(--sp-5);font-size:var(--fs-xl);border-radius:var(--r-lg);font-weight:700}.btn.huge{height:68px;font-size:var(--fs-2xl);border-radius:var(--r-lg);font-weight:700}.btn.tall{height:48px;font-size:var(--fs-lg)}.pos-icon-btn{display:inline-flex;align-items:center;justify-content:center;min-width:48px;height:48px;padding:0 var(--sp-3);border:1px solid var(--c-border-strong);border-radius:var(--r-md);background:var(--c-surface);color:var(--c-text);font-size:var(--fs-lg);cursor:pointer}.input.big,.select.big{height:52px;font-size:var(--fs-xl)}.pos-keypad{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2)}.pos-key{height:60px;border:1px solid var(--c-border);border-radius:var(--r-md);background:var(--c-fill);font-size:var(--fs-2xl);font-weight:700;color:var(--c-text);cursor:pointer}.pos-key.wide{grid-column:span 3}.pos-key.action{background:var(--c-primary-light);color:var(--c-primary-dark);border-color:var(--c-primary-border)}.pos-key.danger{background:var(--c-danger-bg);color:var(--c-danger);border-color:#fbc4c4}.cashier{display:grid;grid-template-columns:minmax(0,1fr) 460px;gap:var(--sp-3);padding:var(--sp-3);height:100%;min-height:0}.cashier-left,.cashier-right{display:flex;flex-direction:column;min-height:0}.pos-search{display:flex;gap:var(--sp-2);margin-bottom:var(--sp-3)}.pos-search .input{flex:1;height:56px;font-size:var(--fs-xl)}.pos-cats{display:flex;flex-wrap:wrap;gap:var(--sp-2);margin-bottom:var(--sp-3)}.pos-cat{height:44px;padding:0 var(--sp-4);border:1px solid var(--c-border-strong);border-radius:var(--r-pill);background:var(--c-surface);font-size:var(--fs-lg);color:var(--c-text-secondary);cursor:pointer}.pos-cat.active{background:var(--c-primary);border-color:var(--c-primary);color:#fff;font-weight:700}.pos-grid-wrap{flex:1;min-height:0;overflow:auto}.pos-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(168px,1fr));gap:var(--sp-3)}.pos-card{display:flex;flex-direction:column;gap:4px;padding:var(--sp-3);min-height:104px;border:1px solid var(--c-border);border-radius:var(--r-lg);background:var(--c-surface);box-shadow:var(--sh-card);cursor:pointer;text-align:left}.pos-card:active{border-color:var(--c-primary);background:var(--c-primary-lighter)}.pos-card-name{font-size:var(--fs-lg);font-weight:700;color:var(--c-text);line-height:1.3;display:-webkit-box;-webkit-line-clamp:2;-webkit-box-orient:vertical;overflow:hidden}.pos-card-meta{display:flex;align-items:baseline;justify-content:space-between;gap:6px;margin-top:auto}.pos-card-price{font-size:var(--fs-xl);font-weight:700;color:var(--c-accent-dark)}.pos-card-unit{font-size:var(--fs-sm);color:var(--c-text-muted)}.pos-card-tags{display:flex;gap:4px;flex-wrap:wrap}.cart{display:flex;flex-direction:column;min-height:0;height:100%;background:var(--c-surface);border-radius:var(--r-lg);box-shadow:var(--sh-card);overflow:hidden}.cart-head{flex-shrink:0;display:flex;align-items:center;justify-content:space-between;gap:var(--sp-2);padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--c-border);font-size:var(--fs-lg);font-weight:700}.cart-party{display:flex;align-items:center;gap:6px;padding:6px 12px;border-radius:var(--r-pill);background:var(--c-purple-light);color:var(--c-purple-dark);font-size:var(--fs-md);cursor:pointer}.cart-party.walkin{background:var(--c-fill);color:var(--c-text-secondary)}.cart-list{flex:1;min-height:0;overflow:auto}.cart-empty{padding:var(--sp-8) var(--sp-4);text-align:center;color:var(--c-text-muted);font-size:var(--fs-lg)}.cart-row{padding:var(--sp-3) var(--sp-4);border-bottom:1px solid var(--c-border-light)}.cart-row.over{background:var(--c-danger-bg)}.cart-row-top{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-2)}.cart-row-name{font-size:var(--fs-lg);font-weight:600;color:var(--c-text)}.cart-row-remove{flex-shrink:0;min-width:44px;height:36px;border:1px solid #fbc4c4;border-radius:var(--r-sm);background:var(--c-danger-bg);color:var(--c-danger);font-size:var(--fs-md);cursor:pointer}.cart-row-mid{display:flex;align-items:center;gap:var(--sp-2);margin-top:6px}.cart-row-sub{margin-top:4px;font-size:var(--fs-sm);color:var(--c-text-muted)}.cart-row-amount{margin-top:6px;text-align:right;font-size:var(--fs-xl);font-weight:700;color:var(--c-accent-dark)}.qty-stepper{display:flex;align-items:center;gap:6px}.qty-step{width:44px;height:44px;border:1px solid var(--c-border-strong);border-radius:var(--r-md);background:var(--c-fill);font-size:var(--fs-xl);font-weight:700;cursor:pointer}.qty-value{width:92px;height:44px;border:1px solid var(--c-border-strong);border-radius:var(--r-md);text-align:center;font-size:var(--fs-xl);font-weight:700}.cart-foot{flex-shrink:0;padding:var(--sp-3) var(--sp-4);border-top:1px solid var(--c-border);background:var(--c-fill)}.cart-summary-row{display:flex;align-items:baseline;justify-content:space-between;margin-bottom:6px;font-size:var(--fs-md);color:var(--c-text-secondary)}.cart-total-row{display:flex;align-items:baseline;justify-content:space-between;margin:var(--sp-2) 0 var(--sp-3)}.cart-total-label{font-size:var(--fs-lg);color:var(--c-text-secondary)}.cart-total-value{font-size:34px;font-weight:800;color:var(--c-primary-dark);font-variant-numeric:tabular-nums}.pay-methods{display:grid;grid-template-columns:repeat(3,1fr);gap:var(--sp-2);margin-bottom:var(--sp-3)}.pay-method{height:56px;border:1px solid var(--c-border-strong);border-radius:var(--r-md);background:var(--c-surface);font-size:var(--fs-lg);font-weight:600;color:var(--c-text);cursor:pointer}.pay-method.active{border-color:var(--c-primary);background:var(--c-primary-light);color:var(--c-primary-dark)}.pay-method:disabled{opacity:.45;cursor:not-allowed}.cart-actions{display:grid;grid-template-columns:1fr 2fr;gap:var(--sp-2)}.scale-panel{display:flex;flex-direction:column;gap:var(--sp-3)}.scale-display{padding:var(--sp-4);border-radius:var(--r-lg);background:var(--c-primary-lighter);border:1px solid var(--c-primary-border);text-align:center}.scale-weight{font-size:56px;font-weight:800;color:var(--c-primary-dark);font-variant-numeric:tabular-nums;line-height:1.1}.scale-weight.unstable{color:var(--c-warning)}.scale-unit{font-size:var(--fs-xl);color:var(--c-text-secondary);margin-left:6px}.scale-hint{margin-top:6px;font-size:var(--fs-md);color:var(--c-text-secondary)}.scale-status{display:flex;align-items:center;gap:6px;font-size:var(--fs-md);color:var(--c-text-muted)}.scale-status .dot{width:10px;height:10px;border-radius:50%;background:var(--c-text-placeholder)}.scale-status.connected .dot{background:var(--c-success)}.scale-status.error .dot{background:var(--c-danger)}.pos-form-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));gap:var(--sp-3)}.pos-kv{display:flex;align-items:baseline;justify-content:space-between;gap:var(--sp-3);padding:8px 0;border-bottom:1px dashed var(--c-border);font-size:var(--fs-md)}.pos-kv:last-child{border-bottom:none}.pos-kv-k{color:var(--c-text-muted)}.pos-kv-v{font-weight:700;color:var(--c-text)}.pos-note{margin:0;font-size:var(--fs-sm);line-height:1.6;color:var(--c-text-muted)}.pos-money{font-variant-numeric:tabular-nums}.pos-row-actions{display:flex;gap:var(--sp-2);flex-wrap:wrap}@media (max-width: 1180px){.cashier{grid-template-columns:minmax(0,1fr);grid-template-rows:minmax(0,1fr) minmax(320px,46vh)}}.modal-foot .btn{height:48px;padding:0 var(--sp-5);font-size:var(--fs-lg);font-weight:600;border-radius:var(--r-md)}.toast-container{top:84px;gap:var(--sp-3)}.toast{min-width:320px;max-width:680px;padding:16px 22px;font-size:var(--fs-xl);border-left-width:5px}@media (max-width: 1180px){.pos-top{gap:var(--sp-2)}.pos-nav-item,.pos-top-btn{height:42px;padding:0 var(--sp-3);font-size:var(--fs-md);gap:4px}.pos-top-btn{min-width:72px}.pos-clock{font-size:var(--fs-sm)}.pos-operator{font-size:var(--fs-md)}.pos-brand{font-size:var(--fs-lg)}}@media (max-height: 860px){.modal-head{padding:var(--sp-3) var(--sp-5)}.modal-body{padding:var(--sp-4) var(--sp-5)}.modal-foot{padding:var(--sp-3) var(--sp-5) var(--sp-4)}.scale-panel{gap:var(--sp-2)}.scale-display{padding:var(--sp-3)}.scale-weight{font-size:38px}.pos-keypad{gap:6px}.pos-key{height:48px;font-size:var(--fs-xl)}}@media (max-height: 720px){.pos-top{height:58px}.modal-head{padding:var(--sp-3) var(--sp-4)}.modal-body{padding:var(--sp-4)}.modal-foot{padding:var(--sp-3) var(--sp-4)}.modal-foot .btn{height:44px;font-size:var(--fs-md)}.scale-panel{gap:var(--sp-2)}.scale-weight{font-size:36px}.pos-keypad{gap:6px}.pos-key{height:46px;font-size:var(--fs-lg)}.modal-list{max-height:min(300px,32vh)}}@media (max-height: 620px){.pos-top{height:52px;gap:var(--sp-2)}.modal-mask{padding:var(--sp-2)}.modal-head{padding:var(--sp-2) var(--sp-4)}.modal-head h3{font-size:var(--fs-md)}.modal-body{padding:var(--sp-3)}.modal-foot{padding:var(--sp-2) var(--sp-4)}.modal-foot .btn{height:40px}.scale-weight{font-size:30px}.scale-hint{font-size:var(--fs-sm)}.pos-key{height:40px;font-size:var(--fs-md)}.modal-list{max-height:min(240px,30vh)}}@media (max-width: 1180px) and (max-height: 720px){.cashier{grid-template-rows:minmax(0,1fr) minmax(260px,42vh)}}.settings-page,.recharge-page,.records-page{padding:var(--sp-3) var(--sp-4)}.settings-page{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3);align-items:start}.settings-page>.pos-block{margin-bottom:0}.settings-page .input.big,.settings-page .select.big{height:46px}.recharge-page{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:var(--sp-3);align-items:start}.recharge-page>.pos-block{margin-bottom:0}.recharge-page>.pos-block:nth-child(1){grid-column:1;grid-row:1}.recharge-page>.pos-block:nth-child(2){grid-column:2;grid-row:1 / span 2}.recharge-page>.pos-block:nth-child(3){grid-column:1;grid-row:2}@media (max-width: 1000px){.settings-page,.recharge-page{grid-template-columns:minmax(0,1fr)}.recharge-page>.pos-block:nth-child(1),.recharge-page>.pos-block:nth-child(2),.recharge-page>.pos-block:nth-child(3){grid-column:1;grid-row:auto}}.records-page .pos-toolbar{margin-bottom:var(--sp-2)}.records-page .filter-bar{padding:var(--sp-2) var(--sp-4);gap:var(--sp-3);margin-bottom:var(--sp-2)}.records-page .filter-bar .input,.records-page .filter-bar .select{height:40px}.records-page table.data-table th,.records-page table.data-table td{padding:6px var(--sp-3)}.records-page .card .pagination{padding:var(--sp-2) var(--sp-4)}.recharge-page .cart-row{padding:6px var(--sp-3)}.recharge-page .cart-row-sub{margin-top:3px;line-height:1.25}.recharge-page .cart-row-sub-line{white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.recharge-page .pos-kv{padding:4px 0}.settings-page .form-field{gap:4px}.modal-head{padding:var(--sp-3) var(--sp-5)}.modal-body{padding:var(--sp-4) var(--sp-5)}.modal-foot{padding:var(--sp-3) var(--sp-5) var(--sp-4)}.modal .pos-keypad{gap:6px}.modal .pos-key{height:44px;font-size:var(--fs-lg)}.modal .input.big{height:48px}.modal .input.big.scale-input{height:56px;font-size:30px;font-weight:800;text-align:center;color:var(--c-primary-dark)}.scale-col .pos-key{height:58px;font-size:var(--fs-xl)}.modal .scale-display{padding:var(--sp-2) var(--sp-3)}.modal .scale-weight{font-size:32px}.modal .scale-hint{font-size:var(--fs-sm);margin-top:4px}.scale-panel{display:grid;grid-template-columns:minmax(0,1fr) 360px;gap:var(--sp-5);align-items:start}.scale-col{display:flex;flex-direction:column;gap:var(--sp-3);min-width:0}@media (max-width: 900px){.scale-panel{grid-template-columns:minmax(0,1fr);gap:var(--sp-3)}}
