#325 (#291 후속): - VideoSseController.bulkExtract: Math.random() → ThreadLocalRandom 통일 (bulkTranscript와 일관) - VideoSseController.rebuildVectors: 즉시 complete(total=0) 대신 명시적 'not_implemented' SSE 이벤트로 운영자 가시성 확보 + timeout 600s → 60s - YouTubeService.getTranscript JavaDoc: mode 인자가 youtube-transcript-api 폴백에서만 사용된다는 점, 브라우저 추출은 mode 무관 명시 #319 (#301 후속): - RestaurantDetail: buildSearchQuery 헬퍼 추출 (외부 지도 검색 URL 조합) '한국' 단독 region 더미 케이스 가드 포함 - BottomSheet SNAP_POINTS/VELOCITY_THRESHOLD 정책 fn-doc 신규 (docs/design/279-frontend-restaurant-detail/fn-bottomsheet-snap.md) #344 (#283 후속): - globals.css에 --z-bottom-sheet=50, --z-filter-sheet=60, --z-modal=70 토큰 - LoginMenu: zIndex 99999 매직 넘버 → var(--z-modal) Refs: #319 #325 #344
117 lines
2.8 KiB
CSS
117 lines
2.8 KiB
CSS
@import "tailwindcss";
|
|
|
|
/* Force light mode: dark: classes only activate with .dark ancestor */
|
|
@custom-variant dark (&:is(.dark *));
|
|
|
|
:root {
|
|
--background: #FFFAF5;
|
|
--foreground: #171717;
|
|
--surface: #FFFFFF;
|
|
--brand-50: #FFF8F0;
|
|
--brand-100: #FFEDD5;
|
|
--brand-200: #FFD6A5;
|
|
--brand-300: #FFBC72;
|
|
--brand-400: #F5A623;
|
|
--brand-500: #F59E3F;
|
|
--brand-600: #E8720C;
|
|
--brand-700: #C45A00;
|
|
--brand-800: #9A4500;
|
|
--brand-900: #6B3000;
|
|
--brand-950: #3D1A00;
|
|
/* #344 z-index 토큰 (모달/오버레이가 매직 넘버 없이 일관) */
|
|
--z-bottom-sheet: 50;
|
|
--z-filter-sheet: 60;
|
|
--z-modal: 70;
|
|
color-scheme: only light !important;
|
|
}
|
|
|
|
@theme inline {
|
|
--color-background: var(--background);
|
|
--color-foreground: var(--foreground);
|
|
--color-surface: var(--surface);
|
|
--color-brand-50: var(--brand-50);
|
|
--color-brand-100: var(--brand-100);
|
|
--color-brand-200: var(--brand-200);
|
|
--color-brand-300: var(--brand-300);
|
|
--color-brand-400: var(--brand-400);
|
|
--color-brand-500: var(--brand-500);
|
|
--color-brand-600: var(--brand-600);
|
|
--color-brand-700: var(--brand-700);
|
|
--color-brand-800: var(--brand-800);
|
|
--color-brand-900: var(--brand-900);
|
|
--color-brand-950: var(--brand-950);
|
|
--font-sans: var(--font-pretendard), var(--font-geist), system-ui, sans-serif;
|
|
}
|
|
|
|
/* Dark mode CSS vars (disabled — activate by adding .dark class to <html>) */
|
|
/*
|
|
.dark {
|
|
--background: #12100E;
|
|
--foreground: #ededed;
|
|
--surface: #1C1916;
|
|
}
|
|
*/
|
|
|
|
body {
|
|
background: var(--background);
|
|
color: var(--foreground);
|
|
}
|
|
|
|
html, body, #__next {
|
|
height: 100%;
|
|
margin: 0;
|
|
}
|
|
|
|
/* Force Google Maps InfoWindow to light mode (maps don't support dark) */
|
|
.gm-style .gm-style-iw,
|
|
.gm-style .gm-style-iw-c,
|
|
.gm-style .gm-style-iw-d,
|
|
.gm-style .gm-style-iw-t {
|
|
background-color: #ffffff !important;
|
|
color: #171717 !important;
|
|
color-scheme: light !important;
|
|
}
|
|
|
|
.gm-style .gm-style-iw-d {
|
|
overflow: auto !important;
|
|
}
|
|
|
|
/* Hide scrollbar but keep scrolling */
|
|
@layer utilities {
|
|
.scrollbar-hide {
|
|
-ms-overflow-style: none !important;
|
|
scrollbar-width: none !important;
|
|
overflow: -moz-scrollbars-none;
|
|
}
|
|
.scrollbar-hide::-webkit-scrollbar {
|
|
display: none !important;
|
|
width: 0 !important;
|
|
height: 0 !important;
|
|
}
|
|
}
|
|
|
|
/* Material Symbols */
|
|
.material-symbols-rounded {
|
|
font-variation-settings: 'FILL' 0, 'wght' 400, 'GRAD' 0, 'opsz' 24;
|
|
font-size: inherit;
|
|
line-height: 1;
|
|
vertical-align: middle;
|
|
}
|
|
.material-symbols-rounded.filled {
|
|
font-variation-settings: 'FILL' 1, 'wght' 400, 'GRAD' 0, 'opsz' 24;
|
|
}
|
|
|
|
/* Safe area for iOS bottom nav */
|
|
.safe-area-bottom {
|
|
padding-bottom: env(safe-area-inset-bottom, 0px);
|
|
}
|
|
|
|
/* Filter sheet slide-up animation */
|
|
@keyframes slide-up {
|
|
from { transform: translateY(100%); }
|
|
to { transform: translateY(0); }
|
|
}
|
|
.animate-slide-up {
|
|
animation: slide-up 0.25s ease-out;
|
|
}
|