/* ========================================================================== WPSubscription Admin Components (prefix: wpsubs-) Design reference: WP SmartPay sp-layout.css ========================================================================== */ /* -------------------------------------------------------------------------- Design tokens -------------------------------------------------------------------------- */ :root { --wpsubs-brand: #2271b1; --wpsubs-brand-dark: #135e96; --wpsubs-brand-light: #eef4fb; --wpsubs-brand-ring: rgba(34, 113, 177, 0.2); --wpsubs-surface: #ffffff; --wpsubs-surface-muted: #f9fafb; --wpsubs-border: #e5e7eb; --wpsubs-border-strong: #d1d5db; --wpsubs-text: #374151; --wpsubs-text-muted: #6b7280; --wpsubs-text-subtle: #9ca3af; --wpsubs-radius: 8px; --wpsubs-radius-sm: 5px; --wpsubs-shadow: 0 1px 3px rgba(0, 0, 0, 0.08); --wpsubs-shadow-md: 0 4px 16px rgba(0, 0, 0, 0.1), 0 1px 4px rgba(0, 0, 0, 0.06); } /* -------------------------------------------------------------------------- Page layout wrapper -------------------------------------------------------------------------- */ .wpsubs-layout { max-width: 80rem; margin: 0 auto; padding: 24px 0 48px; box-sizing: border-box; } /* -------------------------------------------------------------------------- Toolbar -------------------------------------------------------------------------- */ .wpsubs-toolbar { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 16px; } .wpsubs-toolbar__spacer { flex: 1; min-width: 8px; } /* -------------------------------------------------------------------------- Base input -------------------------------------------------------------------------- */ .wpsubs-input { display: block; width: 100%; height: 36px; padding: 0 12px; border: 1px solid var(--wpsubs-border) !important; border-radius: var(--wpsubs-radius-sm) !important; background: var(--wpsubs-surface) !important; font-size: 13px !important; font-family: inherit !important; color: var(--wpsubs-text) !important; outline: none !important; box-shadow: none !important; box-sizing: border-box; transition: border-color 0.15s, box-shadow 0.15s; } .wpsubs-input:focus { border-color: var(--wpsubs-brand) !important; box-shadow: 0 0 0 3px var(--wpsubs-brand-ring) !important; } .wpsubs-input::placeholder { color: var(--wpsubs-text-subtle) !important; } .wpsubs-input:disabled { opacity: 0.55; cursor: not-allowed; background: var(--wpsubs-surface-muted) !important; } /* -------------------------------------------------------------------------- Input with icon (.wpsubs-input-wrap) Usage:
...
Modifiers: --icon-l (icon on left) --icon-r (icon on right) -------------------------------------------------------------------------- */ .wpsubs-input-wrap { position: relative; display: inline-flex; align-items: center; width: 100%; } .wpsubs-input-wrap .wpsubs-input-icon { position: absolute; top: 50%; transform: translateY(-50%); width: 15px; height: 15px; color: var(--wpsubs-text-subtle); pointer-events: none; flex-shrink: 0; } .wpsubs-input-wrap--icon-l .wpsubs-input-icon { left: 10px; } .wpsubs-input-wrap--icon-l .wpsubs-input { padding-left: 34px !important; } .wpsubs-input-wrap--icon-r .wpsubs-input-icon { right: 10px; } .wpsubs-input-wrap--icon-r .wpsubs-input { padding-right: 34px !important; } /* -------------------------------------------------------------------------- Input group (.wpsubs-input-group) A flex row that snaps children edge-to-edge with shared borders. Children: .wpsubs-input, .wpsubs-btn, .wpsubs-select, .wpsubs-adv-select Usage:
-------------------------------------------------------------------------- */ .wpsubs-input-group { display: inline-flex; align-items: stretch; } .wpsubs-input-group > .wpsubs-input, .wpsubs-input-group > .wpsubs-btn, .wpsubs-input-group > .wpsubs-select, .wpsubs-input-group > .wpsubs-adv-select > .wpsubs-adv-select__trigger { border-radius: 0 !important; } /* Restore radius on first and last direct children */ .wpsubs-input-group > :first-child, .wpsubs-input-group > :first-child > .wpsubs-adv-select__trigger { border-top-left-radius: var(--wpsubs-radius-sm) !important; border-bottom-left-radius: var(--wpsubs-radius-sm) !important; } .wpsubs-input-group > :last-child, .wpsubs-input-group > :last-child > .wpsubs-adv-select__trigger { border-top-right-radius: var(--wpsubs-radius-sm) !important; border-bottom-right-radius: var(--wpsubs-radius-sm) !important; } /* Collapse adjacent borders */ .wpsubs-input-group > *:not(:first-child), .wpsubs-input-group > .wpsubs-adv-select:not(:first-child) > .wpsubs-adv-select__trigger { margin-left: -1px; } /* Bring focused item to front so its border ring shows fully */ .wpsubs-input-group > .wpsubs-input:focus, .wpsubs-input-group > .wpsubs-btn:focus, .wpsubs-input-group > .wpsubs-select:focus, .wpsubs-input-group > .wpsubs-adv-select--open > .wpsubs-adv-select__trigger { position: relative; z-index: 1; } /* -------------------------------------------------------------------------- Search — convenience wrapper around input-wrap (backward compat kept) -------------------------------------------------------------------------- */ .wpsubs-search { min-width: 180px; max-width: 280px; } .wpsubs-search .wpsubs-input-wrap { width: 100%; } /* -------------------------------------------------------------------------- Buttons -------------------------------------------------------------------------- */ .wpsubs-btn { display: inline-flex; align-items: center; justify-content: center; gap: 5px; height: 40px; padding: 0 14px; border-radius: var(--wpsubs-radius-sm); font-size: 13px; font-weight: 500; font-family: inherit; cursor: pointer; white-space: nowrap; text-decoration: none; transition: background 0.12s, border-color 0.12s, color 0.12s; border: 1px solid transparent; line-height: 1; vertical-align: middle; box-shadow: none; } .wpsubs-btn:focus, .wpsubs-btn:focus-visible, .wpsubs-btn:active { outline: none !important; box-shadow: none !important; border-radius: var(--wpsubs-radius-sm) !important; } .wpsubs-btn--outline { background: var(--wpsubs-surface); border-color: var(--wpsubs-border); color: var(--wpsubs-text); } .wpsubs-btn--outline:hover { border-color: var(--wpsubs-border-strong); background: var(--wpsubs-surface-muted); color: var(--wpsubs-text); text-decoration: none; } .wpsubs-btn--primary { background: var(--wpsubs-brand); border-color: var(--wpsubs-brand); color: #fff; } .wpsubs-btn--primary:hover { background: var(--wpsubs-brand-dark); border-color: var(--wpsubs-brand-dark); color: #fff; text-decoration: none; } .wpsubs-btn--danger { background: var(--wpsubs-surface); border-color: #fca5a5; color: #dc2626; } .wpsubs-btn--danger:hover { background: #fef2f2; border-color: #f87171; color: #b91c1c; text-decoration: none; } /* -------------------------------------------------------------------------- Advanced Select (wpsubs-adv-select) Drop-in replacement for native