:root {
--primary: #6750a4;
--on-primary: #ffffff;
--primary-container: #eaddff;
--on-primary-container: #21005d;
--surface: #fef7ff;
--surface-container: #f3edf7;
--surface-container-high: #ece6f0;
--on-surface: #1d1b20;
--on-surface-variant: #49454f;
--outline: #79747e;
--error: #b3261e;
--shadow-1: 0 1px 2px rgba(0, 0, 0, .3), 0 1px 3px 1px rgba(0, 0, 0, .15);
--shadow-2: 0 1px 2px rgba(0, 0, 0, .3), 0 2px 6px 2px rgba(0, 0, 0, .15);
--radius: 16px;
--radius-s: 8px;
color-scheme: light;
}
[data-theme="dark"] {
--primary: #d0bcff;
--on-primary: #381e72;
--primary-container: #4f378b;
--on-primary-container: #eaddff;
--surface: #141218;
--surface-container: #211f26;
--surface-container-high: #2b2930;
--on-surface: #e6e0e9;
--on-surface-variant: #cac4d0;
--outline: #938f99;
--shadow-1: 0 1px 3px rgba(0, 0, 0, .6);
--shadow-2: 0 2px 6px rgba(0, 0, 0, .6);
color-scheme: dark;
}
* { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
background: var(--surface);
color: var(--on-surface);
font-family: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
font-size: 16px;
line-height: 1.5;
}
body { min-height: 100vh; display: flex; flex-direction: column; }
main { flex: 1; width: min(960px, 100% - 32px); margin: 0 auto; padding: 24px 0 64px; }
.topbar {
position: sticky; top: 0; z-index: 10;
background: color-mix(in srgb, var(--surface) 85%, transparent);
backdrop-filter: blur(12px);
border-bottom: 1px solid color-mix(in srgb, var(--outline) 30%, transparent);
}
.topbar-inner {
width: min(960px, 100% - 32px); margin: 0 auto;
display: flex; align-items: center; gap: 16px; height: 56px;
}
.brand { font-size: 1.15rem; font-weight: 600; letter-spacing: .2px; }
.spacer { flex: 1; }
.icon-btn {
border: none; background: transparent; color: var(--on-surface-variant);
width: 40px; height: 40px; border-radius: 50%; cursor: pointer;
display: inline-flex; align-items: center; justify-content: center; font-size: 1.25rem;
}
.icon-btn:hover { background: var(--surface-container-high); }
.tabs { display: flex; gap: 4px; flex-wrap: wrap; }
.tab {
border: none; background: transparent; color: var(--on-surface-variant);
padding: 8px 16px; font-size: .9rem; cursor: pointer;
border-radius: 999px; transition: background .15s;
}
.tab:hover { background: var(--surface-container-high); }
.tab.active { background: var(--primary-container); color: var(--on-primary-container); font-weight: 500; }
.hero { display: flex; flex-direction: column; gap: 14px; margin: 24px 0 8px; }
.search-box { position: relative; }
.search-field {
display: flex; align-items: center;
background: var(--surface-container);
border: 1px solid transparent; border-radius: 999px;
padding: 2px 8px 2px 20px;
transition: border-color .15s, box-shadow .15s;
}
.search-field:focus-within { border-color: var(--primary); box-shadow: var(--shadow-1); }
.search-field input {
flex: 1; border: none; outline: none; background: transparent;
color: var(--on-surface); font-size: 1.05rem; padding: 12px 0;
}
#clear-btn::before { content: "\2715"; }
.suggestions {
position: absolute; top: calc(100% + 6px); left: 0; right: 0; z-index: 20;
background: var(--surface-container-high); border-radius: var(--radius-s);
box-shadow: var(--shadow-2); padding: 8px; display: flex; flex-wrap: wrap; gap: 6px;
}
.suggestions .chip { font-size: .85rem; }
.category-row, .engines-row { display: flex; gap: 6px; flex-wrap: wrap; }
.param-row { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; }
.text-input, .select {
background: var(--surface-container); color: var(--on-surface);
border: 1px solid var(--outline); border-radius: var(--radius-s);
padding: 8px 12px; font-size: .9rem; outline: none;
}
.text-input:focus, .select:focus { border-color: var(--primary); }
.text-input.narrow { width: 84px; }
.text-input.grow { flex: 1; min-width: 180px; }
.actions { display: flex; align-items: center; justify-content: center; gap: 14px; }
.raised-btn {
background: var(--primary); color: var(--on-primary); border: none;
border-radius: 999px; padding: 12px 28px; font-size: 1rem; font-weight: 500;
cursor: pointer; box-shadow: var(--shadow-1);
}
.raised-btn:hover { filter: brightness(1.06); box-shadow: var(--shadow-2); }
.raised-btn.small { padding: 8px 18px; font-size: .85rem; }
.check { display: inline-flex; align-items: center; gap: 6px; font-size: .85rem; color: var(--on-surface-variant); cursor: pointer; user-select: none; }
.chip {
border: 1px solid var(--outline); background: var(--surface-container);
color: var(--on-surface-variant); border-radius: 999px;
padding: 6px 14px; font-size: .9rem; cursor: pointer; transition: background .15s;
}
.chip:hover { background: var(--surface-container-high); }
.chip.active {
background: var(--primary-container); color: var(--on-primary-container);
border-color: transparent; font-weight: 500;
}
.engines-row .chip { font-size: .8rem; padding: 4px 12px; }
.meta { color: var(--on-surface-variant); font-size: .85rem; margin: 12px 0 4px; }
.answer {
background: var(--primary-container); color: var(--on-primary-container);
border-radius: var(--radius); padding: 16px 20px; margin: 12px 0; font-size: .95rem;
}
.results { display: grid; gap: 12px; margin-top: 16px; }
.card {
background: var(--surface-container); border-radius: var(--radius);
padding: 16px 20px; transition: box-shadow .15s;
}
.card:hover { box-shadow: var(--shadow-2); }
.card h3 { margin: 0 0 4px; font-size: 1.02rem; font-weight: 500; }
.card h3 a { color: var(--primary); text-decoration: none; }
.card h3 a:hover { text-decoration: underline; }
.card .url { color: var(--on-surface-variant); font-size: .82rem; margin-bottom: 6px; word-break: break-all; }
.card .desc { font-size: .92rem; margin: 0; }
.card .sources { display: flex; flex-wrap: wrap; gap: 6px; margin-top: 10px; }
.source-chip {
font-size: .72rem; color: var(--on-surface-variant);
background: var(--surface-container-high); border-radius: 999px; padding: 2px 10px;
}
.sub { display: flex; flex-wrap: wrap; gap: 10px; color: var(--on-surface-variant); font-size: .8rem; margin-top: 8px; }
.results.images { grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); }
.image-card {
background: var(--surface-container); border-radius: var(--radius-s); overflow: hidden;
cursor: pointer; transition: box-shadow .15s;
}
.image-card:hover { box-shadow: var(--shadow-2); }
.image-card img { width: 100%; aspect-ratio: 4 / 3; object-fit: cover; display: block; background: var(--surface-container-high); }
.image-card .cap { padding: 8px 10px; font-size: .8rem; }
.image-card .cap .t { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.image-card .cap .d { color: var(--on-surface-variant); font-size: .72rem; }
.vid-thumb { position: relative; }
.vid-thumb img { width: 100%; aspect-ratio: 16/9; object-fit: cover; border-radius: var(--radius-s); background: var(--surface-container-high); }
.vid-dur {
position: absolute; right: 6px; bottom: 6px; background: rgba(0, 0, 0, .75); color: #fff;
font-size: .72rem; border-radius: 6px; padding: 1px 6px;
}
.pager { display: flex; align-items: center; justify-content: center; gap: 14px; margin-top: 20px; }
.pager-info { color: var(--on-surface-variant); font-size: .85rem; }
.engine-report { margin-top: 20px; }
.report-head {
border: none; background: transparent; color: var(--on-surface-variant);
font-size: .95rem; cursor: pointer; padding: 4px 0;
}
.report-head:hover { color: var(--on-surface); }
.report-body { margin-top: 8px; overflow-x: auto; }
.report-table { border-collapse: collapse; width: 100%; font-size: .85rem; }
.report-table th, .report-table td { text-align: left; padding: 8px 12px; border-bottom: 1px solid var(--outline); }
.report-table th { color: var(--on-surface-variant); font-weight: 500; }
.st-ok { color: #2e7d32; font-weight: 500; }
.st-error { color: var(--error); font-weight: 500; }
.st-empty { color: var(--on-surface-variant); }
.err-cell { color: var(--on-surface-variant); word-break: break-word; max-width: 420px; }
[data-theme="dark"] .st-ok { color: #81c784; }
.page-title { font-size: 1.5rem; margin: 24px 0 4px; }
.page-sub { color: var(--on-surface-variant); font-size: .9rem; margin: 0 0 16px; }
.page-sub code { background: var(--surface-container-high); border-radius: 6px; padding: 1px 6px; font-size: .85em; }
.tool-tabs { margin-bottom: 16px; }
.tool-form { display: flex; gap: 8px; flex-wrap: wrap; align-items: center; margin-bottom: 12px; }
.tool-form .text-input.grow { flex: 1; min-width: 200px; }
.tool-h3 { margin: 12px 0 6px; font-size: .95rem; }
.row {
display: flex; gap: 12px; padding: 8px 12px; border-radius: var(--radius-s);
background: var(--surface-container); margin-bottom: 6px; align-items: baseline;
}
.row .k { flex: none; min-width: 110px; font-weight: 500; color: var(--primary); }
.row .v { color: var(--on-surface); word-break: break-word; }
.json-view, .extract-text {
background: var(--surface-container); border-radius: var(--radius);
padding: 16px 20px; font-size: .82rem; overflow: auto; max-height: 600px;
white-space: pre-wrap; word-break: break-word;
font-family: ui-monospace, "Cascadia Code", Menlo, Consolas, monospace;
}
.empty { text-align: center; color: var(--on-surface-variant); margin-top: 64px; }
.foot { text-align: center; color: var(--on-surface-variant); font-size: .78rem; padding: 24px 0 32px; }
.spinner {
width: 28px; height: 28px; margin: 48px auto; border-radius: 50%;
border: 3px solid var(--surface-container-high);
border-top-color: var(--primary); animation: spin .8s linear infinite;
}
.spinner.small { width: 18px; height: 18px; margin: 16px auto; }
@keyframes spin { to { transform: rotate(360deg); } }
.error-banner {
background: color-mix(in srgb, var(--error) 12%, transparent);
color: var(--error); border-radius: var(--radius-s); padding: 12px 16px; margin: 12px 0;
font-size: .9rem;
}
@media (max-width: 640px) {
main { width: min(100% - 24px, 960px); }
.hero { margin-top: 8px; }
}