:root{--bg: #f4f6fb;--surface: #ffffff;--surface-soft: #f8f9fc;--border: #e5e8ef;--text: #101422;--muted: #69708a;--accent: #4f46e5;--accent-strong: #4338ca;--accent-soft: #eef0ff;--success: #0f9d6e;--danger: #d93a3a;--radius-lg: 18px;--radius: 14px;--radius-sm: 10px;--shadow-sm: 0 1px 2px rgba(16, 20, 34, .05);--shadow: 0 1px 2px rgba(16, 20, 34, .04), 0 12px 32px -18px rgba(16, 20, 34, .28);--shadow-lift: 0 2px 6px rgba(16, 20, 34, .06), 0 22px 48px -22px rgba(79, 70, 229, .45);--font-sans: -apple-system, BlinkMacSystemFont, "Segoe UI", "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "Helvetica Neue", Arial, sans-serif;--font-mono: "SFMono-Regular", ui-monospace, Menlo, Consolas, "Liberation Mono", monospace}@media(prefers-color-scheme:dark){:root{--bg: #0b0d13;--surface: #141821;--surface-soft: #191e29;--border: #242a38;--text: #e8ecf5;--muted: #9aa3b8;--accent: #818cf8;--accent-strong: #a5b4fc;--accent-soft: #1d2340;--shadow-sm: 0 1px 2px rgba(0, 0, 0, .4);--shadow: 0 1px 2px rgba(0, 0, 0, .35), 0 14px 34px -20px rgba(0, 0, 0, .9);--shadow-lift: 0 2px 8px rgba(0, 0, 0, .45), 0 24px 50px -24px rgba(99, 102, 241, .5)}}*,*:before,*:after{box-sizing:border-box}html{-webkit-text-size-adjust:100%}body{margin:0;min-height:100vh;font-family:var(--font-sans);font-size:15px;line-height:1.6;color:var(--text);background:var(--bg);background-image:radial-gradient(circle at 12% -10%,rgba(99,102,241,.14),transparent 42%),radial-gradient(circle at 88% 0%,rgba(56,189,248,.12),transparent 40%);background-repeat:no-repeat;-webkit-font-smoothing:antialiased}a{color:inherit;text-decoration:none}h1,h2,h3,p{margin:0}button,input,select,textarea{font:inherit;color:inherit}.nav{position:sticky;top:0;z-index:20;border-bottom:1px solid var(--border);background:color-mix(in srgb,var(--bg) 82%,transparent);-webkit-backdrop-filter:saturate(160%) blur(12px);backdrop-filter:saturate(160%) blur(12px)}.nav__inner{max-width:1120px;margin:0 auto;padding:0 24px;height:62px;display:flex;align-items:center;gap:18px}.nav__brand{display:flex;align-items:center;gap:10px;font-weight:650;letter-spacing:-.01em}.nav__logo{display:grid;place-items:center;width:32px;height:32px;border-radius:9px;color:#fff;background:linear-gradient(135deg,#6366f1,#8b5cf6);box-shadow:0 6px 16px -8px #6366f1e6}.nav__logo svg{width:18px;height:18px}.nav__back{display:inline-flex;align-items:center;gap:4px;margin-left:4px;padding:5px 10px 5px 6px;border-radius:999px;font-size:13px;color:var(--muted);transition:background .2s,color .2s}.nav__back svg{width:16px;height:16px}.nav__back:hover{color:var(--text);background:var(--surface-soft)}.nav__hint{margin-left:4px;padding:3px 10px;border-radius:999px;font-size:12px;color:var(--success);background:color-mix(in srgb,var(--success) 12%,transparent)}.nav__logout{margin-left:auto;display:inline-flex;align-items:center;gap:6px;padding:7px 12px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface);font-size:13px;color:var(--muted);cursor:pointer;transition:color .2s,border-color .2s,transform .2s}.nav__logout svg{width:15px;height:15px}.nav__logout:hover{color:var(--text);border-color:color-mix(in srgb,var(--accent) 45%,var(--border))}.page{max-width:1120px;margin:0 auto;padding:48px 24px 72px}.footer{padding:28px 24px 40px;text-align:center;font-size:13px;color:var(--muted)}.hero{margin-bottom:36px}.hero h1{font-size:clamp(28px,4vw,38px);font-weight:700;letter-spacing:-.03em}.hero p{margin-top:10px;max-width:560px;color:var(--muted)}.tool-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(258px,1fr));gap:16px}.tool-card{display:flex;flex-direction:column;gap:8px;padding:20px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow-sm);transition:transform .22s ease,box-shadow .22s ease,border-color .22s ease}.tool-card:hover{transform:translateY(-3px);border-color:color-mix(in srgb,var(--accent) 40%,var(--border));box-shadow:var(--shadow-lift)}.tool-card__head{display:flex;align-items:flex-start;justify-content:space-between;margin-bottom:6px}.tool-card__icon{display:grid;place-items:center;width:42px;height:42px;border-radius:12px;color:var(--accent);background:var(--accent-soft)}.tool-card__icon svg{width:21px;height:21px}.tool-card__badge{padding:2px 9px;border-radius:999px;font-size:11px;font-weight:500;letter-spacing:.02em}.tool-card__badge--local{color:var(--success);background:color-mix(in srgb,var(--success) 12%,transparent)}.tool-card__badge--online{color:var(--accent);background:var(--accent-soft)}.tool-card__name{font-size:16px;font-weight:620;letter-spacing:-.01em}.tool-card__desc{font-size:13px;color:var(--muted)}.tool-head{margin-bottom:24px}.tool-head h1{font-size:clamp(24px,3vw,30px);font-weight:700;letter-spacing:-.02em}.tool-head p{margin-top:8px;color:var(--muted)}.panel{padding:22px;border:1px solid var(--border);border-radius:var(--radius-lg);background:var(--surface);box-shadow:var(--shadow)}.panel+.panel{margin-top:16px}.placeholder{display:flex;flex-direction:column;align-items:center;gap:10px;padding:52px 20px;text-align:center;color:var(--muted)}.placeholder strong{color:var(--text);font-weight:600}.placeholder code{padding:2px 6px;border-radius:6px;font-family:var(--font-mono);font-size:12px;background:var(--surface-soft)}.tool-panel{display:flex;flex-direction:column;gap:14px}.tool-panel+.tool-panel{margin-top:16px}.tool-panel__title{font-size:15px;font-weight:620;letter-spacing:-.01em}.tool-row{display:grid;grid-template-columns:repeat(auto-fit,minmax(168px,1fr));gap:12px}.url-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(272px,1fr));gap:14px}[hidden]{display:none!important}.tool-actions{display:flex;flex-wrap:wrap;gap:8px}.textarea{width:100%;min-height:148px;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft);font-family:var(--font-mono);font-size:13px;line-height:1.7;outline:none;resize:vertical;transition:border-color .2s,box-shadow .2s,background .2s}.textarea:focus{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 16%,transparent)}.textarea--short{min-height:92px}select.input{padding-right:10px;cursor:pointer}.btn--sm{height:36px;padding:0 12px;border-radius:8px;font-size:13px}.btn--ghost{border-color:var(--border);background:var(--surface);color:var(--text)}.btn--ghost:hover:not(:disabled){border-color:color-mix(in srgb,var(--accent) 45%,var(--border));color:var(--accent)}.hint{font-size:12px;color:var(--muted)}.check{display:inline-flex;align-items:center;gap:6px;font-size:13px;color:var(--muted);cursor:pointer}.check input{accent-color:var(--accent)}.stat-grid{display:grid;grid-template-columns:repeat(auto-fit,minmax(112px,1fr));gap:12px}.stat{padding:14px 16px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft)}.stat__value{font-size:22px;font-weight:650;letter-spacing:-.02em;font-variant-numeric:tabular-nums}.stat__label{font-size:12px;color:var(--muted)}.data-table{width:100%;border-collapse:collapse;font-size:13px}.data-table th,.data-table td{padding:8px 10px;border-bottom:1px solid var(--border);text-align:left;vertical-align:top}.data-table th{width:1%;white-space:nowrap;font-weight:600;color:var(--muted);font-family:var(--font-mono)}.data-table td{font-family:var(--font-mono);word-break:break-all}.data-table tr:last-child th,.data-table tr:last-child td{border-bottom:none}.qrcode-preview{display:grid;place-items:center;min-height:264px;padding:16px;border:1px dashed var(--border);border-radius:var(--radius);background:var(--surface-soft);color:var(--muted);font-size:13px}.qrcode-preview img{width:240px;height:240px;image-rendering:pixelated;border-radius:8px;background:#fff}.error-box{padding:10px 12px;border:1px solid color-mix(in srgb,var(--danger) 35%,var(--border));border-radius:var(--radius-sm);color:var(--danger);font-size:13px;background:color-mix(in srgb,var(--danger) 8%,transparent)}.search-row{display:flex;flex-wrap:wrap;gap:10px}.search-row .input{flex:1 1 240px;min-width:0}.search-row .input--select{flex:0 0 150px}.table-scroll{overflow-x:auto}.table-scroll .data-table{min-width:760px}.app-head{display:flex;gap:16px;align-items:center}.app-head__info{display:flex;flex-direction:column;align-items:flex-start;gap:6px}.app-icon{width:76px;height:76px;border-radius:18px;border:1px solid var(--border);background:var(--surface-soft);object-fit:cover}.app-icon-sm{width:28px;height:28px;border-radius:7px;vertical-align:middle;object-fit:cover}.app-cell{display:inline-flex;align-items:center;gap:8px;font-family:var(--font-sans)}.app-desc{max-height:220px;overflow:auto;padding:12px 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft);font-size:13px;line-height:1.75;white-space:pre-wrap;color:var(--muted)}.screenshot-row{display:flex;gap:10px;overflow-x:auto;padding-bottom:6px}.screenshot-row img{height:240px;border:1px solid var(--border);border-radius:12px;background:var(--surface-soft)}.result-cards{display:flex;flex-direction:column;gap:12px;margin-top:16px}.result-card{padding:16px 18px;border:1px solid var(--border);border-radius:var(--radius);background:var(--surface);box-shadow:var(--shadow-sm)}.result-card__head{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:8px}.result-card__ip{font-family:var(--font-mono);font-weight:600}.result-card .data-table th{width:72px}.pill{display:inline-block;padding:2px 8px;border-radius:999px;font-size:12px;white-space:nowrap}.pill--ok{color:var(--success);background:color-mix(in srgb,var(--success) 12%,transparent)}.pill--bad{color:var(--danger);background:color-mix(in srgb,var(--danger) 10%,transparent)}.market-cell{display:flex;flex-wrap:wrap;gap:4px}.link{color:var(--accent);text-decoration:underline;text-underline-offset:3px}.text-danger{color:var(--danger)}.auth{display:grid;place-items:center;min-height:100vh;padding:24px}.login{width:100%;max-width:396px;padding:34px 30px 30px;border:1px solid var(--border);border-radius:22px;background:var(--surface);box-shadow:var(--shadow)}.login__logo{display:grid;place-items:center;width:48px;height:48px;margin-bottom:18px;border-radius:14px;color:#fff;background:linear-gradient(135deg,#6366f1,#8b5cf6);box-shadow:0 12px 26px -14px #6366f1}.login__logo svg{width:24px;height:24px}.login h1{font-size:22px;font-weight:680;letter-spacing:-.02em}.login__desc{margin-top:6px;font-size:13px;color:var(--muted)}.login__form{margin-top:24px;display:flex;flex-direction:column;gap:12px}.field{display:flex;flex-direction:column;gap:6px}.field label{font-size:13px;font-weight:550;color:var(--muted)}.input{width:100%;height:46px;padding:0 14px;border:1px solid var(--border);border-radius:var(--radius-sm);background:var(--surface-soft);outline:none;transition:border-color .2s,box-shadow .2s,background .2s}.input:focus{background:var(--surface);border-color:var(--accent);box-shadow:0 0 0 4px color-mix(in srgb,var(--accent) 16%,transparent)}.btn{display:inline-flex;align-items:center;justify-content:center;gap:6px;height:46px;padding:0 18px;border:1px solid transparent;border-radius:var(--radius-sm);font-weight:560;cursor:pointer;transition:filter .2s,transform .15s,opacity .2s}.btn--primary{color:#fff;background:linear-gradient(135deg,#4f46e5,#7c3aed);box-shadow:0 10px 24px -14px #4f46e5}.btn--primary:hover:not(:disabled){filter:brightness(1.06)}.btn:active:not(:disabled){transform:translateY(1px)}.btn:disabled{opacity:.65;cursor:progress}.login__message{min-height:20px;font-size:13px}.login__message--error{color:var(--danger)}.login__message--success{color:var(--success)}.toast-stack{position:fixed;top:22px;left:50%;transform:translate(-50%);z-index:100;display:flex;flex-direction:column;gap:8px;pointer-events:none}.toast{padding:9px 16px;border:1px solid var(--border);border-radius:999px;font-size:13px;background:var(--surface);box-shadow:var(--shadow);opacity:0;transform:translateY(-8px);transition:opacity .22s ease,transform .22s ease}.toast--visible{opacity:1;transform:translateY(0)}.toast--success{border-color:color-mix(in srgb,var(--success) 40%,var(--border));color:var(--success)}.toast--error{border-color:color-mix(in srgb,var(--danger) 40%,var(--border));color:var(--danger)}.toast--warning{border-color:color-mix(in srgb,#d97706 40%,var(--border));color:#d97706}@media(max-width:640px){.page{padding:32px 16px 56px}.nav__inner{padding:0 16px;gap:10px}.nav__hint,.nav__back span{display:none}.tool-grid{grid-template-columns:1fr}}
