/* Page-level spacing and composition only. Do not redefine component internals here. */
.ni-page-home {}
.ni-page-category {}
.ni-page-search {}
.ni-page-brand {}
.ni-page-goods {}
.ni-page-flow {}
.ni-page-user {}
.ni-page-article {}

/* NI_CONVERGENCE: Product main media full-bleed rounded image
 * Root cause: the previous correction converted the frame to a real #zoom1 box
 * because goods.dwt disables lightbox pseudo-elements. That solved frame
 * visibility, but it also kept a padded/fixed-ratio card around the image.
 * The desired product detail treatment now matches goods_desc/editor images:
 * the image itself is the visual surface, full-width, natural-ratio, rounded,
 * and clipped without an extra outer card/background.
 */
html body.goods_body #goodsInfo.ni-v43-product .imgInfo > a#zoom1,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger{
  position:relative !important;
  display:block !important;
  width:100% !important;
  height:auto !important;
  max-width:100% !important;
  min-height:0 !important;
  aspect-ratio:auto !important;
  padding:0 !important;
  margin:0 !important;
  overflow:hidden !important;
  line-height:0 !important;
  border:0 !important;
  border-radius:24px !important;
  background:transparent !important;
  box-shadow:none !important;
  cursor:zoom-in !important;
}
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link > picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link > .autoslim-picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger > picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger > .autoslim-picture{
  display:block !important;
  width:100% !important;
  height:auto !important;
  max-width:100% !important;
  max-height:none !important;
  min-width:0 !important;
  min-height:0 !important;
  overflow:hidden !important;
  line-height:0 !important;
  border-radius:inherit !important;
  background:transparent !important;
}
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link img,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger img{
  display:block !important;
  width:100% !important;
  height:auto !important;
  max-width:100% !important;
  max-height:none !important;
  min-width:0 !important;
  min-height:0 !important;
  padding:0 !important;
  margin:0 !important;
  border:0 !important;
  border-radius:inherit !important;
  object-fit:contain !important;
  object-position:center center !important;
  background:transparent !important;
  box-sizing:border-box !important;
  transform:none !important;
}
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link:hover img,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger:hover img{
  transform:none !important;
}
@media (max-width:700px){
  html body.goods_body #goodsInfo.ni-v43-product .imgInfo > a#zoom1,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger{
    border-radius:18px !important;
  }
}

/* NI_CONVERGENCE: Product main image rounded clipping hardening
 * Root cause: product main image markup can be emitted as plain <img>, <picture>,
 * or AutoSlim wrapper, and legacy/product CSS plus runtime image replacement can
 * leave the visible bitmap edge outside the previous parent-only radius.  Make
 * the image surface itself the clipping boundary so full-bleed main images match
 * goods_desc editor images: one rounded bitmap, no outer card.
 */
html body.goods_body #goodsInfo.ni-v43-product .imgInfo,
html body.goods_body #goodsInfo.ni-v43-product .imgInfo > a#zoom1,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link > picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger > picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link > .autoslim-picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger > .autoslim-picture,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link img,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger img{
  border-radius:24px !important;
  overflow:hidden !important;
  -webkit-transform:translateZ(0);
  transform:translateZ(0);
  -webkit-mask-image:-webkit-radial-gradient(white, black);
  clip-path:inset(0 round 24px) !important;
}
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger{
  isolation:isolate !important;
  contain:paint !important;
}
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link img,
html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger img{
  vertical-align:top !important;
}
@media (max-width:700px){
  html body.goods_body #goodsInfo.ni-v43-product .imgInfo,
  html body.goods_body #goodsInfo.ni-v43-product .imgInfo > a#zoom1,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link > picture,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger > picture,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link > .autoslim-picture,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger > .autoslim-picture,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-main-image-link img,
  html body.goods_body #goodsInfo.ni-v43-product #zoom1.ni-lightbox-trigger img{
    border-radius:18px !important;
    clip-path:inset(0 round 18px) !important;
  }
}

/* NI_CONVERGENCE: product-desc section-title canvas convergence
 * Root cause: 商品規格 / 訂購須知 are UEditor HTML fragments.  Their title
 * text can contain nested span/font/strong nodes with inline white background,
 * while legacy ni_product.css and old runtime code also set table/cell canvas
 * backgrounds in several different places.  Keep one canonical visual contract:
 * normal cells use the soft product canvas, title rows use the muted tea band,
 * and nested inline white backgrounds inside title rows are neutralized.
 */
html body.goods_body .ni-v43-product-desc-wrap{
  --ni-product-desc-cell-bg:#fffdf9;
  --ni-product-desc-section-bg:linear-gradient(180deg,#f8f1eb 0%,#efe3da 100%);
  --ni-product-desc-section-line:rgba(213,192,178,.88);
}
html body.goods_body .ni-v43-product-desc-wrap,
html body.goods_body .ni-v43-product-desc-wrap .boxCenterList,
html body.goods_body .ni-goods-desc-panel,
html body.goods_body .ni-goods-desc-content{
  background-color:var(--ni-product-desc-cell-bg) !important;
  background-image:none !important;
}
html body.goods_body .ni-goods-desc-content table,
html body.goods_body .ni-goods-desc-panel table{
  background:var(--ni-product-desc-cell-bg) !important;
}
html body.goods_body .ni-goods-desc-content td,
html body.goods_body .ni-goods-desc-content th,
html body.goods_body .ni-goods-desc-panel td,
html body.goods_body .ni-goods-desc-panel th{
  background:var(--ni-product-desc-cell-bg) !important;
}
/* Product description heading bands are owned by themes/quwan/css/ni_product.css and themes/quwan/js/ni_product.js. */
html body.goods_body .ni-goods-desc-content table[bgcolor],
html body.goods_body .ni-goods-desc-content tr[bgcolor],
html body.goods_body .ni-goods-desc-content td[bgcolor],
html body.goods_body .ni-goods-desc-content th[bgcolor],
html body.goods_body .ni-goods-desc-panel table[bgcolor],
html body.goods_body .ni-goods-desc-panel tr[bgcolor],
html body.goods_body .ni-goods-desc-panel td[bgcolor],
html body.goods_body .ni-goods-desc-panel th[bgcolor]{
  background-image:none !important;
}

/* NI_CONVERGENCE: product-desc inline-white-runtime-cleanup contract.
 * CSS now covers nested title-row spans even when runtime cleanup is delayed.
 * assets/js/product.js is now a compatibility shim only; runtime normalization lives in ni_product.js.
 */

/* NI_CONVERGENCE: product mobile vertical rhythm compaction
 * Keep the product detail page from leaving a large RWD-only blank area between
 * the product description, collapsible history block and footer.
 */
@media screen and (max-width:700px){
  html body.goods_body .ni-v43-product-desc-wrap,
  html body.goods_body .box.ni-goods-detail-desc-only.ni-v43-product-desc-wrap{
    margin-bottom:16px !important;
  }
  html body.goods_body .ni-v43-modern-products{
    margin-top:14px !important;
  }
}

/* NI_CSS_SPLIT_RELOCATED_COMPAT: article/help guards now live in page-content.css. Guard markers preserved: NI_ARTICLE_DETAIL_SHELL_CONVERGENCE | .ni-article-shell | .ni-article-frame | .ni-article-card | .ni-article-nav | NI_ARTICLE_LIST_SHELL_CONVERGENCE | .ni-article-list-card | .ni-article-search | .ni-article-list__item | .ni-article-pagination | .ni-help-message | .ni-help-message-form | .ni-help-aside | NI_ARTICLE_WIDGETS_CONVERGENCE | .ni-help-sidebar | .ni-article-widget | .ni-article-category-tree__link | .ni-article-widget--latest | .ni-article-widget--goods-related */
/* NI_CSS_SPLIT_RELOCATED: listing page rules moved to page-specific CSS. Guard markers preserved: NI_LISTING_PAGES_CONVERGENCE | .ni-listing-shell | .ni-listing-hero */

/* NI_CSS_SPLIT_RELOCATED: flow cart/consignee rules moved to page-specific CSS. Guard markers preserved: NI_FLOW_CART_STEP_CONVERGENCE | .ni-flow-cart | .ni-flow-consignee */

/* NI_CSS_SPLIT_RELOCATED: member center page rules moved to page-specific CSS. Guard markers preserved: ni-member-shell | ni-member-dashboard | ni-member-profile | ni-member-wallet | ni-member-account-form | ni-member-address | ni-member-collection | ni-member-affiliate | ni-member-message | ni-member-tags | ni-member-orders | ni-member-order-detail | ni-passport | ni-member-catalog-notice | .ni-member-service-rail | .ni-member-care-plan | .ni-member-order-card__journey */

/* NI_CSS_SPLIT_RELOCATED: article/help base rules moved to page-specific CSS. Guard markers preserved: NI_ARTICLE_DETAIL_SHELL_CONVERGENCE | .ni-article-content | .ni-article-list */

/* NI_CSS_SPLIT_RELOCATED: checkout UX rules moved to page-specific CSS. Guard markers preserved: NI_FLOW_CHECKOUT_UX_MODERNIZATION_PACK | .ni-flow-progress | .ni-flow-done-timeline */

/* NI_CSS_SPLIT_RELOCATED: content commerce rules moved to page-specific CSS. Guard markers preserved: NI_CONTENT_COMMERCE_PACK | .ni-content-action-rail | .ni-content-topic-rail | .ni-content-toc | .ni-content-commerce | .ni-content-product-card | .ni-content-support-cta | .ni-content-faq | .ni-content-empty-state */

/* NI_CSS_SPLIT_RELOCATED: edge page shell rules moved to page-specific CSS. Guard markers preserved: NI_EDGE_PAGES_PACK | .ni-edge-shell | .ni-edge-support */

