Rafael Lopez

bjuscador

...@@ -2,6 +2,14 @@ ...@@ -2,6 +2,14 @@
2 import { onMount } from 'svelte'; 2 import { onMount } from 'svelte';
3 import { landingSearchMode, landingSelectedClassifiers, landingSearchQuery } from '$lib/stores/landingSearchState'; 3 import { landingSearchMode, landingSelectedClassifiers, landingSearchQuery } from '$lib/stores/landingSearchState';
4 4
5 + // Theme
6 + let isDark = true;
7 + function toggleTheme() {
8 + isDark = !isDark;
9 + document.documentElement.classList.toggle('dark', isDark);
10 + localStorage.setItem('theme', isDark ? 'dark' : 'light');
11 + }
12 +
5 // Estado base 13 // Estado base
6 let mounted = false; 14 let mounted = false;
7 let heroInView = true; 15 let heroInView = true;
...@@ -64,11 +72,31 @@ ...@@ -64,11 +72,31 @@
64 } 72 }
65 } 73 }
66 74
67 - $: sortedHits = filteredHits.length > 0 ? [...filteredHits].sort((a, b) => { 75 + $: sortedHits = (() => {
68 - const dir = sortOrder === 'desc' ? 1 : -1; 76 + if (filteredHits.length === 0) return [];
69 - if (sortBy === 'alpha') return dir * (a.document.texto || '').localeCompare(b.document.texto || ''); 77 + const isFlatMode = isMixedClassSearch || searchMode === 'todo';
70 - return dir * ((b.document.devengado || 0) - (a.document.devengado || 0)); 78 +
71 - }) : []; 79 + // Filtrar duplicados de finfun y categorías ocultas
80 + let hits = filteredHits.filter(hit => {
81 + const cls = CLASS_REVERSE_MAP[hit.document.class_] || hit.document.class_ || 'otros';
82 + if (isFlatMode && hiddenCategories.has(cls)) return false;
83 + if (hit.document.class_ === 'finfun' || hit.document.class_ === 'finalidad') {
84 + const m = parseMetadatos(hit.document.metadatos);
85 + if (m.finfun_funcion === 0 && m.finfun_grpfuncion !== undefined) return false;
86 + }
87 + return true;
88 + });
89 +
90 + // En modo todo/mixto: mantener orden de la API (relevancia)
91 + if (isFlatMode) return hits;
92 +
93 + // En otros modos: ordenar por criterio del usuario
94 + return [...hits].sort((a, b) => {
95 + const dir = sortOrder === 'desc' ? 1 : -1;
96 + if (sortBy === 'alpha') return dir * (a.document.texto || '').localeCompare(b.document.texto || '');
97 + return dir * ((b.document.devengado || 0) - (a.document.devengado || 0));
98 + });
99 + })();
72 100
73 // Detectar tipos de clasificadores presentes en los resultados 101 // Detectar tipos de clasificadores presentes en los resultados
74 // Mapeo inverso: API class_ → id interno del clasificador 102 // Mapeo inverso: API class_ → id interno del clasificador
...@@ -123,11 +151,50 @@ ...@@ -123,11 +151,50 @@
123 finfun: 'Para qué se gasta', 151 finfun: 'Para qué se gasta',
124 ubigeo: 'Dónde se gasta', 152 ubigeo: 'Dónde se gasta',
125 acteco: 'En qué sectores', 153 acteco: 'En qué sectores',
154 + sectores: 'En qué sectores',
126 rubro: 'Con qué recursos', 155 rubro: 'Con qué recursos',
127 organismo: 'Quién financia', 156 organismo: 'Quién financia',
128 fuente: 'Origen del ingreso', 157 fuente: 'Origen del ingreso',
158 + geografico: 'Dónde se gasta',
159 + };
160 +
161 + const CLASS_COLORS = {
162 + entidad: '#6B8CA6',
163 + objeto: '#C9A751',
164 + finfun: '#8B6E9B',
165 + geografico: '#4A8B6E',
166 + ubigeo: '#4A8B6E',
167 + sectores: '#C44B3F',
168 + acteco: '#C44B3F',
169 + rubro: '#D4A017',
170 + organismo: '#5A9BD5',
171 + fuente: '#7CB68E',
172 + otros: '#6B6860',
173 + programa_proyecto: '#6B6860',
129 }; 174 };
130 175
176 + // Filtros de categoría visibles en modo todo (vista plana)
177 + let hiddenCategories = new Set();
178 +
179 + function toggleCategory(cls) {
180 + const next = new Set(hiddenCategories);
181 + if (next.has(cls)) next.delete(cls);
182 + else next.add(cls);
183 + hiddenCategories = next;
184 + }
185 +
186 + // Categorías presentes en los resultados actuales con conteos
187 + $: presentCategories = (() => {
188 + const counts = {};
189 + filteredHits.forEach(h => {
190 + const cls = CLASS_REVERSE_MAP[h.document.class_] || h.document.class_ || 'otros';
191 + counts[cls] = (counts[cls] || 0) + 1;
192 + });
193 + return Object.entries(counts)
194 + .map(([id, count]) => ({ id, count, label: CLASS_EASY_LABELS[id] || CLASS_LABELS[id] || id, color: CLASS_COLORS[id] || '#6B6860' }))
195 + .sort((a, b) => b.count - a.count);
196 + })();
197 +
131 // Extraer código de finfun desde metadatos (formato con puntos: 1, 1.1, 1.1.3) 198 // Extraer código de finfun desde metadatos (formato con puntos: 1, 1.1, 1.1.3)
132 function getFinfunCodigo(meta) { 199 function getFinfunCodigo(meta) {
133 const fin = String(meta.finfun_finalidad || ''); 200 const fin = String(meta.finfun_finalidad || '');
...@@ -155,38 +222,9 @@ ...@@ -155,38 +222,9 @@
155 $: groupedHits = (() => { 222 $: groupedHits = (() => {
156 if (filteredHits.length === 0) return null; 223 if (filteredHits.length === 0) return null;
157 224
158 - // Búsqueda mixta o global: agrupar por tipo 225 + // Búsqueda mixta o global: vista plana (sin agrupar)
159 if (isMixedClassSearch || searchMode === 'todo') { 226 if (isMixedClassSearch || searchMode === 'todo') {
160 - // Filtrar duplicados de finfun 227 + return null;
161 - const filtered = filteredHits.filter(hit => {
162 - if (hit.document.class_ !== 'finfun' && hit.document.class_ !== 'finalidad') return true;
163 - const m = parseMetadatos(hit.document.metadatos);
164 - return !(m.finfun_funcion === 0 && m.finfun_grpfuncion !== undefined);
165 - });
166 -
167 - const groups = {};
168 - filtered.forEach(hit => {
169 - const type = CLASS_REVERSE_MAP[hit.document.class_] || hit.document.class_ || 'otros';
170 - const groupName = CLASS_LABELS[type] || type;
171 - if (!groups[groupName]) {
172 - groups[groupName] = { name: groupName, hits: [], totalMonto: 0, classType: type };
173 - }
174 - groups[groupName].hits.push(hit);
175 - groups[groupName].totalMonto += hit.document.devengado || 0;
176 - });
177 -
178 - const dir = sortOrder === 'desc' ? 1 : -1;
179 - Object.values(groups).forEach(group => {
180 - group.hits.sort((a, b) => {
181 - if (sortBy === 'alpha') return dir * (a.document.texto || '').localeCompare(b.document.texto || '');
182 - return dir * ((b.document.devengado || 0) - (a.document.devengado || 0));
183 - });
184 - });
185 -
186 - // Menos hits primero (clasificadores arriba, programas abajo)
187 - const sortedGroups = Object.values(groups);
188 - sortedGroups.sort((a, b) => a.hits.length - b.hits.length);
189 - return sortedGroups;
190 } 228 }
191 229
192 if (isEntidadSearchActive) { 230 if (isEntidadSearchActive) {
...@@ -373,6 +411,9 @@ ...@@ -373,6 +411,9 @@
373 searchMode = mode; 411 searchMode = mode;
374 if (mode === 'programas') { 412 if (mode === 'programas') {
375 selectedClassifiers = []; 413 selectedClassifiers = [];
414 + } else if (mode === 'clasificadores') {
415 + // Seleccionar todos los clasificadores habilitados
416 + selectedClassifiers = CLASIFICADORES.filter(c => !c.disabled).map(c => c.id);
376 } 417 }
377 } 418 }
378 } 419 }
...@@ -519,6 +560,7 @@ ...@@ -519,6 +560,7 @@
519 // Observer para actualizar sección activa 560 // Observer para actualizar sección activa
520 let sectionObserver; 561 let sectionObserver;
521 onMount(() => { 562 onMount(() => {
563 + isDark = document.documentElement.classList.contains('dark');
522 setTimeout(() => { mounted = true; }, 80); 564 setTimeout(() => { mounted = true; }, 80);
523 fetchDaily(); 565 fetchDaily();
524 566
...@@ -633,6 +675,7 @@ ...@@ -633,6 +675,7 @@
633 resetSeenHits(); 675 resetSeenHits();
634 expandedGroups = []; 676 expandedGroups = [];
635 collapsedGroups = []; 677 collapsedGroups = [];
678 + hiddenCategories = new Set();
636 allHits = data.hits; 679 allHits = data.hits;
637 } else { 680 } else {
638 allHits = [...allHits, ...data.hits]; 681 allHits = [...allHits, ...data.hits];
...@@ -901,16 +944,33 @@ ...@@ -901,16 +944,33 @@
901 944
902 <div class="hero-topbar"> 945 <div class="hero-topbar">
903 <div class="nav-logo" class:nav-hidden={!heroInView}> 946 <div class="nav-logo" class:nav-hidden={!heroInView}>
904 - <img src="/logos_oscuro/05_Imago MEFP horizontal espacio negativo.png" alt="MEFP" /> 947 + {#if isDark}
948 + <img src="/logos_oscuro/05_Imago MEFP horizontal espacio negativo.png" alt="MEFP" />
949 + {:else}
950 + <img src="/logos_claro/06_Isologo MEFP horizontal escala de grises.png" alt="MEFP" />
951 + {/if}
905 </div> 952 </div>
906 953
907 - <button class="nav-menu-btn" class:nav-hidden={!heroInView} aria-label="Menú"> 954 + <div class="hero-topbar-right" class:nav-hidden={!heroInView}>
908 - <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round"> 955 + <button class="nav-theme-btn" on:click={toggleTheme} aria-label={isDark ? 'Cambiar a modo claro' : 'Cambiar a modo oscuro'}>
909 - <line x1="3" y1="6" x2="21" y2="6"/> 956 + {#if isDark}
910 - <line x1="3" y1="12" x2="21" y2="12"/> 957 + <svg width="18" height="18" fill="currentColor" viewBox="0 0 20 20">
911 - <line x1="3" y1="18" x2="21" y2="18"/> 958 + <path d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z"/>
912 - </svg> 959 + </svg>
913 - </button> 960 + {:else}
961 + <svg width="18" height="18" fill="currentColor" viewBox="0 0 20 20">
962 + <path fill-rule="evenodd" d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" clip-rule="evenodd"/>
963 + </svg>
964 + {/if}
965 + </button>
966 + <button class="nav-menu-btn" aria-label="Menú">
967 + <svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5" stroke-linecap="round">
968 + <line x1="3" y1="6" x2="21" y2="6"/>
969 + <line x1="3" y1="12" x2="21" y2="12"/>
970 + <line x1="3" y1="18" x2="21" y2="18"/>
971 + </svg>
972 + </button>
973 + </div>
914 </div> 974 </div>
915 975
916 <div class="search-container anim" style="--d:200ms"> 976 <div class="search-container anim" style="--d:200ms">
...@@ -966,6 +1026,24 @@ ...@@ -966,6 +1026,24 @@
966 </div> 1026 </div>
967 </div> 1027 </div>
968 1028
1029 + <!-- Filtros de categoría (pegados al search bar) -->
1030 + {#if (searchMode === 'todo' || isMixedClassSearch) && presentCategories.length > 1 && allHits.length > 0}
1031 + <div class="cat-filters">
1032 + {#each presentCategories as cat}
1033 + <button
1034 + class="cat-filter-chip"
1035 + class:cat-filter-hidden={hiddenCategories.has(cat.id)}
1036 + on:click={() => toggleCategory(cat.id)}
1037 + style="--cat-color:{cat.color}"
1038 + >
1039 + <span class="cat-filter-dot"></span>
1040 + <span class="cat-filter-label">{cat.label}</span>
1041 + <span class="cat-filter-count">{cat.count}</span>
1042 + </button>
1043 + {/each}
1044 + </div>
1045 + {/if}
1046 +
969 <!-- ─── ÁREA DE RESULTADOS ─── --> 1047 <!-- ─── ÁREA DE RESULTADOS ─── -->
970 <div class="results-area" bind:this={resultsAreaEl}> 1048 <div class="results-area" bind:this={resultsAreaEl}>
971 1049
...@@ -1047,13 +1125,7 @@ ...@@ -1047,13 +1125,7 @@
1047 on:click|stopPropagation={() => { if (!clf.disabled) toggleClassifier(clf.id); }} 1125 on:click|stopPropagation={() => { if (!clf.disabled) toggleClassifier(clf.id); }}
1048 disabled={clf.disabled} 1126 disabled={clf.disabled}
1049 > 1127 >
1050 - <span class="clf-check"> 1128 + <span class="clf-dot"></span>
1051 - {#if selectedClassifiers.includes(clf.id)}
1052 - <svg width="10" height="10" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3">
1053 - <polyline points="20 6 9 17 4 12"/>
1054 - </svg>
1055 - {/if}
1056 - </span>
1057 <span class="clf-label">{clf.label}</span> 1129 <span class="clf-label">{clf.label}</span>
1058 </button> 1130 </button>
1059 {/each} 1131 {/each}
...@@ -1348,8 +1420,8 @@ ...@@ -1348,8 +1420,8 @@
1348 > 1420 >
1349 <div class="result-content"> 1421 <div class="result-content">
1350 <div class="result-text"> 1422 <div class="result-text">
1351 - {#if isMixedClassSearch && hitType} 1423 + {#if (isMixedClassSearch || searchMode === 'todo') && hitType}
1352 - <span class="result-type-badge">{CLASS_LABELS[hitType] || hitType}</span> 1424 + <span class="result-cat-tag" style="--cat-color:{CLASS_COLORS[hitType] || '#6B6860'}">{CLASS_EASY_LABELS[hitType] || CLASS_LABELS[hitType] || hitType}</span>
1353 {/if} 1425 {/if}
1354 {#if hit.highlights?.[0]?.snippet} 1426 {#if hit.highlights?.[0]?.snippet}
1355 {@html hit.highlights[0].snippet} 1427 {@html hit.highlights[0].snippet}
...@@ -1875,8 +1947,10 @@ ...@@ -1875,8 +1947,10 @@
1875 <style> 1947 <style>
1876 @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500&display=swap'); 1948 @import url('https://fonts.googleapis.com/css2?family=JetBrains+Mono:wght@300;400;500&display=swap');
1877 :global(*){margin:0;padding:0;box-sizing:border-box} 1949 :global(*){margin:0;padding:0;box-sizing:border-box}
1878 - :global(html){width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;background:#1C1C1A;scroll-behavior:smooth} 1950 + :global(html){width:100%;height:100%;margin:0;padding:0;overflow-x:hidden;background:#1C1C1A;scroll-behavior:smooth;transition:background 0.3s}
1879 - :global(body){width:100%;min-height:100%;margin:0;padding:0;overflow-x:hidden;background:#1C1C1A} 1951 + :global(html:not(.dark)){background:#ffffff}
1952 + :global(body){width:100%;min-height:100%;margin:0;padding:0;overflow-x:hidden;background:#1C1C1A;transition:background 0.3s}
1953 + :global(html:not(.dark)) body{background:#ffffff}
1880 :global(::selection){background:#C9A751;color:#1C1C1A} 1954 :global(::selection){background:#C9A751;color:#1C1C1A}
1881 :global(::-webkit-scrollbar){width:5px} 1955 :global(::-webkit-scrollbar){width:5px}
1882 :global(::-webkit-scrollbar-track){background:#1C1C1A} 1956 :global(::-webkit-scrollbar-track){background:#1C1C1A}
...@@ -2075,6 +2149,24 @@ ...@@ -2075,6 +2149,24 @@
2075 .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)} 2149 .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)}
2076 .mode-card-active:hover{background:rgba(240,193,77,0.08);border-color:rgba(240,193,77,0.35)} 2150 .mode-card-active:hover{background:rgba(240,193,77,0.08);border-color:rgba(240,193,77,0.35)}
2077 2151
2152 + /* Category filter chips */
2153 + .cat-filters{display:flex;flex-wrap:wrap;gap:6px;padding:8px 4px 0;z-index:10}
2154 + .cat-filter-chip{display:inline-flex;align-items:center;gap:5px;padding:4px 10px;border-radius:6px;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:11px}
2155 + .cat-filter-chip:hover{background:rgba(255,255,255,0.08);border-color:rgba(255,255,255,0.15)}
2156 + .cat-filter-hidden{opacity:0.35}
2157 + .cat-filter-hidden:hover{opacity:0.6}
2158 + .cat-filter-dot{width:6px;height:6px;border-radius:50%;background:var(--cat-color);flex-shrink:0;transition:opacity 0.2s}
2159 + .cat-filter-hidden .cat-filter-dot{opacity:0.4}
2160 + .cat-filter-label{color:#D0CCC4;transition:color 0.2s}
2161 + .cat-filter-hidden .cat-filter-label{color:#6B6860}
2162 + .cat-filter-count{font-family:var(--mono);font-size:10px;color:#6B6860;transition:color 0.2s}
2163 +
2164 + /* Result category tag */
2165 + .result-cat-tag{display:inline-flex;align-items:center;gap:4px;font-size:10px;font-weight:500;letter-spacing:0.02em;color:var(--cat-color);flex-shrink:0;white-space:nowrap}
2166 + .result-cat-tag::before{content:'';width:5px;height:5px;border-radius:50%;background:var(--cat-color);flex-shrink:0}
2167 +
2168 + /* Cards y search elevados en light mode */
2169 +
2078 .mode-card-header{display:flex;align-items:center;gap:10px} 2170 .mode-card-header{display:flex;align-items:center;gap:10px}
2079 .mode-card-icon{display:flex;align-items:center;justify-content:center;color:#9B9890;transition:color 0.3s} 2171 .mode-card-icon{display:flex;align-items:center;justify-content:center;color:#9B9890;transition:color 0.3s}
2080 .mode-card:hover .mode-card-icon{color:#D0CCC4} 2172 .mode-card:hover .mode-card-icon{color:#D0CCC4}
...@@ -2093,8 +2185,9 @@ ...@@ -2093,8 +2185,9 @@
2093 .clf-chip-active{background:rgba(90,175,138,0.15);border-color:rgba(90,175,138,0.4);color:#6BC99E} 2185 .clf-chip-active{background:rgba(90,175,138,0.15);border-color:rgba(90,175,138,0.4);color:#6BC99E}
2094 .clf-chip-disabled{opacity:0.35;cursor:not-allowed} 2186 .clf-chip-disabled{opacity:0.35;cursor:not-allowed}
2095 .clf-chip-disabled:hover{background:rgba(255,255,255,0.04);border-color:rgba(255,255,255,0.08)} 2187 .clf-chip-disabled:hover{background:rgba(255,255,255,0.04);border-color:rgba(255,255,255,0.08)}
2096 - .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} 2188 + .clf-dot{width:5px;height:5px;border-radius:50%;background:rgba(255,255,255,0.15);flex-shrink:0;transition:all 0.3s cubic-bezier(0.16,1,0.3,1)}
2097 - .clf-chip-active .clf-check{background:#4A8B6E;border-color:#4A8B6E} 2189 + .clf-chip:hover .clf-dot{background:rgba(255,255,255,0.3)}
2190 + .clf-chip-active .clf-dot{background:#4A8B6E;box-shadow:0 0 6px rgba(74,139,110,0.3)}
2098 .clf-label{line-height:1} 2191 .clf-label{line-height:1}
2099 2192
2100 .mode-card-pills{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;align-items:center} 2193 .mode-card-pills{display:flex;flex-wrap:wrap;gap:5px;margin-top:6px;align-items:center}
...@@ -2238,8 +2331,11 @@ ...@@ -2238,8 +2331,11 @@
2238 /* Nav elements in hero */ 2331 /* Nav elements in hero */
2239 .hero-topbar{display:contents} 2332 .hero-topbar{display:contents}
2240 main[data-section="hero"] .nav-logo{position:fixed;top:24px;left:24px;z-index:100;transition:opacity 0.4s ease,transform 0.4s ease} 2333 main[data-section="hero"] .nav-logo{position:fixed;top:24px;left:24px;z-index:100;transition:opacity 0.4s ease,transform 0.4s ease}
2241 - .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} 2334 + .hero-topbar-right{position:fixed;top:24px;right:24px;z-index:100;display:flex;align-items:center;gap:8px;transition:opacity 0.4s ease,transform 0.4s ease}
2335 + .nav-menu-btn{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}
2242 .nav-menu-btn:hover{background:rgba(255,255,255,0.1);color:#F5F0E8} 2336 .nav-menu-btn:hover{background:rgba(255,255,255,0.1);color:#F5F0E8}
2337 + .nav-theme-btn{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}
2338 + .nav-theme-btn:hover{background:rgba(255,255,255,0.1);color:#F5F0E8}
2243 .nav-hidden{opacity:0;pointer-events:none;transform:translateY(-10px)} 2339 .nav-hidden{opacity:0;pointer-events:none;transform:translateY(-10px)}
2244 2340
2245 /* ── DIRECTORY ── */ 2341 /* ── DIRECTORY ── */
...@@ -2415,6 +2511,247 @@ ...@@ -2415,6 +2511,247 @@
2415 .footer-right{font-family:var(--mono);font-size:12px;letter-spacing:0.1em;color:#6B6860} 2511 .footer-right{font-family:var(--mono);font-size:12px;letter-spacing:0.1em;color:#6B6860}
2416 2512
2417 /* ══════════════════════════════════════════════════════════════════════════ 2513 /* ══════════════════════════════════════════════════════════════════════════
2514 + MODO CLARO (LIGHT MODE)
2515 + ══════════════════════════════════════════════════════════════════════════ */
2516 + :global(html:not(.dark)) .page{color:#1C1C1A}
2517 + :global(html:not(.dark)){background:#ffffff}
2518 + :global(html:not(.dark)) body{background:#ffffff}
2519 + :global(html:not(.dark)) ::-webkit-scrollbar-track{background:#f5f5f7}
2520 + :global(html:not(.dark)) ::-webkit-scrollbar-thumb{background:#c0c0c0}
2521 + :global(html:not(.dark)) ::selection{background:#C9A751;color:#ffffff}
2522 +
2523 + /* Hero */
2524 + :global(html:not(.dark)) main[data-section="hero"]{background:#f2f2f4}
2525 + :global(html:not(.dark)) .hero-title{color:#1d1d1f}
2526 + :global(html:not(.dark)) .gold{color:#D4A017}
2527 + :global(html:not(.dark)) .hero-sub{color:#424245}
2528 + :global(html:not(.dark)) .ambient-glow{background:radial-gradient(ellipse at center,rgba(212,160,23,0.06) 0%,rgba(212,160,23,0.02) 35%,transparent 70%)}
2529 +
2530 + /* Nav elements in hero */
2531 + :global(html:not(.dark)) .nav-menu-btn{background:rgba(0,0,0,0.05);color:#555}
2532 + :global(html:not(.dark)) .nav-menu-btn:hover{background:rgba(0,0,0,0.1);color:#1d1d1f}
2533 + :global(html:not(.dark)) .nav-theme-btn{background:rgba(0,0,0,0.05);color:#555}
2534 + :global(html:not(.dark)) .nav-theme-btn:hover{background:rgba(0,0,0,0.1);color:#1d1d1f}
2535 +
2536 + /* Search bar */
2537 + :global(html:not(.dark)) .search-bar{background:#ffffff;box-shadow:none}
2538 + :global(html:not(.dark)) .search-focused{background:#ffffff;backdrop-filter:blur(24px);box-shadow:none}
2539 + :global(html:not(.dark)) .has-results{background:#ffffff}
2540 + :global(html:not(.dark)) .search-input-wrap input{color:#1d1d1f;caret-color:transparent}
2541 + :global(html:not(.dark)) .search-input-wrap input.has-text{caret-color:#1d1d1f}
2542 + :global(html:not(.dark)) .search-icon{stroke:#D4A017}
2543 + :global(html:not(.dark)) .blink-cursor{background:#D4A017}
2544 + :global(html:not(.dark)) .placeholder-text{color:#999}
2545 + :global(html:not(.dark)) .search-clear{color:#999}
2546 + :global(html:not(.dark)) .search-clear:hover{color:#333}
2547 + :global(html:not(.dark)) .search-divider{background:rgba(0,0,0,0.08)}
2548 + :global(html:not(.dark)) .loading-dot{background:#9A8550}
2549 +
2550 + /* Search meta */
2551 + :global(html:not(.dark)) .search-badge{color:#4A8B6E;background:rgba(74,139,110,0.1)}
2552 + :global(html:not(.dark)) .search-diario-link{color:#9A8550;background:rgba(154,133,80,0.1)}
2553 + :global(html:not(.dark)) .search-diario-link:hover{background:rgba(154,133,80,0.18);color:#857040}
2554 +
2555 + /* Section labels */
2556 + :global(html:not(.dark)) .section-label{color:#D4A017}
2557 +
2558 + /* Mode cards */
2559 + :global(html:not(.dark)) .mode-card{background:#ffffff;border-color:rgba(0,0,0,0.06);box-shadow:none}
2560 + :global(html:not(.dark)) .mode-card:hover{background:#ffffff;border-color:rgba(0,0,0,0.1);box-shadow:none}
2561 + :global(html:not(.dark)) .mode-card-active{background:#ffffff;border-color:rgba(212,160,23,0.35);box-shadow:none}
2562 + :global(html:not(.dark)) .mode-card-active:hover{background:#ffffff;border-color:rgba(212,160,23,0.45);box-shadow:none}
2563 + :global(html:not(.dark)) .mode-card-icon{color:#999}
2564 + :global(html:not(.dark)) .mode-card:hover .mode-card-icon{color:#666}
2565 + :global(html:not(.dark)) .mode-card-active .mode-card-icon{color:#D4A017}
2566 + :global(html:not(.dark)) .mode-card-title{color:#1d1d1f}
2567 + :global(html:not(.dark)) .mode-card-desc{color:#666}
2568 + :global(html:not(.dark)) .mode-card-desc strong{color:#333}
2569 + :global(html:not(.dark)) .mode-card-active .mode-card-desc{color:#555}
2570 + :global(html:not(.dark)) .mode-card-active .mode-card-desc strong{color:#D4A017}
2571 +
2572 + /* Classifier chips */
2573 + :global(html:not(.dark)) .clf-chip{background:rgba(0,0,0,0.03);border-color:rgba(0,0,0,0.08);color:#666}
2574 + :global(html:not(.dark)) .clf-chip:hover{background:rgba(0,0,0,0.06);border-color:rgba(0,0,0,0.15);color:#333}
2575 + :global(html:not(.dark)) .clf-chip-active{background:rgba(212,160,23,0.08);border-color:rgba(212,160,23,0.3);color:#9A8520}
2576 + :global(html:not(.dark)) .clf-dot{background:rgba(0,0,0,0.1)}
2577 + :global(html:not(.dark)) .clf-chip:hover .clf-dot{background:rgba(0,0,0,0.2)}
2578 + :global(html:not(.dark)) .clf-chip-active .clf-dot{background:#D4A017;box-shadow:0 0 6px rgba(212,160,23,0.25)}
2579 +
2580 + /* Radio dots */
2581 + :global(html:not(.dark)) .radio-dot{border-color:rgba(0,0,0,0.2)}
2582 + :global(html:not(.dark)) .radio-dot::after{background:#D4A017}
2583 + :global(html:not(.dark)) .radio-dot-active{border-color:#D4A017}
2584 +
2585 + /* Mode pills */
2586 + :global(html:not(.dark)) .mode-pill{border-color:rgba(0,0,0,0.12);background:rgba(0,0,0,0.04);color:#555}
2587 + :global(html:not(.dark)) .mode-pill:hover{background:rgba(0,0,0,0.08);border-color:rgba(0,0,0,0.2);color:#1d1d1f}
2588 + :global(html:not(.dark)) .pills-hint{color:#999}
2589 +
2590 + /* Gear / settings */
2591 + :global(html:not(.dark)) .gear-btn{background:rgba(0,0,0,0.05)}
2592 + :global(html:not(.dark)) .gear-btn:hover,:global(html:not(.dark)) .gear-active{background:rgba(0,0,0,0.1)}
2593 + :global(html:not(.dark)) .gear-menu{background:rgba(255,255,255,0.92);box-shadow:0 12px 48px rgba(0,0,0,0.15);border:1px solid rgba(0,0,0,0.08)}
2594 + :global(html:not(.dark)) .gear-menu-title{color:#999}
2595 + :global(html:not(.dark)) .gear-row:hover{background:rgba(0,0,0,0.04)}
2596 + :global(html:not(.dark)) .gear-check{border-color:rgba(0,0,0,0.15)}
2597 + :global(html:not(.dark)) .gear-check-on{background:#9A8550;color:#fff}
2598 + :global(html:not(.dark)) .gear-row-question{color:#aaa}
2599 + :global(html:not(.dark)) .gear-row-label{color:#888}
2600 + :global(html:not(.dark)) .gear-row-label-on{color:#1d1d1f}
2601 + :global(html:not(.dark)) .gear-row-count{color:#bbb}
2602 +
2603 + /* Mobile settings */
2604 + :global(html:not(.dark)) .mobile-settings-btn{background:rgba(0,0,0,0.05)}
2605 + :global(html:not(.dark)) .mobile-settings-btn:hover,:global(html:not(.dark)) .mobile-settings-open{background:rgba(0,0,0,0.1)}
2606 + :global(html:not(.dark)) .mobile-filter-section{border-top-color:rgba(0,0,0,0.06)}
2607 + :global(html:not(.dark)) .mobile-filter-title{color:#999}
2608 + :global(html:not(.dark)) .mobile-filter-chip{background:rgba(0,0,0,0.04);border-color:rgba(0,0,0,0.08);color:#888}
2609 + :global(html:not(.dark)) .mobile-filter-chip.filter-chip-active{background:rgba(0,0,0,0.08);border-color:rgba(0,0,0,0.15);color:#1d1d1f}
2610 + :global(html:not(.dark)) .mobile-meta-item{color:#555}
2611 + :global(html:not(.dark)) .mobile-search-badge{color:#4A8B6E;background:rgba(74,139,110,0.08)}
2612 + :global(html:not(.dark)) .mobile-diario-link{color:#9A8550;background:rgba(154,133,80,0.08)}
2613 +
2614 + /* Results area */
2615 + :global(html:not(.dark)) .results-content-visible{background:#ffffff;box-shadow:none}
2616 + :global(html:not(.dark)) .results-summary{border-bottom-color:rgba(0,0,0,0.08)}
2617 + :global(html:not(.dark)) .summary-count{color:#333}
2618 + :global(html:not(.dark)) .summary-label{color:#666}
2619 + :global(html:not(.dark)) .summary-sep{color:#ccc}
2620 + :global(html:not(.dark)) .summary-tag{color:#888}
2621 + :global(html:not(.dark)) .summary-tag-gold{color:#3d7a5e}
2622 + :global(html:not(.dark)) .updating-dot{background:#9A8550}
2623 +
2624 + /* Sort buttons */
2625 + :global(html:not(.dark)) .sort-btn{color:#888;background:rgba(0,0,0,0.03)}
2626 + :global(html:not(.dark)) .sort-btn:hover{background:rgba(0,0,0,0.06);color:#333}
2627 + :global(html:not(.dark)) .sort-btn-active{background:rgba(0,0,0,0.08);color:#1d1d1f}
2628 +
2629 + /* Result groups */
2630 + :global(html:not(.dark)) .result-group{border-bottom-color:rgba(0,0,0,0.06)}
2631 + :global(html:not(.dark)) .result-group-header{background:rgba(0,0,0,0.03)}
2632 + :global(html:not(.dark)) .result-group-header:hover{background:rgba(0,0,0,0.06)}
2633 + :global(html:not(.dark)) .result-group-name{color:#1d1d1f}
2634 + :global(html:not(.dark)) .result-group-tecnico{color:#999}
2635 + :global(html:not(.dark)) .result-group-count{color:#666;background:rgba(0,0,0,0.06)}
2636 + :global(html:not(.dark)) .group-chevron{color:#999}
2637 + :global(html:not(.dark)) .group-show-more{color:#888}
2638 + :global(html:not(.dark)) .group-show-more:hover{color:#333}
2639 +
2640 + /* Result cards */
2641 + :global(html:not(.dark)) .result-card{border-bottom-color:rgba(0,0,0,0.06)}
2642 + :global(html:not(.dark)) .result-card:hover{background:rgba(0,0,0,0.03)}
2643 + :global(html:not(.dark)) .result-card-selected{background:rgba(154,133,80,0.08);border-left-color:#9A8550}
2644 + :global(html:not(.dark)) .result-card-grouped{border-bottom-color:rgba(0,0,0,0.04)}
2645 + :global(html:not(.dark)) .result-card-grouped:hover{background:rgba(0,0,0,0.03)}
2646 + :global(html:not(.dark)) .result-text{color:#1d1d1f}
2647 + :global(html:not(.dark)) .result-text :global(mark){background:rgba(154,133,80,0.25);color:#1d1d1f}
2648 + :global(html:not(.dark)) .result-type-badge{background:rgba(154,133,80,0.1);color:#9A8550}
2649 + :global(html:not(.dark)) .result-parent,:global(html:not(.dark)) .result-subarea,:global(html:not(.dark)) .result-class-type,:global(html:not(.dark)) .result-objeto-nivel{color:#888}
2650 + :global(html:not(.dark)) .result-objeto-codigo{color:#9A8550}
2651 + :global(html:not(.dark)) .result-year{color:#666;background:rgba(0,0,0,0.04)}
2652 + :global(html:not(.dark)) .result-monto{color:#3d7a5e}
2653 + :global(html:not(.dark)) .result-entity{color:#888}
2654 + :global(html:not(.dark)) .result-sep{color:#ccc}
2655 + :global(html:not(.dark)) .result-link-icon{color:#ccc}
2656 +
2657 + /* Load more */
2658 + :global(html:not(.dark)) .load-more-container{border-top-color:rgba(0,0,0,0.06)}
2659 + :global(html:not(.dark)) .load-more-btn{color:#666;background:rgba(0,0,0,0.03);border-color:rgba(0,0,0,0.08)}
2660 + :global(html:not(.dark)) .load-more-btn:hover{background:rgba(0,0,0,0.06);color:#1d1d1f}
2661 +
2662 + /* Category filters light */
2663 + /* cat-filters light - no extra bg needed, inherits from hero */
2664 + :global(html:not(.dark)) .cat-filter-chip{background:rgba(0,0,0,0.03);border-color:rgba(0,0,0,0.06)}
2665 + :global(html:not(.dark)) .cat-filter-chip:hover{background:rgba(0,0,0,0.06);border-color:rgba(0,0,0,0.1)}
2666 + :global(html:not(.dark)) .cat-filter-label{color:#555}
2667 + :global(html:not(.dark)) .cat-filter-hidden .cat-filter-label{color:#bbb}
2668 + :global(html:not(.dark)) .cat-filter-count{color:#aaa}
2669 +
2670 + /* Context / messages */
2671 + :global(html:not(.dark)) .search-context-title{color:#888}
2672 + :global(html:not(.dark)) .search-explain-link{color:#888;border-bottom-color:#bbb}
2673 + :global(html:not(.dark)) .search-explain-link:hover{color:#9A8550;border-bottom-color:#9A8550}
2674 + :global(html:not(.dark)) .results-hint,:global(html:not(.dark)) .results-loading{color:#999}
2675 + :global(html:not(.dark)) .results-empty{color:#888}
2676 +
2677 + /* Daily card */
2678 + :global(html:not(.dark)) .daily-card{background:#ffffff;border-color:rgba(212,160,23,0.2);box-shadow:none}
2679 + :global(html:not(.dark)) .daily-card:hover{background:#ffffff;border-color:rgba(212,160,23,0.35);box-shadow:none}
2680 + :global(html:not(.dark)) .daily-card-title{color:#9A8550}
2681 + :global(html:not(.dark)) .daily-card-text{color:#666}
2682 + :global(html:not(.dark)) .daily-card-text strong{color:#9A8550}
2683 + :global(html:not(.dark)) .daily-card-arrow{color:#9A8550}
2684 +
2685 + /* Scroll hint */
2686 + :global(html:not(.dark)) .scroll-hint{color:#999}
2687 + :global(html:not(.dark)) .scroll-hint span{color:#999}
2688 +
2689 + /* Pills (hero) */
2690 + :global(html:not(.dark)) .pills-label{color:#888}
2691 + :global(html:not(.dark)) .pill::before{background:rgba(0,0,0,0.08)}
2692 +
2693 + /* Section dots */
2694 + :global(html:not(.dark)) .section-dots{background:rgba(0,0,0,0.06);backdrop-filter:blur(8px)}
2695 + :global(html:not(.dark)) .section-dot{border-color:rgba(0,0,0,0.15);background:rgba(0,0,0,0.05)}
2696 + :global(html:not(.dark)) .section-dot:hover{border-color:rgba(0,0,0,0.3);background:rgba(0,0,0,0.1)}
2697 + :global(html:not(.dark)) .section-dot-active{background:#9A8550;border-color:#9A8550}
2698 + :global(html:not(.dark)) .section-dot-label{color:#888}
2699 +
2700 + /* Stats */
2701 + :global(html:not(.dark)) .hero-stats{color:#888}
2702 + :global(html:not(.dark)) .stat-num{color:#1d1d1f}
2703 + :global(html:not(.dark)) .stat-link{border-bottom-color:rgba(0,0,0,0.2)}
2704 + :global(html:not(.dark)) .stat-link:hover{color:#9A8550;border-bottom-color:#9A8550}
2705 +
2706 + /* Nav */
2707 + :global(html:not(.dark)) nav{background:#ffffff}
2708 + :global(html:not(.dark)) .nav-link{color:#666}
2709 + :global(html:not(.dark)) .nav-link:hover{color:#1d1d1f}
2710 + :global(html:not(.dark)) .nav-date{color:#888}
2711 + :global(html:not(.dark)) .date-label{color:#aaa}
2712 + :global(html:not(.dark)) .nav-sep{background:rgba(0,0,0,0.08)}
2713 +
2714 + /* ── CLASIFICADORES (already light, minor tweaks) ── */
2715 + :global(html:not(.dark)) .clasificadores{background:#f0f0f2}
2716 + :global(html:not(.dark)) .clas-group-card{background:#f7f7f9;border-color:rgba(0,0,0,0.04)}
2717 + :global(html:not(.dark)) .clas-subgroup{background:#fafafa}
2718 +
2719 + /* ── HISTORIAS ── */
2720 + :global(html:not(.dark)) .historias{background:#ffffff}
2721 + :global(html:not(.dark)) .historias .section-title{color:#1d1d1f}
2722 + :global(html:not(.dark)) .hist-subtitle{color:#888}
2723 + :global(html:not(.dark)) .hist-tag-row svg{stroke:#999}
2724 + :global(html:not(.dark)) .hist-tag-row .section-tag{color:#999}
2725 + :global(html:not(.dark)) .hist-card{background:color-mix(in srgb, var(--card-color) 8%, #ffffff);border-color:color-mix(in srgb, var(--card-color) 18%, rgba(0,0,0,0.06))}
2726 + :global(html:not(.dark)) .hist-card-hovered{background:color-mix(in srgb, var(--card-color) 12%, #ffffff);border-color:color-mix(in srgb, var(--card-color) 28%, rgba(0,0,0,0.06));transform:translateY(-3px)}
2727 + :global(html:not(.dark)) .hist-title{color:#1d1d1f}
2728 + :global(html:not(.dark)) .hist-desc{color:#666}
2729 + :global(html:not(.dark)) .hist-cta{color:#999}
2730 + :global(html:not(.dark)) .gold-link{color:#9A8550}
2731 +
2732 + /* ── VISUALIZACIONES (already light, minor tweaks) ── */
2733 + :global(html:not(.dark)) .visualizaciones{background:#f5f5f7}
2734 + :global(html:not(.dark)) .vis-card{background:#ffffff}
2735 +
2736 + /* ── MANIFIESTO ── */
2737 + :global(html:not(.dark)) .manifiesto{background:#f5f5f7}
2738 + :global(html:not(.dark)) .dot-pattern{opacity:0.03;background-image:radial-gradient(circle at 1px 1px,#333 0.5px,transparent 0)}
2739 + :global(html:not(.dark)) .section-tag-light{color:#888}
2740 + :global(html:not(.dark)) .manifiesto-title{color:#1d1d1f}
2741 +
2742 + /* ── DESCARGAS ── */
2743 + :global(html:not(.dark)) .descargas{background:#ffffff}
2744 + :global(html:not(.dark)) .descargas-title{color:#1d1d1f}
2745 + :global(html:not(.dark)) .format-pill{color:#666;background:rgba(0,0,0,0.04);border-color:rgba(0,0,0,0.08)}
2746 + :global(html:not(.dark)) .descargas-link{color:#9A8550}
2747 + :global(html:not(.dark)) .descargas-link:hover{color:#857040}
2748 +
2749 + /* ── FOOTER ── */
2750 + :global(html:not(.dark)) footer{background:#f5f5f7;border-top-color:rgba(0,0,0,0.06)}
2751 + :global(html:not(.dark)) .footer-org{color:#999}
2752 + :global(html:not(.dark)) .footer-right{color:#999}
2753 +
2754 + /* ══════════════════════════════════════════════════════════════════════════
2418 RESPONSIVE - TABLET (768px) 2755 RESPONSIVE - TABLET (768px)
2419 ══════════════════════════════════════════════════════════════════════════ */ 2756 ══════════════════════════════════════════════════════════════════════════ */
2420 @media(max-width:768px){ 2757 @media(max-width:768px){
...@@ -2432,7 +2769,9 @@ ...@@ -2432,7 +2769,9 @@
2432 nav{padding:12px 24px} 2769 nav{padding:12px 24px}
2433 .hero-topbar{display:flex;justify-content:space-between;align-items:center;padding:16px 16px 0;width:100%;flex-shrink:0} 2770 .hero-topbar{display:flex;justify-content:space-between;align-items:center;padding:16px 16px 0;width:100%;flex-shrink:0}
2434 main[data-section="hero"] .nav-logo{position:static;height:52px;opacity:1;transform:none} 2771 main[data-section="hero"] .nav-logo{position:static;height:52px;opacity:1;transform:none}
2435 - main[data-section="hero"] .nav-menu-btn{position:static;width:40px;height:40px} 2772 + .hero-topbar-right{position:static;gap:6px}
2773 + .nav-menu-btn{width:40px;height:40px}
2774 + .nav-theme-btn{width:40px;height:40px}
2436 2775
2437 /* Hero */ 2776 /* Hero */
2438 .hero{padding:32px 24px} 2777 .hero{padding:32px 24px}
...@@ -2480,7 +2819,7 @@ ...@@ -2480,7 +2819,7 @@
2480 .mode-card-title{font-size:14px} 2819 .mode-card-title{font-size:14px}
2481 .mode-card-desc{font-size:11px;line-height:1.3} 2820 .mode-card-desc{font-size:11px;line-height:1.3}
2482 .clf-chip{padding:5px 10px;font-size:11px} 2821 .clf-chip{padding:5px 10px;font-size:11px}
2483 - .clf-check{width:12px;height:12px} 2822 + .clf-dot{width:5px;height:5px}
2484 .mode-pill{font-size:12px;padding:7px 12px} 2823 .mode-pill{font-size:12px;padding:7px 12px}
2485 .hint-desktop{display:none} 2824 .hint-desktop{display:none}
2486 .hint-mobile{display:inline} 2825 .hint-mobile{display:inline}
...@@ -2504,8 +2843,12 @@ ...@@ -2504,8 +2843,12 @@
2504 .summary-tag{font-size:10px} 2843 .summary-tag{font-size:10px}
2505 .sort-buttons{flex-shrink:0} 2844 .sort-buttons{flex-shrink:0}
2506 .sort-btn{font-size:11px;padding:5px 8px} 2845 .sort-btn{font-size:11px;padding:5px 8px}
2846 + .cat-filters{gap:5px}
2847 + .cat-filter-chip{padding:3px 8px;font-size:10px}
2848 + .cat-filter-dot{width:5px;height:5px}
2507 .result-card{padding:12px 14px} 2849 .result-card{padding:12px 14px}
2508 .result-text{font-size:13px} 2850 .result-text{font-size:13px}
2851 + .result-cat-tag{font-size:9px}
2509 .result-monto{font-size:11px} 2852 .result-monto{font-size:11px}
2510 .result-year{font-size:11px;padding:2px 6px} 2853 .result-year{font-size:11px;padding:2px 6px}
2511 .result-entity{font-size:11px} 2854 .result-entity{font-size:11px}
...@@ -2606,7 +2949,8 @@ ...@@ -2606,7 +2949,8 @@
2606 .hero-title{font-size:clamp(34px,10vw,44px)} 2949 .hero-title{font-size:clamp(34px,10vw,44px)}
2607 .hero-sub{font-size:13px;margin-bottom:16px} 2950 .hero-sub{font-size:13px;margin-bottom:16px}
2608 main[data-section="hero"] .nav-logo{height:44px} 2951 main[data-section="hero"] .nav-logo{height:44px}
2609 - main[data-section="hero"] .nav-menu-btn{width:36px;height:36px} 2952 + .nav-menu-btn{width:36px;height:36px}
2953 + .nav-theme-btn{width:36px;height:36px}
2610 .mode-cards{gap:10px;margin-top:12px} 2954 .mode-cards{gap:10px;margin-top:12px}
2611 .mode-card{padding:12px;gap:5px;border-radius:14px} 2955 .mode-card{padding:12px;gap:5px;border-radius:14px}
2612 .mode-card-icon svg{width:16px;height:16px} 2956 .mode-card-icon svg{width:16px;height:16px}
...@@ -2614,7 +2958,7 @@ ...@@ -2614,7 +2958,7 @@
2614 .mode-card-desc{font-size:10px;line-height:1.3} 2958 .mode-card-desc{font-size:10px;line-height:1.3}
2615 .mode-card-classifiers{gap:4px} 2959 .mode-card-classifiers{gap:4px}
2616 .clf-chip{padding:4px 8px;font-size:10px;gap:4px} 2960 .clf-chip{padding:4px 8px;font-size:10px;gap:4px}
2617 - .clf-check{width:10px;height:10px} 2961 + .clf-dot{width:4px;height:4px}
2618 .mode-pill{font-size:11px;padding:6px 10px;border-radius:8px} 2962 .mode-pill{font-size:11px;padding:6px 10px;border-radius:8px}
2619 .mode-card-radio{top:12px;right:12px} 2963 .mode-card-radio{top:12px;right:12px}
2620 .radio-dot{width:14px;height:14px} 2964 .radio-dot{width:14px;height:14px}
...@@ -2636,6 +2980,12 @@ ...@@ -2636,6 +2980,12 @@
2636 .summary-tag{font-size:9px} 2980 .summary-tag{font-size:9px}
2637 .summary-sep{font-size:9px} 2981 .summary-sep{font-size:9px}
2638 .sort-btn{font-size:10px;padding:4px 6px} 2982 .sort-btn{font-size:10px;padding:4px 6px}
2983 + .cat-filters{gap:4px}
2984 + .cat-filter-chip{padding:3px 7px;font-size:9px;gap:4px}
2985 + .cat-filter-dot{width:4px;height:4px}
2986 + .cat-filter-count{font-size:9px}
2987 + .result-cat-tag{font-size:8px}
2988 + .result-cat-tag::before{width:4px;height:4px}
2639 .summary-header-text{font-size:12px} 2989 .summary-header-text{font-size:12px}
2640 .result-group-header{padding:10px 12px} 2990 .result-group-header{padding:10px 12px}
2641 .result-group-name{font-size:12px} 2991 .result-group-name{font-size:12px}
......