:root { color-scheme: light; --bg: #f5f5f7; --panel: rgba(255, 255, 255, 0.92); --panel-solid: #ffffff; --panel-soft: #f2f2f4; --text: #1d1d1f; --muted: #6e6e73; --line: #d8d8de; --line-soft: #ebecef; --accent: #0071e3; --accent-strong: #005bb5; --warning: #b25a00; --danger: #c52929; --success: #16833a; --shadow: 0 18px 44px rgba(0, 0, 0, 0.055); --shadow-soft: 0 8px 22px rgba(0, 0, 0, 0.045); } * { box-sizing: border-box; } body { margin: 0; min-width: 320px; min-height: 100vh; background: var(--bg); color: var(--text); font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", Inter, ui-sans-serif, system-ui, "Segoe UI", "PingFang SC", "Microsoft YaHei", sans-serif; letter-spacing: 0; -webkit-font-smoothing: antialiased; text-rendering: geometricPrecision; } [hidden] { display: none !important; } button, input, select, textarea { font: inherit; } .auth-screen { min-height: 100vh; padding: 30px clamp(18px, 4vw, 64px); background: #fff; color: var(--text); } .auth-brand { display: flex; align-items: center; gap: 14px; padding-bottom: 22px; border-bottom: 1px solid var(--line); } .auth-brand h1, .auth-brand p, .auth-card h2, .auth-preview { margin: 0; } .auth-brand h1 { font-size: 21px; font-weight: 760; } .auth-brand p { margin-top: 2px; color: var(--muted); font-size: 13px; } .auth-card { width: min(760px, 100%); margin: clamp(76px, 11vh, 132px) auto 0; text-align: center; } .auth-card h2 { margin-bottom: 64px; font-size: clamp(34px, 4vw, 48px); line-height: 1.08; font-weight: 780; } .auth-box { overflow: hidden; width: min(620px, 100%); margin: 0 auto; border: 1.5px solid #86868b; border-radius: 18px; background: #fff; text-align: left; transition: border-color 0.16s ease, box-shadow 0.16s ease; } .auth-box:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.12); } .auth-field { position: relative; display: block; min-height: 82px; padding: 16px 58px 12px 26px; } .auth-field + .auth-field { border-top: 1px solid #86868b; } .auth-box:focus-within .auth-field + .auth-field { border-top-color: var(--accent); } .auth-field span { display: block; color: var(--muted); font-size: 17px; line-height: 1.2; } .auth-field input { width: 100%; padding: 4px 0 0; border: 0; outline: 0; background: transparent; color: #424245; font-size: 28px; line-height: 1.15; box-shadow: none; } .auth-field-password input { padding-right: 46px; } .auth-submit { position: absolute; right: 18px; bottom: 17px; display: inline-grid; place-items: center; width: 42px; height: 42px; min-height: 0; padding: 0; border-radius: 50%; border-color: #5f5f63; background: #fff; color: #424245; box-shadow: none; } .auth-submit svg { width: 26px; height: 26px; } .auth-submit svg * { fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; stroke-linejoin: round; } .auth-remember { display: inline-flex; align-items: center; gap: 12px; margin-top: 54px; color: var(--text); font-size: 25px; font-weight: 460; } .auth-remember input { width: 24px; height: 24px; accent-color: var(--accent); } .auth-preview { margin-top: 46px; color: var(--muted); font-size: 15px; } button, label.file-button { min-height: 34px; border: 1px solid var(--line); border-radius: 8px; cursor: pointer; font-weight: 650; transition: background 0.16s ease, border-color 0.16s ease, box-shadow 0.16s ease, transform 0.16s ease; } button:hover, label.file-button:hover { transform: translateY(-1px); box-shadow: var(--shadow-soft); } button:disabled { cursor: progress; opacity: 0.72; transform: none; } button:focus-visible, input:focus-visible, select:focus-visible, textarea:focus-visible, label.file-button:focus-within { outline: 3px solid rgba(0, 113, 227, 0.18); outline-offset: 2px; } .app-shell { display: grid; grid-template-columns: 268px minmax(0, 1fr); min-height: 100vh; } .sidebar { position: sticky; top: 0; height: 100vh; padding: 24px 16px 16px; border-right: 1px solid var(--line); background: rgba(251, 251, 253, 0.86); backdrop-filter: blur(22px); display: flex; flex-direction: column; gap: 26px; } .sidebar-account { margin-top: auto; padding-top: 16px; border-top: 1px solid var(--line-soft); } .sidebar-user { display: flex; align-items: center; gap: 10px; width: 100%; padding: 8px 10px; border: 1px solid transparent; border-radius: 12px; background: transparent; color: var(--text); box-shadow: none; text-align: left; } .sidebar-user:hover { background: var(--panel-solid); border-color: var(--line); transform: none; box-shadow: var(--shadow-soft); } .sidebar-user-avatar { flex: 0 0 auto; display: grid; place-items: center; width: 36px; height: 36px; border-radius: 50%; color: #fff; font-weight: 760; font-size: 14px; letter-spacing: 0.4px; background: linear-gradient(135deg, #4c8bf5 0%, #7d5fff 100%); box-shadow: 0 4px 10px rgba(76, 139, 245, 0.28); } .sidebar-user-avatar[data-tier="pro"] { background: linear-gradient(135deg, #f5c14b 0%, #e08818 60%, #b65a0a 100%); box-shadow: 0 4px 12px rgba(224, 136, 24, 0.32); } .sidebar-user-info { flex: 1; min-width: 0; display: grid; gap: 2px; } .sidebar-user-info strong { display: block; font-size: 13px; font-weight: 720; color: var(--text); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .sidebar-user-info small { display: inline-flex; align-items: center; align-self: start; padding: 1px 7px; border-radius: 999px; background: #ececef; color: var(--muted); font-size: 11px; font-weight: 720; letter-spacing: 0.02em; } .sidebar-user-info small[data-tier="pro"] { background: linear-gradient(135deg, #fff3d4 0%, #f7d77a 100%); color: #8a5a09; } .sidebar-user-caret { flex: 0 0 auto; width: 14px; height: 14px; color: var(--muted); fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .account-menu-up { top: auto !important; right: auto !important; bottom: calc(100% + 8px); left: 0; width: 240px; } .account-menu-license span[data-tier="pro"] { color: #b07300; } .brand { display: flex; gap: 12px; align-items: center; } .brand-mark { display: grid; place-items: center; width: 42px; height: 42px; border-radius: 8px; background: #1d1d1f; color: #fff; font-weight: 800; letter-spacing: 0.2px; } .brand h1, .brand p, .topbar h2, .topbar p, .card h3, .dialog h3, .empty h3 { margin: 0; } .brand h1 { font-size: 19px; font-weight: 760; } .brand p, .eyebrow, .backup-note, .muted, .field-hint { color: var(--muted); } .brand p { margin-top: 2px; font-size: 12px; font-weight: 520; } .nav { display: grid; gap: 4px; } .nav-group { margin: 14px 9px 5px; color: var(--muted); font-size: 11px; font-weight: 780; letter-spacing: 0.08em; text-transform: uppercase; } .nav-group:first-child { margin-top: 0; } .nav button { width: 100%; padding: 9px 11px; background: transparent; color: var(--text); text-align: left; border-color: transparent; box-shadow: none; font-size: 14px; display: flex; align-items: center; gap: 10px; } .nav button.active { background: var(--panel-solid); border-color: var(--line); color: var(--text); box-shadow: var(--shadow-soft); font-weight: 760; } .nav-icon { position: relative; display: inline-grid; place-items: center; flex: 0 0 auto; width: 25px; height: 25px; border-radius: 8px; background: #f1f2f5; color: #52545a; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.045); } .nav button.active .nav-icon { background: #eef5ff; color: var(--accent); } .nav-icon::before, .nav-icon::after { content: ""; position: absolute; box-sizing: border-box; } .nav-icon.grid::before { width: 13px; height: 13px; border: 2px solid currentColor; border-radius: 4px; box-shadow: -5px -5px 0 -3px currentColor, 5px -5px 0 -3px currentColor, -5px 5px 0 -3px currentColor, 5px 5px 0 -3px currentColor; } .nav-icon.phone::before { width: 9px; height: 15px; border: 2px solid currentColor; border-radius: 3px; } .nav-icon.phone::after { bottom: 5px; width: 3px; height: 3px; border-radius: 50%; background: currentColor; } .nav-icon.mail::before { width: 15px; height: 11px; border: 2px solid currentColor; border-radius: 3px; } .nav-icon.mail::after { width: 10px; height: 10px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: translateY(-2px) rotate(45deg); } .nav-icon.domain::before { width: 15px; height: 15px; border: 2px solid currentColor; border-radius: 50%; box-shadow: inset -7px 0 0 -6px currentColor, inset 7px 0 0 -6px currentColor; } .nav-icon.domain::after { width: 8px; height: 15px; border: 2px solid currentColor; border-radius: 50%; } .nav-icon.user::before { top: 5px; width: 7px; height: 7px; border: 2px solid currentColor; border-radius: 50%; } .nav-icon.user::after { bottom: 5px; width: 14px; height: 7px; border: 2px solid currentColor; border-radius: 9px 9px 4px 4px; } .nav-icon.link::before { width: 13px; height: 7px; border: 2px solid currentColor; border-radius: 999px; transform: rotate(-28deg); } .nav-icon.link::after { width: 13px; height: 7px; border: 2px solid currentColor; border-radius: 999px; transform: rotate(28deg); } .nav-icon.alert::before { width: 0; height: 0; border-left: 8px solid transparent; border-right: 8px solid transparent; border-bottom: 15px solid currentColor; } .nav-icon.alert::after { width: 2px; height: 7px; background: #fff; transform: translateY(3px); box-shadow: 0 5px 0 #fff; } .backup-note { margin-top: auto; padding: 13px; background: rgba(255, 255, 255, 0.72); border: 1px solid var(--line); border-radius: 8px; display: grid; gap: 6px; font-size: 13px; line-height: 1.45; } .main { min-width: 0; padding: 30px; } .topbar { display: flex; align-items: center; justify-content: space-between; gap: 18px; margin-bottom: 26px; } .topbar-heading { min-width: 0; } .eyebrow { font-size: 11px; font-weight: 760; text-transform: uppercase; letter-spacing: 0.08em; } .topbar h2 { margin-top: 4px; font-size: clamp(30px, 3vw, 42px); line-height: 1.05; font-weight: 780; } .topbar-actions, .toolbar, .filter-row, .inline-actions, .detail-meta { display: flex; gap: 10px; align-items: center; flex-wrap: wrap; } .global-search { display: flex; align-items: center; gap: 8px; padding: 0 14px; min-height: 40px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel-solid); color: var(--muted); box-shadow: 0 1px 1px rgba(0, 0, 0, 0.025); } .global-search:focus-within { border-color: var(--accent); box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12); } .global-search .search-icon { width: 16px; height: 16px; flex: 0 0 auto; color: var(--muted); } .global-search .search-icon * { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .global-search input { width: min(32vw, 360px); min-width: 180px; border: 0; outline: 0; background: transparent; color: var(--text); font-size: 13.5px; } .global-search input::placeholder { color: var(--muted); } .language-select-wrap { display: inline-flex; align-items: center; min-height: 40px; } .language-select-wrap select { min-height: 40px; padding: 0 12px; border: 1px solid var(--line); border-radius: 999px; background: var(--panel-solid); color: var(--text); font-size: 13px; font-weight: 650; outline: 0; } .icon-pill { display: inline-grid; place-items: center; position: relative; width: 40px; height: 40px; padding: 0; border-radius: 50%; border: 1px solid var(--line); background: var(--panel-solid); color: var(--text); } .icon-pill svg { width: 18px; height: 18px; } .icon-pill svg * { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .icon-pill .bell-dot { position: absolute; top: 9px; right: 10px; width: 8px; height: 8px; border-radius: 50%; background: #ff4d4f; box-shadow: 0 0 0 2px var(--panel-solid); } .topbar-primary { display: inline-flex; align-items: center; gap: 6px; height: 40px; padding: 0 16px; border-radius: 999px; } .topbar-primary svg { width: 16px; height: 16px; } .topbar-primary svg * { fill: none; stroke: currentColor; stroke-width: 2.4; stroke-linecap: round; } .topbar-avatar { display: inline-grid; place-items: center; width: 40px; height: 40px; padding: 0; border-radius: 50%; background: linear-gradient(135deg, #4c8bf5 0%, #7d5fff 100%); border: 0; color: #fff; font-weight: 760; font-size: 15px; letter-spacing: 0.4px; box-shadow: 0 6px 14px rgba(76, 139, 245, 0.32); } .topbar-avatar:hover { transform: translateY(-1px); } .account-menu-wrap { position: relative; } .account-menu { position: absolute; top: calc(100% + 10px); right: 0; z-index: 30; width: 260px; padding: 6px; border: 1px solid var(--line); border-radius: 12px; background: rgba(255, 255, 255, 0.96); box-shadow: 0 18px 42px rgba(0, 0, 0, 0.14); backdrop-filter: blur(18px); } .account-menu-license { display: grid; gap: 4px; padding: 10px 10px 12px; margin-bottom: 4px; border-bottom: 1px solid var(--line-soft); } .account-menu-license span { color: var(--muted); font-size: 11px; font-weight: 780; text-transform: uppercase; letter-spacing: 0.08em; } .account-menu-license strong { color: var(--text); font-size: 13px; line-height: 1.35; overflow-wrap: anywhere; } .account-menu-license small { color: var(--muted); font-size: 12px; line-height: 1.35; } .account-menu button { width: 100%; min-height: 34px; padding: 8px 10px; border: 0; border-radius: 8px; background: transparent; box-shadow: none; color: var(--text); text-align: left; font-size: 13px; } .account-menu button:hover { background: #f5f5f7; transform: none; box-shadow: none; } .primary-button, .ghost-button, .danger-button, .file-button { padding: 7px 12px; } .primary-button { background: var(--accent); color: #fff; border-color: var(--accent); box-shadow: 0 8px 18px rgba(0, 113, 227, 0.18); } .ghost-button, .file-button { background: var(--panel-solid); color: var(--text); } .danger-button { background: #fff7f7; color: var(--danger); border-color: #f0caca; } .icon-button { width: 36px; height: 36px; padding: 0; background: var(--panel-solid); color: var(--text); font-size: 22px; line-height: 1; } .file-button input { display: none; } .utility-action { display: none; } .content { display: grid; gap: 16px; } .dashboard-setting-card, .dashboard-panel-card, .dashboard-hero-note { background: rgba(255, 255, 255, 0.9); border: 1px solid rgba(207, 210, 220, 0.72); border-radius: 24px; box-shadow: 0 18px 40px rgba(15, 23, 42, 0.05), 0 2px 5px rgba(15, 23, 42, 0.03); } .dashboard-side-label, .dashboard-card-label, .dashboard-note-label, .dashboard-subtitle { color: var(--muted); font-size: 12px; font-weight: 780; letter-spacing: 0.08em; text-transform: uppercase; } .dashboard-mainpanel { display: grid; gap: 12px; } .dashboard-hero { display: grid; grid-template-columns: minmax(0, 1.5fr) minmax(280px, 0.7fr); gap: 12px; align-items: end; } .dashboard-hero--full { grid-template-columns: minmax(0, 1.6fr) minmax(320px, 0.6fr); } .dashboard-hero h1 { margin: 6px 0 8px; font-size: clamp(30px, 3.2vw, 40px); line-height: 1; } .dashboard-hero p:not(.eyebrow) { max-width: 760px; margin: 0; color: var(--muted); font-size: 14px; line-height: 1.45; } .dashboard-hero-note { display: grid; gap: 6px; min-height: 112px; padding: 16px 18px; align-content: center; } .dashboard-hero-note strong { font-size: 22px; line-height: 1.08; } .dashboard-hero-note span:last-child { color: var(--muted); font-size: 13px; } .dashboard-settings-grid, .dashboard-insights-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 12px; } .dashboard-setting-card, .dashboard-panel-card { padding: 16px 18px; } .dashboard-setting-card { display: grid; gap: 10px; min-height: 148px; } .dashboard-setting-head, .dashboard-panel-head, .dashboard-platform-row, .dashboard-platform-main, .dashboard-platform-meter, .dashboard-recent-main { display: flex; align-items: center; } .dashboard-setting-head, .dashboard-panel-head, .dashboard-platform-row { justify-content: space-between; } .dashboard-card-value { margin-top: 4px; font-size: 32px; font-weight: 780; line-height: 0.96; } .dashboard-card-icon { width: 40px; height: 40px; display: grid; place-items: center; border-radius: 13px; } .dashboard-card-icon svg { width: 18px; height: 18px; stroke: currentColor; fill: none; stroke-width: 1.8; stroke-linecap: round; stroke-linejoin: round; } .dashboard-card-icon.asset { background: rgba(0, 113, 227, 0.08); color: #0071e3; } .dashboard-card-icon.security { background: rgba(31, 128, 88, 0.1); color: #178148; } .dashboard-card-icon.recovery { background: rgba(125, 90, 255, 0.1); color: #6a4cff; } .dashboard-card-icon.risk { background: rgba(255, 149, 0, 0.12); color: #d97a00; } .dashboard-card-copy { display: grid; gap: 4px; } .dashboard-card-copy p, .dashboard-card-copy span { margin: 0; color: var(--muted); line-height: 1.55; } .dashboard-card-copy p { font-size: 13px; } .dashboard-card-copy span { font-size: 12px; } .dashboard-card-link { justify-self: start; border: 0; background: transparent; color: var(--accent); padding: 0; font-size: 13px; font-weight: 700; } .dashboard-card-link:hover { color: #0057b8; } .dashboard-panel-card { display: grid; gap: 12px; } .dashboard-panel-head h3 { margin-top: 4px; font-size: 20px; line-height: 1.08; } .dashboard-stack { display: grid; gap: 12px; } .dashboard-subsection { display: grid; gap: 8px; } .chart-list--soft .bar-row, .chart-list--soft .dashboard-platform-row { padding: 10px 12px; border-radius: 14px; background: linear-gradient(180deg, #fcfcfe 0%, #f5f6fa 100%); border: 1px solid rgba(228, 230, 236, 0.95); } .dashboard-platform-row { gap: 16px; } .dashboard-platform-main { gap: 12px; min-width: 0; } .dashboard-platform-main strong { font-size: 14px; white-space: nowrap; } .dashboard-platform-meter { gap: 10px; min-width: min(240px, 42%); } .dashboard-platform-track { flex: 1; height: 8px; border-radius: 999px; overflow: hidden; background: #e7e8eb; } .dashboard-platform-fill { height: 100%; border-radius: inherit; background: linear-gradient(90deg, #7ab7ff 0%, #0071e3 100%); } .dashboard-platform-meter span { color: var(--muted); font-size: 12px; font-weight: 700; } .dashboard-recent-list { display: grid; gap: 10px; } .dashboard-recent-item { display: flex; align-items: center; justify-content: space-between; gap: 14px; width: 100%; padding: 10px 12px; border: 1px solid rgba(228, 230, 236, 0.95); border-radius: 14px; background: linear-gradient(180deg, #fcfcfe 0%, #f5f6fa 100%); text-align: left; } .dashboard-recent-main { gap: 12px; min-width: 0; } .dashboard-recent-main div { min-width: 0; } .dashboard-recent-main strong, .dashboard-recent-main span { display: block; } .dashboard-recent-main strong { font-size: 14px; } .dashboard-recent-main span { color: var(--muted); font-size: 12px; overflow: hidden; text-overflow: ellipsis; } .stats-grid { display: grid; grid-template-columns: repeat(4, minmax(160px, 1fr)); gap: 12px; } .card, .table-wrap, .detail-panel, .empty { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); backdrop-filter: blur(18px); } .card { padding: 17px; } .card h3, .detail-panel h3 { font-weight: 740; } .stat-value { margin: 12px 0 5px; font-size: 36px; font-weight: 780; line-height: 1; } .dashboard-grid { display: grid; grid-template-columns: minmax(0, 1.3fr) minmax(320px, 0.7fr); gap: 16px; } .chart-list, .risk-list, .bound-list { display: grid; gap: 10px; margin-top: 14px; } .bar-row { display: grid; grid-template-columns: 120px minmax(80px, 1fr) 36px; gap: 10px; align-items: center; font-size: 13px; } .empty-compact { padding: 18px; } .empty-compact h3, .empty-compact p { margin: 0; } .bar-track { height: 8px; background: #e7e8eb; border-radius: 999px; overflow: hidden; } .bar-fill { height: 100%; background: var(--accent); } .toolbar { justify-content: space-between; } .filter-row input, .filter-row select, .form-grid input, .form-grid select, .form-grid textarea { min-height: 42px; width: 100%; border: 1px solid #cfd0d6; border-radius: 8px; background: var(--panel-solid); color: var(--text); padding: 9px 11px; outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025); transition: border-color 0.16s ease, box-shadow 0.16s ease, background 0.16s ease; } .filter-row input:hover, .filter-row select:hover, .form-grid input:hover, .form-grid select:hover, .form-grid textarea:hover { border-color: #b7b8bf; } .filter-row input:focus, .filter-row select:focus, .form-grid input:focus, .form-grid select:focus, .form-grid textarea:focus { border-color: var(--accent); background: #fff; box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12), inset 0 1px 1px rgba(0, 0, 0, 0.02); } .form-grid.was-validated input:invalid, .form-grid.was-validated textarea:invalid, .form-grid.was-validated select:invalid { border-color: var(--danger); box-shadow: 0 0 0 4px rgba(197, 41, 41, 0.1); } .filter-row input, .filter-row select { width: 210px; } .table-wrap { overflow: auto; background: var(--panel-solid); } .topology-card { background: var(--panel); border: 1px solid var(--line); border-radius: 8px; box-shadow: var(--shadow); padding: 18px; display: grid; gap: 14px; overflow: hidden; } .topology-card h3 { margin: 0; font-size: 20px; font-weight: 760; } .topology-legend { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; color: var(--muted); font-size: 12px; font-weight: 680; } .topology-legend span { display: inline-flex; align-items: center; gap: 6px; } .topology-legend i { width: 9px; height: 9px; border-radius: 50%; background: #9b9da5; } .topology-legend i.phone { background: #0071e3; } .topology-legend i.email { background: #7d5fff; } .topology-legend i.domain { background: #16a36a; } .topology-legend i.risk { background: var(--danger); } .topology-legend i.role { background: #a7afbd; } .relationship-board > .topology-legend { margin-top: 12px; padding: 10px 14px; border: 1px solid var(--line-soft); border-radius: 10px; background: rgba(251, 251, 253, 0.7); gap: 18px; } .relation-column { fill: rgba(247, 250, 255, 0.55); stroke: #e7ecf6; stroke-width: 1.2; } .relation-column.account { fill: rgba(238, 249, 242, 0.45); stroke: #dceee3; } .relation-column.role { fill: rgba(244, 240, 255, 0.45); stroke: #e6dffa; } .topology-stage { width: 100%; overflow-x: auto; padding: 4px; border: 1px solid var(--line-soft); border-radius: 8px; background: radial-gradient(circle at 24px 24px, rgba(0, 0, 0, 0.055) 1px, transparent 1px), linear-gradient(180deg, #ffffff 0%, #fbfbfd 100%); background-size: 24px 24px, 100% 100%; } .topology-stage svg { display: block; width: 100%; min-width: 860px; height: auto; } .topology-axis { fill: var(--muted); font-size: 13px; font-weight: 760; letter-spacing: 0.06em; } .topology-edge { fill: none; stroke: #b9c0ca; stroke-width: 2; opacity: 0.7; } .topology-edge.low { stroke: #aeb6c2; } .topology-edge.medium { stroke: var(--warning); stroke-width: 2.5; opacity: 0.85; } .topology-edge.high { stroke: var(--danger); stroke-width: 3; opacity: 0.9; } .topology-edge-label { fill: #76777e; paint-order: stroke; stroke: #fff; stroke-width: 5px; stroke-linejoin: round; font-size: 11px; font-weight: 720; text-anchor: middle; } .topology-node rect { fill: rgba(255, 255, 255, 0.96); stroke: #dfe1e7; } .topology-node circle { fill: #9b9da5; } .topology-node.phone circle { fill: #0071e3; } .topology-node.email circle { fill: #7d5fff; } .topology-node.domain circle { fill: #16a36a; } .topology-node.account circle { fill: #1d1d1f; } .topology-node circle.custom { fill: #fff; stroke: #dfe1e7; } .topology-node-title { fill: var(--text); font-size: 13px; font-weight: 760; } .topology-node-meta { fill: var(--muted); font-size: 11px; font-weight: 620; } .topology-empty { display: grid; place-items: center; min-height: 180px; border: 1px dashed var(--line); border-radius: 8px; color: var(--muted); background: #fbfbfd; font-weight: 680; } .relation-hero { display: flex; align-items: end; justify-content: space-between; gap: 18px; padding: 4px 2px 2px; } .relation-hero h3 { margin: 4px 0 4px; font-size: 30px; line-height: 1.08; } .relation-hero p { margin: 0; color: var(--muted); } .relation-filter { justify-content: flex-end; } .relation-layout { display: grid; grid-template-columns: minmax(860px, 1fr) 300px; gap: 16px; align-items: start; overflow-x: auto; } .relation-main { min-width: 0; display: grid; gap: 16px; } .relation-stats { display: grid; grid-template-columns: repeat(4, minmax(150px, 1fr)); gap: 12px; } .relation-stat { display: grid; grid-template-columns: 44px minmax(0, 1fr); gap: 14px; align-items: center; padding: 16px; border: 1px solid var(--line); border-radius: 12px; background: var(--panel-solid); box-shadow: var(--shadow-soft); } .relation-stat-icon { display: grid; place-items: center; width: 44px; height: 44px; border-radius: 12px; background: #eef5ff; color: #0a84ff; } .relation-stat-icon svg { width: 22px; height: 22px; } .relation-stat-icon svg * { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .relation-stat.account .relation-stat-icon { background: #edf9f2; color: var(--success); } .relation-stat.binding .relation-stat-icon { background: #f3edff; color: #7d5fff; } .relation-stat.risk .relation-stat-icon { background: #fff0ee; color: var(--danger); } .relation-stat span { color: var(--muted); font-size: 12px; font-weight: 720; } .relation-stat strong { display: block; margin-top: 2px; font-size: 26px; line-height: 1; } .relation-stat p { margin: 5px 0 0; color: var(--muted); font-size: 12px; } .relationship-board, .relation-table-card, .relation-inspector { border: 1px solid var(--line); border-radius: 8px; background: var(--panel); box-shadow: var(--shadow); } .relationship-board { padding: 16px; overflow: hidden; } .relationship-board-head { display: flex; justify-content: space-between; align-items: start; gap: 12px; margin-bottom: 12px; } .relationship-board-head h3, .relation-table-card h3 { margin: 0; font-size: 20px; } .relation-canvas { overflow-x: auto; border: 1px solid var(--line-soft); border-radius: 8px; background: radial-gradient(circle at 24px 24px, rgba(0, 0, 0, 0.045) 1px, transparent 1px), linear-gradient(180deg, #ffffff 0%, #fbfbfd 100%); background-size: 24px 24px, 100% 100%; } .relation-canvas svg { display: block; width: 100%; min-width: 980px; height: auto; } .relation-axis { fill: var(--accent); font-size: 13px; font-weight: 800; } .relation-axis.account { fill: var(--success); } .relation-axis.role { fill: #7d5fff; } .asset-group rect { fill: rgba(247, 250, 255, 0.78); stroke: #e7ecf6; stroke-width: 1; } .asset-group.phone rect { fill: rgba(239, 246, 255, 0.9); } .asset-group.email rect { fill: rgba(246, 242, 255, 0.82); } .asset-group.domain rect { fill: rgba(238, 249, 242, 0.86); } .asset-group-title { fill: var(--accent); font-size: 13px; font-weight: 820; } .asset-group.email .asset-group-title { fill: #7157e8; } .asset-group.domain .asset-group-title { fill: var(--success); } .relation-line { fill: none; stroke-width: 2; opacity: 0.72; } .relation-line.phone { stroke: #4b91f1; } .relation-line.email { stroke: #7d5fff; } .relation-line.domain { stroke: #16a36a; } .relation-line.role { stroke: #a7afbd; stroke-dasharray: 6 5; } .relation-line.medium, .relation-line.role.medium { stroke: var(--warning); stroke-width: 2.5; opacity: 0.86; } .relation-line.high, .relation-line.role.high { stroke: var(--danger); stroke-width: 3; opacity: 0.95; } .relation-dot { fill: #0a84ff; } .relation-dot.medium { fill: var(--warning); } .relation-dot.high { fill: var(--danger); } .relation-node rect { fill: rgba(255, 255, 255, 0.98); stroke: #dfe1e7; stroke-width: 1.2; transition: stroke 0.16s ease, stroke-width 0.16s ease, fill 0.16s ease; } .relation-node { cursor: pointer; } .relation-node:hover rect { fill: #f8fbff; stroke: rgba(0, 113, 227, 0.45); stroke-width: 2; } .relation-node.selected rect { stroke: var(--accent); stroke-width: 2.4; } .relation-node .node-mark { fill: #7a7d86; } .relation-node .node-mark.phone { fill: #0071e3; } .relation-node .node-mark.email { fill: #7d5fff; } .relation-node .node-mark.domain { fill: #16a36a; } .relation-node .node-mark.account, .relation-node .node-mark.apple { fill: #1d1d1f; } .relation-node .node-mark.google { fill: #4285f4; } .relation-node .node-mark.gemini { fill: #7d5fff; } .relation-node .node-mark.chatgpt, .relation-node .node-mark.openai { fill: #10a37f; } .relation-node .node-mark.claude { fill: #d97745; } .relation-node .node-mark.wechat { fill: #07c160; } .relation-node .node-mark.custom { fill: #fff; stroke: #dfe1e7; } .node-mark-text { fill: #fff; font-size: 11px; font-weight: 850; text-anchor: middle; } .node-line-icon { fill: none; stroke: #fff; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .node-line-dot { fill: #fff; } .asset-node-icon-bg { fill: #eef5ff; } .asset-node-icon-bg.email { fill: #f1edff; } .asset-node-icon-bg.domain { fill: #edf9f2; } .asset-line-icon { fill: none; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } path.asset-line-icon.phone { fill: #0071e3; stroke: #0071e3; stroke-width: 1.4; } .asset-line-icon.email { stroke: #7d5fff; } .asset-line-icon.domain { stroke: #16a36a; } .node-mark-image { pointer-events: none; filter: brightness(0) invert(1); } .node-mark-image.custom { filter: none; } .relation-node-title { fill: var(--text); font-size: 13px; font-weight: 780; } .relation-node-meta { fill: var(--muted); font-size: 11px; font-weight: 620; } .relation-table-card { padding: 14px; overflow: hidden; } .relation-table-card-full { width: 100%; } .relation-table-card .table-wrap { width: 100%; overflow-x: auto; } .relation-table-card table { min-width: 1080px; table-layout: fixed; } .relation-table-card th, .relation-table-card td { white-space: normal; overflow-wrap: anywhere; } .relation-table-card th:last-child, .relation-table-card td:last-child { width: 220px; } .relation-table-card .inline-actions { flex-wrap: nowrap; align-items: center; } .relation-table-card .inline-actions button { min-width: 58px; white-space: nowrap; } .binding-details-list { display: grid; gap: 10px; } .binding-detail-row { display: grid; grid-template-columns: minmax(220px, 1fr) minmax(240px, 1.15fr) minmax(320px, 1.2fr) auto; gap: 16px; align-items: center; padding: 14px; border: 1px solid var(--line-soft); border-radius: 12px; background: #fff; box-shadow: var(--shadow-soft); } .binding-detail-resource, .binding-detail-account { display: grid; gap: 6px; min-width: 0; } .binding-detail-meta { display: grid; grid-template-columns: repeat(4, minmax(72px, auto)); gap: 10px; align-items: center; } .binding-detail-meta > div { display: grid; gap: 5px; } .binding-detail-meta strong { color: var(--text); font-size: 13px; font-weight: 720; white-space: nowrap; } .binding-detail-label { color: var(--muted); font-size: 11px; font-weight: 760; } .binding-detail-actions { justify-content: flex-end; } .binding-cell-main { display: inline-grid; grid-template-columns: 34px minmax(0, 1fr); gap: 10px; align-items: center; width: 100%; min-width: 0; } .binding-cell-main > div > strong, .binding-cell-main > div > span { display: block; min-width: 0; overflow-wrap: anywhere; } .binding-cell-main > div > strong { color: var(--text); font-size: 14px; line-height: 1.25; max-width: 220px; } .binding-cell-main > div > span { margin-top: 3px; color: var(--muted); font-size: 12px; } .resource-mini-icon { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 10px; background: #eef5ff; color: var(--accent); } .binding-cell-main .platform-logo { width: 34px; height: 34px; align-self: center; } .binding-cell-main .platform-logo img { width: 22px; height: 22px; } .resource-mini-icon.email { background: #f1edff; color: #7d5fff; } .resource-mini-icon.domain { background: #edf9f2; color: var(--success); } .resource-mini-icon.account { background: #f2f2f4; color: #1d1d1f; } .resource-mini-icon svg { display: block; width: 20px; height: 20px; } .resource-mini-icon svg * { fill: none; stroke: currentColor; stroke-width: 2; stroke-linecap: round; stroke-linejoin: round; } .resource-mini-icon.phone svg path { fill: none; stroke: currentColor; stroke-width: 2.1; } .resource-mini-icon.email svg { transform: translateY(0.5px); } .resource-mini-icon.account svg circle { fill: currentColor; stroke: currentColor; } .role-badge { display: inline-flex; align-items: center; min-height: 26px; padding: 4px 10px; border-radius: 999px; background: #eef5ff; color: var(--accent); font-size: 12px; font-weight: 760; white-space: nowrap; } .role-badge.recovery { background: #edf9f2; color: var(--success); } .role-badge.payment { background: #fff6e8; color: var(--warning); } .role-badge.two_factor, .role-badge.trusted_phone { background: #f1edff; color: #7d5fff; } .table-icon-actions { display: flex; gap: 8px; align-items: center; } .table-icon-button { position: relative; display: grid; place-items: center; width: 34px; min-width: 34px; height: 34px; min-height: 34px; padding: 0; border-radius: 50%; background: #fff; border-color: var(--line); } .table-icon-button::before, .table-icon-button::after { content: ""; position: absolute; box-sizing: border-box; } .table-icon-button.view::before { width: 18px; height: 12px; border: 2px solid currentColor; border-radius: 50%; } .table-icon-button.view::after { width: 5px; height: 5px; border-radius: 50%; background: currentColor; } .table-icon-button.edit::before { width: 16px; height: 3px; background: currentColor; border-radius: 2px; transform: rotate(-35deg); } .table-icon-button.edit::after { right: 9px; bottom: 8px; width: 9px; height: 2px; background: currentColor; border-radius: 2px; } .table-icon-button.delete { color: var(--danger); } .table-icon-button.delete::before { width: 14px; height: 15px; border: 2px solid currentColor; border-top: 0; border-radius: 0 0 3px 3px; transform: translateY(2px); } .table-icon-button.delete::after { width: 16px; height: 2px; background: currentColor; border-radius: 2px; transform: translateY(-8px); } .count-badge { display: inline-grid; place-items: center; min-width: 24px; min-height: 22px; padding: 0 7px; border-radius: 999px; background: #eef5ff; color: var(--accent); font-size: 12px; vertical-align: middle; } .relation-inspector { position: sticky; top: 20px; overflow: hidden; } .inspector-profile, .inspector-section { padding: 16px; border-bottom: 1px solid var(--line-soft); } .inspector-profile { display: grid; gap: 12px; } .inspector-profile h3, .inspector-section h4 { margin: 0; } .inspector-profile p { margin: 5px 0 8px; color: var(--muted); overflow-wrap: anywhere; } .inspector-avatar .platform-chip { transform-origin: left center; } .inspector-list { display: grid; gap: 8px; margin-top: 12px; } .inspector-item { display: grid; gap: 4px; padding: 10px; border: 1px solid var(--line-soft); border-radius: 8px; background: #fbfbfd; } .inspector-item.active { border-color: rgba(0, 113, 227, 0.45); background: #f3f8ff; } .inspector-item span { overflow-wrap: anywhere; font-size: 13px; } .inspector-item strong { color: var(--muted); font-size: 12px; } .inspector-meta { display: grid; grid-template-columns: 86px minmax(0, 1fr); gap: 10px; margin: 12px 0 0; align-items: center; } .inspector-meta dt { color: var(--muted); font-size: 12px; font-weight: 720; } .inspector-meta dd { margin: 0; min-width: 0; } .risk-list.compact { margin-top: 12px; } table { width: 100%; border-collapse: collapse; min-width: 760px; } th, td { padding: 12px 15px; border-bottom: 1px solid var(--line-soft); text-align: left; vertical-align: top; font-size: 13px; } th { background: #fbfbfd; color: var(--muted); font-size: 11px; text-transform: uppercase; letter-spacing: 0.05em; font-weight: 760; } tbody tr { transition: background 0.14s ease; } tbody tr:hover { background: #fbfbfd; } tr:last-child td { border-bottom: 0; } .accounts-list-view { background: #f5f7fa; border: 1.2px solid var(--border); border-radius: 14px; overflow: hidden; margin-bottom: 20px; } .accounts-list-header { padding: 12px 16px 0; border-bottom: 1px solid var(--border); } .accounts-list-search { display: flex; align-items: center; gap: 8px; padding-bottom: 12px; } .accounts-list-search svg { flex-shrink: 0; width: 16px; height: 16px; color: var(--muted); } .accounts-list-search input { flex: 1; border: none; outline: none; font-size: 14px; background: transparent; color: var(--text); } .accounts-list-search input::placeholder { color: var(--muted); } .accounts-platform-tabs { display: flex; gap: 6px; overflow-x: auto; scrollbar-width: none; padding-bottom: 12px; } .accounts-platform-tabs::-webkit-scrollbar { display: none; } .accounts-list-items { display: grid; grid-template-columns: repeat(auto-fill, minmax(220px, 1fr)); gap: 10px; padding: 16px; } .account-list-item { position: relative; display: flex; align-items: center; gap: 12px; padding: 14px 16px; border-radius: 14px; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 1px rgba(0,0,0,.03); cursor: pointer; transition: box-shadow 0.18s, transform 0.18s; } .account-list-item:hover { box-shadow: 0 4px 18px rgba(0,0,0,.10); transform: translateY(-2px); } .account-list-item:hover .account-list-item-actions { opacity: 1; } .account-list-item.active { box-shadow: 0 0 0 2px var(--accent), 0 4px 16px rgba(0,113,227,.1); background: #f0f6ff; } .account-list-item[hidden] { display: none; } .account-list-item .platform-logo { flex-shrink: 0; width: 38px; height: 38px; border-radius: 11px; font-size: 12px; } .account-list-item-info { flex: 1; display: flex; flex-direction: column; gap: 2px; min-width: 0; } .account-list-item-name { font-size: 14px; font-weight: 700; color: var(--text); } .account-list-item-id { font-size: 12px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .account-list-item-actions { position: absolute; top: 8px; right: 8px; display: flex; gap: 4px; opacity: 0; transition: opacity 0.14s; } .acct-action-btn { display: grid; place-items: center; width: 26px; height: 26px; border-radius: 8px; border: none; background: rgba(255,255,255,.92); box-shadow: 0 1px 4px rgba(0,0,0,.12); color: var(--muted); cursor: pointer; backdrop-filter: blur(4px); transition: background 0.12s, color 0.12s, box-shadow 0.12s; } .acct-action-btn svg { width: 13px; height: 13px; } .assets-card-view { background: #f5f7fa; border: 1.2px solid var(--border); border-radius: 14px; overflow: hidden; margin-bottom: 20px; } .assets-card-header { padding: 12px 16px 0; border-bottom: 1px solid var(--border); } .assets-card-grid { display: grid; grid-template-columns: repeat(auto-fill, minmax(260px, 1fr)); gap: 12px; padding: 16px; } .asset-drawer-backdrop { position: fixed; inset: 0; background: rgba(15, 23, 42, 0.16); backdrop-filter: blur(3px); z-index: 35; animation: assetDrawerBackdropIn 0.2s ease-out both; } .asset-drawer { position: fixed; top: 0; right: 0; bottom: 0; width: min(460px, calc(100vw - 32px)); padding: 18px; z-index: 36; pointer-events: none; animation: assetDrawerIn 0.24s cubic-bezier(0.2, 0.8, 0.2, 1) both; } .asset-drawer-backdrop.closing { animation: assetDrawerBackdropOut 0.18s ease-in both; } .asset-drawer.closing { animation: assetDrawerOut 0.2s cubic-bezier(0.4, 0, 1, 1) both; } .asset-drawer-shell { position: relative; height: 100%; overflow: auto; border-radius: 24px; background: rgba(250, 250, 252, 0.96); border: 1px solid rgba(205, 210, 220, 0.82); box-shadow: -16px 0 40px rgba(15, 23, 42, 0.1), 0 12px 30px rgba(15, 23, 42, 0.08); pointer-events: auto; } @keyframes assetDrawerIn { from { opacity: 0; transform: translateX(28px) scale(0.985); } to { opacity: 1; transform: translateX(0) scale(1); } } @keyframes assetDrawerOut { from { opacity: 1; transform: translateX(0) scale(1); } to { opacity: 0; transform: translateX(28px) scale(0.985); } } @keyframes assetDrawerBackdropIn { from { opacity: 0; backdrop-filter: blur(0); } to { opacity: 1; backdrop-filter: blur(3px); } } @keyframes assetDrawerBackdropOut { from { opacity: 1; backdrop-filter: blur(3px); } to { opacity: 0; backdrop-filter: blur(0); } } @media (prefers-reduced-motion: reduce) { .asset-drawer, .asset-drawer-backdrop, .asset-drawer.closing, .asset-drawer-backdrop.closing { animation-duration: 0.01ms; } } .asset-drawer-close { position: absolute; top: 16px; right: 16px; display: grid; place-items: center; width: 36px; height: 36px; border: 0; border-radius: 50%; background: rgba(29, 29, 31, 0.08); color: #1d1d1f; font-size: 24px; line-height: 1; z-index: 2; } .asset-drawer-close:hover { background: rgba(29, 29, 31, 0.14); } .asset-card { position: relative; display: flex; align-items: center; gap: 14px; min-height: 96px; padding: 16px 18px; border-radius: 18px; background: #fff; box-shadow: 0 1px 3px rgba(0,0,0,.06), 0 1px 1px rgba(0,0,0,.03); cursor: pointer; transition: box-shadow 0.18s, transform 0.18s, background 0.18s; } .asset-card:hover { box-shadow: 0 6px 22px rgba(0,0,0,.09); transform: translateY(-2px); } .asset-card:hover .asset-card-actions { opacity: 1; } .asset-card.active { background: #f0f6ff; box-shadow: 0 0 0 2px var(--accent), 0 6px 22px rgba(0,113,227,.10); } .asset-card[hidden] { display: none; } .asset-card-icon { flex: 0 0 auto; display: grid; place-items: center; width: 48px; height: 48px; border-radius: 14px; box-shadow: inset 0 1px 0 rgba(255,255,255,.2); } .asset-card-icon svg { width: 24px; height: 24px; } .asset-card-body { min-width: 0; flex: 1; display: grid; gap: 4px; } .asset-card-title { font-size: 14px; font-weight: 760; color: var(--text); overflow-wrap: anywhere; } .asset-card-sub { color: var(--muted); font-size: 12px; line-height: 1.35; overflow-wrap: anywhere; } .asset-card-status { margin-top: 2px; } .asset-card-actions { position: absolute; top: 10px; right: 10px; display: flex; gap: 4px; opacity: 0; transition: opacity 0.14s ease; } .asset-card-empty { padding: 24px 16px 28px; color: var(--muted); font-size: 14px; } .acct-action-btn:hover { background: #fff; color: var(--text); box-shadow: 0 2px 8px rgba(0,0,0,.16); } .acct-action-del:hover { color: var(--danger); } .account-list-empty { padding: 24px 16px; color: var(--muted); font-size: 14px; text-align: center; } .pill { display: inline-flex; align-items: center; min-height: 23px; padding: 3px 8px; border-radius: 999px; border: 1px solid var(--line); background: var(--panel-soft); color: var(--text); font-size: 11px; font-weight: 760; white-space: nowrap; } .pill.high, .pill.critical, .pill.locked, .pill.suspended, .pill.unusable, .pill.cannot_receive, .pill.cannot_receive_sms, .pill.high_risk { background: #fff0ee; border-color: #f0caca; color: var(--danger); } .pill.medium, .pill.appealing, .pill.pending_verify, .pill.processing { background: #fff6e8; border-color: #eed0a2; color: var(--warning); } .pill.low, .pill.normal, .pill.available, .pill.active, .pill.resolved { background: #eef9f1; border-color: #c5e8d0; color: var(--success); } .flag-chip { display: inline-flex; align-items: center; gap: 7px; max-width: 100%; min-height: 25px; padding: 3px 9px 3px 5px; border: 1px solid #dedfe5; border-radius: 999px; background: linear-gradient(180deg, #ffffff 0%, #f7f7fa 100%); color: var(--text); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.035); font-size: 12px; font-weight: 720; white-space: nowrap; } .flag-chip-icon { display: grid; place-items: center; width: 21px; height: 21px; border-radius: 50%; background: #fff; box-shadow: inset 0 0 0 1px rgba(0, 0, 0, 0.06); font-size: 14px; line-height: 1; } .platform-chip { display: inline-flex; align-items: center; gap: 8px; max-width: 100%; min-height: 28px; padding: 3px 10px 3px 4px; border: 1px solid #dedfe5; border-radius: 999px; background: linear-gradient(180deg, #ffffff 0%, #f7f7fa 100%); color: var(--text); box-shadow: 0 1px 2px rgba(0, 0, 0, 0.035); font-size: 12px; font-weight: 740; white-space: nowrap; } .platform-logo { position: relative; display: grid; place-items: center; width: 22px; height: 22px; border-radius: 50%; background: #1d1d1f; color: #fff; font-size: 10px; font-weight: 850; letter-spacing: 0; line-height: 1; overflow: hidden; } .platform-logo img { position: absolute; inset: 50% auto auto 50%; display: block; width: 64%; height: 64%; object-fit: contain; filter: brightness(0) invert(1); transform: translate(-50%, -50%); } .platform-logo.wechat img, .platform-logo.openai img, .platform-logo.chatgpt img, .platform-logo.claude img { width: 68%; height: 68%; } .platform-logo.openai img, .platform-logo.chatgpt img { transform: translate(-50%, -50%) translate(0.5px, 0.25px) scale(0.96); } .platform-logo.wechat img { transform: translate(-50%, -50%) translate(0.5px, 0.25px) scale(0.96); } .platform-logo.claude img { transform: translate(-50%, -50%) translate(0.25px, 0.25px) scale(0.92); } .platform-logo.gemini img { transform: translate(-50%, -50%) translate(0.25px, 0.25px) scale(0.94); } .platform-logo.apple img { width: 62%; height: 62%; transform: translate(-50%, -50%) translate(0.5px, 0.5px); } .platform-logo.apple { background: #1d1d1f; } .platform-logo.google { background: conic-gradient(from 45deg, #4285f4, #34a853, #fbbc05, #ea4335, #4285f4); } .platform-logo.gemini { background: linear-gradient(135deg, #4c8bf5 0%, #9b72f2 52%, #d96570 100%); } .platform-logo.chatgpt, .platform-logo.openai { background: #10a37f; } .platform-logo.claude { background: #d97745; } .platform-logo.wechat { background: #07c160; font-size: 12px; } .platform-logo.github { background: #24292f; } .platform-logo.telegram { background: #229ed9; } .platform-logo.qq { background: #1d1d1f; } .platform-logo.x, .platform-logo.notion, .platform-logo.github, .platform-logo.steam, .platform-logo.epicgames { background: #1d1d1f; } .platform-logo.facebook { background: #1877f2; } .platform-logo.instagram { background: linear-gradient(135deg, #833ab4 0%, #fd1d1d 50%, #fcb045 100%); } .platform-logo.discord { background: #5865f2; } .platform-logo.slack { background: #4a154b; } .platform-logo.onepassword, .platform-logo.microsoft, .platform-logo.playstation { background: #0078d4; } .platform-logo.amazon { background: #ff9900; } .platform-logo.cloudflare { background: #f38020; } .platform-logo.paypal { background: #003087; } .platform-logo.stripe { background: #635bff; } .platform-logo.alipay { background: #1677ff; } .platform-logo.tiktok { background: #111; } .platform-logo.youtube, .platform-logo.netflix, .platform-logo.nintendo { background: #e50914; } .platform-logo.spotify { background: #1db954; } .platform-logo.generic { background: #777b86; } .platform-logo.custom { background: #fff; color: var(--text); border: 1px solid #dfe1e7; } .platform-logo.custom img { width: 76%; height: 76%; filter: none; transform: translate(-50%, -50%); } .logo-input-row { display: grid; grid-template-columns: minmax(0, 1fr) auto; gap: 10px; align-items: center; } .logo-upload-button { display: inline-flex; align-items: center; justify-content: center; min-height: 44px; white-space: nowrap; cursor: pointer; } .detail-panel { padding: 18px; display: grid; gap: 14px; } .detail-panel-drawer { min-height: 100%; padding: 26px 22px 22px; background: transparent; border: 0; box-shadow: none; backdrop-filter: none; } .detail-panel-drawer > .toolbar { display: grid; grid-template-columns: 1fr; gap: 14px; padding-right: 52px; } .detail-panel-drawer > .toolbar .inline-actions { justify-content: flex-start; } .detail-panel-drawer > .toolbar .inline-actions button { min-height: 36px; padding: 8px 12px; } .detail-panel h3 { margin: 0; font-size: 20px; } .detail-panel-drawer h3 { font-size: 22px; line-height: 1.2; overflow-wrap: anywhere; } .detail-grid { display: grid; grid-template-columns: repeat(3, minmax(160px, 1fr)); gap: 12px; } .detail-panel-drawer .detail-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 10px; } .detail-item { padding: 13px; background: #fbfbfd; border: 1px solid var(--line-soft); border-radius: 8px; min-width: 0; } .detail-panel-drawer .detail-item { padding: 12px; border-radius: 12px; background: rgba(255, 255, 255, 0.76); } .detail-item span { display: block; margin-bottom: 5px; color: var(--muted); font-size: 12px; font-weight: 720; } .detail-item strong { display: block; overflow-wrap: anywhere; font-size: 18px; line-height: 1.35; font-weight: 760; } .detail-panel-drawer .detail-item strong { font-size: 15px; } .detail-panel-drawer .detail-item span { font-size: 11px; } .detail-panel-drawer .bound-list, .detail-panel-drawer .risk-list { gap: 8px; } .detail-panel-drawer .bound-item, .detail-panel-drawer .risk-item { padding: 12px; border-radius: 12px; background: rgba(255, 255, 255, 0.76); } .detail-item strong .pill, .detail-item strong .flag-chip, .detail-item strong .platform-chip { font-size: 12px; line-height: 1; font-weight: 740; vertical-align: middle; } .detail-item strong .platform-chip, .detail-item strong .flag-chip { display: inline-flex; width: auto; max-width: 100%; } .detail-item strong .platform-logo { width: 22px; height: 22px; font-size: 10px; } .detail-item strong .flag-chip-icon { width: 21px; height: 21px; font-size: 14px; } .risk-item, .bound-item { display: grid; gap: 5px; padding: 13px; background: #fbfbfd; border: 1px solid var(--line-soft); border-radius: 8px; } .risk-title { display: flex; justify-content: space-between; gap: 10px; align-items: start; } .empty { padding: 38px; text-align: center; } .empty h3 { font-size: 20px; } .empty p { margin: 8px auto 0; max-width: 520px; color: var(--muted); line-height: 1.55; } .dialog { width: min(760px, calc(100vw - 28px)); border: 0; border-radius: 8px; padding: 0; box-shadow: 0 30px 90px rgba(0, 0, 0, 0.22); overflow: hidden; } .dialog::backdrop { background: rgba(0, 0, 0, 0.32); backdrop-filter: blur(8px); } .onboarding-dialog { width: min(860px, calc(100vw - 28px)); border: 0; border-radius: 18px; padding: 0; background: transparent; box-shadow: 0 30px 90px rgba(0, 0, 0, 0.24); overflow: hidden; } .onboarding-dialog::backdrop { background: rgba(0, 0, 0, 0.3); backdrop-filter: blur(8px); } .onboarding-panel { background: #fbfbfd; } .onboarding-head { display: flex; align-items: start; justify-content: space-between; gap: 18px; padding: 24px; background: rgba(255, 255, 255, 0.86); border-bottom: 1px solid var(--line-soft); } .onboarding-head h3 { margin-top: 6px; font-size: 28px; line-height: 1.12; } .onboarding-steps { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; padding: 22px 24px; } .onboarding-step { display: grid; grid-template-columns: 34px minmax(0, 1fr); gap: 14px; padding: 16px; border: 1px solid var(--line-soft); border-radius: 14px; background: #fff; box-shadow: var(--shadow-soft); } .onboarding-step-index { display: grid; place-items: center; width: 34px; height: 34px; border-radius: 50%; background: #eef5ff; color: var(--accent); font-size: 14px; font-weight: 820; } .onboarding-step h4 { margin: 2px 0 7px; font-size: 17px; line-height: 1.2; } .onboarding-step p { margin: 0 0 14px; color: var(--muted); font-size: 13px; line-height: 1.55; } .onboarding-step button { min-height: 34px; padding: 7px 12px; font-size: 13px; } .onboarding-actions { display: flex; justify-content: flex-end; gap: 10px; padding: 16px 24px 22px; border-top: 1px solid var(--line-soft); background: rgba(255, 255, 255, 0.72); } .guided-tour-layer { position: fixed; inset: 0; z-index: 80; pointer-events: none; } .dialog .guided-tour-layer { z-index: 3; } .guided-tour-layer.dialog-tour { position: absolute; } .guided-tour-scrim { position: fixed; inset: 0; background: rgba(15, 23, 42, 0.18); backdrop-filter: blur(1.5px); pointer-events: none; } .guided-tour-layer.dialog-tour .guided-tour-scrim { display: none; } .guided-tour-spotlight { position: fixed; border: 2px solid var(--accent); border-radius: 12px; box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.22), 0 0 0 7px rgba(0, 113, 227, 0.12), 0 12px 34px rgba(0, 113, 227, 0.22); pointer-events: none; animation: tourPulse 1.4s ease-in-out infinite; } .guided-tour-layer.dialog-tour .guided-tour-spotlight { box-shadow: 0 0 0 7px rgba(0, 113, 227, 0.12), 0 12px 34px rgba(0, 113, 227, 0.2); } .guided-tour-cursor { position: fixed; width: 28px; height: 28px; pointer-events: none; filter: drop-shadow(0 8px 10px rgba(15, 23, 42, 0.22)); animation: tourCursorTap 1.2s ease-in-out infinite; } .guided-tour-cursor::before { content: ""; position: absolute; left: 4px; top: 2px; width: 0; height: 0; border-top: 21px solid #1d1d1f; border-right: 13px solid transparent; transform: rotate(-18deg); } .guided-tour-cursor::after { content: ""; position: absolute; left: 8px; top: 7px; width: 8px; height: 8px; border-radius: 50%; background: #fff; opacity: 0.95; } .guided-tour-card { position: fixed; width: min(320px, calc(100vw - 36px)); padding: 16px; border: 1px solid rgba(207, 210, 220, 0.9); border-radius: 16px; background: rgba(255, 255, 255, 0.96); box-shadow: 0 22px 60px rgba(15, 23, 42, 0.18); pointer-events: auto; } .guided-tour-progress { color: var(--accent); font-size: 12px; font-weight: 820; } .guided-tour-card h3 { margin: 8px 0 8px; font-size: 18px; line-height: 1.25; } .guided-tour-card p { margin: 0; color: var(--muted); font-size: 13px; line-height: 1.55; } .guided-tour-actions { display: flex; align-items: center; justify-content: space-between; gap: 10px; margin-top: 14px; } .guided-tour-actions button { min-height: 34px; padding: 7px 12px; font-size: 13px; } .guided-tour-wait { color: var(--muted); font-size: 12px; font-weight: 720; } @keyframes tourPulse { 0%, 100% { box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.22), 0 0 0 7px rgba(0, 113, 227, 0.12), 0 12px 34px rgba(0, 113, 227, 0.22); } 50% { box-shadow: 0 0 0 9999px rgba(15, 23, 42, 0.22), 0 0 0 11px rgba(0, 113, 227, 0.18), 0 16px 42px rgba(0, 113, 227, 0.28); } } .guided-tour-layer.dialog-tour .guided-tour-spotlight { animation: tourPulseLight 1.4s ease-in-out infinite; } @keyframes tourPulseLight { 0%, 100% { box-shadow: 0 0 0 7px rgba(0, 113, 227, 0.12), 0 12px 34px rgba(0, 113, 227, 0.2); } 50% { box-shadow: 0 0 0 11px rgba(0, 113, 227, 0.18), 0 16px 42px rgba(0, 113, 227, 0.26); } } @keyframes tourCursorTap { 0%, 100% { transform: translate(0, 0) scale(1); } 50% { transform: translate(2px, 2px) scale(0.94); } } .dialog form { padding: 0; background: #fbfbfd; } .dialog-head { display: flex; align-items: start; justify-content: space-between; gap: 16px; padding: 22px 22px 18px; margin-bottom: 0; background: rgba(255, 255, 255, 0.82); border-bottom: 1px solid var(--line-soft); } .dialog-head h3 { font-size: 22px; font-weight: 780; line-height: 1.15; } .form-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 15px; max-height: min(68vh, 680px); overflow: auto; padding: 20px 22px 22px; background: linear-gradient(#fbfbfd 30%, rgba(251, 251, 253, 0)), linear-gradient(rgba(251, 251, 253, 0), #fbfbfd 70%) bottom, linear-gradient(rgba(0, 0, 0, 0.045), rgba(0, 0, 0, 0)), linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.035)) bottom; background-repeat: no-repeat; background-size: 100% 28px, 100% 28px, 100% 10px, 100% 10px; background-attachment: local, local, scroll, scroll; } .form-field { display: grid; gap: 7px; align-content: start; } .form-field.full { grid-column: 1 / -1; } .phone-combo { display: grid; grid-template-columns: minmax(220px, 0.8fr) minmax(220px, 1fr); align-items: stretch; } .phone-combo select, .phone-combo input { min-height: 42px; border: 1px solid #cfd0d6; background: var(--panel-solid); color: var(--text); padding: 9px 11px; outline: 0; box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.025); transition: border-color 0.16s ease, box-shadow 0.16s ease, background 0.16s ease; } .phone-combo select { border-radius: 8px 0 0 8px; } .phone-combo input { margin-left: -1px; border-radius: 0 8px 8px 0; } .phone-combo select:hover, .phone-combo input:hover { border-color: #b7b8bf; } .phone-combo select:focus, .phone-combo input:focus { position: relative; z-index: 1; border-color: var(--accent); background: #fff; box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12), inset 0 1px 1px rgba(0, 0, 0, 0.02); } .form-field label { display: flex; justify-content: space-between; gap: 10px; font-size: 13px; font-weight: 720; color: #303034; } .required-mark { align-self: center; padding: 2px 6px; border-radius: 999px; background: #eef5ff; color: var(--accent-strong); font-size: 10px; font-weight: 760; } .form-field textarea { min-height: 94px; resize: vertical; } .field-hint { margin-top: 1px; font-size: 12px; line-height: 1.45; } .switch-row { align-self: end; display: flex; gap: 11px; align-items: center; min-height: 42px; padding: 9px 11px; border: 1px solid var(--line-soft); border-radius: 8px; background: #fff; color: #303034; font-size: 13px; font-weight: 650; cursor: pointer; transition: border-color 0.16s ease, background 0.16s ease, box-shadow 0.16s ease; } .switch-row:hover { border-color: #c8c9d0; box-shadow: var(--shadow-soft); } .switch-row input { position: absolute; opacity: 0; pointer-events: none; } .switch-track { position: relative; flex: 0 0 auto; width: 42px; height: 24px; border-radius: 999px; background: #d7d8dd; transition: background 0.18s ease, box-shadow 0.18s ease; } .switch-thumb { position: absolute; top: 2px; left: 2px; width: 20px; height: 20px; border-radius: 50%; background: #fff; box-shadow: 0 2px 5px rgba(0, 0, 0, 0.22); transition: transform 0.18s ease; } .switch-row input:checked + .switch-track { background: var(--accent); } .switch-row input:checked + .switch-track .switch-thumb { transform: translateX(18px); } .switch-row input:focus-visible + .switch-track { box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.16); } .binding-sentence { display: flex; flex-wrap: wrap; align-items: center; gap: 6px 8px; padding: 14px 16px; margin-bottom: 4px; border-radius: 10px; background: linear-gradient(135deg, #f0f5ff 0%, #f5f0ff 100%); border: 1px solid #dde5f8; font-size: 14px; line-height: 1.5; grid-column: 1 / -1; } .bs-text { color: var(--muted); font-weight: 520; } .bs-chip { padding: 3px 10px; border-radius: 999px; background: rgba(255, 255, 255, 0.88); border: 1px solid #c8d6f0; color: var(--text); font-weight: 700; font-size: 13px; max-width: 200px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .binding-section-label { grid-column: 1 / -1; font-size: 12px; font-weight: 760; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; margin-top: 4px; display: flex; align-items: center; gap: 8px; } .binding-section-label .required-mark { font-size: 10px; } .binding-asset-row { grid-column: 1 / -1; display: flex; gap: 10px; } .binding-asset-row .form-field { flex: 1; } .binding-more { grid-column: 1 / -1; margin-top: 4px; } .binding-more summary { cursor: pointer; font-size: 13px; font-weight: 680; color: var(--muted); padding: 8px 4px; border-radius: 6px; user-select: none; list-style: none; display: flex; align-items: center; gap: 6px; } .binding-more summary::before { content: "▸"; display: inline-block; transition: transform 0.18s; font-size: 10px; } .binding-more[open] summary::before { transform: rotate(90deg); } .binding-more-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 14px; padding-top: 10px; } .binding-more-grid .form-field.full, .binding-more-grid textarea { grid-column: 1 / -1; } .sr-only { position: absolute; width: 1px; height: 1px; overflow: hidden; clip: rect(0 0 0 0); white-space: nowrap; } .asset-type-tabs { display: grid; grid-template-columns: repeat(4, 1fr); gap: 8px; margin-bottom: 8px; } .asset-type-tab { display: flex; flex-direction: column; align-items: center; gap: 5px; padding: 10px 6px; border-radius: 10px; border: 1.2px solid var(--border); background: var(--bg); cursor: pointer; font-size: 12px; font-weight: 640; color: var(--muted); transition: border-color 0.12s, background 0.12s, color 0.12s; } .asset-type-tab svg { width: 18px; height: 18px; } .asset-type-tab:hover { border-color: var(--accent); color: var(--accent); background: #f0f5ff; } .asset-type-tab.active { border-color: var(--accent); color: var(--accent); background: #eef5ff; font-weight: 760; } .asset-picker-list { border: 1.2px solid var(--border); border-radius: 10px; overflow: hidden; max-height: 160px; overflow-y: auto; } .asset-item { padding: 9px 14px; font-size: 13px; cursor: pointer; color: var(--text); border-bottom: 1px solid var(--border); transition: background 0.1s; } .asset-item:last-child { border-bottom: none; } .asset-item:hover { background: var(--hover, #f5f5f5); } .asset-item.selected { background: #eef5ff; color: var(--accent); font-weight: 680; } .asset-item-empty { padding: 12px 14px; color: var(--muted); font-size: 13px; } .account-picker { border: 1.2px solid var(--border); border-radius: 10px; overflow: hidden; background: var(--bg); transition: border-color 0.15s; } .account-picker:focus-within { border-color: var(--accent); box-shadow: 0 0 0 3px rgba(0,113,227,.1); } .account-picker.picker-error { border-color: var(--danger); box-shadow: 0 0 0 3px rgba(255,59,48,.1); } .account-picker-search { display: flex; align-items: center; gap: 8px; padding: 8px 12px; border-bottom: 1px solid var(--border); } .account-picker-search svg { flex-shrink: 0; width: 15px; height: 15px; color: var(--muted); } .account-picker-search input { flex: 1; border: none; outline: none; font-size: 13px; background: transparent; color: var(--text); } .account-picker-search input::placeholder { color: var(--muted); } .account-filter-tabs { display: flex; gap: 6px; padding: 8px 12px; border-bottom: 1px solid var(--border); overflow-x: auto; scrollbar-width: none; } .account-filter-tabs::-webkit-scrollbar { display: none; } .platform-tab { flex-shrink: 0; padding: 3px 10px; border-radius: 999px; border: 1px solid var(--border); background: transparent; font-size: 12px; font-weight: 640; color: var(--muted); cursor: pointer; white-space: nowrap; transition: border-color 0.12s, background 0.12s, color 0.12s; } .platform-tab:hover { border-color: var(--accent); color: var(--accent); } .platform-tab.active { background: var(--accent); border-color: var(--accent); color: #fff; } .account-picker-list { max-height: 220px; overflow-y: auto; } .account-item { display: flex; align-items: center; gap: 10px; padding: 8px 12px; cursor: pointer; transition: background 0.1s; } .account-item:hover { background: var(--hover, #f5f5f5); } .account-item.selected { background: #eef5ff; } .account-item[hidden] { display: none; } .account-item-logo { flex-shrink: 0; width: 26px; height: 26px; border-radius: 7px; font-size: 9px; } .account-item-info { display: flex; flex-direction: column; min-width: 0; gap: 1px; } .account-item-platform { font-size: 13px; font-weight: 680; color: var(--text); } .account-item-id { font-size: 11px; color: var(--muted); overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .dialog-actions { display: flex; justify-content: flex-end; gap: 10px; margin-top: 0; padding: 16px 22px 20px; background: rgba(255, 255, 255, 0.9); border-top: 1px solid var(--line-soft); } .toast { position: fixed; inset: auto; top: 22px; right: 22px; margin: 0; max-width: min(420px, calc(100vw - 44px)); display: grid; grid-template-columns: 30px minmax(0, 1fr); gap: 10px; align-items: center; min-height: 54px; padding: 10px 14px 10px 11px; border-radius: 8px; background: rgba(255, 255, 255, 0.94); color: var(--text); border: 1px solid rgba(0, 0, 0, 0.08); box-shadow: 0 18px 46px rgba(0, 0, 0, 0.16); backdrop-filter: blur(18px); opacity: 0; transform: translateY(-12px) scale(0.98); pointer-events: none; transition: opacity 0.2s ease, transform 0.2s ease; } .toast.show { opacity: 1; transform: translateY(0) scale(1); } .toast-icon { display: grid; place-items: center; width: 30px; height: 30px; border-radius: 50%; background: #eaf7ee; color: var(--success); font-size: 11px; font-weight: 850; } .toast.error .toast-icon { background: #fff0ee; color: var(--danger); } .toast.warning .toast-icon { background: #fff6e8; color: var(--warning); } #toast-message { min-width: 0; overflow-wrap: anywhere; font-size: 14px; font-weight: 650; line-height: 1.35; } @media (max-width: 1020px) { .app-shell { grid-template-columns: 1fr; } .sidebar { position: static; height: auto; } .nav, .stats-grid, .dashboard-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .dashboard-hero, .dashboard-settings-grid, .dashboard-insights-grid { grid-template-columns: 1fr; } .backup-note { margin-top: 0; } .topbar { align-items: stretch; flex-direction: column; } .relation-layout, .relation-stats { grid-template-columns: 1fr; overflow-x: visible; } .relation-inspector { position: static; } .binding-detail-row { grid-template-columns: minmax(0, 1fr); } .binding-detail-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); } .binding-detail-actions { justify-content: flex-start; } .relation-hero { align-items: stretch; flex-direction: column; } } @media (max-width: 680px) { .main, .sidebar { padding: 18px 14px; } .nav, .stats-grid, .dashboard-grid, .detail-grid, .form-grid { grid-template-columns: 1fr; } .dashboard-setting-card, .dashboard-panel-card, .dashboard-hero-note { padding: 20px; border-radius: 20px; } .dashboard-card-value { font-size: 40px; } .dashboard-platform-row, .dashboard-recent-item { align-items: flex-start; flex-direction: column; } .dashboard-platform-meter { min-width: 100%; width: 100%; } .phone-combo { grid-template-columns: 1fr; } .phone-combo select { border-radius: 8px 8px 0 0; } .phone-combo input { margin-top: -1px; margin-left: 0; border-radius: 0 0 8px 8px; } .onboarding-steps { grid-template-columns: 1fr; padding: 18px; } .onboarding-head, .onboarding-actions { padding-right: 18px; padding-left: 18px; } .onboarding-actions { flex-direction: column-reverse; } .asset-drawer { width: 100vw; padding: 10px; } .asset-drawer-shell { border-radius: 20px; } .global-search, .global-search input, .filter-row input, .filter-row select, .topbar-actions > label.file-button { width: 100%; } .toolbar { align-items: stretch; } .inline-actions, .filter-row, .topbar-actions { width: 100%; } } @media (max-width: 760px) { body { overflow-x: hidden; background: #f5f5f7; } .app-shell { display: block; } .sidebar { position: sticky; top: 0; z-index: 25; height: auto; padding: 12px 12px 10px; gap: 12px; border-right: 0; border-bottom: 1px solid rgba(216, 216, 222, 0.84); background: rgba(251, 251, 253, 0.9); backdrop-filter: blur(20px); } .brand { gap: 10px; } .brand-mark { width: 34px; height: 34px; border-radius: 8px; font-size: 13px; } .brand h1 { font-size: 17px; } .brand p { font-size: 11px; } .nav { display: flex; gap: 8px; overflow-x: auto; padding-bottom: 2px; scrollbar-width: none; } .nav::-webkit-scrollbar, .accounts-platform-tabs::-webkit-scrollbar { display: none; } .nav-group { display: none; } .nav button { flex: 0 0 auto; width: auto; min-height: 38px; padding: 7px 11px 7px 8px; border-radius: 12px; font-size: 13px; white-space: nowrap; } .nav-icon { width: 24px; height: 24px; border-radius: 8px; } .main { padding: 16px 12px 28px; } .topbar { gap: 14px; margin-bottom: 18px; } .topbar h2 { font-size: 34px; } .topbar-actions { display: grid; grid-template-columns: minmax(0, 1fr) 40px 40px 40px; gap: 8px; width: 100%; align-items: center; } .global-search { grid-column: 1 / -1; width: 100%; min-height: 42px; border-radius: 14px; } .language-select-wrap { grid-column: 1 / 2; width: 100%; } .language-select-wrap select { width: 100%; border-radius: 14px; } .global-search input { width: 100%; min-width: 0; } .topbar-actions > button, .topbar-actions > label.file-button { width: auto; } .topbar-actions > .icon-pill, .topbar-actions .topbar-avatar { flex: 0 0 auto; width: 40px; min-width: 40px; } .topbar-primary { grid-column: 1 / 2; justify-content: center; width: 100%; padding: 0 12px; border-radius: 14px; } .topbar-primary span { display: inline; } .icon-pill, .topbar-avatar { width: 40px; height: 40px; } .account-menu { position: fixed; top: 112px; right: 12px; } .content { gap: 14px; } .toolbar, .filter-row, .inline-actions { align-items: stretch; width: 100%; } .filter-row input, .filter-row select { width: 100%; } .stats-grid, .dashboard-grid, .dashboard-settings-grid, .dashboard-insights-grid, .relation-stats, .detail-grid, .form-grid, .binding-more-grid { grid-template-columns: 1fr; } .dashboard-hero, .dashboard-setting-card, .dashboard-panel-card, .dashboard-hero-note, .card, .topology-card, .relationship-board, .relation-table-card, .relation-inspector, .assets-card-view, .accounts-list-view { border-radius: 16px; } .dashboard-setting-card, .dashboard-panel-card, .dashboard-hero-note { padding: 18px; } .dashboard-card-value { font-size: 34px; } .assets-card-grid, .accounts-list-items { grid-template-columns: 1fr; gap: 10px; padding: 12px; } .asset-card, .account-list-item { min-height: 76px; padding: 13px 14px; border-radius: 15px; } .asset-card-icon, .account-list-item .platform-logo { width: 42px; height: 42px; border-radius: 12px; } .asset-card-actions, .account-list-item-actions { position: static; opacity: 1; flex: 0 0 auto; } .asset-card-title, .account-list-item-name { font-size: 15px; } .asset-card-sub, .account-list-item-id { font-size: 12px; } .relation-hero h3 { font-size: 27px; } .relation-filter { justify-content: stretch; } .relation-layout { display: grid; grid-template-columns: 1fr; overflow-x: visible; } .relation-main { min-width: 0; } .relationship-board { padding: 12px; } .relationship-board-head { display: grid; } .relation-canvas, .topology-stage { -webkit-overflow-scrolling: touch; } .relationship-board > .topology-legend { overflow-x: auto; flex-wrap: nowrap; gap: 14px; } .binding-detail-row { grid-template-columns: 1fr; gap: 12px; padding: 13px; } .binding-detail-meta { grid-template-columns: repeat(2, minmax(0, 1fr)); } .binding-detail-actions { justify-content: flex-start; } .relation-table-card table { min-width: 0; } .dialog { width: calc(100vw - 20px); max-height: calc(100dvh - 20px); border-radius: 18px; } .dialog form { max-height: calc(100dvh - 20px); } .dialog-head, .dialog-actions { padding: 16px; } .form-grid { gap: 12px; padding: 16px; } .phone-combo { grid-template-columns: 1fr; } .phone-combo select { border-radius: 8px 8px 0 0; } .phone-combo input { margin-top: -1px; margin-left: 0; border-radius: 0 0 8px 8px; } .dialog-actions { position: sticky; bottom: 0; background: rgba(255, 255, 255, 0.94); backdrop-filter: blur(14px); } .dialog-actions button { flex: 1; } .asset-drawer { top: auto; left: 0; right: 0; bottom: 0; width: 100vw; height: min(86dvh, 760px); padding: 8px; animation-name: assetDrawerUp; } .asset-drawer.closing { animation-name: assetDrawerDown; } .asset-drawer-shell { border-radius: 22px 22px 16px 16px; box-shadow: 0 -18px 48px rgba(15, 23, 42, 0.18); } .detail-panel-drawer { padding: 22px 16px 18px; } .detail-panel-drawer .detail-grid { grid-template-columns: 1fr; } .toast { top: 12px; right: 12px; left: 12px; max-width: none; } .auth-screen { padding: 18px; } .auth-card { margin-top: 54px; } .auth-card h2 { margin-bottom: 40px; font-size: 34px; } .auth-field { min-height: 74px; padding: 14px 54px 10px 20px; } .auth-field input { font-size: 22px; } .auth-remember { margin-top: 38px; font-size: 20px; } .guided-tour-card { left: 12px !important; right: 12px; width: auto; } } @keyframes assetDrawerUp { from { opacity: 0; transform: translateY(28px) scale(0.985); } to { opacity: 1; transform: translateY(0) scale(1); } } @keyframes assetDrawerDown { from { opacity: 1; transform: translateY(0) scale(1); } to { opacity: 0; transform: translateY(28px) scale(0.985); } } @media (max-width: 420px) { .topbar h2 { font-size: 30px; } .topbar-actions { grid-template-columns: minmax(0, 1fr) 38px 38px 38px; } .topbar-primary span { display: none; } .topbar-primary { min-width: 0; } .asset-card, .account-list-item { gap: 10px; } .acct-action-btn { width: 28px; height: 28px; } .auth-card h2 { font-size: 30px; } } /* ── License Gate ──────────────────────────────────────────────────────────── */ .license-gate { position: fixed; inset: 0; z-index: 70; display: grid; place-items: center; min-height: 100vh; background: rgba(245, 245, 247, 0.88); backdrop-filter: blur(18px); padding: 24px; } .license-card { position: relative; width: min(440px, 100%); background: var(--panel-solid); border: 1px solid var(--line); border-radius: 20px; padding: 32px; box-shadow: 0 24px 60px rgba(0, 0, 0, 0.1); display: grid; gap: 24px; } .license-close { position: absolute; top: 14px; right: 14px; display: grid; place-items: center; width: 34px; height: 34px; min-height: 0; padding: 0; border: 0; border-radius: 50%; background: rgba(29, 29, 31, 0.08); color: var(--text); font-size: 22px; line-height: 1; box-shadow: none; } .license-close:hover { background: rgba(29, 29, 31, 0.14); transform: none; box-shadow: none; } .license-brand { display: flex; gap: 12px; align-items: center; } .license-brand h1 { margin: 0; font-size: 19px; font-weight: 760; } .license-brand p { margin: 2px 0 0; font-size: 12px; color: var(--muted); } .license-tabs { display: flex; gap: 4px; padding: 4px; background: var(--panel-soft); border-radius: 10px; } .license-tab { flex: 1; min-height: 34px; border: 0; border-radius: 7px; background: transparent; color: var(--muted); font-size: 13px; font-weight: 620; box-shadow: none; transition: background 0.16s, color 0.16s, box-shadow 0.16s; } .license-tab:hover { transform: none; color: var(--text); } .license-tab.active { background: var(--panel-solid); color: var(--text); font-weight: 700; box-shadow: 0 1px 4px rgba(0, 0, 0, 0.1); } .license-desc { margin: 0 0 14px; font-size: 13.5px; color: var(--muted); line-height: 1.55; } .license-desc strong { color: var(--text); } .license-form { display: grid; gap: 10px; } .license-form input { min-height: 44px; width: 100%; border: 1px solid var(--line); border-radius: 10px; background: var(--panel-solid); color: var(--text); padding: 10px 14px; font-size: 14px; outline: 0; transition: border-color 0.16s, box-shadow 0.16s; } .license-form input:focus { border-color: var(--accent); box-shadow: 0 0 0 4px rgba(0, 113, 227, 0.12); } .license-form .primary-button { min-height: 44px; border-radius: 10px; font-size: 14px; } .license-msg { margin: 8px 0 0; font-size: 13px; line-height: 1.45; } .license-msg.success { color: var(--success); } .license-msg.error { color: var(--danger); } /* ── Pricing Dialog ────────────────────────────────────────────────────────── */ .pricing-dialog { width: min(960px, calc(100vw - 28px)); border-radius: 18px; } .pricing-dialog::backdrop { background: rgba(15, 23, 42, 0.4); backdrop-filter: blur(6px); } .pricing-head { display: flex; align-items: start; justify-content: space-between; gap: 16px; padding: 26px 28px 0; background: #fbfbfd; } .pricing-head h3 { margin: 6px 0 6px; font-size: 26px; font-weight: 780; line-height: 1.12; } .pricing-sub { margin: 0; color: var(--muted); font-size: 14px; } .pricing-grid { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 16px; padding: 22px 28px 28px; background: #fbfbfd; } .pricing-card { position: relative; display: grid; gap: 16px; align-content: start; padding: 26px 24px 22px; background: var(--panel-solid); border: 1px solid var(--line); border-radius: 18px; box-shadow: var(--shadow-soft); transition: border-color 0.2s, box-shadow 0.2s, transform 0.2s; } .pricing-card:hover { transform: translateY(-2px); box-shadow: 0 20px 40px rgba(15, 23, 42, 0.08); } .pricing-card.is-current { border-color: rgba(0, 113, 227, 0.45); box-shadow: 0 0 0 3px rgba(0, 113, 227, 0.08); } .pricing-card-pro { background: linear-gradient(160deg, #f8f9ff 0%, #ffffff 60%); border-color: rgba(125, 95, 255, 0.32); } .pricing-card-pro.is-current { border-color: rgba(125, 95, 255, 0.6); box-shadow: 0 0 0 3px rgba(125, 95, 255, 0.12); } .pricing-badge { position: absolute; top: 14px; right: 14px; padding: 3px 10px; border-radius: 999px; background: linear-gradient(135deg, #7d5fff 0%, #4c8bf5 100%); color: #fff; font-size: 11px; font-weight: 760; letter-spacing: 0.05em; text-transform: uppercase; box-shadow: 0 6px 14px rgba(125, 95, 255, 0.3); } .pricing-card header h4 { margin: 0 0 10px; font-size: 22px; font-weight: 780; } .pricing-price { display: flex; align-items: baseline; gap: 4px; margin-bottom: 6px; } .pricing-currency { font-size: 18px; font-weight: 700; color: var(--text); } .pricing-amount { font-size: 44px; font-weight: 800; line-height: 1; letter-spacing: -0.02em; } .pricing-period { color: var(--muted); font-size: 13px; font-weight: 620; } .pricing-desc { margin: 0; color: var(--muted); font-size: 13.5px; line-height: 1.45; } .pricing-cta { width: 100%; min-height: 44px; padding: 11px 16px; border-radius: 999px; border: 1px solid transparent; font-size: 14px; font-weight: 700; cursor: pointer; transition: background 0.16s, color 0.16s, border-color 0.16s, transform 0.16s; box-shadow: none; } .pricing-cta:hover { transform: translateY(-1px); } .pricing-cta-current { background: var(--panel-soft); color: var(--muted); border-color: var(--line); cursor: default; } .pricing-cta-current:hover { transform: none; } .pricing-cta-current:disabled { opacity: 1; cursor: default; } .pricing-cta-upgrade { background: linear-gradient(135deg, #4c8bf5 0%, #7d5fff 100%); color: #fff; border-color: transparent; box-shadow: 0 10px 22px rgba(76, 139, 245, 0.24); } .pricing-cta-upgrade:hover { box-shadow: 0 14px 28px rgba(76, 139, 245, 0.32); } .pricing-cta-downgrade { background: #fff; color: var(--text); border-color: var(--line); } .pricing-cta-downgrade:hover { background: var(--panel-soft); } .pricing-includes { margin: 4px 0 0; color: var(--text); font-size: 13px; font-weight: 720; } .pricing-features { list-style: none; margin: 0; padding: 0; display: grid; gap: 10px; } .pricing-features li { position: relative; padding-left: 24px; color: var(--text); font-size: 13.5px; line-height: 1.5; } .pricing-features li::before { content: ""; position: absolute; left: 0; top: 4px; width: 16px; height: 16px; border-radius: 50%; background: #e6efff; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 12l4 4 10-10' fill='none' stroke='%230071e3' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); background-size: 12px 12px; background-repeat: no-repeat; background-position: center; } .pricing-features-pro li::before { background: #f1edff; background-image: url("data:image/svg+xml,%3Csvg viewBox='0 0 24 24' xmlns='http://www.w3.org/2000/svg'%3E%3Cpath d='M5 12l4 4 10-10' fill='none' stroke='%237d5fff' stroke-width='3' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E"); background-repeat: no-repeat; background-position: center; background-size: 12px 12px; } @media (max-width: 760px) { .pricing-grid { grid-template-columns: 1fr; } } /* ── Profile Dialog ────────────────────────────────────────────────────────── */ .profile-dialog { width: min(640px, calc(100vw - 28px)); } .profile-body { padding: 22px; background: #fbfbfd; display: grid; gap: 18px; max-height: 68vh; overflow: auto; } .profile-section { background: var(--panel-solid); border: 1px solid var(--line); border-radius: 14px; padding: 16px 18px; } .profile-section h4 { margin: 0 0 12px; font-size: 13px; font-weight: 720; color: var(--muted); text-transform: uppercase; letter-spacing: 0.06em; } .profile-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 10px 16px; } .profile-item { display: grid; gap: 4px; min-width: 0; } .profile-item span { color: var(--muted); font-size: 12px; font-weight: 620; } .profile-item strong { font-size: 14px; font-weight: 700; color: var(--text); overflow-wrap: anywhere; } .profile-item .mono { font-family: "SF Mono", Menlo, Consolas, monospace; font-size: 12.5px; font-weight: 600; }