현재 체크된 모든 상품의 선택이 해제됩니다.
계속하시겠습니까?
+ 현재 체크된 모든 상품의 선택이 해제됩니다.
+
+ 계속하시겠습니까?
+
diff --git a/scripts/config.js b/scripts/config.js
index da8e96c..4b43fb7 100644
--- a/scripts/config.js
+++ b/scripts/config.js
@@ -14,14 +14,14 @@ export const SORT_CONFIG = {
export const STATUS_META = {
미판매: {
- selectable: false, // 체크박스 선택 불가
+ selectable: false, // 체크박스 선택 불가
isDefaultActive: false, // 초기 로드 시 미체크 상태
isSystemVisible: true, // 아예 리스트/필터에서 제외 (완전 숨김)
soldOut: false,
},
판매예정: {
selectable: false,
- isDefaultActive: true,
+ isDefaultActive: false,
isSystemVisible: true,
soldOut: false,
},
@@ -39,21 +39,18 @@ export const STATUS_META = {
},
};
+export const STATUS_ORDER = {
+ 판매중: 1,
+ 판매예정: 2,
+ 판매완료: 3,
+ 미판매: 4,
+};
+
// STATUS_FILTERS를 수동으로 만들지 않고 META에서 자동으로 생성합니다.
export const STATUS_FILTERS = Object.keys(STATUS_META)
- .filter(key => STATUS_META[key].isSystemVisible) // 시스템 가시성이 true인 것만 필터 칩 생성
- .map(key => ({
- key: key,
- label: key === '판매예정' ? '판매 예정' : key,
- defaultActive: STATUS_META[key].isDefaultActive
- }));
-
-export const STATUS_ORDER = {
- 판매중: 0,
- 판매예정: 1,
- 미판매: 2,
- 판매완료: 3,
-};
+ .filter((key) => STATUS_META[key].isSystemVisible)
+ .map((key) => ({ key, label: key }))
+ .sort((a, b) => (STATUS_ORDER[a.key] || 99) - (STATUS_ORDER[b.key] || 99));
export const STATUS_COLOR = {
판매중: 'bg-primary/10 text-primary border-primary/30',
@@ -93,5 +90,5 @@ export const PRODUCT_CONDITIONS = {
INCOMPLETE: { label: 'Incomplete (구성품 누락)', color: 'text-amber-600', level: 'C' },
DAMAGED: { label: 'Damaged (하자/파손)', color: 'text-orange-600', level: 'D' },
JUNK: { label: 'Junk (동작불가/부품용)', color: 'text-red-600', level: 'F' },
- OTHER: { label: '기타 (상세설명 참고)', color: 'text-indigo-600', level: '-' }
-};
\ No newline at end of file
+ OTHER: { label: '기타 (상세설명 참고)', color: 'text-indigo-600', level: '-' },
+};
diff --git a/scripts/filters.js b/scripts/filters.js
index 4773e72..17ff1fb 100644
--- a/scripts/filters.js
+++ b/scripts/filters.js
@@ -3,12 +3,21 @@ import { state, productsData } from './state.js';
import { ITEMS_PER_PAGE, STATUS_META, STATUS_FILTERS, STATUS_ORDER, STATUS_COLOR, SEARCH_CONFIG, SORT_CONFIG } from './config.js';
import { renderProducts } from './productList.js';
+// 1 & 2. 칩 사이즈 통일 및 미판매 활성화 스타일 강화
function getStatusChipClass(status, isActive) {
+ // 1. 태그 칩과 동일한 사이즈 (텍스트 크기 포함)
+ const commonSize = 'min-w-[70px] justify-center px-3 py-1 text-[11px] md:text-xs';
const base = STATUS_COLOR[status] ?? '';
+
if (isActive) {
- return `${base} opacity-100 shadow-sm`;
+ if (status === '미판매') {
+ // 2. 미판매 활성화 시 특수 컬러 (인디고)
+ return `${commonSize} bg-indigo-600 text-white border-indigo-700 shadow-md ring-1 ring-indigo-300 opacity-100`;
+ }
+ return `${commonSize} ${base} opacity-100 shadow-sm ring-1 ring-offset-1 ring-slate-200 dark:ring-slate-700`;
}
- return `bg-slate-50 text-slate-400 border-slate-200 opacity-30 grayscale hover:opacity-50`;
+
+ return `${commonSize} bg-slate-50 dark:bg-slate-800 text-slate-400 border-slate-200 dark:border-slate-700 opacity-40 grayscale`;
}
export function renderStatusChips() {
@@ -16,15 +25,20 @@ export function renderStatusChips() {
if (!container) return;
container.innerHTML = '';
- // 이제 config에서 자동 생성된 STATUS_FILTERS를 사용합니다.
STATUS_FILTERS.forEach(({ key, label }) => {
const isActive = state.activeStatuses.has(key);
-
const chip = document.createElement('button');
- // getStatusChipClass 함수가 기존에 정의되어 있다면 그대로 사용하세요.
- chip.className = `status-chip px-3 py-1.5 md:px-4 md:py-2 rounded-full text-xs md:text-sm font-medium transition-all duration-200 border ${getStatusChipClass(key, isActive)}`;
+
+ // 칩 공통 스타일 적용
+ chip.className = `status-chip flex items-center rounded-full font-bold transition-all duration-200 border ${getStatusChipClass(key, isActive)}`;
chip.textContent = label;
- chip.onclick = () => toggleStatusFilter(key);
+
+ chip.onclick = () => {
+ if (state.activeStatuses.has(key)) state.activeStatuses.delete(key);
+ else state.activeStatuses.add(key);
+ renderStatusChips();
+ applyFilters();
+ };
container.appendChild(chip);
});
}
@@ -42,6 +56,68 @@ function toggleStatusFilter(status) {
renderStatusChips();
}
+export function renderTagChips() {
+ const container = document.getElementById('tag-chips');
+ if (!container) return;
+
+ // 1. 모든 상품에서 유니크한 태그 추출
+ const allTags = new Set();
+ productsData.forEach((p) => {
+ if (p.tags) p.tags.forEach((tag) => allTags.add(tag));
+ });
+ const sortedTags = Array.from(allTags).sort();
+
+ // 2. 리셋 버튼 HTML (맨 앞에 배치)
+ // 활성화된 태그가 있을 때만 강조되거나, 항상 보이게 설정 가능합니다.
+ const hasActiveTags = state.activeTags.size > 0;
+ const resetBtnHtml = `
+
+ `;
+
+ // 3. 태그 칩들과 합치기
+ container.innerHTML =
+ resetBtnHtml +
+ sortedTags
+ .map((tag) => {
+ const isActive = state.activeTags.has(tag);
+ return `
+
+ `;
+ })
+ .join('');
+
+ // 4. 리셋 버튼 이벤트 바인딩
+ document.getElementById('tag-reset-btn').onclick = () => {
+ if (state.activeTags.size === 0) return;
+ state.activeTags.clear();
+ renderTagChips(); // UI 갱신
+ applyFilters(); // 필터 적용
+ };
+
+ // 5. 개별 태그 칩 이벤트 바인딩
+ container.querySelectorAll('.tag-chip').forEach((chip) => {
+ chip.onclick = () => {
+ const tag = chip.dataset.tag;
+ if (state.activeTags.has(tag)) state.activeTags.delete(tag);
+ else state.activeTags.add(tag);
+
+ renderTagChips();
+ applyFilters();
+ };
+ });
+}
+
// [핵심] 필터 적용 함수
export function applyFilters() {
const keyword = state.searchKeyword.toLowerCase();
@@ -64,21 +140,29 @@ export function applyFilters() {
const searchMatch =
keyword === '' ||
(() => {
+ // 검색어를 공백 기준으로 쪼개서 배열로 만듭니다 (예: "jp r19" -> ["jp", "r19"])
+ const searchTerms = keyword.split(/\s+/).filter((term) => term.length > 0);
+
const searchPool = [];
if (SEARCH_CONFIG.USE_TITLE) searchPool.push(product.title);
if (SEARCH_CONFIG.USE_CUSTOM_TAG && product.customTag) searchPool.push(product.customTag);
if (SEARCH_CONFIG.USE_DESCRIPTION && product.description) searchPool.push(product.description);
+
+ // 태그 배열과 상세 설명 배열을 문자열 풀에 합칩니다.
if (SEARCH_CONFIG.USE_TAGS && product.tags) searchPool.push(...product.tags);
if (SEARCH_CONFIG.USE_FULL_DESCRIPTION && product.fullDescription) searchPool.push(...product.fullDescription);
- return searchPool.some((text) =>
- String(text || '')
- .toLowerCase()
- .includes(keyword),
- );
+ // 모든 텍스트를 하나의 검색용 문자열로 결합
+ const combinedText = searchPool.map((text) => String(text || '').toLowerCase()).join(' ');
+
+ // [핵심] 사용자가 입력한 모든 단어(searchTerms)가 결합된 텍스트에 포함되어 있는지 확인 (AND 조건)
+ return searchTerms.every((term) => combinedText.includes(term));
})();
- return statusMatch && categoryMatch && searchMatch;
+ // [5] 태그 필터 체크
+ const tagMatch = state.activeTags.size === 0 || Array.from(state.activeTags).every((tag) => product.tags && product.tags.includes(tag));
+
+ return statusMatch && categoryMatch && searchMatch && tagMatch;
})
.sort((a, b) => {
// 0. 스위치가 모두 꺼져있다면 정렬하지 않고 원본 순서 유지
@@ -138,19 +222,17 @@ export function getCategories(products) {
}
export function renderCategoryChips(products) {
- const container = document.getElementById('filter-chips');
+ const container = document.getElementById('filter-chips'); // 혹은 HTML 구조에 맞춰 'category-chips'
if (!container) return;
- // [핵심] 시스템 가시성이 true인 상품의 카테고리만 추출합니다.
+ // 1. 가시성 있는 상품의 카테고리만 추출
const validCategories = products
.filter((p) => {
const meta = STATUS_META[p.status];
- // 해당 상태가 정의되어 있고, 시스템에서 보여주기로 한 경우만 포함
return meta && meta.isSystemVisible;
})
.map((p) => p.category);
- // 'All'은 항상 포함하고, 필터링된 카테고리들만 중복 제거하여 합침
const categories = ['All', ...new Set(validCategories)];
container.innerHTML = '';
@@ -158,10 +240,19 @@ export function renderCategoryChips(products) {
categories.forEach((cat) => {
const isActive = state.activeCategories.has(cat);
const chip = document.createElement('button');
- chip.className = `filter-chip px-3 py-1.5 md:px-4 md:py-2 rounded-full text-xs md:text-sm font-medium transition border ${isActive ? 'bg-primary text-white border-primary shadow-sm' : 'bg-slate-50 text-slate-600 border-slate-200'}`;
+
+ // [수정] 태그 칩 사이즈(px-3 py-1) 및 폰트 크기(text-[11px]) 통일
+ // min-w-[65px]를 주면 'All' 같은 짧은 글자도 정갈하게 보입니다.
+ chip.className = `filter-chip flex items-center justify-center min-w-[65px] px-3 py-1 rounded-full text-[11px] md:text-xs font-bold transition-all duration-200 border
+ ${isActive ? 'bg-primary text-white border-primary shadow-sm ring-1 ring-offset-1 ring-slate-200 dark:ring-slate-700 opacity-100' : 'bg-slate-50 dark:bg-slate-800 text-slate-400 border-slate-200 dark:border-slate-700 opacity-40 grayscale hover:opacity-60'}`;
+
chip.textContent = cat;
chip.dataset.category = cat;
- chip.onclick = () => toggleCategory(cat);
+
+ chip.onclick = () => {
+ toggleCategory(cat);
+ };
+
container.appendChild(chip);
});
}
@@ -172,10 +263,16 @@ export function toggleCategory(category) {
state.activeCategories.add('All');
} else {
state.activeCategories.delete('All');
- state.activeCategories.has(category) ? state.activeCategories.delete(category) : state.activeCategories.add(category);
- if (state.activeCategories.size === 0) state.activeCategories.add('All');
+ if (state.activeCategories.has(category)) {
+ state.activeCategories.delete(category);
+ } else {
+ state.activeCategories.add(category);
+ }
+ if (state.activeCategories.size === 0) {
+ state.activeCategories.add('All');
+ }
}
- renderCategoryChips(productsData);
+ renderCategoryChips(productsData); // 디자인(활성화 상태) 즉시 반영
applyFilters();
}
diff --git a/scripts/main.js b/scripts/main.js
index af72a36..faf84e0 100644
--- a/scripts/main.js
+++ b/scripts/main.js
@@ -1,6 +1,6 @@
/** 진입점: 이벤트 바인딩·초기 렌더·URL 모달 처리 */
import { state, productsData, saveSelection } from './state.js';
-import { applyFilters, renderStatusChips, renderCategoryChips, bindCategoryFilter } from './filters.js';
+import { applyFilters, renderStatusChips, renderCategoryChips, bindCategoryFilter, renderTagChips } from './filters.js';
import { ITEMS_PER_PAGE, STATUS_META } from './config.js';
import { renderProducts, changePage } from './productList.js';
import { openModal, closeModal } from './modal.js';
@@ -8,7 +8,7 @@ import { scrollToImage } from './carousel.js';
console.log('Total products loaded:', productsData.length);
-// HTML onclick에서 사용
+// HTML onclick에서 사용하기 위한 전역 등록
window.openModal = openModal;
window.closeModal = closeModal;
window.changePage = changePage;
@@ -17,12 +17,12 @@ window.scrollToImage = scrollToImage;
let fadeTimers = {};
// 뷰 전환 이벤트
+// 뷰 전환 이벤트 바인딩
document.getElementById('view-grid').onclick = () => {
state.viewMode = 'grid';
updateViewButtons();
renderProducts(state.currentPage);
};
-
document.getElementById('view-table').onclick = () => {
state.viewMode = 'table';
updateViewButtons();
@@ -31,10 +31,25 @@ document.getElementById('view-table').onclick = () => {
function updateViewButtons() {
const isGrid = state.viewMode === 'grid';
- document.getElementById('view-grid').classList.toggle('bg-white', isGrid);
- document.getElementById('view-grid').classList.toggle('text-primary', isGrid);
- document.getElementById('view-table').classList.toggle('bg-white', !isGrid);
- document.getElementById('view-table').classList.toggle('text-primary', !isGrid);
+ const gridBtn = document.getElementById('view-grid');
+ const tableBtn = document.getElementById('view-table');
+
+ if (!gridBtn || !tableBtn) return;
+
+ const active = ['bg-white', 'dark:bg-slate-700', 'shadow-sm', 'text-primary'];
+ const inactive = ['text-slate-400'];
+
+ if (isGrid) {
+ gridBtn.classList.add(...active);
+ gridBtn.classList.remove(...inactive);
+ tableBtn.classList.add(...inactive);
+ tableBtn.classList.remove(...active);
+ } else {
+ tableBtn.classList.add(...active);
+ tableBtn.classList.remove(...inactive);
+ gridBtn.classList.add(...inactive);
+ gridBtn.classList.remove(...active);
+ }
}
// [전역 함수] 체크박스 토글 및 합계 업데이트
@@ -45,30 +60,25 @@ window.toggleSelectItem = (id) => {
updateSummary();
};
+/** 선택 요약 바 업데이트 (모바일 레이아웃 대응) */
export function updateSummary() {
- const summary = document.getElementById('selection-summary');
+ const summaryBar = document.getElementById('selection-summary');
const countEl = document.getElementById('selected-count');
const priceEl = document.getElementById('selected-total-price');
- if (!summary) return;
-
- // 테이블 모드이면서 선택된 항목이 있을 때만 노출
- if (state.viewMode === 'table' && state.selectedIds.size > 0) {
- // [수정] flex를 추가할 때 hidden은 확실히 제거
- summary.classList.remove('hidden');
- summary.classList.add('flex');
+ if (state.selectedIds.size > 0) {
+ summaryBar.classList.remove('hidden');
+ summaryBar.classList.add('flex'); // flex-wrap은 HTML에 이미 적용됨
+ countEl.textContent = state.selectedIds.size;
const total = Array.from(state.selectedIds).reduce((sum, id) => {
const p = productsData.find((item) => item.id === id);
return sum + (p ? p.price : 0);
}, 0);
-
- countEl.textContent = state.selectedIds.size;
priceEl.textContent = `₩${total.toLocaleString()}`;
} else {
- // [수정] hidden을 추가할 때 flex는 확실히 제거
- summary.classList.remove('flex');
- summary.classList.add('hidden');
+ summaryBar.classList.add('hidden');
+ summaryBar.classList.remove('flex');
}
}
@@ -137,15 +147,53 @@ themeToggleBtn.addEventListener('click', function () {
updateIcons();
});
-// 초기 렌더
-renderCategoryChips(productsData);
-bindCategoryFilter(productsData);
-renderStatusChips();
-applyFilters();
-
document.addEventListener('DOMContentLoaded', () => {
+ console.log('Total products loaded:', productsData.length);
+
+ // 1. UI 컴포넌트 렌더링
+ renderCategoryChips(productsData);
+ bindCategoryFilter(productsData);
+ renderStatusChips();
+ renderTagChips();
+
+ // 2. 초기 데이터 계산 및 첫 페이지 렌더링 (순서 중요)
+ applyFilters();
renderProducts(state.currentPage);
- checkUrlAndOpenModal();
+ updateViewButtons();
+ updateSummary();
+
+ // 테마 설정 (기존 로직 유지)
+ if (localStorage.getItem('color-theme') === 'dark' || (!('color-theme' in localStorage) && window.matchMedia('(prefers-color-scheme: dark)').matches)) {
+ document.documentElement.classList.add('dark');
+ } else {
+ document.documentElement.classList.remove('dark');
+ }
+ updateIcons();
+
+ // 3. 태그 토글 로직 (SVG 회전 포함)
+ const toggleBtn = document.getElementById('toggle-tags');
+ const tagContainer = document.getElementById('tag-container');
+ if (toggleBtn && tagContainer) {
+ toggleBtn.onclick = () => {
+ const isExpanded = tagContainer.classList.contains('expanded');
+ const svgIcon = toggleBtn.querySelector('svg');
+ if (isExpanded) {
+ tagContainer.style.maxHeight = tagContainer.scrollHeight + 'px';
+ requestAnimationFrame(() => {
+ tagContainer.style.maxHeight = '34px';
+ tagContainer.classList.remove('expanded');
+ if (svgIcon) svgIcon.style.transform = 'rotate(0deg)';
+ });
+ } else {
+ tagContainer.style.maxHeight = tagContainer.scrollHeight + 'px';
+ tagContainer.classList.add('expanded');
+ if (svgIcon) svgIcon.style.transform = 'rotate(180deg)';
+ setTimeout(() => {
+ if (tagContainer.classList.contains('expanded')) tagContainer.style.maxHeight = 'none';
+ }, 300);
+ }
+ };
+ }
});
// 데이터용 새 ID 생성기
@@ -308,7 +356,7 @@ function updateThumbnailWithFade(productId, newImageUrl, index) {
window.handleThumbnailLeave = (productId) => {
currentHoverIndex = -1; // 인덱스 초기화
-
+
resetThumbnail(productId);
};
@@ -332,7 +380,7 @@ function resetThumbnail(productId) {
// 2. 페이드 레이어를 즉시 숨김 (transition 방해 금지)
fadeThumb.style.transition = 'none';
fadeThumb.style.opacity = '0';
-
+
// 3. 두 레이어 모두 첫 번째 이미지로 강제 일치
mainThumb.style.backgroundImage = firstImg;
fadeThumb.style.backgroundImage = firstImg;
@@ -342,7 +390,7 @@ function resetThumbnail(productId) {
fadeThumb.style.transition = 'opacity 0.3s ease-in-out';
}, 50);
}
-
+
if (indicator) updateIndicatorUI(indicator, 0);
}
@@ -356,7 +404,6 @@ function updateIndicatorUI(indicator, activeIndex) {
});
}
-
// 터치 상태 관리를 위한 변수
let touchStartX = 0;
let isDragging = false;
@@ -387,7 +434,7 @@ window.handleTouchMove = (e, productId) => {
const mainThumb = document.getElementById(`thumb-${productId}`);
const fadeThumb = document.getElementById(`thumb-fade-${productId}`);
-
+
if (mainThumb && fadeThumb) {
// 드래그 중에는 페이드 없이 즉시 교체 (반응성 우선)
mainThumb.style.backgroundImage = `url("${product.images[index]}")`;
@@ -418,4 +465,3 @@ function updateIndicator(productId, index) {
});
}
}
-
diff --git a/scripts/productList.js b/scripts/productList.js
index 9e09701..b2cee8c 100644
--- a/scripts/productList.js
+++ b/scripts/productList.js
@@ -2,9 +2,9 @@
import { state, saveSelection } from './state.js';
import { ITEMS_PER_PAGE, STATUS_META, STATUS_COLOR, PRODUCT_CONDITIONS } from './config.js';
import { updateSummary } from './main.js';
-import { openModal } from './modal.js';
+
// 1. 체크박스 전역 핸들러 등록
-window.toggleSelectItem = function(id) {
+window.toggleSelectItem = function (id) {
if (state.selectedIds.has(id)) {
state.selectedIds.delete(id);
} else {
@@ -29,12 +29,17 @@ export function renderProducts(page = 1) {
grid.classList.remove('grid');
grid.classList.add('hidden');
tableWrapper.classList.add('hidden');
-
+
// 검색 결과 없음 메시지를 표시할 별도의 컨테이너가 없다면 grid 영역을 빌려 씁니다.
const emptyMsg = `
-
search_off
-
검색 결과가 없습니다
+
+
검색 결과가 없습니다
입력하신 검색어나 선택한 필터를 확인해 주세요.
`;
@@ -67,93 +72,98 @@ export function renderProducts(page = 1) {
if (state.viewMode === 'grid') {
grid.innerHTML = '';
pagedProducts.forEach((product) => {
-
- // 1. 상태 판별
- const isSold = STATUS_META[product.status]?.soldOut === true;
- const isNonSale = product.status === '미판매'; // 상태값이 '미판매'일 때
+ // 1. 상태 판별
+ const isSold = STATUS_META[product.status]?.soldOut === true;
+ const isNonSale = product.status === '미판매'; // 상태값이 '미판매'일 때
- // 2. 스펙(Condition) 정보 추출
- const conditionKey = product.specs?.condition;
- const conditionConfig = PRODUCT_CONDITIONS[conditionKey];
- const conditionDisplay = conditionConfig ? conditionConfig.label : (conditionKey || '');
+ // 2. 스펙(Condition) 정보 추출
+ const conditionKey = product.specs?.condition;
+ const conditionConfig = PRODUCT_CONDITIONS[conditionKey];
+ const conditionDisplay = conditionConfig ? conditionConfig.label : conditionKey || '';
- grid.insertAdjacentHTML('beforeend', `
-
+ grid.insertAdjacentHTML(
+ 'beforeend',
+ `
+
+
+
+
-
-
-
+
+
-
-
+
+ ${product.status}
+
-
-
- ${product.status}
-
-
-
- ${!isSold && product.images?.length > 1 ? `
+ ${
+ !isSold && product.images?.length > 1
+ ? `
- ${product.images.map((_, i) => `
+ ${product.images
+ .map(
+ (_, i) => `
- `).join('')}
+ `,
+ )
+ .join('')}
- ` : ''}
-
+ `
+ : ''
+ }
+
-
-
-
- ${product.title}
-
-
- ${isNonSale ? 'Not for Sale' : `${product.currency || '₩'}${product.price.toLocaleString()}`}
-
-
+
+
+
${product.title}
+
${isNonSale ? 'Not for Sale' : `${product.currency || '₩'}${product.price.toLocaleString()}`}
+
-
- ${conditionDisplay ? `
${conditionDisplay}` : ''}
-
- ${product.description}
-
-
-
-
-`);
-});
-
-setupLazyLoading();
+
+ ${conditionDisplay ? `
${conditionDisplay}` : ''}
+
${product.description}
+
+
+
+ `,
+ );
+ });
+ setupLazyLoading();
} else {
// 테이블 렌더링
- tableBody.innerHTML = pagedProducts.map((product) => {
- const meta = STATUS_META[product.status];
- const isSold = meta?.soldOut === true;
- const isSelectable = meta?.selectable !== false;
-
- const conditionKey = product.specs.condition;
- const conditionConfig = PRODUCT_CONDITIONS[conditionKey];
- let conditionDisplay = conditionConfig ? conditionConfig.label : (conditionKey || '상세 설명 참고 ℹ️');
- let conditionClass = conditionConfig ? conditionConfig.color : 'text-slate-500';
+ tableBody.innerHTML = pagedProducts
+ .map((product) => {
+ const meta = STATUS_META[product.status];
+ const isSold = meta?.soldOut === true;
+ const isSelectable = meta?.selectable !== false;
- return `
+ const conditionKey = product.specs.condition;
+ const conditionConfig = PRODUCT_CONDITIONS[conditionKey];
+ let conditionDisplay = conditionConfig ? conditionConfig.label : conditionKey || '상세 설명 참고 ℹ️';
+ let conditionClass = conditionConfig ? conditionConfig.color : 'text-slate-500';
+
+ return `
${product.status}
`;
- }).join('');
+ })
+ .join('');
}
// 전체 선택 체크박스 상태 동기화
const selectAllCheck = document.getElementById('select-all-current');
if (selectAllCheck) {
const startIndex = (page - 1) * ITEMS_PER_PAGE;
- const currentSelectableItems = state.visibleProducts.slice(startIndex, startIndex + ITEMS_PER_PAGE)
- .filter((p) => STATUS_META[p.status]?.selectable !== false);
+ const currentSelectableItems = state.visibleProducts.slice(startIndex, startIndex + ITEMS_PER_PAGE).filter((p) => STATUS_META[p.status]?.selectable !== false);
selectAllCheck.checked = currentSelectableItems.length > 0 && currentSelectableItems.every((p) => state.selectedIds.has(p.id));
}
@@ -193,33 +203,36 @@ setupLazyLoading();
}
function setupLazyLoading() {
- const observer = new IntersectionObserver((entries) => {
- entries.forEach(entry => {
- if (entry.isIntersecting) {
- const card = entry.target;
- const productId = card.getAttribute('data-id');
- // state.js 등에서 가져온 데이터 활용
- const product = state.visibleProducts.find(p => p.id === productId);
- const thumb = document.getElementById(`thumb-${productId}`);
+ const observer = new IntersectionObserver(
+ (entries) => {
+ entries.forEach((entry) => {
+ if (entry.isIntersecting) {
+ const card = entry.target;
+ const productId = card.getAttribute('data-id');
+ // state.js 등에서 가져온 데이터 활용
+ const product = state.visibleProducts.find((p) => p.id === productId);
+ const thumb = document.getElementById(`thumb-${productId}`);
- if (product && thumb) {
- // 1. 첫 번째 이미지 로드
- thumb.style.backgroundImage = `url("${product.images[0]}")`;
-
- // 2. 나머지 이미지 프리로드 (반짝임 방지)
- if (!STATUS_META[product.status]?.soldOut && product.images.length > 1) {
- product.images.slice(1).forEach(url => {
- const img = new Image();
- img.src = url;
- });
+ if (product && thumb) {
+ // 1. 첫 번째 이미지 로드
+ thumb.style.backgroundImage = `url("${product.images[0]}")`;
+
+ // 2. 나머지 이미지 프리로드 (반짝임 방지)
+ if (!STATUS_META[product.status]?.soldOut && product.images.length > 1) {
+ product.images.slice(1).forEach((url) => {
+ const img = new Image();
+ img.src = url;
+ });
+ }
}
+ observer.unobserve(card);
}
- observer.unobserve(card);
- }
- });
- }, { threshold: 0.1 });
+ });
+ },
+ { threshold: 0.1 },
+ );
- document.querySelectorAll('.product-card').forEach(card => observer.observe(card));
+ document.querySelectorAll('.product-card').forEach((card) => observer.observe(card));
}
export function renderPagination() {
diff --git a/scripts/state.js b/scripts/state.js
index e658806..8ec7a33 100644
--- a/scripts/state.js
+++ b/scripts/state.js
@@ -11,12 +11,12 @@ export const state = {
searchKeyword: '',
viewMode: 'grid',
selectedIds: new Set(JSON.parse(sessionStorage.getItem('selectedProductIds') || '[]')),
-
+ activeTags: new Set([]), // 선택된 태그들을 저장 (비어있으면 전체 노출)
// visible이 true인 상태만 초기 활성 필터로 저장
-activeStatuses: new Set(
+ activeStatuses: new Set(
Object.entries(STATUS_META)
.filter(([_, meta]) => meta.isSystemVisible && meta.isDefaultActive)
- .map(([status]) => status)
+ .map(([status]) => status),
),
};
diff --git a/style/input.css b/style/input.css
index a461c50..e6aeba0 100644
--- a/style/input.css
+++ b/style/input.css
@@ -1 +1,72 @@
-@import "tailwindcss";
\ No newline at end of file
+@import 'tailwindcss';
+
+@theme {
+ /* 기존 HTML에서 쓰던 이름 그대로 등록 (bg-background-light 등) */
+ --color-background-light: var(--bg-light);
+ --color-background-dark: var(--bg-dark);
+ --breakpoint-xs: 480px;
+ --color-primary: #137fec;
+
+ --font-display: 'Inter', sans-serif;
+ --radius-xl: 0.75rem;
+ --aspect-card: 4 / 5;
+}
+
+/* 라이트 모드 변수 설정 */
+:root {
+ --bg-light: #f6f7f8;
+ --bg-dark: #ffffff; /* 헤더 등에 쓰이는 밝은색 */
+}
+
+/* 다크 모드일 때 변수값 갈아끼우기 */
+.dark {
+ --bg-light: #101922;
+ --bg-dark: #101922; /* 다크모드에선 둘 다 어둡게 */
+}
+
+/* 모든 버튼에 마우스 포인터(손가락 모양)를 자동으로 적용 */
+@layer base {
+ button,
+ [type='button'],
+ [type='reset'],
+ [type='submit'] {
+ cursor: pointer;
+ }
+
+ /* 비활성화된(disabled) 버튼은 클릭할 수 없으므로 기본 화살표로 유지 */
+ button:disabled {
+ cursor: default;
+ }
+}
+
+@layer utilities {
+ .no-scrollbar::-webkit-scrollbar {
+ display: none;
+ }
+ .no-scrollbar {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+ }
+ .modal-open {
+ overflow: hidden !important;
+ height: 100% !important;
+ overscroll-behavior: none !important;
+ }
+}
+
+@layer components {
+ #modal-main-carousel-container {
+ scroll-snap-type: none;
+ overflow-x: hidden;
+ }
+ #product-modal {
+ overscroll-behavior: contain;
+ }
+ [id^='thumb-'] {
+ transition: all 0.6s ease-in-out;
+ background-color: #f1f5f9;
+ }
+}
+
+/* 2. 핵심: 테일윈드 v4에게 클래스 기반 다크모드임을 명시 */
+@custom-variant dark (&:where(.dark, .dark *));
diff --git a/style/tailwind.css b/style/tailwind.css
index 67e0bfb..f82144d 100644
--- a/style/tailwind.css
+++ b/style/tailwind.css
@@ -7,12 +7,17 @@
"Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";
--font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono",
"Courier New", monospace;
+ --color-red-50: oklch(97.1% 0.013 17.38);
--color-red-100: oklch(93.6% 0.032 17.717);
+ --color-red-200: oklch(88.5% 0.062 18.334);
--color-red-400: oklch(70.4% 0.191 22.216);
+ --color-red-500: oklch(63.7% 0.237 25.331);
+ --color-red-600: oklch(57.7% 0.245 27.325);
--color-red-700: oklch(50.5% 0.213 27.518);
--color-red-900: oklch(39.6% 0.141 25.723);
--color-orange-100: oklch(95.4% 0.038 75.164);
--color-orange-400: oklch(75% 0.183 55.934);
+ --color-orange-600: oklch(64.6% 0.222 41.116);
--color-orange-700: oklch(55.3% 0.195 38.402);
--color-orange-900: oklch(40.8% 0.123 38.172);
--color-amber-100: oklch(96.2% 0.059 95.617);
@@ -27,6 +32,7 @@
--color-green-900: oklch(39.3% 0.095 152.535);
--color-emerald-100: oklch(95% 0.052 163.051);
--color-emerald-400: oklch(76.5% 0.177 163.223);
+ --color-emerald-600: oklch(59.6% 0.145 163.225);
--color-emerald-700: oklch(50.8% 0.118 165.612);
--color-emerald-900: oklch(37.8% 0.077 168.94);
--color-teal-100: oklch(95.3% 0.051 180.801);
@@ -35,14 +41,18 @@
--color-teal-900: oklch(38.6% 0.063 188.416);
--color-sky-100: oklch(95.1% 0.026 236.824);
--color-sky-400: oklch(74.6% 0.16 232.661);
+ --color-sky-600: oklch(58.8% 0.158 241.966);
--color-sky-700: oklch(50% 0.134 242.749);
--color-sky-900: oklch(39.1% 0.09 240.876);
--color-blue-100: oklch(93.2% 0.032 255.585);
--color-blue-400: oklch(70.7% 0.165 254.624);
+ --color-blue-600: oklch(54.6% 0.245 262.881);
--color-blue-700: oklch(48.8% 0.243 264.376);
--color-blue-900: oklch(37.9% 0.146 265.522);
--color-indigo-100: oklch(93% 0.034 272.788);
+ --color-indigo-300: oklch(78.5% 0.115 274.713);
--color-indigo-400: oklch(67.3% 0.182 276.935);
+ --color-indigo-600: oklch(51.1% 0.262 276.966);
--color-indigo-700: oklch(45.7% 0.24 277.023);
--color-indigo-900: oklch(35.9% 0.144 278.697);
--color-purple-100: oklch(94.6% 0.033 307.174);
@@ -75,6 +85,7 @@
--color-black: #000;
--color-white: #fff;
--spacing: 0.25rem;
+ --container-sm: 24rem;
--container-3xl: 48rem;
--container-6xl: 72rem;
--text-xs: 0.75rem;
@@ -93,8 +104,6 @@
--text-3xl--line-height: calc(2.25 / 1.875);
--text-4xl: 2.25rem;
--text-4xl--line-height: calc(2.5 / 2.25);
- --text-6xl: 3.75rem;
- --text-6xl--line-height: 1;
--font-weight-normal: 400;
--font-weight-medium: 500;
--font-weight-semibold: 600;
@@ -109,12 +118,17 @@
--radius-lg: 0.5rem;
--radius-xl: 0.75rem;
--radius-2xl: 1rem;
+ --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1);
--blur-sm: 8px;
--blur-md: 12px;
--default-transition-duration: 150ms;
--default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1);
--default-font-family: var(--font-sans);
--default-mono-font-family: var(--font-mono);
+ --color-background-light: var(--bg-light);
+ --color-background-dark: var(--bg-dark);
+ --color-primary: #137fec;
+ --aspect-card: 4 / 5;
}
}
@layer base {
@@ -272,9 +286,6 @@
.invisible {
visibility: hidden;
}
- .visible {
- visibility: visible;
- }
.absolute {
position: absolute;
}
@@ -290,6 +301,9 @@
.inset-0 {
inset: calc(var(--spacing) * 0);
}
+ .inset-y-0 {
+ inset-block: calc(var(--spacing) * 0);
+ }
.top-0 {
top: calc(var(--spacing) * 0);
}
@@ -305,9 +319,15 @@
.right-4 {
right: calc(var(--spacing) * 4);
}
+ .bottom-3 {
+ bottom: calc(var(--spacing) * 3);
+ }
.bottom-6 {
bottom: calc(var(--spacing) * 6);
}
+ .left-0 {
+ left: calc(var(--spacing) * 0);
+ }
.left-1\/2 {
left: calc(1/2 * 100%);
}
@@ -320,11 +340,29 @@
.z-10 {
z-index: 10;
}
+ .z-40 {
+ z-index: 40;
+ }
.z-50 {
z-index: 50;
}
+ .order-1 {
+ order: 1;
+ }
+ .order-2 {
+ order: 2;
+ }
+ .order-3 {
+ order: 3;
+ }
+ .col-span-full {
+ grid-column: 1 / -1;
+ }
.container {
width: 100%;
+ @media (width >= 480px) {
+ max-width: 480px;
+ }
@media (width >= 40rem) {
max-width: 40rem;
}
@@ -350,6 +388,9 @@
.-mb-4 {
margin-bottom: calc(var(--spacing) * -4);
}
+ .mb-0\.5 {
+ margin-bottom: calc(var(--spacing) * 0.5);
+ }
.mb-2 {
margin-bottom: calc(var(--spacing) * 2);
}
@@ -362,15 +403,15 @@
.mb-6 {
margin-bottom: calc(var(--spacing) * 6);
}
+ .mb-8 {
+ margin-bottom: calc(var(--spacing) * 8);
+ }
.mb-10 {
margin-bottom: calc(var(--spacing) * 10);
}
.ml-0 {
margin-left: calc(var(--spacing) * 0);
}
- .ml-2 {
- margin-left: calc(var(--spacing) * 2);
- }
.line-clamp-1 {
overflow: hidden;
display: -webkit-box;
@@ -395,25 +436,28 @@
.table {
display: table;
}
- .aspect-\[4\/5\] {
- aspect-ratio: 4/5;
+ .aspect-card {
+ aspect-ratio: var(--aspect-card);
}
.size-1 {
width: calc(var(--spacing) * 1);
height: calc(var(--spacing) * 1);
}
- .size-8 {
- width: calc(var(--spacing) * 8);
- height: calc(var(--spacing) * 8);
- }
.size-10 {
width: calc(var(--spacing) * 10);
height: calc(var(--spacing) * 10);
}
+ .size-12 {
+ width: calc(var(--spacing) * 12);
+ height: calc(var(--spacing) * 12);
+ }
.size-16 {
width: calc(var(--spacing) * 16);
height: calc(var(--spacing) * 16);
}
+ .h-1\.5 {
+ height: calc(var(--spacing) * 1.5);
+ }
.h-2 {
height: calc(var(--spacing) * 2);
}
@@ -429,6 +473,9 @@
.h-10 {
height: calc(var(--spacing) * 10);
}
+ .h-20 {
+ height: calc(var(--spacing) * 20);
+ }
.h-auto {
height: auto;
}
@@ -438,6 +485,9 @@
.h-px {
height: 1px;
}
+ .max-h-8 {
+ max-height: calc(var(--spacing) * 8);
+ }
.max-h-\[40dvh\] {
max-height: 40dvh;
}
@@ -456,21 +506,27 @@
.min-h-screen {
min-height: 100vh;
}
+ .w-1\.5 {
+ width: calc(var(--spacing) * 1.5);
+ }
.w-2 {
width: calc(var(--spacing) * 2);
}
+ .w-3 {
+ width: calc(var(--spacing) * 3);
+ }
.w-4 {
width: calc(var(--spacing) * 4);
}
.w-5 {
width: calc(var(--spacing) * 5);
}
- .w-10 {
- width: calc(var(--spacing) * 10);
- }
.w-12 {
width: calc(var(--spacing) * 12);
}
+ .w-20 {
+ width: calc(var(--spacing) * 20);
+ }
.w-auto {
width: auto;
}
@@ -492,12 +548,21 @@
.max-w-full {
max-width: 100%;
}
+ .max-w-sm {
+ max-width: var(--container-sm);
+ }
.min-w-0 {
min-width: calc(var(--spacing) * 0);
}
.min-w-40 {
min-width: calc(var(--spacing) * 40);
}
+ .min-w-\[65px\] {
+ min-width: 65px;
+ }
+ .min-w-\[70px\] {
+ min-width: 70px;
+ }
.flex-1 {
flex: 1;
}
@@ -510,6 +575,9 @@
.border-collapse {
border-collapse: collapse;
}
+ .origin-center {
+ transform-origin: center;
+ }
.-translate-x-1\/2 {
--tw-translate-x: calc(calc(1/2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
@@ -518,6 +586,18 @@
--tw-translate-y: calc(calc(1/2 * 100%) * -1);
translate: var(--tw-translate-x) var(--tw-translate-y);
}
+ .scale-95 {
+ --tw-scale-x: 95%;
+ --tw-scale-y: 95%;
+ --tw-scale-z: 95%;
+ scale: var(--tw-scale-x) var(--tw-scale-y);
+ }
+ .scale-125 {
+ --tw-scale-x: 125%;
+ --tw-scale-y: 125%;
+ --tw-scale-z: 125%;
+ scale: var(--tw-scale-x) var(--tw-scale-y);
+ }
.transform {
transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,);
}
@@ -585,6 +665,9 @@
margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse)));
}
}
+ .gap-y-4 {
+ row-gap: calc(var(--spacing) * 4);
+ }
.divide-y {
:where(& > :not(:last-child)) {
--tw-divide-y-reverse: 0;
@@ -665,6 +748,27 @@
.border-gray-200 {
border-color: var(--color-gray-200);
}
+ .border-indigo-700 {
+ border-color: var(--color-indigo-700);
+ }
+ .border-primary {
+ border-color: var(--color-primary);
+ }
+ .border-primary\/20 {
+ border-color: color-mix(in srgb, #137fec 20%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-primary) 20%, transparent);
+ }
+ }
+ .border-primary\/30 {
+ border-color: color-mix(in srgb, #137fec 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ border-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
+ }
+ }
+ .border-red-200 {
+ border-color: var(--color-red-200);
+ }
.border-slate-200 {
border-color: var(--color-slate-200);
}
@@ -701,6 +805,9 @@
background-color: color-mix(in oklab, var(--color-amber-400) 10%, transparent);
}
}
+ .bg-background-light {
+ background-color: var(--color-background-light);
+ }
.bg-black\/60 {
background-color: color-mix(in srgb, #000 60%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -725,18 +832,42 @@
.bg-indigo-100 {
background-color: var(--color-indigo-100);
}
+ .bg-indigo-600 {
+ background-color: var(--color-indigo-600);
+ }
.bg-orange-100 {
background-color: var(--color-orange-100);
}
.bg-pink-100 {
background-color: var(--color-pink-100);
}
+ .bg-primary {
+ background-color: var(--color-primary);
+ }
+ .bg-primary\/10 {
+ background-color: color-mix(in srgb, #137fec 10%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary) 10%, transparent);
+ }
+ }
+ .bg-primary\/30 {
+ background-color: color-mix(in srgb, #137fec 30%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-primary) 30%, transparent);
+ }
+ }
.bg-purple-100 {
background-color: var(--color-purple-100);
}
+ .bg-red-50 {
+ background-color: var(--color-red-50);
+ }
.bg-red-100 {
background-color: var(--color-red-100);
}
+ .bg-red-500 {
+ background-color: var(--color-red-500);
+ }
.bg-sky-100 {
background-color: var(--color-sky-100);
}
@@ -752,6 +883,9 @@
.bg-slate-100 {
background-color: var(--color-slate-100);
}
+ .bg-slate-200 {
+ background-color: var(--color-slate-200);
+ }
.bg-slate-200\/10 {
background-color: color-mix(in srgb, oklch(92.9% 0.013 255.508) 10%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -770,6 +904,12 @@
.bg-slate-900 {
background-color: var(--color-slate-900);
}
+ .bg-slate-900\/60 {
+ background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 60%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-slate-900) 60%, transparent);
+ }
+ }
.bg-teal-100 {
background-color: var(--color-teal-100);
}
@@ -779,6 +919,12 @@
.bg-white {
background-color: var(--color-white);
}
+ .bg-white\/40 {
+ background-color: color-mix(in srgb, #fff 40%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-white) 40%, transparent);
+ }
+ }
.bg-white\/80 {
background-color: color-mix(in srgb, #fff 80%, transparent);
@supports (color: color-mix(in lab, red, red)) {
@@ -809,12 +955,21 @@
.p-1\.5 {
padding: calc(var(--spacing) * 1.5);
}
+ .p-2 {
+ padding: calc(var(--spacing) * 2);
+ }
.p-3 {
padding: calc(var(--spacing) * 3);
}
.p-4 {
padding: calc(var(--spacing) * 4);
}
+ .p-6 {
+ padding: calc(var(--spacing) * 6);
+ }
+ .px-1\.5 {
+ padding-inline: calc(var(--spacing) * 1.5);
+ }
.px-2 {
padding-inline: calc(var(--spacing) * 2);
}
@@ -866,8 +1021,8 @@
.pb-6 {
padding-bottom: calc(var(--spacing) * 6);
}
- .pl-3 {
- padding-left: calc(var(--spacing) * 3);
+ .pl-4 {
+ padding-left: calc(var(--spacing) * 4);
}
.text-center {
text-align: center;
@@ -878,10 +1033,6 @@
.text-right {
text-align: right;
}
- .text-6xl {
- font-size: var(--text-6xl);
- line-height: var(--tw-leading, var(--text-6xl--line-height));
- }
.text-base {
font-size: var(--text-base);
line-height: var(--tw-leading, var(--text-base--line-height));
@@ -902,21 +1053,12 @@
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
- .\!text-\[14px\] {
- font-size: 14px !important;
- }
- .\!text-\[20px\] {
- font-size: 20px !important;
- }
.text-\[10px\] {
font-size: 10px;
}
.text-\[11px\] {
font-size: 11px;
}
- .text-\[20px\] {
- font-size: 20px;
- }
.leading-relaxed {
--tw-leading: var(--leading-relaxed);
line-height: var(--leading-relaxed);
@@ -982,9 +1124,15 @@
.text-amber-700 {
color: var(--color-amber-700);
}
+ .text-blue-600 {
+ color: var(--color-blue-600);
+ }
.text-blue-700 {
color: var(--color-blue-700);
}
+ .text-emerald-600 {
+ color: var(--color-emerald-600);
+ }
.text-emerald-700 {
color: var(--color-emerald-700);
}
@@ -1006,21 +1154,39 @@
.text-green-700 {
color: var(--color-green-700);
}
+ .text-indigo-600 {
+ color: var(--color-indigo-600);
+ }
.text-indigo-700 {
color: var(--color-indigo-700);
}
+ .text-orange-600 {
+ color: var(--color-orange-600);
+ }
.text-orange-700 {
color: var(--color-orange-700);
}
.text-pink-700 {
color: var(--color-pink-700);
}
+ .text-primary {
+ color: var(--color-primary);
+ }
.text-purple-700 {
color: var(--color-purple-700);
}
+ .text-red-500 {
+ color: var(--color-red-500);
+ }
+ .text-red-600 {
+ color: var(--color-red-600);
+ }
.text-red-700 {
color: var(--color-red-700);
}
+ .text-sky-600 {
+ color: var(--color-sky-600);
+ }
.text-sky-700 {
color: var(--color-sky-700);
}
@@ -1051,21 +1217,30 @@
.uppercase {
text-transform: uppercase;
}
+ .italic {
+ font-style: italic;
+ }
.line-through {
text-decoration-line: line-through;
}
+ .opacity-0 {
+ opacity: 0%;
+ }
.opacity-20 {
opacity: 20%;
}
- .opacity-30 {
- opacity: 30%;
+ .opacity-40 {
+ opacity: 40%;
+ }
+ .opacity-50 {
+ opacity: 50%;
+ }
+ .opacity-60 {
+ opacity: 60%;
}
.opacity-70 {
opacity: 70%;
}
- .opacity-80 {
- opacity: 80%;
- }
.opacity-100 {
opacity: 100%;
}
@@ -1077,19 +1252,32 @@
--tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
+ .shadow-md {
+ --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
.shadow-sm {
--tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
}
+ .ring-1 {
+ --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor);
+ box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ }
+ .ring-indigo-300 {
+ --tw-ring-color: var(--color-indigo-300);
+ }
+ .ring-slate-200 {
+ --tw-ring-color: var(--color-slate-200);
+ }
+ .ring-offset-1 {
+ --tw-ring-offset-width: 1px;
+ --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);
+ }
.grayscale {
--tw-grayscale: grayscale(100%);
filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,);
}
- .backdrop-blur {
- --tw-backdrop-blur: blur(8px);
- -webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
- backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
- }
.backdrop-blur-md {
--tw-backdrop-blur: blur(var(--blur-md));
-webkit-backdrop-filter: var(--tw-backdrop-blur,) var(--tw-backdrop-brightness,) var(--tw-backdrop-contrast,) var(--tw-backdrop-grayscale,) var(--tw-backdrop-hue-rotate,) var(--tw-backdrop-invert,) var(--tw-backdrop-opacity,) var(--tw-backdrop-saturate,) var(--tw-backdrop-sepia,);
@@ -1115,11 +1303,6 @@
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
transition-duration: var(--tw-duration, var(--default-transition-duration));
}
- .transition-shadow {
- transition-property: box-shadow;
- transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
- transition-duration: var(--tw-duration, var(--default-transition-duration));
- }
.transition-transform {
transition-property: transform, translate, scale, rotate;
transition-timing-function: var(--tw-ease, var(--default-transition-timing-function));
@@ -1129,14 +1312,27 @@
--tw-duration: 200ms;
transition-duration: 200ms;
}
+ .duration-300 {
+ --tw-duration: 300ms;
+ transition-duration: 300ms;
+ }
.duration-500 {
--tw-duration: 500ms;
transition-duration: 500ms;
}
+ .ease-in-out {
+ --tw-ease: var(--ease-in-out);
+ transition-timing-function: var(--ease-in-out);
+ }
.select-none {
-webkit-user-select: none;
user-select: none;
}
+ .group-focus-within\:text-primary {
+ &:is(:where(.group):focus-within *) {
+ color: var(--color-primary);
+ }
+ }
.group-hover\:scale-105 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
@@ -1147,11 +1343,24 @@
}
}
}
- .group-hover\:shadow-md {
+ .group-hover\:rotate-12 {
&:is(:where(.group):hover *) {
@media (hover: hover) {
- --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1));
- box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow);
+ rotate: 12deg;
+ }
+ }
+ }
+ .group-hover\:rotate-90 {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ rotate: 90deg;
+ }
+ }
+ }
+ .group-hover\:opacity-100 {
+ &:is(:where(.group):hover *) {
+ @media (hover: hover) {
+ opacity: 100%;
}
}
}
@@ -1160,6 +1369,13 @@
color: var(--color-slate-400);
}
}
+ .hover\:border-primary {
+ &:hover {
+ @media (hover: hover) {
+ border-color: var(--color-primary);
+ }
+ }
+ }
.hover\:bg-\[\#f7d600\] {
&:hover {
@media (hover: hover) {
@@ -1167,6 +1383,20 @@
}
}
}
+ .hover\:bg-red-100 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-red-100);
+ }
+ }
+ }
+ .hover\:bg-red-600 {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-red-600);
+ }
+ }
+ }
.hover\:bg-slate-50 {
&:hover {
@media (hover: hover) {
@@ -1181,10 +1411,17 @@
}
}
}
- .hover\:bg-white {
+ .hover\:bg-slate-200 {
&:hover {
@media (hover: hover) {
- background-color: var(--color-white);
+ background-color: var(--color-slate-200);
+ }
+ }
+ }
+ .hover\:text-primary {
+ &:hover {
+ @media (hover: hover) {
+ color: var(--color-primary);
}
}
}
@@ -1195,10 +1432,10 @@
}
}
}
- .hover\:opacity-50 {
+ .hover\:opacity-60 {
&:hover {
@media (hover: hover) {
- opacity: 50%;
+ opacity: 60%;
}
}
}
@@ -1221,6 +1458,11 @@
outline-width: 0px;
}
}
+ .xs\:block {
+ @media (width >= 480px) {
+ display: block;
+ }
+ }
.sm\:mb-3 {
@media (width >= 40rem) {
margin-bottom: calc(var(--spacing) * 3);
@@ -1256,6 +1498,11 @@
grid-template-columns: repeat(2, minmax(0, 1fr));
}
}
+ .sm\:items-baseline {
+ @media (width >= 40rem) {
+ align-items: baseline;
+ }
+ }
.sm\:items-center {
@media (width >= 40rem) {
align-items: center;
@@ -1330,6 +1577,16 @@
font-size: 11px;
}
}
+ .md\:order-2 {
+ @media (width >= 48rem) {
+ order: 2;
+ }
+ }
+ .md\:order-3 {
+ @media (width >= 48rem) {
+ order: 3;
+ }
+ }
.md\:ml-24 {
@media (width >= 48rem) {
margin-left: calc(var(--spacing) * 24);
@@ -1365,11 +1622,26 @@
width: calc(3/5 * 100%);
}
}
+ .md\:w-auto {
+ @media (width >= 48rem) {
+ width: auto;
+ }
+ }
.md\:flex-row {
@media (width >= 48rem) {
flex-direction: row;
}
}
+ .md\:justify-start {
+ @media (width >= 48rem) {
+ justify-content: flex-start;
+ }
+ }
+ .md\:gap-3 {
+ @media (width >= 48rem) {
+ gap: calc(var(--spacing) * 3);
+ }
+ }
.md\:rounded-2xl {
@media (width >= 48rem) {
border-radius: var(--radius-2xl);
@@ -1395,11 +1667,6 @@
padding: calc(var(--spacing) * 10);
}
}
- .md\:px-4 {
- @media (width >= 48rem) {
- padding-inline: calc(var(--spacing) * 4);
- }
- }
.md\:px-8 {
@media (width >= 48rem) {
padding-inline: calc(var(--spacing) * 8);
@@ -1410,11 +1677,6 @@
padding-inline: calc(var(--spacing) * 40);
}
}
- .md\:py-2 {
- @media (width >= 48rem) {
- padding-block: calc(var(--spacing) * 2);
- }
- }
.md\:text-2xl {
@media (width >= 48rem) {
font-size: var(--text-2xl);
@@ -1427,18 +1689,22 @@
line-height: var(--tw-leading, var(--text-3xl--line-height));
}
}
- .md\:text-sm {
- @media (width >= 48rem) {
- font-size: var(--text-sm);
- line-height: var(--tw-leading, var(--text-sm--line-height));
- }
- }
.md\:text-xs {
@media (width >= 48rem) {
font-size: var(--text-xs);
line-height: var(--tw-leading, var(--text-xs--line-height));
}
}
+ .lg\:block {
+ @media (width >= 64rem) {
+ display: block;
+ }
+ }
+ .lg\:table-cell {
+ @media (width >= 64rem) {
+ display: table-cell;
+ }
+ }
.lg\:grid-cols-3 {
@media (width >= 64rem) {
grid-template-columns: repeat(3, minmax(0, 1fr));
@@ -1477,37 +1743,50 @@
}
}
.dark\:divide-slate-800 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
:where(& > :not(:last-child)) {
border-color: var(--color-slate-800);
}
}
}
.dark\:border-gray-800 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
border-color: var(--color-gray-800);
}
}
.dark\:border-slate-700 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
border-color: var(--color-slate-700);
}
}
.dark\:border-slate-800 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
border-color: var(--color-slate-800);
}
}
.dark\:bg-amber-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(41.4% 0.112 45.904) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-amber-900) 30%, transparent);
}
}
}
+ .dark\:bg-background-dark {
+ &:where(.dark, .dark *) {
+ background-color: var(--color-background-dark);
+ }
+ }
+ .dark\:bg-background-dark\/80 {
+ &:where(.dark, .dark *) {
+ background-color: var(--color-background-dark);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-background-dark) 80%, transparent);
+ }
+ }
+ }
.dark\:bg-blue-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(37.9% 0.146 265.522) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-blue-900) 30%, transparent);
@@ -1515,7 +1794,7 @@
}
}
.dark\:bg-emerald-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(37.8% 0.077 168.94) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-emerald-900) 30%, transparent);
@@ -1523,25 +1802,17 @@
}
}
.dark\:bg-gray-700 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: var(--color-gray-700);
}
}
.dark\:bg-gray-800 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: var(--color-gray-800);
}
}
- .dark\:bg-gray-800\/80 {
- @media (prefers-color-scheme: dark) {
- background-color: color-mix(in srgb, oklch(27.8% 0.033 256.848) 80%, transparent);
- @supports (color: color-mix(in lab, red, red)) {
- background-color: color-mix(in oklab, var(--color-gray-800) 80%, transparent);
- }
- }
- }
.dark\:bg-green-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(39.3% 0.095 152.535) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-green-900) 30%, transparent);
@@ -1549,7 +1820,7 @@
}
}
.dark\:bg-indigo-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(35.9% 0.144 278.697) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-indigo-900) 30%, transparent);
@@ -1557,7 +1828,7 @@
}
}
.dark\:bg-orange-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(40.8% 0.123 38.172) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-orange-900) 30%, transparent);
@@ -1565,7 +1836,7 @@
}
}
.dark\:bg-pink-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(40.8% 0.153 2.432) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-pink-900) 30%, transparent);
@@ -1573,7 +1844,7 @@
}
}
.dark\:bg-purple-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(38.1% 0.176 304.987) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-purple-900) 30%, transparent);
@@ -1581,7 +1852,7 @@
}
}
.dark\:bg-red-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(39.6% 0.141 25.723) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-red-900) 30%, transparent);
@@ -1589,7 +1860,7 @@
}
}
.dark\:bg-sky-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(39.1% 0.09 240.876) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-sky-900) 30%, transparent);
@@ -1597,17 +1868,17 @@
}
}
.dark\:bg-slate-700 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: var(--color-slate-700);
}
}
.dark\:bg-slate-800 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: var(--color-slate-800);
}
}
.dark\:bg-slate-800\/50 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-slate-800) 50%, transparent);
@@ -1615,20 +1886,28 @@
}
}
.dark\:bg-slate-900 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: var(--color-slate-900);
}
}
.dark\:bg-slate-900\/50 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 50%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-slate-900) 50%, transparent);
}
}
}
+ .dark\:bg-slate-900\/80 {
+ &:where(.dark, .dark *) {
+ background-color: color-mix(in srgb, oklch(20.8% 0.042 265.755) 80%, transparent);
+ @supports (color: color-mix(in lab, red, red)) {
+ background-color: color-mix(in oklab, var(--color-slate-900) 80%, transparent);
+ }
+ }
+ }
.dark\:bg-teal-900\/30 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: color-mix(in srgb, oklch(38.6% 0.063 188.416) 30%, transparent);
@supports (color: color-mix(in lab, red, red)) {
background-color: color-mix(in oklab, var(--color-teal-900) 30%, transparent);
@@ -1636,131 +1915,127 @@
}
}
.dark\:bg-white {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
background-color: var(--color-white);
}
}
.dark\:text-amber-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-amber-400);
}
}
.dark\:text-blue-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-blue-400);
}
}
.dark\:text-emerald-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-emerald-400);
}
}
.dark\:text-gray-300 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-gray-300);
}
}
.dark\:text-gray-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-gray-400);
}
}
.dark\:text-gray-500 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-gray-500);
}
}
.dark\:text-green-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-green-400);
}
}
.dark\:text-indigo-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-indigo-400);
}
}
.dark\:text-orange-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-orange-400);
}
}
.dark\:text-pink-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-pink-400);
}
}
.dark\:text-purple-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-purple-400);
}
}
.dark\:text-red-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-red-400);
}
}
.dark\:text-sky-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-sky-400);
}
}
.dark\:text-slate-100 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-100);
}
}
.dark\:text-slate-200 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-200);
}
}
.dark\:text-slate-300 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-300);
}
}
.dark\:text-slate-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-400);
}
}
.dark\:text-slate-500 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-500);
}
}
.dark\:text-slate-700 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-700);
}
}
.dark\:text-slate-900 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-slate-900);
}
}
.dark\:text-teal-400 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-teal-400);
}
}
.dark\:text-white {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
color: var(--color-white);
}
}
- .dark\:hover\:bg-gray-700 {
- @media (prefers-color-scheme: dark) {
- &:hover {
- @media (hover: hover) {
- background-color: var(--color-gray-700);
- }
- }
+ .dark\:ring-slate-700 {
+ &:where(.dark, .dark *) {
+ --tw-ring-color: var(--color-slate-700);
}
}
.dark\:hover\:bg-slate-700 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
&:hover {
@media (hover: hover) {
background-color: var(--color-slate-700);
@@ -1768,8 +2043,17 @@
}
}
}
+ .dark\:hover\:bg-slate-800 {
+ &:where(.dark, .dark *) {
+ &:hover {
+ @media (hover: hover) {
+ background-color: var(--color-slate-800);
+ }
+ }
+ }
+ }
.dark\:hover\:bg-slate-800\/50 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
&:hover {
@media (hover: hover) {
background-color: color-mix(in srgb, oklch(27.9% 0.041 260.031) 50%, transparent);
@@ -1781,7 +2065,7 @@
}
}
.dark\:hover\:text-slate-200 {
- @media (prefers-color-scheme: dark) {
+ &:where(.dark, .dark *) {
&:hover {
@media (hover: hover) {
color: var(--color-slate-200);
@@ -1790,6 +2074,49 @@
}
}
}
+:root {
+ --bg-light: #f6f7f8;
+ --bg-dark: #ffffff;
+}
+.dark {
+ --bg-light: #101922;
+ --bg-dark: #101922;
+}
+@layer base {
+ button, [type='button'], [type='reset'], [type='submit'] {
+ cursor: pointer;
+ }
+ button:disabled {
+ cursor: default;
+ }
+}
+@layer utilities {
+ .no-scrollbar::-webkit-scrollbar {
+ display: none;
+ }
+ .no-scrollbar {
+ -ms-overflow-style: none;
+ scrollbar-width: none;
+ }
+ .modal-open {
+ overflow: hidden !important;
+ height: 100% !important;
+ overscroll-behavior: none !important;
+ }
+}
+@layer components {
+ #modal-main-carousel-container {
+ scroll-snap-type: none;
+ overflow-x: hidden;
+ }
+ #product-modal {
+ overscroll-behavior: contain;
+ }
+ [id^='thumb-'] {
+ transition: all 0.6s ease-in-out;
+ background-color: #f1f5f9;
+ }
+}
@property --tw-translate-x {
syntax: "*";
inherits: false;
@@ -1805,6 +2132,21 @@
inherits: false;
initial-value: 0;
}
+@property --tw-scale-x {
+ syntax: "*";
+ inherits: false;
+ initial-value: 1;
+}
+@property --tw-scale-y {
+ syntax: "*";
+ inherits: false;
+ initial-value: 1;
+}
+@property --tw-scale-z {
+ syntax: "*";
+ inherits: false;
+ initial-value: 1;
+}
@property --tw-rotate-x {
syntax: "*";
inherits: false;
@@ -2010,20 +2352,9 @@
syntax: "*";
inherits: false;
}
-@property --tw-scale-x {
+@property --tw-ease {
syntax: "*";
inherits: false;
- initial-value: 1;
-}
-@property --tw-scale-y {
- syntax: "*";
- inherits: false;
- initial-value: 1;
-}
-@property --tw-scale-z {
- syntax: "*";
- inherits: false;
- initial-value: 1;
}
@property --tw-outline-style {
syntax: "*";
@@ -2036,6 +2367,9 @@
--tw-translate-x: 0;
--tw-translate-y: 0;
--tw-translate-z: 0;
+ --tw-scale-x: 1;
+ --tw-scale-y: 1;
+ --tw-scale-z: 1;
--tw-rotate-x: initial;
--tw-rotate-y: initial;
--tw-rotate-z: initial;
@@ -2084,9 +2418,7 @@
--tw-backdrop-saturate: initial;
--tw-backdrop-sepia: initial;
--tw-duration: initial;
- --tw-scale-x: 1;
- --tw-scale-y: 1;
- --tw-scale-z: 1;
+ --tw-ease: initial;
--tw-outline-style: solid;
}
}