Rafael Lopez

simplifica buscador unificando clasificadores

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
...@@ -97,73 +97,56 @@ ...@@ -97,73 +97,56 @@
97 $: hasMoreResults = results && allHits.length < results.found; 97 $: hasMoreResults = results && allHits.length < results.found;
98 98
99 // Modo de búsqueda 99 // Modo de búsqueda
100 - let searchMode = 'gastos'; // 'gastos' | 'ingresos' 100 + // Modo de búsqueda simplificado: 'programas' | 'clasificadores'
101 - let searchSubmode = 'programas'; // 'programas' | 'clasificadores' 101 + let searchMode = 'programas';
102 let selectedClassifiers = []; 102 let selectedClassifiers = [];
103 103
104 - const CLASIFICADORES_GASTOS = [ 104 + // Clasificadores unificados (transversales)
105 - { id: 'finfun', label: 'Finalidad y función' }, 105 + const CLASIFICADORES = [
106 - { id: 'objeto', label: 'Objetos de gasto' }, 106 + { id: 'entidad', label: 'Entidades', icon: '🏛️' },
107 - { id: 'acteco', label: 'Actividad económica' }, 107 + { id: 'objeto', label: 'Objetos de gasto', icon: '📦' },
108 - { id: 'entidad', label: 'Entidades' }, 108 + { id: 'finfun', label: 'Finalidad y función', icon: '🎯' },
109 - { id: 'geografico', label: 'Geográfico', disabled: true }, 109 + { id: 'geografico', label: 'Geográfico', icon: '📍', disabled: true },
110 + { id: 'rubro', label: 'Rubro', icon: '💰', disabled: true },
111 + { id: 'organismo', label: 'Organismo', icon: '🏦', disabled: true },
112 + { id: 'fuente', label: 'Fuente', icon: '💵', disabled: true },
110 ]; 113 ];
111 114
112 - const CLASIFICADORES_INGRESOS = [
113 - { id: 'rubro', label: 'Rubro', disabled: true },
114 - { id: 'organismo', label: 'Organismo', disabled: true },
115 - { id: 'fuente', label: 'Fuente', disabled: true },
116 - { id: 'entidad', label: 'Entidades' },
117 - { id: 'geografico',label: 'Geográfico', disabled: true },
118 - ];
119 -
120 - $: activeClasificadores = searchMode === 'gastos' ? CLASIFICADORES_GASTOS : CLASIFICADORES_INGRESOS;
121 -
122 function toggleClassifier(id) { 115 function toggleClassifier(id) {
123 if (selectedClassifiers.includes(id)) { 116 if (selectedClassifiers.includes(id)) {
124 selectedClassifiers = selectedClassifiers.filter(c => c !== id); 117 selectedClassifiers = selectedClassifiers.filter(c => c !== id);
125 } else { 118 } else {
126 selectedClassifiers = [...selectedClassifiers, id]; 119 selectedClassifiers = [...selectedClassifiers, id];
127 } 120 }
128 - // Mantener foco en el buscador 121 + // Cambiar a modo clasificadores si no estaba
122 + if (searchMode !== 'clasificadores') {
123 + searchMode = 'clasificadores';
124 + }
129 setTimeout(() => searchInput?.focus(), 10); 125 setTimeout(() => searchInput?.focus(), 10);
130 } 126 }
131 127
132 function setMode(mode) { 128 function setMode(mode) {
133 searchMode = mode; 129 searchMode = mode;
130 + if (mode === 'programas') {
134 selectedClassifiers = []; 131 selectedClassifiers = [];
135 - if (mode === 'gastos') {
136 - searchSubmode = 'programas';
137 - } else {
138 - searchSubmode = 'clasificadores';
139 } 132 }
140 } 133 }
141 134
142 - function setSubmode(sub) {
143 - searchSubmode = sub;
144 - selectedClassifiers = [];
145 - }
146 -
147 // Placeholder dinámico 135 // Placeholder dinámico
148 - $: placeholderText = getPlaceholderText(searchMode, searchSubmode, selectedClassifiers); 136 + $: placeholderText = getPlaceholderText(searchMode, selectedClassifiers);
149 137
150 - function getPlaceholderText(mode, submode, classifiers) { 138 + function getPlaceholderText(mode, classifiers) {
151 - if (mode === 'gastos') { 139 + if (mode === 'programas') {
152 - if (submode === 'programas') return 'Buscar gastos en programas y proyectos...'; 140 + return 'Buscar en programas y proyectos...';
153 - if (classifiers.length === 0) return 'Selecciona al menos un clasificador...'; 141 + }
154 - const nombres = classifiers.map(id => { 142 + if (classifiers.length === 0) {
155 - const clf = CLASIFICADORES_GASTOS.find(c => c.id === id); 143 + return 'Selecciona al menos un clasificador...';
156 - return clf?.label?.toLowerCase() || id; 144 + }
157 - }).join(', ');
158 - return `Buscar gastos en ${nombres}...`;
159 - } else {
160 - if (classifiers.length === 0) return 'Selecciona al menos un clasificador...';
161 const nombres = classifiers.map(id => { 145 const nombres = classifiers.map(id => {
162 - const clf = CLASIFICADORES_INGRESOS.find(c => c.id === id); 146 + const clf = CLASIFICADORES.find(c => c.id === id);
163 return clf?.label?.toLowerCase() || id; 147 return clf?.label?.toLowerCase() || id;
164 }).join(', '); 148 }).join(', ');
165 - return `Buscar ingresos en ${nombres}...`; 149 + return `Buscar en ${nombres}...`;
166 - }
167 } 150 }
168 151
169 // Debounce 152 // Debounce
...@@ -191,21 +174,32 @@ ...@@ -191,21 +174,32 @@
191 } 174 }
192 } 175 }
193 176
194 - // Ejemplos 177 + // Ejemplos para cada card
195 const EXAMPLES_PROGRAMAS = [ 178 const EXAMPLES_PROGRAMAS = [
196 - { label: 'Vía férrea Bulo Bulo', color: 'rgba(232,146,124,0.22)', textColor: '#E8927C' }, 179 + { label: 'Planta siderúrgica del Mutún' },
197 - { label: 'Siderúrgica del Mutún', color: 'rgba(160,165,185,0.18)', textColor: '#B8BDCC' }, 180 + { label: 'Aeropuerto internacional de Potosí' },
198 ]; 181 ];
199 182
200 - const EXAMPLES_ENTIDADES = [ 183 + const EXAMPLES_CLASIFICADORES = [
201 - { label: 'Fondo Indígena', color: 'rgba(126,184,216,0.22)', textColor: '#8EC8E8' }, 184 + { label: 'YPFB', classifier: 'entidad' },
202 - { label: 'YPFB', color: 'rgba(168,196,160,0.22)', textColor: '#B8D4B0' }, 185 + { label: 'viáticos', classifier: 'objeto' },
186 + { label: 'Ministerio de Salud', classifier: 'entidad' },
203 ]; 187 ];
204 188
205 - // Ejemplos dinámicos según selección 189 + // Función para buscar desde pills
206 - $: currentExamples = (selectedClassifiers.includes('entidad') && selectedClassifiers.length === 1) 190 + function searchFromPill(label, classifier = null) {
207 - ? EXAMPLES_ENTIDADES 191 + if (classifier) {
208 - : EXAMPLES_PROGRAMAS; 192 + searchMode = 'clasificadores';
193 + if (!selectedClassifiers.includes(classifier)) {
194 + selectedClassifiers = [classifier];
195 + }
196 + } else {
197 + searchMode = 'programas';
198 + }
199 + searchVal = label;
200 + performSearch(label);
201 + searchInput?.focus();
202 + }
209 203
210 // Datos para secciones 204 // Datos para secciones
211 const WIDGETS_INGRESOS = [ 205 const WIDGETS_INGRESOS = [
...@@ -294,12 +288,6 @@ ...@@ -294,12 +288,6 @@
294 return () => sectionObserver?.disconnect(); 288 return () => sectionObserver?.disconnect();
295 }); 289 });
296 290
297 - function searchExample(label) {
298 - searchVal = label;
299 - performSearch(label);
300 - searchInput?.focus();
301 - }
302 -
303 async function handleInput(e) { 291 async function handleInput(e) {
304 searchVal = e.target.value; 292 searchVal = e.target.value;
305 clearTimeout(debounceTimer); 293 clearTimeout(debounceTimer);
...@@ -317,8 +305,7 @@ ...@@ -317,8 +305,7 @@
317 return; 305 return;
318 } 306 }
319 307
320 - const needsClassifiers = searchMode === 'ingresos' || 308 + const needsClassifiers = searchMode === 'clasificadores';
321 - (searchMode === 'gastos' && searchSubmode === 'clasificadores');
322 if (needsClassifiers && selectedClassifiers.length === 0) { 309 if (needsClassifiers && selectedClassifiers.length === 0) {
323 results = null; 310 results = null;
324 error = null; 311 error = null;
...@@ -342,12 +329,11 @@ ...@@ -342,12 +329,11 @@
342 currentPage = page; 329 currentPage = page;
343 330
344 try { 331 try {
345 - const isClassSearch = searchMode === 'ingresos' || 332 + const isClassSearch = searchMode === 'clasificadores';
346 - (searchMode === 'gastos' && searchSubmode === 'clasificadores');
347 const params = new URLSearchParams({ 333 const params = new URLSearchParams({
348 q: query, 334 q: query,
349 is_class: isClassSearch ? 'true' : 'false', 335 is_class: isClassSearch ? 'true' : 'false',
350 - mode: searchMode, 336 + mode: 'gastos',
351 page: page.toString() 337 page: page.toString()
352 }); 338 });
353 // Para clasificadores, pedir más resultados para tener conteos precisos 339 // Para clasificadores, pedir más resultados para tener conteos precisos
...@@ -544,11 +530,10 @@ ...@@ -544,11 +530,10 @@
544 530
545 $: { 531 $: {
546 const _mode = searchMode; 532 const _mode = searchMode;
547 - const _submode = searchSubmode;
548 const _classifiers = selectedClassifiers; 533 const _classifiers = selectedClassifiers;
549 if (searchVal.length >= 3 && mounted) { 534 if (searchVal.length >= 3 && mounted) {
550 clearTimeout(debounceTimer); 535 clearTimeout(debounceTimer);
551 - const needsClassifiers = _mode === 'ingresos' || (_mode === 'gastos' && _submode === 'clasificadores'); 536 + const needsClassifiers = _mode === 'clasificadores';
552 if (!needsClassifiers || _classifiers.length > 0) { 537 if (!needsClassifiers || _classifiers.length > 0) {
553 debounceTimer = setTimeout(() => performSearch(searchVal), DEBOUNCE_MS); 538 debounceTimer = setTimeout(() => performSearch(searchVal), DEBOUNCE_MS);
554 } else { 539 } else {
...@@ -559,10 +544,6 @@ ...@@ -559,10 +544,6 @@
559 } 544 }
560 } 545 }
561 546
562 - // ¿Mostrar chips de clasificadores?
563 - $: showClassifierChips = searchMode === 'ingresos' ||
564 - (searchMode === 'gastos' && searchSubmode === 'clasificadores');
565 -
566 // ¿Hay búsqueda activa? 547 // ¿Hay búsqueda activa?
567 $: isSearching = searchVal.length >= 3; 548 $: isSearching = searchVal.length >= 3;
568 </script> 549 </script>
...@@ -574,7 +555,7 @@ ...@@ -574,7 +555,7 @@
574 <div class="page" class:mounted> 555 <div class="page" class:mounted>
575 556
576 <!-- Dots de navegación --> 557 <!-- Dots de navegación -->
577 - <nav class="section-dots"> 558 + <nav class="section-dots" class:section-dots-hidden={currentSection === 'hero'}>
578 {#each SECTIONS_NAV as s} 559 {#each SECTIONS_NAV as s}
579 <button 560 <button
580 class="section-dot" 561 class="section-dot"
...@@ -590,7 +571,7 @@ ...@@ -590,7 +571,7 @@
590 <!-- Hero --> 571 <!-- Hero -->
591 <main data-section="hero"> 572 <main data-section="hero">
592 573
593 - <div class="nav-logo"> 574 + <div class="nav-logo" class:nav-hidden={currentSection !== 'hero'}>
594 <img src="/logos_oscuro/05_Imago MEFP horizontal espacio negativo.png" alt="MEFP" /> 575 <img src="/logos_oscuro/05_Imago MEFP horizontal espacio negativo.png" alt="MEFP" />
595 </div> 576 </div>
596 577
...@@ -604,6 +585,9 @@ ...@@ -604,6 +585,9 @@
604 585
605 <div class="search-container anim" style="--d:200ms"> 586 <div class="search-container anim" style="--d:200ms">
606 587
588 + <!-- Ambient glow -->
589 + <div class="ambient-glow"></div>
590 +
607 <!-- Título --> 591 <!-- Título -->
608 <h1 class="hero-title" class:hero-collapsed={allHits.length > 0}> 592 <h1 class="hero-title" class:hero-collapsed={allHits.length > 0}>
609 Presupuesto <span class="gold">Abierto</span> 593 Presupuesto <span class="gold">Abierto</span>
...@@ -630,10 +614,11 @@ ...@@ -630,10 +614,11 @@
630 on:focus={() => searchFocused = true} 614 on:focus={() => searchFocused = true}
631 on:blur={() => searchFocused = false} 615 on:blur={() => searchFocused = false}
632 placeholder="" 616 placeholder=""
617 + class:has-text={searchVal.length > 0}
633 /> 618 />
634 {#if !searchVal} 619 {#if !searchVal}
635 <div class="search-placeholder"> 620 <div class="search-placeholder">
636 - <span class="blink-cursor" class:cursor-hidden={searchFocused}></span> 621 + <span class="blink-cursor"></span>
637 <span class="placeholder-text">{placeholderText}</span> 622 <span class="placeholder-text">{placeholderText}</span>
638 </div> 623 </div>
639 {/if} 624 {/if}
...@@ -650,114 +635,138 @@ ...@@ -650,114 +635,138 @@
650 </div> 635 </div>
651 </div> 636 </div>
652 637
653 - <!-- ─── FILTROS INLINE ─── --> 638 + <!-- ─── ÁREA DE RESULTADOS ─── -->
654 - <div class="filters-row" class:filters-hidden={isSearching}> 639 + <div class="results-area">
655 640
656 - <!-- Nivel 1: Segmented control Gastos / Ingresos --> 641 + <!-- ─── CARDS DE MODO (se tapan con resultados) ─── -->
657 - <div class="filter-level filter-level-1"> 642 + <div class="section-group" class:section-group-hidden={allHits.length > 0}>
658 - <div class="segmented-control"> 643 + <span class="section-label">Configura tu búsqueda</span>
659 - <button 644 + <div class="mode-cards">
660 - class="segment"
661 - class:segment-active={searchMode === 'gastos'}
662 - on:click={() => setMode('gastos')}
663 - >
664 - Gastos
665 - </button>
666 - <button
667 - class="segment"
668 - class:segment-active={searchMode === 'ingresos'}
669 - on:click={() => setMode('ingresos')}
670 - >
671 - Ingresos
672 - </button>
673 - </div>
674 645
675 - <!-- Nivel 2: Segmented control Programas / Clasificadores (solo Gastos) --> 646 + <!-- Card: Programas y Proyectos -->
676 - {#if searchMode === 'gastos'} 647 + <div
677 - <div class="segmented-control segmented-control-secondary"> 648 + class="mode-card"
678 - <button 649 + class:mode-card-active={searchMode === 'programas'}
679 - class="segment segment-secondary" 650 + on:click={() => setMode('programas')}
680 - class:segment-active={searchSubmode === 'programas'} 651 + on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && setMode('programas')}
681 - on:click={() => setSubmode('programas')} 652 + role="button"
653 + tabindex="0"
682 > 654 >
683 - Programas y proyectos 655 + <div class="mode-card-header">
684 - </button> 656 + <span class="mode-card-icon">
685 - <button 657 + <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
686 - class="segment segment-secondary" 658 + <rect x="3" y="3" width="7" height="7" rx="1"/>
687 - class:segment-active={searchSubmode === 'clasificadores'} 659 + <rect x="14" y="3" width="7" height="7" rx="1"/>
688 - on:click={() => setSubmode('clasificadores')} 660 + <rect x="3" y="14" width="7" height="7" rx="1"/>
661 + <rect x="14" y="14" width="7" height="7" rx="1"/>
662 + </svg>
663 + </span>
664 + <span class="mode-card-title">Programas y Proyectos</span>
665 + </div>
666 + <p class="mode-card-desc">
667 + <strong>735k+</strong> proyectos y programas (2016-2025). Para encontrar iniciativas específicas.
668 + </p>
669 + <div class="mode-card-pills">
670 + <span class="pills-hint"><span class="hint-desktop">Ej:</span><span class="hint-mobile">Ej:</span></span>
671 + {#each EXAMPLES_PROGRAMAS as ex}
672 + <span
673 + class="mode-pill"
674 + on:click|stopPropagation={() => searchFromPill(ex.label)}
675 + on:keydown={(e) => e.key === 'Enter' && searchFromPill(ex.label)}
676 + role="button"
677 + tabindex="0"
689 > 678 >
690 - Clasificadores 679 + {ex.label}
691 - </button> 680 + </span>
681 + {/each}
682 + </div>
683 + <div class="mode-card-radio">
684 + <span class="radio-dot" class:radio-dot-active={searchMode === 'programas'}></span>
692 </div> 685 </div>
693 - {/if}
694 </div> 686 </div>
695 687
696 - <!-- Nivel 3: Clasificadores con checkboxes (cuando aplica) --> 688 + <!-- Card: Clasificadores -->
697 - {#if showClassifierChips} 689 + <div
698 - <div class="filter-level filter-level-2"> 690 + class="mode-card"
699 - <span class="filter-level-label">Selecciona clasificadores:</span> 691 + class:mode-card-active={searchMode === 'clasificadores'}
700 - <div class="checkbox-group"> 692 + on:click={() => setMode('clasificadores')}
701 - {#each activeClasificadores as clf} 693 + on:keydown={(e) => (e.key === 'Enter' || e.key === ' ') && setMode('clasificadores')}
694 + role="button"
695 + tabindex="0"
696 + >
697 + <div class="mode-card-header">
698 + <span class="mode-card-icon">
699 + <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
700 + <path d="M4 4h6l2 2h8a1 1 0 0 1 1 1v10a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V5a1 1 0 0 1 1-1z"/>
701 + <path d="M9 13h6"/>
702 + <path d="M9 17h4"/>
703 + </svg>
704 + </span>
705 + <span class="mode-card-title">Clasificadores</span>
706 + </div>
707 + <p class="mode-card-desc">
708 + <strong>2500+</strong> categorías de gasto e ingreso (2006-2025). Para comparar y analizar tendencias.
709 + </p>
710 + <div class="mode-card-classifiers">
711 + {#each CLASIFICADORES as clf}
702 <button 712 <button
703 - class="checkbox-chip" 713 + class="clf-chip"
704 - class:checkbox-chip-active={selectedClassifiers.includes(clf.id)} 714 + class:clf-chip-active={selectedClassifiers.includes(clf.id)}
705 - class:checkbox-chip-disabled={clf.disabled} 715 + class:clf-chip-disabled={clf.disabled}
706 - on:click={() => { if (!clf.disabled) toggleClassifier(clf.id); }} 716 + on:click|stopPropagation={() => { if (!clf.disabled) toggleClassifier(clf.id); }}
707 disabled={clf.disabled} 717 disabled={clf.disabled}
708 > 718 >
709 - <span class="checkbox-box"> 719 + <span class="clf-check">
710 {#if selectedClassifiers.includes(clf.id)} 720 {#if selectedClassifiers.includes(clf.id)}
711 - <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="#FFFFFF" stroke-width="3" stroke-linecap="round" stroke-linejoin="round"> 721 + <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
712 <polyline points="20 6 9 17 4 12"/> 722 <polyline points="20 6 9 17 4 12"/>
713 </svg> 723 </svg>
714 {/if} 724 {/if}
715 </span> 725 </span>
716 - <span class="checkbox-label">{clf.label}</span> 726 + <span class="clf-label">{clf.label}</span>
717 </button> 727 </button>
718 {/each} 728 {/each}
719 </div> 729 </div>
720 - </div> 730 + <div class="mode-card-pills">
721 - {/if} 731 + {#each EXAMPLES_CLASIFICADORES as ex}
722 - </div> 732 + <span
723 - 733 + class="mode-pill"
724 - <!-- ─── ÁREA DE RESULTADOS / EJEMPLOS / HINT ─── --> 734 + on:click|stopPropagation={() => searchFromPill(ex.label, ex.classifier)}
725 - <div class="results-area"> 735 + on:keydown={(e) => e.key === 'Enter' && searchFromPill(ex.label, ex.classifier)}
726 - 736 + role="button"
727 - <!-- Ejemplos --> 737 + tabindex="0"
728 - <div class="examples" class:examples-hidden={isSearching}>
729 - <span class="examples-label">Ej.:</span>
730 - {#each currentExamples as ex}
731 - <button
732 - class="example-chip"
733 - style="background:{ex.color}; color:{ex.textColor}"
734 - on:click={() => searchExample(ex.label)}
735 > 738 >
736 {ex.label} 739 {ex.label}
737 - </button> 740 + </span>
738 {/each} 741 {/each}
739 </div> 742 </div>
743 + <div class="mode-card-radio">
744 + <span class="radio-dot" class:radio-dot-active={searchMode === 'clasificadores'}></span>
745 + </div>
746 + </div>
747 + </div>
740 748
741 - <!-- Hint diario --> 749 + <!-- Sección: Ir a -->
742 - {#if !isSearching && !dailyLoading} 750 + <span class="section-label section-label-goto">Ir a</span>
743 - <a 751 + <a href="/vista-diaria" class="daily-card">
744 - href="/vista-diaria" 752 + <div class="daily-card-left">
745 - class="daily-hint"
746 - class:daily-hint-visible={!isSearching}
747 - >
748 <span class="daily-dot"></span> 753 <span class="daily-dot"></span>
749 - <span class="daily-text"> 754 + <span class="daily-card-title">Vista diaria</span>
750 - {#if dailyData} 755 + </div>
751 - Ayer el Estado ejecutó <strong>{formatMonto(dailyData.monto)}</strong> 756 + <div class="daily-card-content">
757 + {#if !dailyLoading && dailyData}
758 + <span class="daily-card-text">Ayer el Estado ejecutó <strong>{formatMonto(dailyData.monto)}</strong></span>
759 + {:else if !dailyLoading}
760 + <span class="daily-card-text">Ver el resumen de ejecución de ayer</span>
752 {:else} 761 {:else}
753 - Ver el resumen de ejecución de ayer 762 + <span class="daily-card-text">Cargando datos...</span>
754 {/if} 763 {/if}
755 - </span> 764 + </div>
756 - <svg width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"> 765 + <svg class="daily-card-arrow" width="16" height="16" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
757 <path d="M5 12h14M12 5l7 7-7 7"/> 766 <path d="M5 12h14M12 5l7 7-7 7"/>
758 </svg> 767 </svg>
759 </a> 768 </a>
760 - {/if} 769 + </div>
761 770
762 <!-- Estados de búsqueda (mensajes) --> 771 <!-- Estados de búsqueda (mensajes) -->
763 {#if showMinLengthHint && searchVal.length > 0 && searchVal.length < 3} 772 {#if showMinLengthHint && searchVal.length > 0 && searchVal.length < 3}
...@@ -1341,7 +1350,8 @@ ...@@ -1341,7 +1350,8 @@
1341 .page{--serif:'Qanelas',system-ui,sans-serif;--sans:'Qanelas',system-ui,sans-serif;--mono:'JetBrains Mono',monospace;font-family:var(--serif);color:#1C1C1A;width:100%;min-width:100%;overflow-x:hidden;scroll-snap-type:y mandatory;overflow-y:scroll;height:100vh} 1350 .page{--serif:'Qanelas',system-ui,sans-serif;--sans:'Qanelas',system-ui,sans-serif;--mono:'JetBrains Mono',monospace;font-family:var(--serif);color:#1C1C1A;width:100%;min-width:100%;overflow-x:hidden;scroll-snap-type:y mandatory;overflow-y:scroll;height:100vh}
1342 1351
1343 /* Section Navigation Dots */ 1352 /* Section Navigation Dots */
1344 - .section-dots{position:fixed;right:24px;top:50%;transform:translateY(-50%);z-index:100;display:flex;flex-direction:column;gap:12px;background:rgba(255,255,255,0.1);backdrop-filter:blur(8px);padding:12px 8px;border-radius:20px} 1353 + .section-dots{position:fixed;right:24px;top:50%;transform:translateY(-50%);z-index:100;display:flex;flex-direction:column;gap:12px;background:rgba(255,255,255,0.1);backdrop-filter:blur(8px);padding:12px 8px;border-radius:20px;transition:opacity 0.4s ease,transform 0.4s ease}
1354 + .section-dots-hidden{opacity:0;pointer-events:none;transform:translateY(-50%) translateX(20px)}
1345 .section-dot{width:10px;height:10px;border-radius:50%;border:1.5px solid rgba(100,100,100,0.4);background:rgba(150,150,150,0.2);cursor:pointer;transition:all 0.3s;padding:0;position:relative} 1355 .section-dot{width:10px;height:10px;border-radius:50%;border:1.5px solid rgba(100,100,100,0.4);background:rgba(150,150,150,0.2);cursor:pointer;transition:all 0.3s;padding:0;position:relative}
1346 .section-dot:hover{border-color:rgba(100,100,100,0.6);background:rgba(150,150,150,0.4);transform:scale(1.2)} 1356 .section-dot:hover{border-color:rgba(100,100,100,0.6);background:rgba(150,150,150,0.4);transform:scale(1.2)}
1347 .section-dot-active{background:#C9A751;border-color:#C9A751} 1357 .section-dot-active{background:#C9A751;border-color:#C9A751}
...@@ -1411,7 +1421,8 @@ ...@@ -1411,7 +1421,8 @@
1411 .search-divider{width:1px;height:32px;background:rgba(255,255,255,0.08);margin:0 16px;flex-shrink:0} 1421 .search-divider{width:1px;height:32px;background:rgba(255,255,255,0.08);margin:0 16px;flex-shrink:0}
1412 .search-icon{flex-shrink:0;transition:stroke 0.3s;margin-left:4px} 1422 .search-icon{flex-shrink:0;transition:stroke 0.3s;margin-left:4px}
1413 .search-input-wrap{flex:1;position:relative;display:flex;align-items:center} 1423 .search-input-wrap{flex:1;position:relative;display:flex;align-items:center}
1414 - .search-input-wrap input{width:100%;background:transparent;border:none;outline:none;color:#FFFFFF;font-size:22px;font-weight:500;font-family:var(--sans);padding:14px 12px 14px 10px;caret-color:#F0C14D;letter-spacing:-0.01em} 1424 + .search-input-wrap input{width:100%;background:transparent;border:none;outline:none;color:#FFFFFF;font-size:22px;font-weight:500;font-family:var(--sans);padding:14px 12px 14px 10px;caret-color:transparent;letter-spacing:-0.01em}
1425 + .search-input-wrap input.has-text{caret-color:#FFFFFF}
1415 .search-placeholder{position:absolute;left:10px;top:50%;transform:translateY(-50%);display:flex;align-items:center;pointer-events:none} 1426 .search-placeholder{position:absolute;left:10px;top:50%;transform:translateY(-50%);display:flex;align-items:center;pointer-events:none}
1416 .blink-cursor{width:2px;height:20px;margin-right:2px;animation:blink 1s step-end infinite;border-radius:1px;flex-shrink:0;background:#F0C14D} 1427 .blink-cursor{width:2px;height:20px;margin-right:2px;animation:blink 1s step-end infinite;border-radius:1px;flex-shrink:0;background:#F0C14D}
1417 .cursor-hidden{opacity:0} 1428 .cursor-hidden{opacity:0}
...@@ -1495,61 +1506,77 @@ ...@@ -1495,61 +1506,77 @@
1495 .scroll-icon-touch{display:none} 1506 .scroll-icon-touch{display:none}
1496 1507
1497 /* ── NEW SEARCH STYLES ── */ 1508 /* ── NEW SEARCH STYLES ── */
1498 - .search-container{width:100%;max-width:900px;margin:0 auto;padding:0 24px;display:flex;flex-direction:column;align-items:center;flex:1;justify-content:center} 1509 + .search-container{width:100%;max-width:900px;margin:0 auto;padding:0 24px;display:flex;flex-direction:column;align-items:center;flex:1;justify-content:center;position:relative}
1499 - .hero-title{font-size:clamp(44px,5.5vw,72px);font-weight:900;line-height:1.02;letter-spacing:-0.035em;color:#F5F0E8;text-align:center;transition:all 0.4s cubic-bezier(0.16,1,0.3,1);margin-bottom:4px} 1510 +
1500 - .hero-sub{font-family:var(--sans);font-size:clamp(16px,1.6vw,18px);color:#D0CCC4;text-align:center;line-height:1.6;transition:all 0.4s cubic-bezier(0.16,1,0.3,1);margin-bottom:32px;margin-top:0} 1511 + /* Ambient glow - subtle premium lighting */
1512 + .ambient-glow{position:absolute;top:50%;left:50%;transform:translate(-50%,-60%);width:140%;max-width:1200px;aspect-ratio:1.5;background:radial-gradient(ellipse at center,rgba(240,193,77,0.06) 0%,rgba(240,193,77,0.02) 35%,transparent 70%);pointer-events:none;z-index:0}
1513 +
1514 + .hero-title{font-family:var(--sans);font-size:clamp(44px,5.5vw,72px);font-weight:900;line-height:1.02;letter-spacing:-0.035em;color:#F5F0E8;text-align:center;transition:all 0.4s cubic-bezier(0.16,1,0.3,1);margin-bottom:4px;position:relative;z-index:1}
1515 + .hero-sub{font-family:var(--sans);font-size:clamp(16px,1.6vw,18px);color:#D0CCC4;text-align:center;line-height:1.6;transition:all 0.4s cubic-bezier(0.16,1,0.3,1);margin-bottom:32px;margin-top:0;position:relative;z-index:1}
1501 .hero-collapsed{opacity:0;height:0;margin:0;overflow:hidden;pointer-events:none} 1516 .hero-collapsed{opacity:0;height:0;margin:0;overflow:hidden;pointer-events:none}
1502 .cursor-hidden{opacity:0} 1517 .cursor-hidden{opacity:0}
1503 1518
1504 - /* Filters */ 1519 + /* Section Group */
1505 - .filters-row{display:flex;flex-direction:column;gap:16px;margin-top:20px;transition:all 0.3s cubic-bezier(0.16,1,0.3,1)} 1520 + .section-group{margin-top:16px;transition:all 0.4s cubic-bezier(0.16,1,0.3,1)}
1506 - .filters-hidden{opacity:0;height:0;margin:0;overflow:hidden;pointer-events:none} 1521 + .section-group-hidden{opacity:0;pointer-events:none;position:absolute;z-index:-1}
1507 - .filter-level{display:flex;align-items:center;gap:12px;flex-wrap:wrap;justify-content:center} 1522 + .section-label{display:block;font-family:var(--sans);font-size:10px;font-weight:500;color:#6B6860;text-transform:uppercase;letter-spacing:0.08em;margin-bottom:8px;padding-left:4px}
1508 - .filter-level-1{justify-content:center} 1523 + .section-label-goto{margin-top:12px}
1509 - .filter-level-2{flex-direction:column;gap:8px} 1524 +
1510 - .filter-level-label{font-family:var(--mono);font-size:11px;letter-spacing:0.08em;color:#9B9890} 1525 + /* Mode Cards */
1511 - 1526 + .mode-cards{display:grid;grid-template-columns:1fr 1fr;gap:12px}
1512 - /* Segmented Control */ 1527 +
1513 - .segmented-control{display:inline-flex;background:rgba(255,255,255,0.06);border-radius:10px;padding:4px;gap:2px} 1528 + .mode-card{background:rgba(255,255,255,0.03);border:1px solid rgba(255,255,255,0.08);border-radius:16px;padding:16px 18px;text-align:left;cursor:pointer;transition:all 0.3s cubic-bezier(0.16,1,0.3,1);position:relative;display:flex;flex-direction:column;gap:8px}
1514 - .segmented-control-secondary{background:rgba(255,255,255,0.04)} 1529 + .mode-card:hover{background:rgba(255,255,255,0.05);border-color:rgba(255,255,255,0.12);transform:translateY(-2px)}
1515 - .segment{font-family:var(--sans);font-size:14px;font-weight:500;color:#8B8880;padding:10px 20px;border:none;background:transparent;border-radius:8px;cursor:pointer;transition:all 0.2s} 1530 + .mode-card-active{background:rgba(240,193,77,0.06);border-color:rgba(240,193,77,0.25);box-shadow:0 8px 32px rgba(0,0,0,0.2),0 0 0 1px rgba(240,193,77,0.1)}
1516 - .segment:hover{color:#B8B5AD} 1531 + .mode-card-active:hover{background:rgba(240,193,77,0.08);border-color:rgba(240,193,77,0.35)}
1517 - .segment-active{background:rgba(255,255,255,0.12);color:#F5F0E8} 1532 +
1518 - .segment-secondary{font-size:13px;padding:8px 16px} 1533 + .mode-card-header{display:flex;align-items:center;gap:10px}
1519 - 1534 + .mode-card-icon{display:flex;align-items:center;justify-content:center;color:#9B9890;transition:color 0.3s}
1520 - /* Checkbox Chips */ 1535 + .mode-card:hover .mode-card-icon{color:#D0CCC4}
1521 - .checkbox-group{display:flex;flex-wrap:wrap;gap:8px;justify-content:center} 1536 + .mode-card-active .mode-card-icon{color:#F0C14D}
1522 - .checkbox-chip{display:flex;align-items:center;gap:8px;padding:8px 14px;border-radius:20px;background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.08);cursor:pointer;transition:all 0.2s;font-family:var(--sans);font-size:13px;color:#8B8880} 1537 + .mode-card-title{font-family:var(--sans);font-size:16px;font-weight:600;color:#F5F0E8;letter-spacing:-0.01em}
1523 - .checkbox-chip:hover{background:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.12)} 1538 +
1524 - .checkbox-chip-active{background:rgba(74,139,110,0.15);border-color:rgba(74,139,110,0.4);color:#5AAF8A} 1539 + .mode-card-desc{font-family:var(--sans);font-size:13px;color:#9B9890;line-height:1.5;margin:0}
1525 - .checkbox-chip-disabled{opacity:0.4;cursor:not-allowed} 1540 + .mode-card-desc strong{color:#D0CCC4;font-weight:600}
1526 - .checkbox-chip-disabled:hover{background:rgba(255,255,255,0.04);border-color:rgba(255,255,255,0.08)} 1541 +
1527 - .checkbox-box{width:16px;height:16px;border-radius:4px;border:1.5px solid rgba(255,255,255,0.2);display:flex;align-items:center;justify-content:center;transition:all 0.2s;flex-shrink:0} 1542 + .mode-card-classifiers{display:flex;flex-wrap:wrap;gap:6px;margin-top:4px}
1528 - .checkbox-chip-active .checkbox-box{background:#4A8B6E;border-color:#4A8B6E} 1543 +
1529 - .checkbox-label{line-height:1} 1544 + .clf-chip{display:inline-flex;align-items:center;gap:6px;padding:6px 12px;border-radius:8px;background:rgba(255,255,255,0.04);border:1px solid rgba(255,255,255,0.08);cursor:pointer;transition:all 0.2s;font-family:var(--sans);font-size:12px;color:#8B8880}
1530 - .chip-soon{font-family:var(--mono);font-size:9px;letter-spacing:0.05em;color:#6B6860;background:rgba(255,255,255,0.06);padding:2px 6px;border-radius:4px;margin-left:4px} 1545 + .clf-chip:hover{background:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.15)}
1546 + .clf-chip-active{background:rgba(90,175,138,0.15);border-color:rgba(90,175,138,0.4);color:#5AAF8A}
1547 + .clf-chip-disabled{opacity:0.35;cursor:not-allowed}
1548 + .clf-chip-disabled:hover{background:rgba(255,255,255,0.04);border-color:rgba(255,255,255,0.08)}
1549 + .clf-check{width:14px;height:14px;border-radius:4px;border:1.5px solid rgba(255,255,255,0.2);display:flex;align-items:center;justify-content:center;transition:all 0.2s;flex-shrink:0}
1550 + .clf-chip-active .clf-check{background:#4A8B6E;border-color:#4A8B6E}
1551 + .clf-label{line-height:1}
1552 +
1553 + .mode-card-pills{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;align-items:center}
1554 + .pills-hint{font-family:var(--sans);font-size:10px;color:#7B7870;font-weight:500}
1555 + .hint-desktop{display:inline}
1556 + .hint-mobile{display:none}
1557 + .mode-pill{font-family:var(--sans);font-size:11px;font-weight:500;padding:5px 10px;border-radius:8px;cursor:pointer;transition:all 0.2s;border:1px solid rgba(255,255,255,0.15);background:rgba(255,255,255,0.06);color:#D0CCC4}
1558 + .mode-pill:hover{background:rgba(255,255,255,0.12);border-color:rgba(255,255,255,0.25);color:#F5F0E8}
1559 +
1560 + .mode-card-radio{position:absolute;top:16px;right:16px}
1561 + .radio-dot{width:18px;height:18px;border-radius:50%;border:2px solid rgba(255,255,255,0.2);display:block;transition:all 0.2s;position:relative}
1562 + .radio-dot::after{content:'';position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);width:8px;height:8px;border-radius:50%;background:#F0C14D;opacity:0;transition:all 0.2s}
1563 + .radio-dot-active{border-color:#F0C14D}
1564 + .radio-dot-active::after{opacity:1}
1531 1565
1532 /* Results Area */ 1566 /* Results Area */
1533 - .results-area{width:100%;margin-top:24px;position:relative;min-height:60px;text-align:center} 1567 + .results-area{width:100%;position:relative;min-height:60px;text-align:center}
1534 - .area-spacer{height:100px;transition:height 0.3s} 1568 +
1535 - .area-spacer-hidden{height:0} 1569 + /* Daily Card */
1536 - 1570 + .daily-card{display:flex;align-items:center;gap:12px;padding:14px 18px;background:rgba(232,168,76,0.04);border:1px solid rgba(232,168,76,0.15);border-radius:12px;text-decoration:none;transition:all 0.3s cubic-bezier(0.16,1,0.3,1)}
1537 - /* Examples */ 1571 + .daily-card:hover{background:rgba(232,168,76,0.08);border-color:rgba(232,168,76,0.3);transform:translateY(-2px)}
1538 - .examples{display:flex;align-items:center;gap:10px;flex-wrap:wrap;justify-content:center;transition:all 0.3s} 1572 + .daily-card-left{display:flex;align-items:center;gap:10px;flex-shrink:0}
1539 - .examples-hidden{opacity:0;height:0;overflow:hidden;pointer-events:none} 1573 + .daily-dot{width:8px;height:8px;border-radius:50%;background:#E8A84C;animation:pulse 2s ease-in-out infinite;flex-shrink:0;box-shadow:0 0 10px rgba(232,168,76,0.5)}
1540 - .examples-label{font-family:var(--mono);font-size:11px;letter-spacing:0.08em;color:#9B9890} 1574 + .daily-card-title{font-family:var(--sans);font-size:15px;font-weight:600;color:#E8A84C;letter-spacing:-0.01em}
1541 - .example-chip{font-family:var(--sans);font-size:13px;font-weight:500;padding:8px 14px;border-radius:20px;border:1px solid rgba(255,255,255,0.1);cursor:pointer;transition:all 0.2s} 1575 + .daily-card-content{flex:1;text-align:left}
1542 - .example-chip:hover{transform:translateY(-2px);box-shadow:0 4px 12px rgba(0,0,0,0.3)} 1576 + .daily-card-text{font-family:var(--sans);font-size:13px;color:#9B9890}
1543 - 1577 + .daily-card-text strong{color:#D4A84C;font-weight:600}
1544 - /* Daily Hint */ 1578 + .daily-card-arrow{color:#E8A84C;opacity:0.5;transition:all 0.2s;flex-shrink:0}
1545 - .daily-hint{display:inline-flex;align-items:center;gap:8px;margin-top:28px;padding:8px 14px;background:transparent;border:1px solid rgba(74,139,110,0.25);border-radius:20px;transition:all 0.3s;opacity:0;transform:translateY(10px);text-decoration:none;font-size:13px} 1579 + .daily-card:hover .daily-card-arrow{opacity:1;transform:translateX(4px)}
1546 - .daily-hint-visible{opacity:1;transform:translateY(0)}
1547 - .daily-hint:hover{background:rgba(74,139,110,0.08);border-color:rgba(74,139,110,0.4)}
1548 - .daily-dot{width:6px;height:6px;border-radius:50%;background:#E8A84C;animation:pulse 2s ease-in-out infinite;flex-shrink:0;box-shadow:0 0 8px rgba(232,168,76,0.4)}
1549 - .daily-text{font-family:var(--sans);font-size:12px;color:#9B9890}
1550 - .daily-text strong{color:#4A8B6E}
1551 - .daily-hint svg{color:#4A8B6E;opacity:0.6;transition:all 0.2s}
1552 - .daily-hint:hover svg{opacity:1;transform:translateX(3px)}
1553 1580
1554 /* Results Messages */ 1581 /* Results Messages */
1555 .results-message{text-align:center;padding:20px} 1582 .results-message{text-align:center;padding:20px}
...@@ -1559,7 +1586,7 @@ ...@@ -1559,7 +1586,7 @@
1559 1586
1560 /* Results Content */ 1587 /* Results Content */
1561 .results-content{max-height:0;overflow:hidden;opacity:0;transition:all 0.4s cubic-bezier(0.16,1,0.3,1)} 1588 .results-content{max-height:0;overflow:hidden;opacity:0;transition:all 0.4s cubic-bezier(0.16,1,0.3,1)}
1562 - .results-content-visible{max-height:60vh;overflow-y:auto;opacity:1;background:transparent;border-radius:0;border:none;padding:14px 10px;text-align:left} 1589 + .results-content-visible{max-height:60vh;overflow-y:auto;opacity:1;background:#1C1C1A;border-radius:16px;border:none;padding:14px 10px;text-align:left;position:relative;z-index:10}
1563 1590
1564 /* Results Summary */ 1591 /* Results Summary */
1565 .results-summary{background:transparent;border-radius:0;padding:0 0 12px 0;margin-bottom:12px;border-bottom:1px solid rgba(255,255,255,0.08)} 1592 .results-summary{background:transparent;border-radius:0;padding:0 0 12px 0;margin-bottom:12px;border-bottom:1px solid rgba(255,255,255,0.08)}
...@@ -1620,9 +1647,10 @@ ...@@ -1620,9 +1647,10 @@
1620 .search-loading{display:flex;align-items:center;justify-content:center} 1647 .search-loading{display:flex;align-items:center;justify-content:center}
1621 1648
1622 /* Nav elements in hero */ 1649 /* Nav elements in hero */
1623 - main[data-section="hero"] .nav-logo{position:absolute;top:24px;left:24px} 1650 + main[data-section="hero"] .nav-logo{position:fixed;top:24px;left:24px;z-index:100;transition:opacity 0.4s ease,transform 0.4s ease}
1624 - .nav-menu-btn{position:absolute;top:24px;right:24px;background:rgba(255,255,255,0.06);border:none;border-radius:10px;width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#B8B5AD;transition:all 0.2s} 1651 + .nav-menu-btn{position:fixed;top:24px;right:24px;z-index:100;background:rgba(255,255,255,0.06);border:none;border-radius:10px;width:44px;height:44px;display:flex;align-items:center;justify-content:center;cursor:pointer;color:#B8B5AD;transition:all 0.3s ease}
1625 .nav-menu-btn:hover{background:rgba(255,255,255,0.1);color:#F5F0E8} 1652 .nav-menu-btn:hover{background:rgba(255,255,255,0.1);color:#F5F0E8}
1653 + .nav-hidden{opacity:0;pointer-events:none;transform:translateY(-10px)}
1626 1654
1627 /* ── DIRECTORY ── */ 1655 /* ── DIRECTORY ── */
1628 .directory{background:#f5f5f7;min-height:100vh;display:flex;align-items:center;scroll-snap-align:start;scroll-snap-stop:always;padding:48px} 1656 .directory{background:#f5f5f7;min-height:100vh;display:flex;align-items:center;scroll-snap-align:start;scroll-snap-stop:always;padding:48px}
...@@ -1805,6 +1833,7 @@ ...@@ -1805,6 +1833,7 @@
1805 1833
1806 /* Section dots - bottom horizontal bar */ 1834 /* Section dots - bottom horizontal bar */
1807 .section-dots{position:fixed;right:auto;left:50%;top:auto;bottom:20px;transform:translateX(-50%);flex-direction:row;gap:10px;padding:12px 20px;border-radius:24px;background:rgba(28,28,26,0.7);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,0.1);z-index:1000} 1835 .section-dots{position:fixed;right:auto;left:50%;top:auto;bottom:20px;transform:translateX(-50%);flex-direction:row;gap:10px;padding:12px 20px;border-radius:24px;background:rgba(28,28,26,0.7);backdrop-filter:blur(20px);-webkit-backdrop-filter:blur(20px);border:1px solid rgba(255,255,255,0.1);z-index:1000}
1836 + .section-dots-hidden{transform:translateX(-50%) translateY(30px)}
1808 .section-dot{width:8px;height:8px} 1837 .section-dot{width:8px;height:8px}
1809 .section-dot-label{display:none} 1838 .section-dot-label{display:none}
1810 1839
...@@ -1850,20 +1879,28 @@ ...@@ -1850,20 +1879,28 @@
1850 .search-container{padding:0 16px;justify-content:flex-start;padding-top:100px} 1879 .search-container{padding:0 16px;justify-content:flex-start;padding-top:100px}
1851 .hero-title{font-size:clamp(38px,9vw,52px);margin-bottom:4px} 1880 .hero-title{font-size:clamp(38px,9vw,52px);margin-bottom:4px}
1852 .hero-sub{font-size:14px;margin-bottom:20px} 1881 .hero-sub{font-size:14px;margin-bottom:20px}
1853 - .filters-row{gap:12px;margin-top:16px} 1882 + .section-group{margin-top:16px}
1854 - .filter-level{flex-direction:column;gap:8px} 1883 + .section-label{font-size:10px;margin-bottom:10px}
1855 - .segmented-control{width:auto;justify-content:center} 1884 + .section-label-goto{margin-top:16px}
1856 - .segment{text-align:center;padding:10px 16px;font-size:13px} 1885 + .mode-cards{grid-template-columns:1fr;gap:12px}
1857 - .checkbox-group{justify-content:flex-start} 1886 + .mode-card{padding:18px;gap:10px;border-radius:16px}
1858 - .checkbox-chip{font-size:12px;padding:6px 12px} 1887 + .mode-card-title{font-size:15px}
1859 - .examples{flex-direction:row;gap:8px;margin-top:16px} 1888 + .mode-card-desc{font-size:12px}
1860 - .examples-label{display:inline;font-size:10px} 1889 + .clf-chip{padding:5px 10px;font-size:11px}
1861 - .example-chip{font-size:12px;padding:6px 12px} 1890 + .clf-check{width:12px;height:12px}
1891 + .mode-pill{font-size:12px;padding:7px 12px}
1892 + .hint-desktop{display:none}
1893 + .hint-mobile{display:inline}
1894 + .pills-hint{font-size:11px}
1895 + .pills-list{gap:5px}
1896 + .mode-card-radio{top:14px;right:14px}
1897 + .radio-dot{width:16px;height:16px}
1862 .results-area{margin-top:4px;min-height:40px} 1898 .results-area{margin-top:4px;min-height:40px}
1863 .results-content-visible{padding:2px 4px} 1899 .results-content-visible{padding:2px 4px}
1864 .search-wrap-with-results{padding:2px} 1900 .search-wrap-with-results{padding:2px}
1865 - .daily-hint{padding:10px 14px;gap:8px} 1901 + .daily-card{padding:16px 18px;gap:12px;border-radius:14px}
1866 - .daily-text{font-size:13px} 1902 + .daily-card-title{font-size:14px}
1903 + .daily-card-text{font-size:12px}
1867 .results-summary{padding:4px 0} 1904 .results-summary{padding:4px 0}
1868 .summary-row{flex-direction:row;gap:6px;flex-wrap:nowrap} 1905 .summary-row{flex-direction:row;gap:6px;flex-wrap:nowrap}
1869 .summary-stats{gap:2px;flex:1} 1906 .summary-stats{gap:2px;flex:1}
...@@ -1975,23 +2012,30 @@ ...@@ -1975,23 +2012,30 @@
1975 .placeholder-text{font-size:12px} 2012 .placeholder-text{font-size:12px}
1976 .hero-title{font-size:clamp(34px,10vw,44px)} 2013 .hero-title{font-size:clamp(34px,10vw,44px)}
1977 .hero-sub{font-size:13px;margin-bottom:16px} 2014 .hero-sub{font-size:13px;margin-bottom:16px}
1978 - .examples-label{font-size:9px} 2015 + main[data-section="hero"] .nav-logo{top:16px;left:16px;height:56px}
1979 - main[data-section="hero"] .nav-logo{top:16px;left:16px;height:60px} 2016 + .nav-menu-btn{top:16px;right:16px;width:38px;height:38px}
1980 - .nav-menu-btn{top:16px;right:16px;width:40px;height:40px} 2017 + .mode-cards{gap:10px;margin-top:12px}
1981 - .segmented-control{padding:3px} 2018 + .mode-card{padding:14px;gap:8px;border-radius:14px}
1982 - .segment{padding:8px 10px;font-size:12px} 2019 + .mode-card-icon svg{width:18px;height:18px}
1983 - .segment-secondary{font-size:11px;padding:6px 8px} 2020 + .mode-card-title{font-size:14px}
1984 - .filter-level-label{font-size:10px} 2021 + .mode-card-desc{font-size:11px}
1985 - .checkbox-chip{font-size:11px;padding:5px 10px;gap:6px} 2022 + .mode-card-classifiers{gap:4px}
1986 - .checkbox-box{width:14px;height:14px} 2023 + .clf-chip{padding:4px 8px;font-size:10px;gap:4px}
1987 - .examples{margin-top:14px} 2024 + .clf-check{width:10px;height:10px}
1988 - .example-chip{font-size:11px;padding:5px 10px} 2025 + .mode-pill{font-size:11px;padding:6px 10px;border-radius:8px}
2026 + .mode-card-radio{top:12px;right:12px}
2027 + .radio-dot{width:14px;height:14px}
2028 + .radio-dot::after{width:6px;height:6px}
1989 .results-area{margin-top:2px;min-height:28px} 2029 .results-area{margin-top:2px;min-height:28px}
1990 .results-content-visible{padding:0 2px} 2030 .results-content-visible{padding:0 2px}
1991 .search-wrap-with-results{padding:2px} 2031 .search-wrap-with-results{padding:2px}
1992 - .daily-hint{padding:8px 12px;border-radius:10px} 2032 + .section-group{margin-top:12px}
2033 + .section-label{font-size:9px;margin-bottom:8px}
2034 + .section-label-goto{margin-top:12px}
2035 + .daily-card{padding:14px 16px;gap:10px;border-radius:12px}
1993 .daily-dot{width:6px;height:6px} 2036 .daily-dot{width:6px;height:6px}
1994 - .daily-text{font-size:12px} 2037 + .daily-card-title{font-size:13px}
2038 + .daily-card-text{font-size:11px}
1995 .results-summary{padding:2px 0} 2039 .results-summary{padding:2px 0}
1996 .summary-count{font-size:11px} 2040 .summary-count{font-size:11px}
1997 .summary-tag-gold{font-size:13px} 2041 .summary-tag-gold{font-size:13px}
......