/*
 Theme Name:   BxPrecision Print
 Theme URI:    https://print.bxprecision.com.au
 Description:  BxPrecision child theme for the 3D printing quote/order system.
 Author:       BxPrecision
 Author URI:   https://bxprecision.com.au
 Template:     twentytwentyfour
 Version:      1.3.8
 License:      GNU General Public License v2 or later
 License URI:  http://www.gnu.org/licenses/gpl-2.0.html
 Text Domain:  bxprecision-print
*/

/*
 * Colours and typography are set via theme.json — this file only handles
 * things theme.json cannot: plugin overrides, interactive states, login page.
 */

/* Google Fonts: Inter */
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');

:root {
  --bx-bg:      #141414;
  --bx-surface: #1e1e1e;
  --bx-card:    #262626;
  --bx-border:  #333;
  --bx-text:    #d4d4d4;
  --bx-muted:   #999;
  --bx-heading: #f0f0f0;
  --bx-orange:  #e07a18;
  --bx-orange-hover: #f28a22;
  --bx-orange-dark:  #c96a10;
  --bx-radius:  6px;
}

/* --------------------------------------------------------------------------
   Base
   -------------------------------------------------------------------------- */

body {
  font-family: 'Inter', -apple-system, BlinkMacSystemFont, sans-serif;
  background: var(--bx-bg);
  color: var(--bx-text);
  -webkit-font-smoothing: antialiased;
}

/* Catch any block that still has a white/light background preset applied */
.has-base-background-color    { background-color: var(--bx-bg) !important; }
.has-base-2-background-color  { background-color: var(--bx-surface) !important; }
.has-contrast-color            { color: var(--bx-heading) !important; }
.has-contrast-2-color          { color: var(--bx-text) !important; }
.has-contrast-3-color          { color: var(--bx-muted) !important; }

/* --------------------------------------------------------------------------
   Header / nav
   -------------------------------------------------------------------------- */

.wp-block-template-part {
  background: transparent;
}

/* Sticky nav bar blur */
header.wp-block-template-part > .wp-block-group {
  background: rgba(20, 20, 20, 0.95) !important;
  backdrop-filter: blur(8px);
  -webkit-backdrop-filter: blur(8px);
  border-bottom: 1px solid var(--bx-border);
}

/* Nav links */
.wp-block-navigation a,
.wp-block-navigation .wp-block-page-list a {
  color: var(--bx-muted) !important;
  transition: color 0.2s;
}
.wp-block-navigation a:hover,
.wp-block-navigation .wp-block-page-list a:hover,
.wp-block-navigation .current-menu-item > a {
  color: var(--bx-heading) !important;
}

/* --------------------------------------------------------------------------
   Footer
   -------------------------------------------------------------------------- */

footer.wp-block-template-part > .wp-block-group {
  border-top: 1px solid var(--bx-border) !important;
}
footer.wp-block-template-part p,
footer.wp-block-template-part li,
footer.wp-block-template-part a {
  color: var(--bx-muted);
}
footer.wp-block-template-part a:hover {
  color: var(--bx-orange);
}

/* --------------------------------------------------------------------------
   Scrollbar
   -------------------------------------------------------------------------- */

::-webkit-scrollbar { width: 8px; }
::-webkit-scrollbar-track { background: var(--bx-bg); }
::-webkit-scrollbar-thumb { background: #3a3a3a; border-radius: 4px; }
::-webkit-scrollbar-thumb:hover { background: #484848; }

/* --------------------------------------------------------------------------
   Upload button restyle
   -------------------------------------------------------------------------- */

/* --------------------------------------------------------------------------
   Reduce wasted vertical space on the quote page
   -------------------------------------------------------------------------- */

/* Shrink the 3D canvas so the quote controls are visible without scrolling */
#p3d-viewer,
.p3d-canvas-wrapper {
  max-height: 400px !important;
  min-height: 200px !important;
}
#p3d-viewer canvas {
  max-height: 400px !important;
  width: 100% !important;
  object-fit: contain;
}

/* Tighten block-level gaps on the quote page */
body.page .wp-site-blocks > * {
  margin-block-start: 0.5rem !important;
}

/* Reduce padding around the post content area */
body.page .wp-block-post-content {
  padding-top: 0.5rem !important;
  padding-bottom: 0.5rem !important;
}

/* Compact the plugin's info rows */
.p3d-info {
  margin-top: 3px !important;
  margin-bottom: 3px !important;
}

/* Hide the separate "Upload Model" button — the overlay handles it */
#p3d-pickfiles {
  display: none !important;
}

/* Upload overlay — dock to bottom of canvas */
#p3d-model-message {
  background: none !important;
  opacity: 1 !important;
  filter: none !important;
  padding: 0 !important;
  bottom: 0 !important;
  left: 0 !important;
  width: 100% !important;
  margin: 0 !important;
  text-align: center;
}

/* Compact upload prompt — full-width bar docked to bottom */
#p3d-model-message-upload {
  display: flex;
  align-items: center;
  justify-content: center;
  gap: 0.5rem;
  cursor: pointer;
  padding: 0.6rem 1.2rem !important;
  margin: 0 !important;
  border: none !important;
  border-top: 1px solid var(--bx-border) !important;
  border-radius: 0 !important;
  background: var(--bx-surface) !important;
  transition: border-color 0.25s;
  text-align: center;
  width: 100%;
}

#p3d-model-message-upload:hover {
  border-color: var(--bx-orange) !important;
}

/* Hide the old upload icon */
#p3d-model-message-upload-icon {
  display: none !important;
}

/* Small inline upload icon */
#p3d-model-message-upload::before {
  content: "";
  display: inline-block;
  width: 20px;
  height: 20px;
  background: var(--bx-orange);
  mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpolyline points='17 8 12 3 7 8'/%3E%3Cline x1='12' y1='3' x2='12' y2='15'/%3E%3C/svg%3E");
  -webkit-mask-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 24 24' fill='none' stroke='currentColor' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpath d='M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4'/%3E%3Cpolyline points='17 8 12 3 7 8'/%3E%3Cline x1='12' y1='3' x2='12' y2='15'/%3E%3C/svg%3E");
  mask-size: contain;
  -webkit-mask-size: contain;
  mask-repeat: no-repeat;
  -webkit-mask-repeat: no-repeat;
  flex-shrink: 0;
}

#p3d-model-message-upload-txt {
  color: var(--bx-muted) !important;
  font-size: 0.85rem !important;
  line-height: 1.4;
}

/* --------------------------------------------------------------------------
   3DPrint Pro plugin — layout fix + dark theme overrides
   -------------------------------------------------------------------------- */

/*
 * Twenty Twenty-Four applies .is-layout-flow / .is-layout-constrained which
 * sets > * + * { margin-block-start } and can override display/float on
 * children.  We neutralise those inside the plugin wrapper so the plugin's
 * own float-based layout works correctly.
 */
#p3d-container,
#p3d-container *,
#p3d-wrapper,
#p3d-wrapper *,
.p3d-wrapper,
.p3d-wrapper * {
  --wp--style--block-gap: 0px;
}

/* Remove WP flow spacing inside the plugin */
#p3d-container.is-layout-flow > *,
#p3d-container .is-layout-flow > *,
#p3d-wrapper.is-layout-flow > *,
#p3d-wrapper .is-layout-flow > *,
.p3d-wrapper.is-layout-flow > *,
.p3d-wrapper .is-layout-flow > * {
  margin-block-start: 0 !important;
  margin-block-end: 0 !important;
}

/* Prevent WP constrained layout from overriding widths */
#p3d-container .is-layout-constrained > *,
#p3d-wrapper .is-layout-constrained > * {
  max-width: none !important;
  margin-left: 0 !important;
  margin-right: 0 !important;
}

/* Ensure the plugin's float layout works — override any flex/grid from theme */
#p3d-container,
.p3d-wrapper,
#p3d-wrapper {
  display: block !important;
}

/* Scale/dimensions/rotation rows rely on float:left with % widths */
#p3d-scale-controls,
#p3d-dim-controls,
#p3d-rotation-controls,
#p3d-unit-controls {
  display: block !important;
  overflow: hidden;
  clear: both;
}

#p3d-scale-text,
#p3d-rotation-text,
#p3d-dimensions-text {
  float: left !important;
  width: 20% !important;
  line-height: 30px;
}

#p3d-scale-slider {
  float: left !important;
  width: 50% !important;
  margin-top: 5px;
}

#p3d-scale-input {
  float: left !important;
  width: 30% !important;
  white-space: nowrap;
  display: flex !important;
  align-items: center;
}

#p3d-scale-dimensions,
#p3d-rotation-dimensions {
  float: left !important;
  width: 80% !important;
  display: flex !important;
  align-items: center;
  flex-wrap: wrap;
  gap: 2px;
}

/* Dimension inputs */
input.p3d-dim-input,
#scale_x, #scale_y, #scale_z,
#rotation_x, #rotation_y, #rotation_z,
#p3d-slider-range-value {
  width: 3em !important;
  height: 30px !important;
  padding: 0 4px !important;
  box-shadow: none !important;
  display: inline-block !important;
}

/* Two-column layout: images left, details right */
div.p3d-images {
  float: left !important;
  width: 49% !important;
}
div.p3d-details {
  float: right !important;
  width: 49% !important;
}

/* Clearfix for float containers */
.p3d-info::after,
#p3d-container::after,
#p3d-wrapper::after,
.p3d-wrapper::after {
  content: "" !important;
  display: table !important;
  clear: both !important;
}

/*
 * The Get-a-Quote page: widen the content column so the plugin isn't
 * squeezed into the 620px default.  Target the post-content block on
 * pages that contain the plugin.
 */
body.page .wp-block-post-content.is-layout-constrained > * {
  max-width: 1100px !important;
  margin-left: auto !important;
  margin-right: auto !important;
}
body.page .wp-block-post-content.is-layout-constrained > .alignwide {
  max-width: var(--wp--style--global--wide-size) !important;
}
body.page .wp-block-post-content.is-layout-constrained > .alignfull {
  max-width: none !important;
}

/* Main containers */
#p3d-container,
#p3d-wrapper,
.p3d-wrapper {
  max-width: 1100px !important;
  width: 100% !important;
  margin-left: auto !important;
  margin-right: auto !important;
  color: var(--bx-text) !important;
  font-family: 'Inter', sans-serif !important;
}

/* Upload / drop zone */
.p3d-images,
#p3d-pickfiles,
.p3d-canvas-wrapper,
#p3d-viewer {
  background: var(--bx-surface) !important;
  border-color: var(--bx-border) !important;
  border-radius: var(--bx-radius) !important;
  color: var(--bx-muted) !important;
}
#p3d-viewer canvas {
  border-color: var(--bx-border) !important;
}

/* Upload message overlay */
#p3d-model-message {
  background-color: var(--bx-card) !important;
  color: var(--bx-text) !important;
}

/* Info / details panels */
.p3d-info,
.p3d-details,
#p3d-stl-info,
#p3d-weight,
#p3d-price {
  color: var(--bx-text) !important;
}

/* Fieldsets */
fieldset.p3d-fieldset {
  border-color: var(--bx-border) !important;
  background: var(--bx-card) !important;
  border-radius: var(--bx-radius) !important;
  color: var(--bx-text) !important;
}
fieldset.p3d-fieldset legend {
  border-color: var(--bx-border) !important;
  color: var(--bx-heading) !important;
  background: var(--bx-card) !important;
}

/* Headings */
#p3d-container h1,
#p3d-container h2,
#p3d-container h3,
#p3d-container h4,
#p3d-container h5 {
  color: var(--bx-heading) !important;
  font-family: 'Inter', sans-serif !important;
}

/* Multi-step accordion */
#p3d-multistep div[data-acc-step]:not(.open) {
  background: var(--bx-surface) !important;
}
#p3d-multistep div[data-acc-step]:not(.open) h5 {
  color: var(--bx-muted) !important;
}
#p3d-multistep div[data-acc-step]:not(.open) .p3d-badge-primary {
  background: var(--bx-border) !important;
}
#p3d-multistep div[data-acc-step].open {
  background: var(--bx-card) !important;
}

/* Tables */
#p3d-container table {
  background: var(--bx-surface) !important;
}
#p3d-container table.p3d-stats th,
#p3d-container table.p3d-stats td {
  border-color: var(--bx-border) !important;
  color: var(--bx-text) !important;
}
#p3d-container th {
  background: var(--bx-bg) !important;
  color: var(--bx-muted) !important;
}
#p3d-container td {
  color: var(--bx-text) !important;
}

/* Dropdown lists */
.p3d-dropdown-li {
  background-color: var(--bx-card) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-text) !important;
}
ul.p3d-list li:hover {
  background-color: var(--bx-surface) !important;
}
.p3d-selected-li {
  color: var(--bx-orange) !important;
  border-color: var(--bx-orange) !important;
}

/* List group items */
.p3d-list-group-item {
  background-color: var(--bx-card) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-text) !important;
}

/* Inputs */
#p3d-container input[type="text"],
#p3d-container input[type="number"],
#p3d-container input[type="email"],
#p3d-container select,
#p3d-container textarea,
.p3d-dropdown-searchable {
  background: var(--bx-surface) !important;
  border: 1px solid var(--bx-border) !important;
  color: var(--bx-heading) !important;
  border-radius: 4px !important;
  font-family: 'Inter', sans-serif !important;
}
#p3d-container input:focus,
#p3d-container select:focus,
#p3d-container textarea:focus {
  outline: none !important;
  border-color: var(--bx-orange) !important;
}

/* Buttons */
#p3d-container input[type="submit"],
#p3d-container button[type="submit"],
#p3d-container .p3d-btn,
.p3d-btn-primary,
.p3d-bulk-button,
.variations_button input[type="submit"],
.single_add_to_cart_button {
  background: var(--bx-orange-dark) !important;
  color: #fff !important;
  border: none !important;
  border-radius: 4px !important;
  font-weight: 600 !important;
  font-family: 'Inter', sans-serif !important;
  transition: background 0.2s !important;
  box-shadow: none !important;
  text-shadow: none !important;
  cursor: pointer;
}
#p3d-container input[type="submit"]:hover,
#p3d-container button[type="submit"]:hover,
#p3d-container .p3d-btn:hover,
.p3d-btn-primary:hover,
.p3d-bulk-button:hover,
.variations_button input[type="submit"]:hover,
.single_add_to_cart_button:hover {
  background: var(--bx-orange-hover) !important;
}

/* Price highlight */
#p3d-container [class*="price"],
#p3d-container [id*="price"],
#p3d-container [id*="total"],
.p3d-order-placed {
  color: var(--bx-orange) !important;
  font-weight: 600;
}

/* Plupload file list (bulk uploader) */
#p3d-bulk-uploader_filelist,
.plupload_filelist {
  background: var(--bx-card) !important;
  color: var(--bx-text) !important;
}
.plupload_filelist_header,
.plupload_filelist_footer {
  background: var(--bx-surface) !important;
  color: var(--bx-text) !important;
}
.plupload_filelist li.plupload_delete {
  background: var(--bx-card) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-text) !important;
}

/* Bulk stats */
table.p3d-stats-bulk {
  background: var(--bx-card) !important;
  color: var(--bx-text) !important;
}
.p3d-stats-bulk select:disabled,
.p3d-stats-bulk input:disabled {
  background-color: var(--bx-surface) !important;
  color: var(--bx-muted) !important;
}

/* Apply-to-all button */
.p3d-apply-to-all {
  background-color: var(--bx-surface) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-text) !important;
}

/* Select2 dropdowns */
.select2-container--default .select2-selection--single,
.select2-container--default .select2-selection--multiple {
  background-color: var(--bx-surface) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-heading) !important;
}
.select2-container--default .select2-selection--single .select2-selection__rendered {
  color: var(--bx-heading) !important;
}
.select2-dropdown {
  background-color: var(--bx-card) !important;
  border-color: var(--bx-border) !important;
}
.select2-container--default .select2-results__option {
  color: var(--bx-text) !important;
}
.select2-container--default .select2-results__option--highlighted[aria-selected] {
  background-color: var(--bx-surface) !important;
  color: var(--bx-heading) !important;
}
.select2-container--default .select2-results__option[aria-selected=true] {
  background-color: var(--bx-surface) !important;
}
.select2-search--dropdown .select2-search__field {
  background: var(--bx-surface) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-heading) !important;
}

/* Cutting instructions table */
#p3d-cutting-instructions-table tbody td {
  background-color: var(--bx-surface) !important;
  color: var(--bx-text) !important;
}
#p3d-cutting-instructions-table tbody tr:nth-child(2n) td {
  background-color: var(--bx-card) !important;
}

/* Tooltips */
.p3d-tooltip-info {
  background: var(--bx-card) !important;
  color: var(--bx-text) !important;
}

/* noUiSlider */
.noUi-connect { background: var(--bx-orange) !important; }
.noUi-target  { background: var(--bx-surface) !important; border-color: var(--bx-border) !important; }
.noUi-handle  { background: var(--bx-heading) !important; border-color: var(--bx-border) !important; }

/* Fullscreen viewer */
#p3d-fullscreen {
  background-color: var(--bx-bg) !important;
}

/* WooCommerce overrides for 3D Print product pages */
.woocommerce #p3d-container .quantity .qty {
  background: var(--bx-surface) !important;
  color: var(--bx-heading) !important;
  border-color: var(--bx-border) !important;
}

/* --------------------------------------------------------------------------
   Login page
   -------------------------------------------------------------------------- */

body.login {
  background: var(--bx-bg) !important;
  font-family: 'Inter', sans-serif !important;
}
body.login #login {
  background: var(--bx-card);
  border: 1px solid var(--bx-border);
  border-radius: var(--bx-radius);
  padding: 2rem;
  margin-top: 80px;
  box-shadow: 0 4px 24px rgba(0,0,0,0.5);
}
body.login h1 a {
  background-image: none !important;
  width: auto !important;
  height: auto !important;
  text-indent: 0 !important;
  display: block;
  text-align: center;
  font-family: 'Inter', sans-serif;
  font-size: 1.2rem;
  font-weight: 700;
  color: var(--bx-heading);
  text-decoration: none;
  letter-spacing: -0.01em;
}
body.login .input {
  background: var(--bx-surface) !important;
  border-color: var(--bx-border) !important;
  color: var(--bx-heading) !important;
  border-radius: 4px !important;
  font-family: 'Inter', sans-serif !important;
}
body.login #wp-submit {
  background: var(--bx-orange-dark) !important;
  border: none !important; box-shadow: none !important; text-shadow: none !important;
  font-weight: 600 !important; border-radius: 4px !important;
  width: 100%; padding: 0.85rem !important;
  font-family: 'Inter', sans-serif !important;
  transition: background 0.2s !important;
}
body.login #wp-submit:hover { background: var(--bx-orange-hover) !important; }
body.login #nav a,
body.login #backtoblog a { color: var(--bx-orange) !important; }
body.login .message { background: var(--bx-surface) !important; border-color: var(--bx-border) !important; color: var(--bx-text) !important; }
