:root{--primary:#16a34a;--primary-dark:#15803d;--primary-light:#22c55e;--accent:#eab308;--bg:#f8fafc;--bg-surface:#fff;--bg-card:#fff;--bg-hover:#f1f5f9;--text:#0f172a;--text-muted:#64748b;--text-dim:#94a3b8;--border:#e2e8f0;--border-focus:#16a34a;--success:#16a34a;--warning:#d97706;--danger:#dc2626;--danger-bg:rgba(220,38,38,.08);--success-bg:rgba(22,163,74,.08);--radius:10px;--radius-lg:16px;--shadow:0 4px 24px rgba(0,0,0,.08)}*,:after,:before{box-sizing:border-box;margin:0;padding:0}body{background:var(--bg);color:var(--text);font-family:Inter,system-ui,-apple-system,sans-serif;line-height:1.6;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}img{display:block;max-width:100%}button{cursor:pointer}button,input,select,textarea{font-family:inherit}.text-muted{color:var(--text-muted)}.text-sm{font-size:.85rem}.text-xs{font-size:.75rem}.text-center{text-align:center}.flex{display:flex}.flex-col{flex-direction:column}.items-center{align-items:center}.justify-between{justify-content:space-between}.gap-1{gap:.5rem}.gap-2{gap:1rem}.gap-3{gap:1.5rem}.mt-1{margin-top:.5rem}.mt-2{margin-top:1rem}.mt-3{margin-top:1.5rem}.mb-1{margin-bottom:.5rem}.mb-2{margin-bottom:1rem}.w-full{width:100%}.font-bold{font-weight:700}.font-semibold{font-weight:600}.truncate{overflow:hidden;text-overflow:ellipsis}.btn,.truncate{white-space:nowrap}.btn{align-items:center;border:none;border-radius:var(--radius);cursor:pointer;display:inline-flex;font-size:.9rem;font-weight:600;gap:.4rem;padding:.6rem 1.25rem;text-decoration:none;transition:all .15s}.btn-primary{background:var(--primary);color:#fff}.btn-primary:hover:not(:disabled){background:var(--primary-dark)}.btn-outline{background:transparent;border:1.5px solid var(--primary);color:var(--primary)}.btn-outline:hover{background:var(--success-bg)}.btn-ghost{background:transparent;border:1px solid var(--border);color:var(--text-muted)}.btn-ghost:hover{background:var(--bg-hover)}.btn-danger{background:var(--danger);color:#fff}.btn-lg{font-size:1rem;padding:.75rem 1.75rem}.btn-sm{font-size:.8rem;padding:.4rem .85rem}.btn-block{justify-content:center;width:100%}.btn:disabled{cursor:not-allowed;opacity:.55}.form-group{margin-bottom:1.1rem}.form-label{color:var(--text-muted);display:block;font-size:.83rem;font-weight:600;margin-bottom:.35rem}.form-input{background:var(--bg-surface);border:1.5px solid var(--border);border-radius:var(--radius);color:var(--text);font-size:.92rem;padding:.65rem .9rem;transition:border-color .15s;width:100%}.form-input:focus{border-color:var(--border-focus);box-shadow:0 0 0 3px #16a34a1f;outline:none}textarea.form-input{min-height:100px;resize:vertical}.card{background:var(--bg-card);border:1px solid var(--border);border-radius:var(--radius-lg);padding:1.5rem}.badge{align-items:center;border-radius:100px;display:inline-flex;font-size:.73rem;font-weight:600;padding:.2rem .65rem}.badge-green{background:var(--success-bg);color:var(--success)}.badge-yellow{background:#eab3081a;color:#92400e}.badge-red{background:var(--danger-bg);color:var(--danger)}.badge-gray{background:var(--bg-hover);color:var(--text-muted)}.progress-bar{background:var(--border);border-radius:100px;height:8px;overflow:hidden}.progress-fill{background:linear-gradient(90deg,var(--primary),var(--primary-light));border-radius:100px;height:100%;transition:width .6s ease}.alert{border-radius:var(--radius);font-size:.85rem;margin-bottom:1rem;padding:.75rem 1rem}.alert-error{background:var(--danger-bg);border:1px solid rgba(220,38,38,.2);color:var(--danger)}.alert-success{background:var(--success-bg);border:1px solid rgba(22,163,74,.2);color:var(--success)}.spinner{animation:spin .8s linear infinite;border:3px solid var(--border);border-radius:50%;border-top-color:var(--primary);height:28px;margin:0 auto;width:28px}@keyframes spin{to{transform:rotate(1turn)}}.container{max-width:1100px}.container,.container-sm{margin:0 auto;padding:0 1.25rem}.container-sm{max-width:680px}.campaign-grid{display:grid;gap:1.5rem;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}@media(max-width:640px){.campaign-grid{grid-template-columns:1fr}}
