/* Oumos 廠商預約系統 — 前台樣式 */
.ovb-booking {
	margin: 0 0 20px;
	padding: 16px 18px;
	border: 1px solid #e5e5e5;
	border-radius: 10px;
	background: #fafafa;
}
.ovb-booking__hint { margin: 0 0 12px; font-size: 14px; color: #444; }
.ovb-row { display: flex; align-items: center; gap: 10px; margin: 0 0 12px; flex-wrap: wrap; }
.ovb-row > label { min-width: 92px; font-weight: 600; }
.ovb-booking input[type="date"],
.ovb-booking input[type="number"],
.ovb-booking select { padding: 6px 8px; border: 1px solid #ccc; border-radius: 6px; }
.ovb-unit-note { color: #888; font-size: 13px; }

.ovb-addons { margin: 6px 0 12px; padding: 12px; background: #fff; border: 1px dashed #ddd; border-radius: 8px; }
.ovb-addons__title { display: block; font-weight: 600; margin-bottom: 8px; }
.ovb-addon-item { display: flex; align-items: center; gap: 8px; padding: 4px 0; }
.ovb-addon-price { color: #c0392b; font-weight: 600; }

.ovb-total-row { font-size: 16px; font-weight: 700; margin: 0; }
.ovb-total { color: #c0392b; }

/* Elementor 廠商欄位 widget */
.ovb-field-label { font-weight: 600; margin-right: 6px; }
.ovb-choice { display: inline-flex; flex-wrap: wrap; gap: 10px; }
.ovb-opt { display: inline-block; }
.ovb-gallery { display: flex; flex-wrap: wrap; gap: 8px; }
.ovb-gallery img { max-width: 160px; height: auto; border-radius: 6px; }

/* widget 模式:加入購物車按鈕與訊息 */
.ovb-booking .ovb-ajax-add {
	margin-top: 12px;
	padding: 10px 22px;
	border: none;
	border-radius: 8px;
	background: #c0392b;
	color: #fff;
	font-weight: 700;
	cursor: pointer;
}
.ovb-booking .ovb-ajax-add:disabled { opacity: .6; cursor: default; }
.ovb-booking__msg { margin: 10px 0 0; font-weight: 600; }
.ovb-mode-widget { max-width: 480px; }

/* ===== 廠商篩選 ===== */
.ovb-filter { width: 100%; max-width: 100%; box-sizing: border-box; }
.ovb-filter__bar, .ovb-filter__dds { max-width: 100%; min-width: 0; box-sizing: border-box; }
.ovb-filter__dds > * { min-width: 0; }
.ovb-filter__controls { border: 1px solid #eee; border-radius: 10px; padding: 16px; }
.ovb-filter__group { margin-bottom: 16px; }
.ovb-filter__title { margin: 0 0 8px; font-size: 15px; }
.ovb-filter__opts { display: flex; flex-direction: column; gap: 6px; }
.ovb-filter__opt { font-weight: 400; display: flex; align-items: center; gap: 6px; cursor: pointer; }
.ovb-filter__reset { background: none; border: 1px solid #ccc; border-radius: 6px; padding: 6px 12px; cursor: pointer; }
.ovb-filter__count { color: #777; margin: 0 0 12px; }
.ovb-filter__grid { display: grid; gap: 20px; }
.ovb-card { border: 1px solid #eee; border-radius: 10px; overflow: hidden; background: #fff; transition: box-shadow .2s; }
.ovb-card:hover { box-shadow: 0 6px 20px rgba(0,0,0,.08); }
.ovb-card__link { text-decoration: none; color: inherit; display: block; }
.ovb-card__img img { width: 100%; height: auto; display: block; }
.ovb-card__body { padding: 12px 14px; }
.ovb-card__title { font-size: 16px; margin: 0 0 6px; }
.ovb-card__price { margin: 0; font-weight: 700; color: #c0392b; }
.ovb-filter__more { display: block; margin: 20px auto 0; padding: 10px 26px; border: none; border-radius: 8px; background: #c0392b; color: #fff; font-weight: 700; cursor: pointer; }
.ovb-filter.ovb-loading { opacity: .55; }
.ovb-filter__empty { color: #888; padding: 20px 0; }

/* ===== 廠商評價 ===== */
.ovb-reviews { margin: 24px 0; }
.ovb-reviews__summary { padding: 16px; border: 1px solid #eee; border-radius: 10px; margin-bottom: 20px; }
.ovb-reviews__overall { font-size: 20px; display: flex; align-items: center; gap: 10px; }
.ovb-reviews__count { color: #888; font-size: 14px; }
.ovb-reviews__per { display: flex; flex-wrap: wrap; gap: 8px 24px; margin-top: 10px; }
.ovb-reviews__per-item { display: flex; align-items: center; gap: 8px; }
.ovb-star { color: #ddd; font-size: 18px; line-height: 1; }
.ovb-star.on, .ovb-star.half { color: #f5a623; }
.ovb-stars-num { font-size: 14px; color: #555; }
.ovb-review { padding: 14px 0; border-bottom: 1px solid #eee; }
.ovb-review__head { display: flex; align-items: baseline; gap: 10px; }
.ovb-review__date { color: #999; font-size: 13px; }
.ovb-review__crit { display: flex; flex-wrap: wrap; gap: 6px 18px; margin: 6px 0; font-size: 14px; }
.ovb-review__crit-item { display: inline-flex; align-items: center; gap: 6px; }
.ovb-review__img img { max-width: 220px; height: auto; border-radius: 8px; margin: 8px 0; }
.ovb-review__text { color: #333; }

.ovb-review-form-wrap { margin-top: 24px; padding: 18px; border: 1px solid #e5e5e5; border-radius: 10px; background: #fafafa; }
.ovb-review-form__title { margin: 0 0 12px; }
.ovb-rate-row { display: flex; align-items: center; gap: 12px; margin-bottom: 8px; }
.ovb-rate-label { min-width: 90px; font-weight: 600; }
.ovb-stars-input .ovb-star { cursor: pointer; font-size: 24px; }
.ovb-review-text { width: 100%; }
.ovb-review-imglabel { display: inline-flex; flex-direction: column; gap: 6px; font-size: 14px; }
.ovb-review-submit { margin-top: 10px; padding: 10px 22px; border: none; border-radius: 8px; background: #c0392b; color: #fff; font-weight: 700; cursor: pointer; }
.ovb-review-login a { font-weight: 700; }

/* ===== v2.9 評價卡片 + 滑動 + Elementor 控制 ===== */
.ovb-reviews__slider { position: relative; padding: 0 8px; }
.ovb-reviews__track {
	--ovb-cols: 1;
	--ovb-gap: 20px;
	display: grid;
	grid-template-columns: repeat(var(--ovb-cols), minmax(0, 1fr));
	gap: var(--ovb-gap);
}
/* 滑動模式:橫向捲動 + 對齊吸附,每頁顯示 --ovb-cols 張 */
.ovb-reviews__track.is-slider {
	display: flex;
	grid-template-columns: none;
	overflow-x: auto;
	scroll-snap-type: x mandatory;
	scroll-behavior: smooth;
	-webkit-overflow-scrolling: touch;
	padding-bottom: 8px;
}
.ovb-reviews__track.is-slider .ovb-review-card {
	flex: 0 0 calc((100% - (var(--ovb-cols) - 1) * var(--ovb-gap)) / var(--ovb-cols));
	scroll-snap-align: start;
}

/* 卡片本體 */
.ovb-review-card {
	background: #fff;
	border: 1px solid #ececec;
	border-radius: 14px;
	overflow: hidden;
	display: flex;
	flex-direction: column;
	padding: 0;
}
.ovb-review-card__img {
	width: 100%;
	aspect-ratio: 4 / 3;                 /* 預設比例,會被下方比例 class 覆蓋 */
	overflow: hidden;
	border-radius: var(--ovb-img-radius, 0);
}
.ovb-review-card__img img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ovb-review-card__body { padding: 16px; }
.ovb-review-card .ovb-review__head { margin-bottom: 4px; }

/* 圖片比例(Elementor 用 prefix class 切換) */
.ovb-imgr-11  .ovb-review-card__img { aspect-ratio: 1 / 1; }
.ovb-imgr-43  .ovb-review-card__img { aspect-ratio: 4 / 3; }
.ovb-imgr-34  .ovb-review-card__img { aspect-ratio: 3 / 4; }
.ovb-imgr-169 .ovb-review-card__img { aspect-ratio: 16 / 9; }
.ovb-imgr-natural .ovb-review-card__img { aspect-ratio: auto; }
.ovb-imgr-natural .ovb-review-card__img img { height: auto; }

/* 星等項目:橫向 / 直向 */
.ovb-review-card .ovb-review__crit { display: flex; flex-wrap: wrap; gap: 4px 14px; margin: 6px 0; }
.ovb-crit-col .ovb-review-card .ovb-review__crit { flex-direction: column; flex-wrap: nowrap; }
.ovb-review__crit-item { display: inline-flex; align-items: center; gap: 6px; white-space: nowrap; }
/* 不顯示星星時只留分數數字 */
.ovb-hide-crit-stars .ovb-review-card .ovb-review__crit .ovb-star { display: none; }

/* 滑動導覽鈕 */
.ovb-rv-nav {
	position: absolute; top: 40%; transform: translateY(-50%); z-index: 3;
	width: 40px; height: 40px; border-radius: 999px; border: none;
	background: #fff; box-shadow: 0 4px 14px rgba(0,0,0,.15);
	cursor: pointer; font-size: 24px; line-height: 1; color: #333;
	display: flex; align-items: center; justify-content: center;
}
.ovb-rv-prev { left: -6px; }
.ovb-rv-next { right: -6px; }

/* 條列式(list):單欄、無卡片框、圖片用原始比例 */
.ovb-layout-list .ovb-reviews__track { display: block; }
.ovb-layout-list .ovb-review-card { border: none; border-radius: 0; border-bottom: 1px solid #eee; }
.ovb-layout-list .ovb-review-card__img { aspect-ratio: auto; max-width: 320px; }
.ovb-layout-list .ovb-review-card__img img { height: auto; }
.ovb-layout-list .ovb-review-card__body { padding: 14px 0; }

/* 廠商欄位 widget:選項預設 (可被 Elementor 樣式覆寫) */
.ovb-field-value .ovb-choice { align-items: flex-start; }
.ovb-field-value .ovb-opt { display: inline-block; }

/* ===== 收藏 ===== */
.ovb-fav { background: none; border: none; cursor: pointer; line-height: 1; display: inline-flex; align-items: center; gap: 8px; transition: background-color .15s, border-color .15s, color .15s; }
.ovb-fav-icon { color: #bbb; display: inline-flex; transition: color .15s, transform .15s; }
.ovb-fav.is-active .ovb-fav-icon { color: #f5a623; }
.ovb-fav:active .ovb-fav-icon { transform: scale(.85); }
.ovb-fav-icon svg { width: 28px; height: 28px; }
/* 收藏按鈕文字 */
.ovb-fav-text { display: inline-flex; align-items: center; white-space: nowrap; }
.ovb-fav-text--active { display: none; }
.ovb-fav.is-active .ovb-fav-text--active { display: inline; }
.ovb-fav.is-active.ovb-has-activetext .ovb-fav-text--default { display: none; }

.ovb-fav-list { display: grid; grid-template-columns: repeat(auto-fill, minmax(200px, 1fr)); gap: 20px; }
.ovb-fav-card { border: 1px solid #eee; border-radius: 10px; overflow: hidden; background: #fff; }
.ovb-fav-card__link { display: block; text-decoration: none; color: inherit; }
.ovb-fav-card__img img { width: 100%; height: auto; display: block; }
.ovb-fav-card__title { padding: 10px 12px 4px; font-weight: 600; }
.ovb-fav-card__price { padding: 0 12px 10px; color: #c0392b; }
.ovb-fav-remove { width: 100%; border: none; border-top: 1px solid #eee; background: #fafafa; padding: 8px; cursor: pointer; }
.ovb-fav-remove:hover { background: #f0f0f0; }
/* 已收藏時愛心填滿(SVG 圖示) */
.ovb-fav.is-active .ovb-fav-icon svg { fill: currentColor; }
/* 試算:加入購物車 + 收藏 同一排;兩顆等高、且強制同一水平線(歸零外距、強制置中) */
.ovb-cart-row { display: flex !important; align-items: center !important; gap: 12px; flex-wrap: wrap; }
.ovb-cart-row .ovb-ajax-add,
.ovb-cart-row .ovb-fav { display: inline-flex !important; align-items: center !important; justify-content: center; box-sizing: border-box; height: var(--ovb-btn-h, 50px) !important; min-height: 0 !important; padding-top: 0 !important; padding-bottom: 0 !important; margin: 0 !important; align-self: center !important; vertical-align: middle; line-height: 1.2; }
.ovb-cart-row .ovb-fav { padding-left: 18px; padding-right: 18px; border: 1px solid #ddd; border-radius: 6px; }
.ovb-cart-row .ovb-fav .ovb-fav-icon svg { width: 20px; height: 20px; }

/* ===== 作品集 grid / masonry / slider / 燈箱 ===== */
.ovb-gallery-grid { display: grid; grid-template-columns: repeat(var(--ovb-cols, 3), 1fr); gap: var(--ovb-gap, 8px); }
.ovb-gallery-grid .ovb-gimg { display: block; border-radius: var(--ovb-radius, 0); overflow: hidden; }
.ovb-gallery-grid:not(.ovb-fit) img { width: 100%; height: auto; display: block; }
.ovb-gallery-grid.ovb-fit .ovb-gimg { aspect-ratio: var(--ovb-ratio, 4/3); }
.ovb-gallery-grid.ovb-fit .ovb-gimg img { width: 100%; height: 100%; object-fit: cover; object-position: center center; display: block; }

/* 瀑布流:保留原圖比例,交錯緊排 */
.ovb-gallery-masonry { columns: var(--ovb-cols, 3); column-gap: var(--ovb-gap, 8px); }
.ovb-gallery-masonry .ovb-gimg { display: block; break-inside: avoid; margin-bottom: var(--ovb-gap, 8px); border-radius: var(--ovb-radius, 0); overflow: hidden; }
.ovb-gallery-masonry .ovb-gimg img { width: 100%; height: auto; display: block; }

.ovb-slider { position: relative; }
.ovb-slider-track { display: flex; gap: var(--ovb-gap, 8px); overflow-x: auto; scroll-snap-type: x mandatory; scroll-behavior: smooth; -webkit-overflow-scrolling: touch; -ms-overflow-style: none; scrollbar-width: none; }
.ovb-slider-track::-webkit-scrollbar { display: none; }
.ovb-slide { flex: 0 0 calc((100% - (var(--ovb-per, 3) - 1) * var(--ovb-gap, 8px)) / var(--ovb-per, 3)); scroll-snap-align: start; }
.ovb-slide .ovb-gimg { display: block; border-radius: var(--ovb-radius, 0); overflow: hidden; }
.ovb-slide img { width: 100%; display: block; }
.ovb-slider.ovb-fit .ovb-slide .ovb-gimg { aspect-ratio: var(--ovb-ratio, 4/3); }
.ovb-slider.ovb-fit .ovb-slide .ovb-gimg img { width: 100%; height: 100%; object-fit: cover; object-position: center center; }
.ovb-slider-prev, .ovb-slider-next { position: absolute; top: 50%; transform: translateY(-50%); width: 36px; height: 36px; border-radius: 50%; border: none; background: rgba(0,0,0,.45); color: #fff; font-size: 20px; line-height: 1; cursor: pointer; z-index: 2; }
.ovb-slider-prev { left: 6px; } .ovb-slider-next { right: 6px; }
.ovb-slider-prev:hover, .ovb-slider-next:hover { background: rgba(0,0,0,.7); }

.ovb-lightbox-overlay { position: fixed; inset: 0; background: rgba(0,0,0,.85); display: flex; align-items: center; justify-content: center; z-index: 99999; cursor: zoom-out; }
.ovb-lightbox-overlay img { max-width: 92%; max-height: 92%; box-shadow: 0 10px 40px rgba(0,0,0,.5); }

/* ===== 選項前置圖示 ===== */
.ovb-choice .ovb-opt { display: flex; align-items: flex-start; gap: 6px; }
.ovb-opt-icon { display: inline-flex; align-items: center; justify-content: center; line-height: 1.5; height: 1.5em; height: 1lh; flex: 0 0 auto; }
.ovb-opt-icon svg { width: 1em; height: 1em; fill: currentColor; }
.ovb-opt-icon i { font-style: normal; color: inherit; line-height: 1; }
.ovb-opt-text { min-width: 0; }

/* 內容文字值 (可於 widget 樣式分頁的「內容文字」調整) */
.ovb-value-text { display: inline-block; }

/* ===== 廠商註冊 / 登入 ===== */
.ovb-portal { display: grid; grid-template-columns: 1fr 1fr; gap: 40px; }
@media (max-width: 768px){ .ovb-portal { grid-template-columns: 1fr; } }
.ovb-portal-col h3 { margin-bottom: 12px; }
.ovb-vendor-reg-form label { display: block; font-weight: 600; margin-bottom: 4px; }
.ovb-vendor-reg-form input, .ovb-vendor-reg-form textarea, .ovb-vendor-reg-form select { width: 100%; }
.ovb-vendor-reg-form .req { color: #c0392b; margin-left: 3px; }
.ovb-portal-msg { padding: 12px 16px; border-radius: 8px; margin-bottom: 16px; }
.ovb-portal-msg.ovb-ok { background: #e8f5e9; color: #256029; }
.ovb-portal-msg.ovb-err { background: #fdecea; color: #a33; }

/* ===== 作品集(統一結構,可分裝置切換版型) ===== */
.ovb-gtrack::-webkit-scrollbar { display: none; }
.ovb-gtrack { -ms-overflow-style: none; scrollbar-width: none; }
.ovb-gtrack .ovb-gimg { display: block; }
.ovb-gtrack .ovb-gimg img { width: 100%; display: block; }

/* ===== 篩選:搜尋 / 價格輸入 ===== */
.ovb-filter__group--search .ovb-f-search { width: 100%; padding: 8px 12px; border: 1px solid #ddd; border-radius: 8px; }
.ovb-filter__price { display: flex; align-items: center; gap: 8px; }
.ovb-filter__price input { width: 100%; padding: 8px 10px; border: 1px solid #ddd; border-radius: 12px; }
.ovb-filter__reset { cursor: pointer; }

/* ===== 篩選器:橫向搜尋列 + 膠囊下拉 ===== */
.ovb-filter__bar { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; margin-bottom: 24px; }
.ovb-filter__search { display: flex; align-items: center; gap: 8px; background: #fff; border-radius: 999px; padding: 8px 16px; box-shadow: 0 3px 14px rgba(0,0,0,.06); flex: 0 1 auto; width: 260px; max-width: 100%; min-width: 0; }
.ovb-filter__search svg { width: 18px; height: 18px; opacity: .45; flex: 0 0 auto; }
.ovb-filter__search .ovb-f-search { border: none; outline: none; background: transparent; width: 100%; font: inherit; color: inherit; padding: 0; margin: 0; height: auto; line-height: 1.4; box-shadow: none; }
.ovb-filter__dds { display: flex; flex-wrap: wrap; gap: 12px; align-items: center; }
.ovb-dd { position: relative; }
.ovb-dd__btn { display: inline-flex; align-items: center; gap: 8px; background: #fff; border: none; border-radius: 999px; padding: 8px 16px; box-shadow: 0 3px 14px rgba(0,0,0,.06); cursor: pointer; font: inherit; color: inherit; white-space: nowrap; }
.ovb-dd__caret { width: 8px; height: 8px; border-right: 2px solid currentColor; border-bottom: 2px solid currentColor; transform: rotate(45deg); margin-top: -3px; opacity: .5; transition: transform .2s; }
.ovb-dd.is-open .ovb-dd__caret { transform: rotate(-135deg); margin-top: 3px; }
.ovb-dd__panel { display: none; position: absolute; top: calc(100% + 8px); left: 0; min-width: 210px; background: #fff; border-radius: 14px; box-shadow: 0 10px 34px rgba(0,0,0,.14); padding: 14px 16px; z-index: 30; }
.ovb-dd.is-open .ovb-dd__panel { display: block; }
.ovb-dd__panel .ovb-filter__opt { display: block; padding: 5px 0; white-space: nowrap; }
.ovb-filter__reset { background: #fff; border: none; border-radius: 999px; padding: 8px 16px; box-shadow: 0 3px 14px rgba(0,0,0,.06); cursor: pointer; color: #999; font: inherit; white-space: nowrap; flex: 0 1 auto; max-width: 100%; box-sizing: border-box; }
.ovb-filter__mtoggle { display: none; align-items: center; gap: 8px; background: #fff; border: none; border-radius: 999px; padding: 8px 16px; box-shadow: 0 3px 14px rgba(0,0,0,.06); cursor: pointer; font: inherit; color: inherit; }
.ovb-filter__mtoggle svg { width: 18px; height: 18px; }

@media (max-width: 768px) {
	.ovb-filter__mtoggle { display: inline-flex; }
	.ovb-filter__dds { display: none; width: 100%; flex-direction: column; align-items: stretch; }
	.ovb-filter__bar.mopen .ovb-filter__dds { display: flex; }
	.ovb-dd, .ovb-dd__btn { width: 100%; }
	.ovb-dd__btn { justify-content: space-between; }
	.ovb-dd__panel { position: static; box-shadow: none; padding: 6px 0 8px 14px; min-width: 0; border-radius: 0; }
}

/* 篩選:側邊版型 + 每排膠囊數 */
.ovb-filter--side { display: flex; align-items: flex-start; gap: 28px; }
.ovb-filter--side .ovb-filter__bar { flex: 0 0 var(--ovb-side-w, 260px); flex-direction: column; align-items: stretch; margin: 0; }
.ovb-filter--side .ovb-filter__dds { display: flex; flex-direction: column; align-items: stretch; }
.ovb-filter--side .ovb-filter__mtoggle { display: none !important; }
.ovb-filter--side .ovb-dd, .ovb-filter--side .ovb-dd__btn { width: 100%; }
.ovb-filter--side .ovb-dd__btn { justify-content: space-between; }
.ovb-filter--side .ovb-filter__results { flex: 1 1 auto; min-width: 0; }
@media (max-width: 768px) { .ovb-filter--side { flex-direction: column; } .ovb-filter--side .ovb-filter__bar { flex-basis: auto; width: 100%; } }

/* 篩選:上方版型 (橫向在上、結果在下) — 明確覆寫 */
.ovb-filter--top { display: block !important; }
.ovb-filter--top .ovb-filter__bar { display: flex !important; flex-direction: row !important; flex-wrap: wrap !important; width: 100% !important; }
.ovb-filter--top .ovb-filter__results { display: block !important; width: 100% !important; }

/* ===== 篩選:搜尋列自成一列(可對齊/全寬) ===== */
.ovb-filter__searchrow { display: contents; }

/* ===== 篩選:手機/平板收合成 icon + 抽屜 ===== */
.ovb-filter__backdrop { display: none; position: fixed; inset: 0; background: rgba(0,0,0,.45); z-index: 9998; }

/* 抽屜樣式(共用),由 .ovb-drawer-on 在斷點內啟用 */
.ovb-drawer-on .ovb-filter__mtoggle { display: inline-flex !important; }
.ovb-drawer-on .ovb-filter__dds {
	position: fixed !important; top: 0 !important; height: 100vh !important;
	width: 84% !important; max-width: 340px !important;
	background: #fff !important; z-index: 9999 !important;
	padding: 64px 20px 24px !important; overflow: auto !important;
	box-shadow: 0 0 40px rgba(0,0,0,.2);
	flex-direction: column !important; align-items: stretch !important; gap: var(--ovb-drawer-gap, 12px) !important;
	transition: transform .28s ease;
}
.ovb-drawer-on.ovb-drawer-left  .ovb-filter__dds { left: 0 !important;  transform: translateX(-108%); }
.ovb-drawer-on.ovb-drawer-right .ovb-filter__dds { right: 0 !important; transform: translateX(108%); }
.ovb-drawer-on.ovb-drawer-full  .ovb-filter__dds { left: 0 !important; width: 100vw !important; max-width: none !important; transform: translateY(-108%); }
.ovb-drawer-on .ovb-filter__bar.mopen .ovb-filter__dds { transform: none !important; }
.ovb-drawer-on .ovb-filter__bar.mopen .ovb-filter__backdrop { display: block; }
.ovb-drawer-on .ovb-dd, .ovb-drawer-on .ovb-dd__btn { width: 100% !important; }
.ovb-drawer-on .ovb-dd__panel { position: static !important; box-shadow: none !important; padding: 6px 0 8px 14px !important; }

/* ===== 篩選:整排均分 Grid 模式(左右頂滿、每排 N 個、resize 不跑) ===== */
.ovb-filter--grid .ovb-filter__dds {
	display: grid !important;
	grid-template-columns: repeat(var(--ovb-cols, 4), minmax(0, 1fr)) !important;
	gap: var(--ovb-cell-gap, 12px) !important;
	width: 100% !important;
	align-items: stretch !important;
}
.ovb-filter--grid .ovb-filter__dds > * { width: 100% !important; min-width: 0 !important; flex: none !important; margin: 0 !important; }
.ovb-filter--grid .ovb-filter__dds .ovb-dd__btn { width: 100% !important; min-width: 0 !important; }
.ovb-filter--grid .ovb-filter__dds .ovb-filter__reset { max-width: none !important; }

/* ===== 抽屜(icon filter)內容排列可控 ===== */
.ovb-drawer-on .ovb-filter__dds { align-items: var(--ovb-drawer-align, stretch) !important; }

/* ===== 手機抽屜:套用篩選按鈕(預設隱藏,只在抽屜模式顯示) ===== */
.ovb-filter__apply {
	display: none; width: 100%; margin-top: auto; box-sizing: border-box;
	background: #a4808a; color: #fff; border: none; border-radius: 999px;
	padding: 13px 18px; font: inherit; font-weight: 600; cursor: pointer;
	box-shadow: 0 3px 14px rgba(0,0,0,.14);
}
.ovb-filter__apply:hover { opacity: .92; }
.ovb-drawer-on .ovb-filter__apply { display: block !important; }

/* ===== Filter 抽屜:用媒體查詢也能觸發(讓 Elementor 手機預覽也看得到) ===== */
@media (max-width: 767px) {
	.ovb-filter.ovb-collapse-mobile .ovb-filter__mtoggle { display: inline-flex !important; }
	.ovb-filter.ovb-collapse-mobile .ovb-filter__dds {
		display: flex !important; flex-direction: column !important;
		align-items: var(--ovb-drawer-align, stretch) !important;
		position: fixed !important; top: 0 !important; height: 100vh !important;
		width: 84% !important; max-width: 340px !important;
		background: #fff !important; z-index: 9999 !important;
		padding: 64px 20px 24px !important; overflow: auto !important;
		box-shadow: 0 0 40px rgba(0,0,0,.2);
		gap: var(--ovb-drawer-gap, 12px) !important;
		grid-template-columns: none !important;
		transition: transform .28s ease;
	}
	.ovb-filter.ovb-collapse-mobile.ovb-drawer-left  .ovb-filter__dds { left: 0 !important;  transform: translateX(-108%); }
	.ovb-filter.ovb-collapse-mobile.ovb-drawer-right .ovb-filter__dds { right: 0 !important; transform: translateX(108%); }
	.ovb-filter.ovb-collapse-mobile.ovb-drawer-full  .ovb-filter__dds { left: 0 !important; width: 100vw !important; max-width: none !important; transform: translateY(-108%); }
	.ovb-filter.ovb-collapse-mobile .ovb-filter__bar.mopen .ovb-filter__dds { transform: none !important; }
	.ovb-filter.ovb-collapse-mobile .ovb-filter__bar.mopen .ovb-filter__backdrop { display: block; }
	/* 抽屜內每個項目:自然高度、全寬、固定高由變數控制(覆蓋 Grid / 搜尋列全寬 / 每排數量) */
	.ovb-filter.ovb-collapse-mobile .ovb-filter__dds > .ovb-filter__search,
	.ovb-filter.ovb-collapse-mobile .ovb-filter__dds > .ovb-dd,
	.ovb-filter.ovb-collapse-mobile .ovb-filter__dds > .ovb-filter__reset {
		flex: 0 0 auto !important; width: 100% !important; max-width: none !important;
		height: var(--ovb-drawer-ph, 44px) !important; min-height: 0 !important;
		padding-top: 0 !important; padding-bottom: 0 !important;
		box-sizing: border-box !important; margin: 0 !important;
		display: flex !important; align-items: center !important;
	}
	.ovb-filter.ovb-collapse-mobile .ovb-filter__dds .ovb-dd__btn {
		width: 100% !important; height: 100% !important; min-height: 0 !important;
		padding-top: 0 !important; padding-bottom: 0 !important; box-sizing: border-box !important;
	}
}
@media (max-width: 1024px) {
	.ovb-filter.ovb-collapse-tablet .ovb-filter__mtoggle { display: inline-flex !important; }
	.ovb-filter.ovb-collapse-tablet .ovb-filter__dds {
		display: flex !important; flex-direction: column !important;
		align-items: var(--ovb-drawer-align, stretch) !important;
		position: fixed !important; top: 0 !important; height: 100vh !important;
		width: 84% !important; max-width: 340px !important;
		background: #fff !important; z-index: 9999 !important;
		padding: 64px 20px 24px !important; overflow: auto !important;
		box-shadow: 0 0 40px rgba(0,0,0,.2);
		gap: var(--ovb-drawer-gap, 12px) !important;
		grid-template-columns: none !important;
		transition: transform .28s ease;
	}
	.ovb-filter.ovb-collapse-tablet.ovb-drawer-left  .ovb-filter__dds { left: 0 !important;  transform: translateX(-108%); }
	.ovb-filter.ovb-collapse-tablet.ovb-drawer-right .ovb-filter__dds { right: 0 !important; transform: translateX(108%); }
	.ovb-filter.ovb-collapse-tablet.ovb-drawer-full  .ovb-filter__dds { left: 0 !important; width: 100vw !important; max-width: none !important; transform: translateY(-108%); }
	.ovb-filter.ovb-collapse-tablet .ovb-filter__bar.mopen .ovb-filter__dds { transform: none !important; }
	.ovb-filter.ovb-collapse-tablet .ovb-filter__bar.mopen .ovb-filter__backdrop { display: block; }
	.ovb-filter.ovb-collapse-tablet .ovb-filter__dds > .ovb-filter__search,
	.ovb-filter.ovb-collapse-tablet .ovb-filter__dds > .ovb-dd,
	.ovb-filter.ovb-collapse-tablet .ovb-filter__dds > .ovb-filter__reset {
		flex: 0 0 auto !important; width: 100% !important; max-width: none !important;
		height: var(--ovb-drawer-ph, 44px) !important; min-height: 0 !important;
		padding-top: 0 !important; padding-bottom: 0 !important;
		box-sizing: border-box !important; margin: 0 !important;
		display: flex !important; align-items: center !important;
	}
	.ovb-filter.ovb-collapse-tablet .ovb-filter__dds .ovb-dd__btn {
		width: 100% !important; height: 100% !important; min-height: 0 !important;
		padding-top: 0 !important; padding-bottom: 0 !important; box-sizing: border-box !important;
	}
}

/* 抽屜內項目自然高度,靠攏排列(不平均撐開) */
.ovb-drawer-on .ovb-filter__dds > *,
.ovb-collapse-mobile .ovb-filter__dds > *,
.ovb-collapse-tablet .ovb-filter__dds > * { flex: 0 0 auto !important; }

/* Grid 模式儲存格填滿:膠囊按鈕填滿其格子(flex 模式為內容寬,無副作用) */
.ovb-filter__dds .ovb-dd__btn { width: 100%; }

/* JS 版抽屜也套用抽屜膠囊高度變數 */
.ovb-drawer-on .ovb-filter__dds .ovb-dd__btn,
.ovb-drawer-on .ovb-filter__dds .ovb-filter__search,
.ovb-drawer-on .ovb-filter__dds .ovb-filter__reset { min-height: var(--ovb-drawer-ph, 44px) !important; }

/* 抽屜關閉 X 鈕(平時隱藏,抽屜時右上角顯示) */
.ovb-filter__close { display: none; }
.ovb-drawer-on .ovb-filter__close,
.ovb-filter.ovb-collapse-mobile .ovb-filter__close,
.ovb-filter.ovb-collapse-tablet .ovb-filter__close {
	display: block !important; position: absolute !important; top: 14px; right: 16px;
	width: 40px; height: 40px; border: none; background: transparent;
	font-size: 30px; line-height: 40px; text-align: center; color: #333; cursor: pointer; z-index: 3; padding: 0;
	flex: 0 0 auto !important;
}
@media (min-width: 1025px) { .ovb-filter:not(.ovb-drawer-on) .ovb-filter__close { display: none !important; } }

/* ===== 抽屜膠囊垂直排列:用 data-arrange 驅動(即時、只作用在抽屜) ===== */
.ovb-filter.ovb-drawer-on[data-arrange="flex-start"] .ovb-filter__dds { justify-content: flex-start !important; }
.ovb-filter.ovb-drawer-on[data-arrange="center"] .ovb-filter__dds { justify-content: center !important; }
.ovb-filter.ovb-drawer-on[data-arrange="flex-end"] .ovb-filter__dds { justify-content: flex-end !important; }
.ovb-filter.ovb-drawer-on[data-arrange="space-between"] .ovb-filter__dds { justify-content: space-between !important; }
.ovb-filter.ovb-drawer-on[data-arrange="space-around"] .ovb-filter__dds { justify-content: space-around !important; }
.ovb-filter.ovb-drawer-on[data-arrange="space-evenly"] .ovb-filter__dds { justify-content: space-evenly !important; }
@media (max-width: 767px) {
	.ovb-filter.ovb-collapse-mobile[data-arrange="flex-start"] .ovb-filter__dds { justify-content: flex-start !important; }
	.ovb-filter.ovb-collapse-mobile[data-arrange="center"] .ovb-filter__dds { justify-content: center !important; }
	.ovb-filter.ovb-collapse-mobile[data-arrange="flex-end"] .ovb-filter__dds { justify-content: flex-end !important; }
	.ovb-filter.ovb-collapse-mobile[data-arrange="space-between"] .ovb-filter__dds { justify-content: space-between !important; }
	.ovb-filter.ovb-collapse-mobile[data-arrange="space-around"] .ovb-filter__dds { justify-content: space-around !important; }
	.ovb-filter.ovb-collapse-mobile[data-arrange="space-evenly"] .ovb-filter__dds { justify-content: space-evenly !important; }
}
@media (max-width: 1024px) {
	.ovb-filter.ovb-collapse-tablet[data-arrange="flex-start"] .ovb-filter__dds { justify-content: flex-start !important; }
	.ovb-filter.ovb-collapse-tablet[data-arrange="center"] .ovb-filter__dds { justify-content: center !important; }
	.ovb-filter.ovb-collapse-tablet[data-arrange="flex-end"] .ovb-filter__dds { justify-content: flex-end !important; }
	.ovb-filter.ovb-collapse-tablet[data-arrange="space-between"] .ovb-filter__dds { justify-content: space-between !important; }
	.ovb-filter.ovb-collapse-tablet[data-arrange="space-around"] .ovb-filter__dds { justify-content: space-around !important; }
	.ovb-filter.ovb-collapse-tablet[data-arrange="space-evenly"] .ovb-filter__dds { justify-content: space-evenly !important; }
}

/* ===== 廠商登入/註冊 彈窗 ===== */
.ovb-vendor-btn { cursor: pointer; }
body.ovb-modal-open { overflow: hidden; }
.ovb-login-modal { display: none; position: fixed; inset: 0; z-index: 2147483000; }
.ovb-login-modal.is-open { display: block; }
.ovb-login-modal__overlay { position: absolute; inset: 0; background: rgba(30,30,30,.6); }
.ovb-login-modal__box { position: relative; max-width: 520px; width: calc(100% - 40px); margin: 6vh auto; background: #fff; border-radius: 14px; padding: 40px 36px; box-shadow: 0 30px 80px rgba(0,0,0,.3); max-height: 88vh; overflow: auto; }
.ovb-login-modal__close { position: absolute; top: 16px; right: 18px; width: 36px; height: 36px; border: none; background: transparent; font-size: 26px; line-height: 1; cursor: pointer; color: #888; padding: 0; }
.ovb-login-modal__tabs { display: flex; gap: 8px; margin-bottom: 24px; border-bottom: 1px solid #eee; }
.ovb-login-tab { flex: 1; background: none; border: none; padding: 12px 8px; font: inherit; font-weight: 600; color: #999; cursor: pointer; border-bottom: 2px solid transparent; margin-bottom: -1px; }
.ovb-login-tab.is-active { color: #111; border-bottom-color: #111; }

/* ---- 統一登入彈窗:新人 / 商家 分頁 + 登入 / 註冊 檢視切換 ---- */
.ovb-login-unified .ovb-pane { display: none; }
.ovb-login-unified.tab-customer .ovb-pane-customer { display: block; }
.ovb-login-unified.tab-vendor .ovb-pane-vendor { display: block; }
.ovb-login-unified .ovb-view { display: none; }
.ovb-login-unified.view-login .ovb-view-login { display: block; }
.ovb-login-unified.view-register .ovb-view-register { display: block; }
/* 分頁標題:登入檢視顯示「…登入」,註冊檢視顯示「…註冊」 */
.ovb-login-unified .ovb-tab-reg { display: none; }
.ovb-login-unified.view-register .ovb-tab-login { display: none; }
.ovb-login-unified.view-register .ovb-tab-reg { display: inline; }
.ovb-login-switch { margin-top: 18px; text-align: center; font-size: 14px; color: #666; }
.ovb-login-switch a { color: #e57373; font-weight: 600; text-decoration: none; margin-left: 4px; }
.ovb-login-switch a:hover { text-decoration: underline; }
.ovb-login-modal .ovb-portal { display: block; }
.ovb-login-modal .ovb-portal-col { display: none; }
.ovb-login-modal .ovb-portal-col h3 { display: none; }
.ovb-login-modal.tab-login .ovb-portal-col:first-child { display: block; }
.ovb-login-modal.tab-register .ovb-portal-col:last-child { display: block; }

/* ===== 廠商前台上架 (我的商品) ===== */
.ovb-vp { font-size: 15px; }
.ovb-vp .button { display: inline-block; }
.ovb-vp-table, .ovb-vp-block-table { width: 100%; border-collapse: collapse; margin: 12px 0; }
.ovb-vp-table th, .ovb-vp-table td, .ovb-vp-block-table th, .ovb-vp-block-table td { border: 1px solid #eee; padding: 10px 12px; text-align: left; }
.ovb-vp-table th { background: #faf7f8; }
.ovb-badge { display: inline-block; padding: 3px 10px; border-radius: 999px; font-size: 12px; font-weight: 600; }
.ovb-badge-ok { background: #e5f3e8; color: #1a7f37; }
.ovb-badge-wait { background: #fdf0e3; color: #b26a00; }
.ovb-vp-form .ovb-ff { margin: 0 0 16px; }
.ovb-vp-form .ovb-ff > label { display: block; font-weight: 600; margin-bottom: 6px; }
.ovb-vp-form input[type=text], .ovb-vp-form input[type=url], .ovb-vp-form input[type=number], .ovb-vp-form textarea, .ovb-vp-form select { padding: 8px 10px; border: 1px solid #ddd; border-radius: 8px; }
.ovb-vp-note { background: #fdf0e3; color: #8a5300; padding: 10px 14px; border-radius: 8px; }
.ovb-vp-hint { color: #999; font-size: 13px; }
.ovb-media-preview img { width: 64px; height: 64px; object-fit: cover; border-radius: 8px; margin: 4px 6px 0 0; vertical-align: middle; }
.ovb-media-preview { display: inline-block; vertical-align: middle; }

/* 預約設定/公休 週選項 */
.ovb-vp-form .ovb-week .ovb-opt { display: inline-flex; align-items: center; }

/* ===== My Account 選單 icon 與文字對齊(精準對應 woocommerce-MyAccount-navigation-link) ===== */
.woocommerce-MyAccount-navigation ul li.woocommerce-MyAccount-navigation-link {
	display: flex !important; align-items: center !important;
}
.woocommerce-MyAccount-navigation ul li.woocommerce-MyAccount-navigation-link > a {
	display: flex !important; align-items: center !important; gap: 10px !important; flex: 1 1 auto !important; width: 100%;
}
.woocommerce-MyAccount-navigation ul li.woocommerce-MyAccount-navigation-link::before,
.woocommerce-MyAccount-navigation ul li.woocommerce-MyAccount-navigation-link > a::before {
	position: static !important; top: auto !important; left: auto !important; transform: none !important;
	margin: 0 !important; align-self: center !important; line-height: 1 !important; flex: 0 0 auto !important;
	display: inline-flex !important; align-items: center !important;
}
/* 預約設定/公休 週選項 */
.ovb-vp-form .ovb-week .ovb-opt { display: inline-flex; align-items: center; }

/* ===== 「馬上預約」按鈕彈窗 ===== */
.ovb-book-open { cursor: pointer; }
.ovb-book-modal { display: none; position: fixed; inset: 0; z-index: 100000; }
.ovb-book-modal.is-open { display: block; }
.ovb-book-modal__overlay { position: absolute; inset: 0; background: rgba(30,30,30,.6); }
.ovb-book-modal__box {
	position: relative; max-width: 520px; width: calc(100% - 40px);
	margin: 6vh auto; background: #fff; border-radius: 14px;
	padding: 40px 32px 32px; box-shadow: 0 30px 80px rgba(0,0,0,.3);
	max-height: 88vh; overflow: auto;
}
.ovb-book-modal__close {
	position: absolute; top: 14px; right: 16px; width: 36px; height: 36px;
	border: none; background: transparent; font-size: 28px; line-height: 1;
	cursor: pointer; color: #888; padding: 0;
}
/* 彈窗內表單去掉自身外框(彈窗本體已是卡片) */
.ovb-book-modal .ovb-booking { border: none; background: none; padding: 0; margin: 0; }

/* ===== 預約日曆 (jQuery UI Datepicker) ===== */
.ui-datepicker {
	z-index: 100002 !important;
	background: #fff; border: 1px solid #e5e0da; border-radius: 12px;
	padding: 10px; box-shadow: 0 20px 50px rgba(0,0,0,.18);
	width: 288px; font-size: 14px;
}
.ui-datepicker .ui-datepicker-header {
	position: relative; display: flex; align-items: center; justify-content: center;
	padding: 6px 0 10px; font-weight: 700;
}
.ui-datepicker .ui-datepicker-prev,
.ui-datepicker .ui-datepicker-next {
	position: absolute; top: 4px; width: 30px; height: 30px; cursor: pointer;
	border-radius: 8px; text-align: center; line-height: 30px; color: #8a7f76;
}
.ui-datepicker .ui-datepicker-prev { left: 2px; }
.ui-datepicker .ui-datepicker-next { right: 2px; }
.ui-datepicker .ui-datepicker-prev:hover,
.ui-datepicker .ui-datepicker-next:hover { background: #f3efeb; }
.ui-datepicker .ui-datepicker-prev span,
.ui-datepicker .ui-datepicker-next span { display: none; }
.ui-datepicker .ui-datepicker-prev::before { content: "‹"; font-size: 20px; }
.ui-datepicker .ui-datepicker-next::before { content: "›"; font-size: 20px; }
.ui-datepicker table { width: 100%; border-collapse: collapse; }
.ui-datepicker th { color: #b3a99f; font-weight: 600; padding: 6px 0; font-size: 12px; }
.ui-datepicker td { padding: 2px; text-align: center; }
.ui-datepicker td a,
.ui-datepicker td span {
	display: block; padding: 7px 0; border-radius: 8px; text-decoration: none;
	color: #3a342f; line-height: 1;
}
.ui-datepicker td a:hover { background: #f0e7e1; }
.ui-datepicker td a.ui-state-active { background: #c9a; color: #fff; }
/* 反灰不可選:公休 / 封鎖 / 過去 */
.ui-datepicker td.ui-datepicker-unselectable span,
.ui-datepicker td.ovb-dp-off span {
	color: #cfc9c2; background: transparent; cursor: not-allowed; text-decoration: line-through;
}

/* ===== 預約彈窗:自訂配色 / 圓角 ===== */
:root { --ovb-accent: #A0838A; }

/* 文字黑色 */
.ovb-booking,
.ovb-booking label,
.ovb-booking__hint,
.ovb-row > label,
.ovb-unit-note,
.ovb-end-display,
.ovb-addon-item,
.ovb-total-row { color: #000; }

/* 強調色:合計金額、計價/單價、加價購價格 */
.ovb-booking__hint strong,
.ovb-total,
.ovb-addon-price { color: var(--ovb-accent); }

/* 輸入框 / 下拉:圓角 25px */
.ovb-booking input[type="text"],
.ovb-booking input[type="date"],
.ovb-booking input[type="number"],
.ovb-booking select {
	border-radius: 25px;
	border: 1px solid #ddd;
	padding: 12px 18px;
	color: #000;
}

/* 加入購物車按鈕:底色 accent、白字、圓角 25px */
.ovb-booking .ovb-ajax-add,
.ovb-booking .ovb-ajax-add:hover {
	background: var(--ovb-accent);
	color: #fff;
	border: none;
	border-radius: 25px;
}

/* 彈窗外框圓角 25px */
.ovb-book-modal__box { border-radius: 25px; }

/* 日曆:圓角 25px、選取/滑過用 accent */
.ui-datepicker { border-radius: 25px; }
.ui-datepicker td a.ui-state-active { background: var(--ovb-accent); color: #fff; }
.ui-datepicker td a:hover { background: #efe7ea; }

/* ===== 廠商按鈕 (可統計點擊) ===== */
.ovb-vbtn-wrap { display: flex; }
.ovb-vbtn {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 8px;
	text-decoration: none;
	line-height: 1.2;
	cursor: pointer;
	background: #c9a063;
	color: #fff;
	padding: 12px 24px;
	border-radius: 6px;
	transition: background-color .15s ease, color .15s ease, opacity .15s ease;
}
.ovb-vbtn:hover { opacity: .92; text-decoration: none; }
/* 廠商未填連結時的淺灰佔位按鈕(不可點) */
.ovb-vbtn.ovb-vbtn-empty { background: #eee; color: #aaa; cursor: default; pointer-events: none; }
.ovb-vbtn.ovb-vbtn-empty:hover { opacity: 1; }
.ovb-vbtn-icon { display: inline-flex; align-items: center; }
.ovb-vbtn-count {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	min-width: 1.6em;
	padding: 0 .4em;
	font-size: .8em;
	line-height: 1.6;
	border-radius: 999px;
	background: rgba(255,255,255,.28);
}

/* ===== 會員登入按鈕 (人頭 icon) ===== */
.ovb-login-icon-wrap { line-height: 1; }
.ovb-login-icon {
	display: inline-flex;
	align-items: center;
	justify-content: center;
	gap: 6px;
	background: none;
	border: none;
	padding: 0;
	margin: 0;
	cursor: pointer;
	color: inherit;
	font: inherit;
	text-decoration: none;
}
.ovb-login-icon:hover { text-decoration: none; }
.ovb-login-icon i { line-height: 1; }
.ovb-login-icon svg { display: block; }

/* ===== 消費者登入 / 註冊 彈窗表單 ===== */
.ovb-clogin-desc { color: #666; margin-bottom: 14px; }
.ovb-clogin-form p { margin-bottom: 14px; }
.ovb-clogin-form label { display: block; margin-bottom: 4px; font-size: 14px; }
.ovb-clogin-form .req { color: #c0392b; }
.ovb-clogin-form input[type="text"],
.ovb-clogin-form input[type="email"],
.ovb-clogin-form input[type="password"],
.ovb-clogin-form input[type="tel"],
.ovb-clogin-form input[type="number"],
.ovb-clogin-form input[type="url"],
.ovb-clogin-form textarea,
.ovb-clogin-form select { width: 100%; }
.ovb-clogin-remember { font-size: 13px; }
.ovb-clogin-remember label { display: inline; }
.ovb-clogin-lost { margin-top: 8px; font-size: 13px; }
.ovb-clogin-btn { width: 100%; }
.ovb-clogin-inline { text-align: center; margin: 20px 0; }

/* 未登入的「我的帳戶」頁:隱藏內建登入 / 註冊表單(改用彈窗) */
.ovb-force-clogin #customer_login,
.ovb-force-clogin form.woocommerce-form-login,
.ovb-force-clogin form.woocommerce-form-register { display: none !important; }


/* 「點我查看」文字彈窗 */
.ovb-popup-link { color: #e57373; text-decoration: underline; cursor: pointer; }
.ovb-popup-link:hover { opacity: .85; }
.ovb-text-modal { display: none; position: fixed; inset: 0; z-index: 100001; }
.ovb-text-modal.is-open { display: block; }
.ovb-text-modal__overlay { position: absolute; inset: 0; background: rgba(30,30,30,.6); }
.ovb-text-modal__box { position: relative; max-width: 520px; width: calc(100% - 40px); margin: 12vh auto; background: #fff; border-radius: 14px; padding: 36px 32px; box-shadow: 0 30px 80px rgba(0,0,0,.3); max-height: 76vh; overflow: auto; }
.ovb-text-modal__close { position: absolute; top: 14px; right: 16px; width: 36px; height: 36px; border: none; background: transparent; font-size: 26px; line-height: 1; cursor: pointer; color: #888; padding: 0; }
.ovb-text-modal__content { white-space: pre-wrap; line-height: 1.7; color: #333; font-size: 15px; }

/* ===== v2.0 服務項目 / 試算 ===== */
.ovb-services .ovb-svc-list { display: grid; grid-template-columns: 1fr; gap: 8px; margin: 10px 0; }
.ovb-services .ovb-svc-item {
	display: flex; align-items: center; gap: 10px;
	padding: 10px 14px; border: 1px solid #e2ddd5; border-radius: 10px; cursor: pointer;
	transition: border-color .15s, background-color .15s;
}
.ovb-services .ovb-svc-item:hover { border-color: #c9a063; }
.ovb-services .ovb-svc-radio:checked + .ovb-svc-name { font-weight: 700; }
.ovb-services .ovb-svc-item:has(.ovb-svc-radio:checked) { border-color: #c9a063; background: #faf6ef; }
.ovb-services .ovb-svc-name { flex: 1; }
.ovb-services .ovb-svc-price { color: #b07d33; font-weight: 600; white-space: nowrap; }
.ovb-services .ovb-qty-row { display: flex; align-items: center; gap: 8px; margin: 10px 0; }
.ovb-services .ovb-qty { width: 90px; }
.ovb-services .ovb-total-row { font-size: 1.05em; margin-top: 10px; }
.ovb-services .ovb-total { color: #b07d33; font-weight: 700; font-size: 1.15em; }
.ovb-vp-svc-table { width: 100%; border-collapse: collapse; margin: 8px 0; }
.ovb-vp-svc-table th, .ovb-vp-svc-table td { padding: 6px; text-align: left; }
.ovb-price-free { color: #b07d33; font-size: .9em; }

/* ===== v2.1 選項的子選項 ===== */
.ovb-child-group { }
.ovb-child-group .ovb-opt.ovb-child { display: block; margin: 2px 0; }
.ovb-choice .ovb-opt.ovb-child { margin-left: 14px; opacity: .95; }
.ovb-choice .ovb-opt.ovb-child .ovb-opt-text::before { content: "└ "; opacity: .6; }

/* ===== v2.2 廠商類型版面 (廠商類型版面 widget) ===== */
.ovb-vtl-price { text-align: center; font-size: 20px; font-weight: 700; }
.ovb-vtl-address { display: flex; align-items: center; justify-content: center; gap: 6px; }
.ovb-vtl-pin { display: inline-flex; align-items: center; }
.ovb-vtl-grid { display: grid; grid-template-columns: repeat(5, minmax(0,1fr)); column-gap: 24px; row-gap: 40px; }
.ovb-vtl-item { min-width: 0; }
.ovb-vtl-title { font-weight: 700; margin-bottom: 12px; }
.ovb-vtl .ovb-choice { display: grid; grid-template-columns: 1fr; gap: 8px; }
.ovb-vtl .ovb-choice .ovb-opt { display: flex; align-items: flex-start; gap: 6px; }
.ovb-vtl .ovb-opt-icon { display: inline-flex; align-items: center; flex: none; margin-top: 2px; }
.ovb-vtl-val img { max-width: 100%; height: auto; }

/* v2.4 服務表單:烏龜幣回饋預估 */
.ovb-services .ovb-svc-reward-row { color: #b07d33; margin-top: 4px; }
.ovb-services .ovb-svc-reward { font-weight: 700; }

/* v2.8 服務表單:現金回饋預估 */
.ovb-services .ovb-svc-cash-row { color: #2e7d32; margin-top: 2px; }
.ovb-services .ovb-svc-cash { font-weight: 700; }

/* v2.5 價格區間(單獨召喚) */
.ovb-price-range-w { text-align: center; }
.ovb-price-range { font-weight: 700; }

/* v2.5.1 服務表單填滿容器寬度(不再縮在左邊窄窄一條) */
.elementor-widget-ovb_booking_form,
.elementor-widget-ovb_booking_form > .elementor-widget-container { width: 100%; }
.ovb-booking.ovb-services { width: 100%; max-width: 100%; box-sizing: border-box; }
.ovb-services .ovb-svc-list { width: 100%; }
.ovb-services .ovb-svc-item { width: auto; min-width: 0; }

/* v2.5.2 服務項目卡片等高(同一列不論內容多寡高度一致) */
.ovb-services .ovb-svc-list { align-items: stretch; }
.ovb-services .ovb-svc-item { height: 100%; box-sizing: border-box; }

/* ===== v2.7 精選作品 (一大三小 + 查看全部彈窗) ===== */
.ovb-featured { --ovb-feat-radius: 14px; width: 100%; box-sizing: border-box; }
.ovb-featured-head { display: flex; align-items: center; gap: 12px; margin-bottom: 14px; }
.ovb-featured-title { margin: 0; font-size: 1.35rem; font-weight: 700; line-height: 1.2; }
.ovb-featured-all { margin-left: auto; display: inline-flex; align-items: center; gap: 6px; background: none; border: none; padding: 4px 2px; cursor: pointer; color: inherit; font-size: .95rem; opacity: .85; transition: opacity .15s; }
.ovb-featured-all:hover { opacity: 1; }

/* 桌機/平板:整個區塊固定高度,大圖與右欄小圖都以 100% 撐滿(不靠 aspect-ratio,避免主題環境失效) */
.ovb-featured-grid { display: grid; grid-template-columns: 1.7fr 1fr; gap: 14px; height: var(--ovb-feat-h, 540px); }
.ovb-feat-big-wrap { min-width: 0; min-height: 0; height: 100%; }
.ovb-feat-big-wrap .ovb-feat-item { height: 100%; }
.ovb-feat-smalls { display: flex; flex-direction: column; gap: 14px; min-width: 0; min-height: 0; height: 100%; }
.ovb-feat-smalls .ovb-feat-item { flex: 1 1 0; min-height: 0; height: auto; }
/* 只有一張大圖時滿版 */
.ovb-featured--solo .ovb-featured-grid { grid-template-columns: 1fr; }

.ovb-feat-item { position: relative; display: block; overflow: hidden; border-radius: var(--ovb-feat-radius); background: #eee; cursor: pointer; text-decoration: none; }
/* 圖片絕對定位鋪滿,並用 !important 蓋過主題常見的 img{height:auto} 干擾 */
.ovb-feat-item img { position: absolute !important; inset: 0 !important; width: 100% !important; height: 100% !important; max-width: none !important; object-fit: cover !important; display: block !important; margin: 0 !important; transition: transform .35s ease; }
.ovb-feat-item:hover img { transform: scale(1.04); }

/* 影片播放鈕 */
.ovb-feat-play { position: absolute; top: 50%; left: 50%; width: 62px; height: 62px; transform: translate(-50%, -50%); border-radius: 50%; background: rgba(0, 0, 0, .45); backdrop-filter: blur(2px); pointer-events: none; transition: background .15s; }
.ovb-feat-item:hover .ovb-feat-play { background: rgba(0, 0, 0, .6); }
.ovb-feat-play::before { content: ""; position: absolute; top: 50%; left: 54%; transform: translate(-50%, -50%); border-style: solid; border-width: 11px 0 11px 18px; border-color: transparent transparent transparent #fff; }
.ovb-feat-smalls .ovb-feat-play { width: 44px; height: 44px; }
.ovb-feat-smalls .ovb-feat-play::before { border-width: 8px 0 8px 13px; }

/* 平板:略降低固定高度 */
@media (max-width: 1024px) {
	.ovb-featured-grid { height: var(--ovb-feat-h-t, 440px); }
}

/* 手機:改為堆疊,大圖在上、小圖橫排;高度用 padding 比例撐開(不靠 aspect-ratio,最穩) */
@media (max-width: 767px) {
	.ovb-featured-grid { display: block; height: auto; }
	.ovb-feat-big-wrap, .ovb-feat-smalls { height: auto; }
	.ovb-feat-big-wrap .ovb-feat-item { height: auto; }
	.ovb-feat-big-wrap .ovb-feat-item::before { content: ""; display: block; padding-top: 62.5%; } /* 16:10 */
	.ovb-feat-smalls { display: flex; flex-direction: row; gap: 14px; margin-top: 14px; }
	.ovb-feat-smalls .ovb-feat-item { flex: 1 1 0; height: auto; }
	.ovb-feat-smalls .ovb-feat-item::before { content: ""; display: block; padding-top: 100%; } /* 1:1 */
}

/* 彈窗輪播 */
.ovb-fmodal { position: fixed; inset: 0; z-index: 99999; display: none; align-items: center; justify-content: center; background: rgba(0, 0, 0, .88); }
.ovb-fmodal.is-open { display: flex; }
.ovb-fmodal-stage { position: relative; width: min(1100px, 92vw); max-height: 86vh; display: flex; align-items: center; justify-content: center; }
/* 投影片容器需有明確寬度,否則影片(靠 padding 撐高)會因寬度 0 而高度 0 */
.ovb-fmodal-slide { width: 100%; display: flex; align-items: center; justify-content: center; }
.ovb-fmodal-stage img { max-width: 100%; max-height: 86vh; width: auto; height: auto; display: block; border-radius: 8px; }
.ovb-fmodal-video { position: relative; width: 100%; height: 0; padding-top: 56.25%; }
.ovb-fmodal-video iframe { position: absolute; inset: 0; width: 100%; height: 100%; border: 0; border-radius: 8px; }
.ovb-fmodal-btn { position: absolute; top: 50%; transform: translateY(-50%); width: 46px; height: 46px; border-radius: 50%; border: none; background: rgba(255, 255, 255, .15); color: #fff; font-size: 26px; line-height: 1; cursor: pointer; z-index: 3; transition: background .15s; display: flex; align-items: center; justify-content: center; }
.ovb-fmodal-btn:hover { background: rgba(255, 255, 255, .3); }
.ovb-fmodal-prev { left: -64px; }
.ovb-fmodal-next { right: -64px; }
.ovb-fmodal-close { position: absolute; top: -46px; right: 0; width: 40px; height: 40px; border-radius: 50%; border: none; background: rgba(255, 255, 255, .15); color: #fff; font-size: 24px; cursor: pointer; z-index: 3; }
.ovb-fmodal-close:hover { background: rgba(255, 255, 255, .3); }
.ovb-fmodal-count { position: absolute; bottom: -40px; left: 50%; transform: translateX(-50%); color: rgba(255, 255, 255, .85); font-size: .9rem; letter-spacing: .05em; }
@media (max-width: 900px) {
	.ovb-fmodal-prev { left: 6px; }
	.ovb-fmodal-next { right: 6px; }
	.ovb-fmodal-close { top: 6px; right: 6px; }
}

/* 縣市 / 地址 篩選:多欄格狀,避免選項太多時下拉超出畫面。
   注意:display 只在「展開時」才設 grid,否則會蓋掉關閉時的 display:none。 */
.ovb-dd__panel--grid {
	grid-template-columns: repeat(2, minmax(96px, 1fr));
	gap: 2px 18px;
	max-height: 60vh;
	overflow-y: auto;
	min-width: 260px;
}
.ovb-dd.is-open .ovb-dd__panel--grid { display: grid; }
.ovb-dd__panel--grid .ovb-filter__opt { white-space: nowrap; }
@media (min-width: 768px) {
	.ovb-dd__panel--grid { grid-template-columns: repeat(3, minmax(96px, 1fr)); min-width: 360px; }
}

/* 廠商類型版面:文字類欄位 — 電腦/平板維持一欄;手機佔滿整行(等同兩欄寬)。
   選擇題(radio/checkbox 等)不受影響,維持原本欄數。 */
@media (max-width: 767px) {
	.ovb-vtl-grid > .ovb-vtl-item-text,
	.ovb-vtl-grid > .ovb-vtl-item-text_limited,
	.ovb-vtl-grid > .ovb-vtl-item-textarea,
	.ovb-vtl-grid > .ovb-vtl-item-url,
	.ovb-vtl-grid > .ovb-vtl-item-number { grid-column: 1 / -1; }
}
/* 長字串(含無空格網址)自動換行,避免撐破卡片 */
.ovb-vtl-item-text .ovb-vtl-val,
.ovb-vtl-item-text_limited .ovb-vtl-val,
.ovb-vtl-item-textarea .ovb-vtl-val,
.ovb-vtl-item-url .ovb-vtl-val { overflow-wrap: anywhere; word-break: break-word; }

/* 商品清單元件 (ovb_products) */
.ovb-pg-grid { display: grid; grid-template-columns: repeat(4, minmax(0,1fr)); gap: 20px; }
.ovb-pg-card { display: block; text-decoration: none; color: inherit; }
.ovb-pg-thumb { width: 100%; aspect-ratio: 1 / 1; overflow: hidden; border-radius: 14px; background: #f2eee9; }
.ovb-pg-thumb img { width: 100%; height: 100%; object-fit: cover; display: block; }
.ovb-pg-name { margin-top: 10px; font-weight: 600; line-height: 1.35; }
.ovb-pg-price { margin-top: 4px; color: #9b7d6b; }
.ovb-pg-price del { opacity: .6; font-weight: 400; margin-right: 4px; }

/* 選項顯示:母選項 + 子選項 綁成一個區塊(格狀排版不會被拆開);
   子選項統一為母選項正下方、縮排、靠近一點的一行。 */
.ovb-choice .ovb-opt-block { display: flex; flex-direction: column; min-width: 0; }
.ovb-child-line { display: block; margin-left: 1.7em; margin-top: 2px; font-size: .92em; line-height: 1.4; opacity: .9; }
.ovb-child-line::before { content: "└ "; opacity: .55; }
.ovb-vtl .ovb-choice .ovb-opt-block { min-width: 0; }

/* 廠商按鈕「未填(灰色)佔位」:不要繼承正常按鈕的漸層背景(background-image),
   否則粉色漸層會蓋住灰底。清掉後才會顯示設定的灰色背景。 */
.ovb-vbtn.ovb-vbtn-empty { background-image: none !important; }

/* 篩選膠囊:已選取時,按鈕文字加深加粗,讓人看得出已篩選 */
.ovb-dd.ovb-dd--picked .ovb-dd__btn { color:#111 !important; font-weight:600 !important; }

/* 多行文字(>200字)風琴:電腦版收合 + more… 展開;手機版自動展開 */
.ovb-longtext .ovb-longtext__body { max-height: 7.5em; overflow: hidden; transition: max-height .2s ease; }
.ovb-longtext.is-open .ovb-longtext__body { max-height: 4000px; }
.ovb-longtext__more { display: inline-block; margin-top: 6px; background: none; border: 1px solid #d8c7b8; border-radius: 14px; color: #b5896f; cursor: pointer; font-size: 13px; padding: 2px 12px; }
.ovb-longtext__more:hover { background: #f4ece3; }
@media (max-width: 767px) {
  .ovb-longtext .ovb-longtext__body { max-height: none !important; }
  .ovb-longtext__more { display: none !important; }
}

/* 試算回饋:烏龜幣圖示 + 立即預約按鈕 */
/* 試算回饋圓形徽章圖示:烏龜幣 + 現金(兩者同大小) */
.ovb-services .ovb-svc-reward-row .ovb-coin-ico,
.ovb-svc-reward-row img.ovb-coin-ico,
.ovb-services .ovb-svc-cash-row .ovb-cash-ico,
.ovb-svc-cash-row img.ovb-cash-ico {
	display: inline-block !important;
	height: 1.8em !important;
	width: 1.8em !important;
	max-width: 1.8em !important;
	object-fit: contain !important;
	vertical-align: -0.55em !important;
	margin: 0 6px 0 0 !important;
	border: 0 !important;
	box-shadow: none !important;
}
.ovb-book-btn { background: #b8863b !important; border-color: #b8863b !important; color: #fff !important; font-weight: 600; }
.ovb-book-btn:hover { background: #a2732f !important; border-color: #a2732f !important; color: #fff !important; }

/* 廠商上傳:可移除的縮圖(右上角 ✕) */
.ovb-media-preview { display: inline-flex; flex-wrap: wrap; gap: 8px; vertical-align: middle; }
.ovb-media-thumb { position: relative; display: inline-block; line-height: 0; }
.ovb-media-thumb img { width: 64px; height: 64px; object-fit: cover; border-radius: 6px; border: 1px solid #e0d6cc; display: block; }
.ovb-media-thumb .ovb-media-x { position: absolute; top: -7px; right: -7px; width: 20px; height: 20px; padding: 0; line-height: 18px; text-align: center; border: none; border-radius: 50%; background: #d63638; color: #fff; font-size: 14px; cursor: pointer; box-shadow: 0 1px 3px rgba(0,0,0,.3); }
.ovb-media-thumb .ovb-media-x:hover { background: #b32d2e; }

/* 試算按鈕列:立即預約 / 加入預約清單 / 加入收藏 等寬同大小 */
.ovb-services .ovb-cart-row { display: flex; flex-wrap: wrap; gap: 10px; align-items: stretch; }
.ovb-services .ovb-cart-row > * {
	flex: 1 1 0 !important;
	min-width: 120px;
	margin: 0 !important;
	text-align: center;
	justify-content: center;
	display: inline-flex !important;
	align-items: center;
	box-sizing: border-box;
	/* 三顆按鈕高度一致 */
	min-height: 54px !important;
	height: auto !important;
	padding: 12px 18px !important;
	line-height: 1.3 !important;
	font-size: 16px !important;
}
@media (max-width: 767px) {
	.ovb-services .ovb-cart-row > * { flex: 1 1 100% !important; }
}

/* 廠商註冊:合作條款閱讀框 */
.ovb-terms-wrap { margin: 14px 0 4px; }
.ovb-terms-title-row { font-size: 13px; font-weight: 700; color: #6b5b4d; margin-bottom: 6px; }
.ovb-terms-box {
	max-height: 220px;
	overflow-y: auto;
	border: 1px solid #d8cdbf;
	border-radius: 8px;
	padding: 10px 14px;
	background: #fffdfb;
	font-size: 12.5px;
	line-height: 1.7;
	color: #4a4038;
	-webkit-overflow-scrolling: touch;
}
.ovb-terms-box .ovb-terms-title { font-size: 14px; margin: 0 0 8px; color: #b5896f; }
.ovb-terms-box .ovb-terms-h { font-size: 13px; margin: 12px 0 4px; color: #8a6d52; }
.ovb-terms-box p { margin: 4px 0; }
.ovb-terms-end { height: 1px; }
.ovb-terms-agree-l { display: flex; align-items: flex-start; gap: 8px; margin: 10px 0 2px; font-size: 13px; cursor: pointer; }
.ovb-terms-agree-l input { margin-top: 3px; }
.ovb-terms-agree:disabled { cursor: not-allowed; }
.ovb-terms-hint { font-size: 12px; color: #a06c4a; margin: 2px 0 0; }
.ovb-vendor-reg-btn:disabled { opacity: .5; cursor: not-allowed; }

/* ===== 我的品牌：線上簽署合作契約 ===== */
.ovb-terms-version { font-size: 12px; font-weight: 700; color: #8a7d76; margin: 0 0 6px; }
/* 結帳頁（預約人資訊）欄位備註 */
.ovb-checkout-note { display: inline-block; font-size: 12px; font-weight: 400; color: #a06c4a; margin-left: 2px; }
/* 結帳頁：網站使用滿意度評分星等 */
.ovb-site-rating { margin: 0 0 16px; }
.ovb-site-rating__label { font-size: 14px; font-weight: 700; color: #3a2f2a; margin: 0 0 6px; }
.ovb-stars { display: inline-flex; gap: 4px; font-size: 30px; line-height: 1; }
.ovb-star { background: none; border: 0; padding: 0 2px; margin: 0; cursor: pointer; color: #d9cdbf; transition: color .12s; line-height: 1; }
.ovb-star:hover, .ovb-star.is-on { color: #f5b301; }
.ovb-star:focus { outline: none; }
.ovb-sign-gate h3 { margin: 0 0 8px; }
.ovb-sign-gate .ovb-vp-note { color: #6b5b4d; margin: 0 0 12px; line-height: 1.7; }
.ovb-sign-terms-box { max-height: 300px; }
.ovb-sign-fee-box { margin: 8px 0; padding: 10px 14px; background: #fff8f2; border: 1px solid #ece0d4; border-radius: 8px; }
.ovb-sign-fee-box p { margin: 4px 0; }
.ovb-sign-pad-wrap { margin: 16px 0 4px; }
.ovb-sign-pad-label { display: block; font-size: 13px; font-weight: 700; color: #6b5b4d; margin-bottom: 6px; }
.ovb-sign-canvas-box { border: 2px dashed #cbb9a8; border-radius: 10px; background:
	linear-gradient( #fff, #fff ) padding-box; background-color: #fff; max-width: 600px; }
.ovb-sign-canvas { display: block; width: 100%; height: 200px; border-radius: 10px; touch-action: none; cursor: crosshair; }
.ovb-sign-pad-actions { margin: 8px 0 0; }
.ovb-sign-submit:disabled { opacity: .5; cursor: not-allowed; }

/* 已簽署契約置頂區塊 */
.ovb-signed-box { margin: 0 0 18px; padding: 14px 16px; background: #f3f8f2; border: 1px solid #cfe3cb; border-radius: 10px; }
.ovb-signed-head { color: #3a2f2a; line-height: 1.7; }
.ovb-signed-badge { display: inline-block; background: #4c9a5a; color: #fff; font-size: 12px; font-weight: 700; padding: 2px 10px; border-radius: 12px; margin-right: 6px; }
.ovb-signed-fee { margin-top: 8px; padding: 8px 12px; background: #fff; border: 1px solid #e2ece0; border-radius: 8px; color: #3a2f2a; }
.ovb-signed-details { margin-top: 10px; }
.ovb-signed-details > summary { cursor: pointer; color: #b5896f; font-weight: 700; }
.ovb-signed-contract { max-height: 360px; margin-top: 10px; }
.ovb-sign-parties { margin-top: 8px; padding: 12px 14px; background: #fbf6f1; border: 1px solid #ece0d4; border-radius: 8px; }
.ovb-sign-parties p { margin: 4px 0; }

/* 作品集縮圖:可拖曳排序 */
.ovb-media-sortable .ovb-media-thumb { cursor: move; }
.ovb-media-sortable .ovb-media-thumb img { pointer-events: none; }
.ovb-media-sortable .ui-sortable-placeholder { display: inline-block; width: 64px; height: 64px; border: 2px dashed #c9a063; border-radius: 6px; visibility: visible !important; margin: 0 8px 0 0; }
