Install Digikash
Complete the checks in order. Envato license verification is required before database setup and final installation.
:root { --ink: #14213d; --muted: #667085; --line: #e2e8f0; --panel: #ffffff; --page: #f8fafc; --primary: #4663ee; --primary-dark: #354c8c; --primary-rgb: 70, 99, 238; --side: #111827; --side-deep: #172554; --side-soft: #1f2937; --accent: #f59e0b; --accent-soft: #fff7e6; --success: #16a37a; --success-soft: #e8f7f1; --danger: #bd2d2d; --danger-soft: #fff1f1; --warning: #a36300; --warning-soft: #fff7e6; } * { box-sizing: border-box; } body { margin: 0; min-height: 100vh; color: var(--ink); background: var(--page); font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; letter-spacing: 0; } button, input, select { font: inherit; } .installer-shell { min-height: 100vh; display: grid; grid-template-columns: 300px minmax(0, 1fr); } .installer-aside { min-height: 100vh; padding: 24px; color: #ffffff; background: linear-gradient(180deg, var(--side) 0%, var(--side-deep) 100%); display: flex; flex-direction: column; gap: 20px; } .brand { display: flex; align-items: center; gap: 10px; font-weight: 800; font-size: 16px; } .brand-mark { width: 34px; height: 34px; display: inline-grid; place-items: center; border-radius: 8px; background: linear-gradient(135deg, var(--primary), var(--primary-dark)); box-shadow: 0 8px 18px rgba(var(--primary-rgb), .28); } .brand-mark svg { width: 23px; height: 23px; display: block; } .aside-copy { display: grid; gap: 12px; } .aside-copy h1 { margin: 0; font-size: 26px; line-height: 1.08; letter-spacing: 0; } .aside-copy p { margin: 0; color: #d8e8ef; line-height: 1.55; font-size: 13px; } .progress-shell { display: grid; gap: 10px; } .progress-meta { display: flex; justify-content: space-between; gap: 12px; color: #d8e8ef; font-size: 12px; font-weight: 700; } .progress-track { height: 8px; border-radius: 8px; background: rgba(255, 255, 255, .18); overflow: hidden; } .progress-fill { width: 17%; height: 100%; border-radius: 8px; background: var(--accent); transition: width .22s ease; } .step-list { display: grid; gap: 8px; margin: 0; padding: 0; list-style: none; } .step-button { width: 100%; border: 1px solid rgba(255, 255, 255, .16); border-radius: 8px; display: grid; grid-template-columns: 30px minmax(0, 1fr); align-items: center; gap: 9px; padding: 8px; color: #d8e8ef; background: rgba(255, 255, 255, .06); text-align: left; cursor: pointer; } .step-button[aria-current="step"] { color: #ffffff; border-color: rgba(245, 158, 11, .72); background: rgba(245, 158, 11, .12); } .step-button:disabled { cursor: not-allowed; opacity: .72; } .step-number { width: 30px; height: 30px; display: inline-grid; place-items: center; border-radius: 8px; color: var(--side); background: var(--accent); font-weight: 900; } .step-label strong { display: block; font-size: 13px; line-height: 1.25; } .step-label span { display: block; margin-top: 3px; font-size: 11px; color: #bcd2de; line-height: 1.35; } .aside-facts { margin-top: auto; display: grid; gap: 6px; } .aside-facts__head { display: flex; align-items: flex-end; justify-content: space-between; gap: 10px; padding-bottom: 2px; } .aside-facts__head strong { display: block; color: #cbd5e1; font-size: 10px; text-transform: uppercase; letter-spacing: .05em; } .aside-facts__head span { color: #94a3b8; font-size: 10px; font-weight: 600; white-space: nowrap; } .insight-card { display: grid; grid-template-columns: 22px minmax(0, 1fr); gap: 8px; padding: 7px 0; color: #d7deeb; border-top: 1px solid rgba(255, 255, 255, .06); } .insight-card strong { display: block; color: #e5eaf3; font-size: 11px; line-height: 1.25; } .insight-card span:last-child { display: block; margin-top: 2px; color: #a8b3c7; font-size: 10px; line-height: 1.35; } .insight-card .mini-icon, .button-icon { width: 22px; height: 22px; display: inline-grid; place-items: center; border-radius: 6px; color: #d8c08a; background: rgba(245, 158, 11, .06); border: 1px solid rgba(245, 158, 11, .10); font-size: 8px; font-weight: 900; } .button .button-icon { width: 22px; height: 22px; color: #ffffff; background: rgba(255, 255, 255, .18); font-size: 11px; border-radius: 7px; border: 0; } .installer-main { padding: 20px; display: flex; align-items: flex-start; } .installer-wrap { width: min(900px, 100%); margin: 0 auto; display: grid; gap: 14px; } .topbar { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; } .topbar h2 { margin: 0; font-size: 21px; letter-spacing: 0; } .topbar p, .topbar span { margin: 5px 0 0; color: var(--muted); font-size: 12px; line-height: 1.45; } .wizard-panel { height: min(590px, calc(100vh - 112px)); min-height: 500px; border: 1px solid var(--line); border-radius: 8px; background: var(--panel); box-shadow: 0 18px 40px rgba(var(--primary-rgb), .08); display: grid; grid-template-rows: minmax(0, 1fr) auto; } .wizard-body { min-height: 0; overflow: auto; padding: 18px; scrollbar-width: thin; scrollbar-color: rgba(var(--primary-rgb), .36) transparent; } .wizard-body::-webkit-scrollbar { width: 8px; } .wizard-body::-webkit-scrollbar-thumb { border-radius: 999px; background: rgba(var(--primary-rgb), .28); } .wizard-body::-webkit-scrollbar-track { background: transparent; } .step-panel { display: none; gap: 14px; } .step-panel.is-active { display: grid; } .section-head { display: flex; align-items: flex-start; justify-content: space-between; gap: 16px; } .section-title { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 10px; align-items: start; } .section-icon { width: 34px; height: 34px; display: inline-grid; place-items: center; border-radius: 8px; color: #ffffff; background: var(--primary); font-size: 11px; font-weight: 900; } .section-title h3 { margin: 0; font-size: 17px; letter-spacing: 0; } .section-title p { margin: 5px 0 0; color: var(--muted); font-size: 12px; line-height: 1.45; } .status-pill { min-height: 34px; display: inline-flex; align-items: center; gap: 7px; border-radius: 8px; padding: 6px 9px; color: var(--success); background: var(--success-soft); font-size: 12px; font-weight: 800; white-space: nowrap; } .status-pill.is-danger { color: var(--danger); background: var(--danger-soft); } .check-layout { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; } .check-group, .guide, .review-list, .db-result { border: 1px solid var(--line); border-radius: 8px; overflow: hidden; } .check-group { display: flex; flex-direction: column; min-height: 0; } .check-group__body { min-height: 0; max-height: calc(var(--check-row-height, 56px) * 4); overflow-y: auto; scrollbar-width: thin; scrollbar-color: rgba(var(--primary-rgb), .36) transparent; } .check-group__body::-webkit-scrollbar { width: 6px; } .check-group__body::-webkit-scrollbar-track { background: transparent; } .check-group__body::-webkit-scrollbar-thumb { border-radius: 999px; background: rgba(var(--primary-rgb), .28); } .check-group__body::-webkit-scrollbar-thumb:hover { background: rgba(var(--primary-rgb), .48); } .check-group__body > .check-row { min-height: var(--check-row-height, 56px); } @media (max-width: 720px) { .check-group__body { --check-row-height: 52px; } } .check-title, .guide-title, .review-title, .result-title { margin: 0; padding: 10px 12px; border-bottom: 1px solid var(--line); background: #f8fafc; color: #344054; font-size: 11px; font-weight: 900; text-transform: uppercase; } .check-row, .review-row, .result-row { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 9px; align-items: start; padding: 9px 12px; border-bottom: 1px solid #edf1f5; } .check-row:last-child, .review-row:last-child, .result-row:last-child { border-bottom: 0; } .check-icon, .result-icon { width: 28px; height: 28px; display: inline-grid; place-items: center; border-radius: 50%; color: #ffffff; background: var(--danger); font-size: 10px; font-weight: 900; } .check-icon.is-ok, .result-icon.is-success { background: var(--success); } .result-icon.is-warning { background: var(--warning); } .check-label, .result-label, .review-label { display: block; font-weight: 800; font-size: 13px; color: #26364a; } .check-help, .result-detail, .review-value { display: block; margin-top: 3px; color: var(--muted); font-size: 12px; line-height: 1.4; overflow-wrap: anywhere; } .guide { background: #fbfcfe; } .guide ul { margin: 0; padding: 10px 14px 12px 28px; color: #44546a; font-size: 12px; line-height: 1.5; } .notice, .alert { display: grid; grid-template-columns: 32px minmax(0, 1fr); gap: 9px; align-items: start; border-radius: 8px; padding: 10px 12px; font-size: 12px; line-height: 1.45; } .notice { border: 1px solid #f3d391; color: #744d00; background: var(--warning-soft); } .alert { border: 1px solid #f1b3b3; color: #8f1d1d; background: var(--danger-soft); } .notice .button-icon, .alert .button-icon { width: 24px; height: 24px; color: #744d00; background: rgba(245, 158, 11, .14); border: 1px solid rgba(245, 158, 11, .28); font-size: 9px; line-height: 1; } .alert .button-icon { color: var(--danger); background: rgba(189, 45, 45, .10); border-color: rgba(189, 45, 45, .22); } .install-error { display: grid; gap: 10px; padding: 14px 16px; border: 1px solid rgba(189, 45, 45, .35); border-radius: 12px; background: radial-gradient(circle at 100% 0%, rgba(189, 45, 45, .10), transparent 55%), linear-gradient(180deg, #fff5f5 0%, #ffffff 100%); box-shadow: 0 1px 2px rgba(189, 45, 45, .05), 0 8px 20px -12px rgba(189, 45, 45, .25); } .install-error__head { display: grid; grid-template-columns: 36px minmax(0, 1fr); gap: 12px; align-items: start; } .install-error__icon { display: inline-grid; place-items: center; width: 36px; height: 36px; border-radius: 10px; color: #ffffff; background: linear-gradient(135deg, #dc2626 0%, #991b1b 100%); font-size: 16px; font-weight: 900; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.18) inset, 0 4px 10px -4px rgba(189, 45, 45, .45); } .install-error__copy strong { display: block; color: #7f1d1d; font-size: 14px; font-weight: 800; line-height: 1.3; margin-bottom: 3px; } .install-error__copy p { margin: 0; color: #9b2c2c; font-size: 12.5px; line-height: 1.5; } .install-error__guide { border: 1px solid rgba(189, 45, 45, .18); border-radius: 10px; background: #ffffff; overflow: hidden; } .install-error__guide summary { padding: 10px 12px; color: #7f1d1d; background: #fff5f5; font-size: 12px; font-weight: 800; cursor: pointer; list-style: none; } .install-error__guide summary::-webkit-details-marker { display: none; } .install-error__guide summary::after { content: "+"; float: right; font-size: 14px; font-weight: 900; color: #b91c1c; } .install-error__guide[open] summary::after { content: "−"; } .install-error__guide ul { margin: 0; padding: 10px 14px 12px 28px; color: #44546a; font-size: 12px; line-height: 1.55; } .install-error__guide li + li { margin-top: 6px; } .install-error__hint { margin: 0; padding: 8px 10px; border-radius: 8px; background: rgba(189, 45, 45, .06); color: #7f1d1d; font-size: 11.5px; font-weight: 700; line-height: 1.5; } .fields { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; align-items: start; } .field { display: grid; gap: 7px; align-self: start; } .field.is-wide { grid-column: 1 / -1; } label { font-size: 13px; font-weight: 800; color: #344054; } input, select { width: 100%; min-height: 40px; border: 1px solid #cbd6e2; border-radius: 8px; padding: 8px 10px; color: var(--ink); background: #ffffff; outline: none; font-size: 13px; } input:focus, select:focus { border-color: var(--primary); box-shadow: 0 0 0 3px rgba(var(--primary-rgb), .14); } .error { color: var(--danger); font-size: 12px; line-height: 1.45; } .field-help { display: block; min-height: 36px; color: var(--muted); font-size: 11.5px; line-height: 1.5; } .field-help.is-muted { color: #94a3b8; } .field-help code { padding: 1px 6px; border-radius: 4px; background: #f1f5f9; color: #334155; font-size: 11.5px; font-weight: 600; } .lock-tag { display: inline-flex; align-items: center; gap: 4px; margin-left: 8px; padding: 2px 7px; border-radius: 999px; background: rgba(22, 163, 122, .1); color: var(--success); font-size: 10px; font-weight: 800; letter-spacing: .02em; text-transform: none; vertical-align: middle; } .lock-tag svg { display: block; } input.is-locked { background: #f1f5f9; color: #475569; border-style: dashed; cursor: not-allowed; font-weight: 700; } input.is-locked:focus { border-color: #cbd6e2; box-shadow: none; } /* ── Password requirements helper ─────────────────────────── */ .pw-help { margin-top: 4px; padding: 14px 16px; border: 1px solid #e1e7f0; border-radius: 10px; background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); } .pw-help__head { display: flex; align-items: flex-start; gap: 10px; padding-bottom: 10px; margin-bottom: 10px; border-bottom: 1px solid #eef1f6; } .pw-help__icon { display: inline-grid; place-items: center; width: 32px; height: 32px; border-radius: 8px; background: rgba(var(--primary-rgb), 0.1); color: var(--primary); flex-shrink: 0; } .pw-help__copy strong { display: block; font-size: 13px; font-weight: 800; color: var(--ink); line-height: 1.3; margin-bottom: 2px; } .pw-help__copy small { display: block; font-size: 11.5px; color: #64748b; line-height: 1.5; } .pw-help__list { list-style: none; margin: 0; padding: 0; display: grid; grid-template-columns: 1fr; gap: 6px; } @media (min-width: 560px) { .pw-help__list { grid-template-columns: 1fr 1fr; } } .pw-help__list li { display: flex; align-items: center; gap: 8px; font-size: 12px; color: #64748b; transition: color 0.16s ease, font-weight 0.16s ease; } .pw-help__dot { position: relative; display: inline-block; width: 16px; height: 16px; border-radius: 50%; border: 1.5px solid #cbd6e2; background: #fff; flex-shrink: 0; transition: background-color 0.16s ease, border-color 0.16s ease, transform 0.16s ease; } .pw-help__list li.is-met { color: #047857; font-weight: 600; } .pw-help__list li.is-met .pw-help__dot { background: #10b981; border-color: #10b981; transform: scale(1.05); } .pw-help__list li.is-met .pw-help__dot::after { content: ""; position: absolute; top: 50%; left: 50%; width: 7px; height: 4px; border-left: 2px solid #fff; border-bottom: 2px solid #fff; transform: translate(-55%, -75%) rotate(-45deg); } .pw-help__tip { margin: 12px 0 0; padding: 8px 10px; background: rgba(var(--primary-rgb), 0.06); border-left: 3px solid var(--primary); border-radius: 6px; font-size: 11.5px; color: #344054; line-height: 1.55; } .pw-help__tip strong { color: var(--primary); font-weight: 800; } /* Defensive: strip browser/password-manager injected icons from our scoped password fields so the input doesn't get a stray red overlay on the right edge. */ input[data-pw-check], input[data-pw-confirm] { appearance: none; -webkit-appearance: none; background-image: none !important; } input[data-pw-check]::-webkit-credentials-auto-fill-button, input[data-pw-check]::-webkit-strong-password-auto-fill-button, input[data-pw-check]::-webkit-caps-lock-indicator, input[data-pw-check]::-ms-reveal, input[data-pw-check]::-ms-clear, input[data-pw-confirm]::-webkit-credentials-auto-fill-button, input[data-pw-confirm]::-webkit-strong-password-auto-fill-button, input[data-pw-confirm]::-webkit-caps-lock-indicator, input[data-pw-confirm]::-ms-reveal, input[data-pw-confirm]::-ms-clear { display: none !important; -webkit-appearance: none !important; appearance: none !important; width: 0 !important; height: 0 !important; } .db-actions { display: flex; align-items: center; justify-content: space-between; gap: 12px; padding: 12px; border: 1px solid var(--line); border-radius: 8px; background: #fbfcfe; } .db-actions.is-success { border-color: #a8dbc5; background: var(--success-soft); } .db-actions.is-error { border-color: #f5c6c6; background: #fffafa; } .db-actions p { margin: 0; color: var(--muted); font-size: 12px; line-height: 1.45; } .db-actions.is-success p { color: var(--success); font-weight: 800; } .db-actions.is-error p { color: #9f3a3a; font-weight: 700; } .db-result { display: none; } .db-result.is-visible { display: block; } .db-result.is-success { border-color: #a8dbc5; } .db-result.is-warning { border-color: #efc16d; } .db-result.is-error { border-color: #f3c4c4; } .db-result.is-error .result-title { color: #a43a3a; background: #fff8f8; border-bottom-color: #f3c4c4; font-weight: 700; text-transform: none; } .review-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .review-row { grid-template-columns: minmax(0, 1fr); } .review-value { font-weight: 600; } .review-preview { gap: 10px; } .review-preview .section-head { padding-bottom: 2px; } .review-preview .notice { grid-template-columns: 26px minmax(0, 1fr); gap: 8px; padding: 8px 10px; color: #805000; background: #fffaf0; } .review-preview .notice .button-icon { width: 22px; height: 22px; border-radius: 7px; } .review-preview .review-grid { grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 8px; } .review-preview .review-list { border-color: #dbe5f0; background: #ffffff; box-shadow: 0 8px 20px rgba(20, 33, 61, .035); } .review-preview .review-title { padding: 8px 10px; background: #f8fafc; color: #475569; font-size: 10px; letter-spacing: .04em; } .review-preview .review-row { grid-template-columns: 92px minmax(0, 1fr); gap: 8px; align-items: center; padding: 8px 10px; min-height: 38px; } .review-preview .review-label { font-size: 11px; color: #64748b; } .review-preview .review-value { margin-top: 0; color: #25364d; font-size: 12px; line-height: 1.35; font-weight: 800; } .review-preview .review-list.is-wide { grid-column: span 2; } /* ──────────────────────────────────────────────────────────────── Premium Final-Review (rv) styles — overlays the older .review-preview structure with a richer card system. ──────────────────────────────────────────────────────────────── */ .step-panel.rv.is-active { display: grid; gap: 14px; } /* ── Status bar (license / database / admin) ──────────────────── */ .rv__status { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 10px; } .rv__stat { position: relative; display: flex; align-items: center; gap: 12px; padding: 14px; border: 1px solid #e2e8f0; border-radius: 12px; background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03), 0 6px 14px -10px rgba(15, 23, 42, 0.08); overflow: hidden; transition: border-color 0.18s ease, background 0.18s ease, box-shadow 0.18s ease; } .rv__stat::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, #cbd5e1 0%, transparent 100%); opacity: 0.7; } .rv__stat-icon { position: relative; display: inline-grid; place-items: center; flex-shrink: 0; width: 36px; height: 36px; border-radius: 10px; background: #f1f5f9; color: #64748b; transition: background 0.18s ease, color 0.18s ease; } .rv__stat-icon::after { content: ""; position: absolute; top: -2px; right: -2px; width: 8px; height: 8px; border: 2px solid #ffffff; border-radius: 50%; background: #cbd5e1; transition: background 0.18s ease; } .rv__stat-icon svg { width: 16px; height: 16px; } .rv__stat-text { display: flex; flex-direction: column; min-width: 0; } .rv__stat-label { font-size: 10px; font-weight: 800; letter-spacing: 0.08em; text-transform: uppercase; color: #64748b; margin-bottom: 3px; } .rv__stat-value { font-size: 13px; font-weight: 700; color: #0f172a; line-height: 1.3; overflow: hidden; text-overflow: ellipsis; } .rv__stat.is-pending::before { background: linear-gradient(90deg, #f59e0b 0%, transparent 100%); } .rv__stat.is-pending .rv__stat-icon::after { background: #f59e0b; box-shadow: 0 0 0 4px rgba(245, 158, 11, 0.16); } .rv__stat.is-ok { border-color: rgba(5, 150, 105, 0.25); background: linear-gradient(180deg, #ffffff 0%, #ecfdf5 100%); box-shadow: 0 1px 2px rgba(5, 150, 105, 0.04), 0 6px 16px -10px rgba(5, 150, 105, 0.18); } .rv__stat.is-ok::before { background: linear-gradient(90deg, #059669 0%, transparent 100%); opacity: 1; } .rv__stat.is-ok .rv__stat-icon { background: rgba(5, 150, 105, 0.12); color: #047857; } .rv__stat.is-ok .rv__stat-icon::after { background: #059669; box-shadow: 0 0 0 4px rgba(5, 150, 105, 0.16); } .rv__stat.is-ok .rv__stat-value { color: #047857; } /* ── Plan card — what installer will do ───────────────────────── */ .rv__plan { padding: 14px 16px; border: 1px solid rgba(var(--primary-rgb), 0.18); border-radius: 12px; background: radial-gradient(circle at 0% 0%, rgba(var(--primary-rgb), 0.06), transparent 50%), linear-gradient(180deg, #ffffff 0%, #fbfdff 100%); } .rv__plan-head { display: flex; align-items: flex-start; gap: 12px; padding-bottom: 12px; margin-bottom: 12px; border-bottom: 1px solid #eef1f6; } .rv__plan-icon { display: inline-grid; place-items: center; flex-shrink: 0; width: 36px; height: 36px; border-radius: 10px; background: linear-gradient(135deg, rgba(var(--primary-rgb), 0.16) 0%, rgba(var(--primary-rgb), 0.08) 100%); color: var(--primary); box-shadow: 0 1px 0 rgba(255, 255, 255, 0.6) inset; } .rv__plan-icon svg { width: 18px; height: 18px; } .rv__plan-head strong { display: block; font-size: 13px; font-weight: 800; color: var(--ink); line-height: 1.3; margin-bottom: 2px; } .rv__plan-head small { display: block; font-size: 11.5px; color: #64748b; line-height: 1.5; } .rv__plan-steps { list-style: none; margin: 0; padding: 0; display: grid; gap: 6px; } .rv__plan-steps li { display: flex; align-items: center; gap: 10px; padding: 6px 8px; font-size: 12.5px; color: #334155; line-height: 1.5; border-radius: 6px; transition: background 0.16s ease; } .rv__plan-steps li:hover { background: rgba(var(--primary-rgb), 0.04); } .rv__plan-steps li code { padding: 1px 6px; border-radius: 4px; background: rgba(var(--primary-rgb), 0.08); color: var(--primary); font-size: 11.5px; font-weight: 700; } .rv__plan-num { display: inline-grid; place-items: center; flex-shrink: 0; width: 22px; height: 22px; border-radius: 50%; background: var(--primary); color: #fff; font-size: 11px; font-weight: 800; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.2) inset, 0 2px 4px -2px rgba(var(--primary-rgb), 0.4); } /* ── Configuration cards grid ─────────────────────────────────── */ .rv__grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); grid-auto-rows: 1fr; gap: 12px; } .rv__card { position: relative; display: flex; flex-direction: column; border: 1px solid #e2e8f0; border-radius: 12px; background: #ffffff; overflow: hidden; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.03), 0 6px 14px -10px rgba(15, 23, 42, 0.06); transition: border-color 0.18s ease, box-shadow 0.18s ease, transform 0.18s ease; } .rv__card::before { content: ""; position: absolute; top: 0; left: 0; bottom: 0; width: 3px; background: var(--rv-card-accent, #cbd5e1); opacity: 0.85; } .rv__card--app { --rv-card-accent: #2563eb; } .rv__card--db { --rv-card-accent: #7c3aed; } .rv__card--admin { --rv-card-accent: #059669; } .rv__card--data { --rv-card-accent: #d97706; } .rv__card:hover { transform: translateY(-1px); border-color: #cbd5e1; box-shadow: 0 1px 2px rgba(15, 23, 42, 0.04), 0 10px 22px -12px rgba(15, 23, 42, 0.12); } .rv__card-head { display: flex; align-items: center; gap: 11px; padding: 13px 14px 13px 16px; background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%); border-bottom: 1px solid #eef1f6; } .rv__card-icon { display: inline-grid; place-items: center; flex-shrink: 0; width: 34px; height: 34px; border-radius: 10px; background: #f1f5f9; color: #475569; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.6) inset; } .rv__card-icon svg { width: 16px; height: 16px; } .rv__card-icon--blue { background: rgba(37, 99, 235, 0.1); color: #2563eb; } .rv__card-icon--purple { background: rgba(139, 92, 246, 0.1); color: #7c3aed; } .rv__card-icon--green { background: rgba(5, 150, 105, 0.1); color: #047857; } .rv__card-icon--amber { background: rgba(217, 119, 6, 0.1); color: #b45309; } .rv__card-head strong { display: block; font-size: 13.5px; font-weight: 800; color: var(--ink); line-height: 1.2; margin-bottom: 2px; } .rv__card-head small { font-size: 11px; color: #64748b; letter-spacing: 0.02em; } .rv__card-list { margin: 0; padding: 4px 0; display: grid; flex: 1 1 auto; align-content: start; } .rv__row { display: grid; grid-template-columns: 96px minmax(0, 1fr); gap: 10px; align-items: center; padding: 9px 14px 9px 16px; border-top: 1px solid transparent; transition: background 0.16s ease; } .rv__row:not(:first-child) { border-top-color: #f1f5f9; } .rv__row:hover { background: #fbfcfe; } .rv__row dt { margin: 0; font-size: 11px; font-weight: 700; color: #64748b; letter-spacing: 0.04em; text-transform: uppercase; } .rv__row dd { margin: 0; font-size: 12.5px; font-weight: 700; color: #0f172a; line-height: 1.4; word-break: break-word; } .rv__row dd code { padding: 2px 7px; border-radius: 5px; background: #f1f5f9; color: #334155; font-size: 11.5px; font-weight: 700; } /* ── Ready banner ─────────────────────────────────────────────── */ .rv__ready { position: relative; display: flex; align-items: center; gap: 14px; padding: 16px 18px; border: 1px solid rgba(5, 150, 105, 0.25); border-radius: 14px; background: radial-gradient(circle at 100% 0%, rgba(5, 150, 105, 0.1), transparent 55%), linear-gradient(180deg, #ffffff 0%, #ecfdf5 100%); box-shadow: 0 1px 2px rgba(5, 150, 105, 0.04), 0 8px 20px -10px rgba(5, 150, 105, 0.22); overflow: hidden; } .rv__ready::before { content: ""; position: absolute; top: 0; left: 0; right: 0; height: 2px; background: linear-gradient(90deg, #10b981, #059669, transparent); opacity: 0.85; } .rv__ready-icon { position: relative; animation: rv-pulse 2.4s ease-in-out infinite; display: inline-grid; place-items: center; flex-shrink: 0; width: 38px; height: 38px; border-radius: 11px; background: linear-gradient(135deg, #10b981 0%, #047857 100%); color: #ffffff; box-shadow: 0 1px 0 rgba(255, 255, 255, 0.18) inset, 0 4px 10px -4px rgba(5, 150, 105, 0.4); } @keyframes rv-pulse { 0%, 100% { box-shadow: 0 1px 0 rgba(255, 255, 255, 0.18) inset, 0 4px 10px -4px rgba(5, 150, 105, 0.4), 0 0 0 0 rgba(5, 150, 105, 0.32); } 50% { box-shadow: 0 1px 0 rgba(255, 255, 255, 0.18) inset, 0 4px 14px -2px rgba(5, 150, 105, 0.5), 0 0 0 8px rgba(5, 150, 105, 0); } } .rv__ready-icon svg { width: 20px; height: 20px; } .rv__ready-copy strong { display: block; font-size: 13.5px; font-weight: 800; color: #065f46; line-height: 1.3; margin-bottom: 2px; } .rv__ready-copy span { display: block; font-size: 12px; color: #047857; line-height: 1.55; } /* ── Responsive ───────────────────────────────────────────────── */ @media (max-width: 768px) { .rv__status { grid-template-columns: 1fr; } .rv__grid { grid-template-columns: 1fr; } } .wizard-actions { padding: 10px 16px; border-top: 1px solid var(--line); display: flex; justify-content: space-between; gap: 12px; background: #fbfcfe; border-radius: 0 0 8px 8px; } .action-group { display: flex; gap: 8px; } .button { min-height: 36px; border: 1px solid transparent; border-radius: 8px; display: inline-flex; align-items: center; justify-content: center; gap: 7px; padding: 7px 11px; color: #ffffff; background: var(--primary); font-size: 12px; font-weight: 800; cursor: pointer; } .button:hover { background: var(--primary-dark); } .button.is-secondary { color: #344054; border-color: #cbd6e2; background: #ffffff; } .button.is-secondary:hover { background: #eef3f7; } .button.is-secondary .button-icon { color: var(--primary); background: rgba(var(--primary-rgb), .08); border: 1px solid rgba(var(--primary-rgb), .18); } .button.is-accent { color: #ffffff; background: var(--primary); } .button.is-accent:hover { background: var(--primary-dark); } .button:disabled { cursor: not-allowed; opacity: .68; } .installing { display: none; align-items: center; gap: 10px; color: var(--muted); font-size: 13px; font-weight: 800; } .installing.is-visible { display: inline-flex; } .install-progress { position: absolute; inset: 0; z-index: 20; display: none; place-items: center; padding: 24px; background: rgba(248, 250, 252, .94); backdrop-filter: blur(8px); } .wizard-panel.is-installing .install-progress { display: grid; } .install-progress__box { width: min(520px, 100%); border: 1px solid rgba(var(--primary-rgb), .14); border-radius: 8px; padding: 18px; background: #ffffff; box-shadow: 0 22px 55px rgba(20, 33, 61, .12); } .install-progress__head { display: grid; grid-template-columns: 38px minmax(0, 1fr); gap: 12px; align-items: start; } .install-progress__icon { width: 38px; height: 38px; display: inline-grid; place-items: center; border-radius: 8px; color: #ffffff; background: var(--primary); font-size: 11px; font-weight: 900; } .install-progress h3 { margin: 0; font-size: 18px; line-height: 1.25; } .install-progress p { margin: 5px 0 0; color: var(--muted); font-size: 12px; line-height: 1.45; } .install-progress__meta { display: flex; justify-content: space-between; gap: 12px; margin-top: 16px; color: #344054; font-size: 12px; font-weight: 800; } .install-progress__track { height: 8px; margin-top: 8px; overflow: hidden; border-radius: 999px; background: #e8edf4; } .install-progress__fill { width: 8%; height: 100%; border-radius: inherit; background: linear-gradient(90deg, var(--primary), #6c83ff); transition: width .36s ease; } .install-progress__steps { display: grid; gap: 8px; margin: 16px 0 0; padding: 0; list-style: none; } .install-progress__step { display: grid; grid-template-columns: 28px minmax(0, 1fr); gap: 9px; align-items: start; padding: 9px 0; border-top: 1px solid #edf1f5; color: var(--muted); } .install-progress__badge { width: 28px; height: 28px; display: inline-grid; place-items: center; border-radius: 50%; color: #64748b; background: #eef2f7; font-size: 9px; font-weight: 900; } .install-progress__step strong { display: block; color: #334155; font-size: 12px; line-height: 1.3; } .install-progress__step span:last-child { display: block; margin-top: 2px; font-size: 11px; line-height: 1.35; } .install-progress__step.is-active .install-progress__badge { color: #ffffff; background: var(--primary); box-shadow: 0 0 0 4px rgba(var(--primary-rgb), .10); } .install-progress__step.is-complete .install-progress__badge { color: #ffffff; background: var(--success); } .install-progress__note { margin-top: 14px; padding: 9px 10px; border-radius: 8px; color: #475467; background: #f8fafc; font-size: 11px; line-height: 1.45; } .spinner { width: 18px; height: 18px; border-radius: 50%; border: 3px solid #d8e0e8; border-top-color: var(--primary); animation: spin .75s linear infinite; } [hidden] { display: none !important; } @keyframes spin { to { transform: rotate(360deg); } } @media (max-width: 1020px) { .installer-shell { grid-template-columns: 1fr; } .installer-aside { min-height: auto; } .installer-main { align-items: stretch; } } @media (max-width: 720px) { .installer-aside, .installer-main { padding: 22px; } .topbar, .section-head, .db-actions, .wizard-actions { align-items: stretch; flex-direction: column; } .check-layout, .fields, .review-grid { grid-template-columns: 1fr; } .review-preview .review-grid, .review-preview .review-list.is-wide { grid-template-columns: 1fr; grid-column: auto; } .review-preview .review-row { grid-template-columns: 1fr; align-items: start; } .install-progress { padding: 16px; } .field.is-wide { grid-column: auto; } .action-group, .button { width: 100%; } }