{"id":48366,"date":"2026-05-26T06:39:20","date_gmt":"2026-05-26T06:39:20","guid":{"rendered":"https:\/\/www.cnshining.com\/?page_id=48366"},"modified":"2026-06-02T02:03:09","modified_gmt":"2026-06-02T02:03:09","slug":"calculateur-de-capacite-de-bouteille-en-aluminium","status":"publish","type":"page","link":"https:\/\/www.cnshining.com\/fr\/centre-doutils-demballage\/calculateur-de-capacite-de-bouteille-en-aluminium","title":{"rendered":"Calculateur de capacit\u00e9 de bouteille en aluminium"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"48366\" class=\"elementor elementor-48366\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-1e4ac71a e-flex e-con-boxed e-con e-parent\" data-id=\"1e4ac71a\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-d381fd4 elementor-icon-list--layout-inline elementor-align-center elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list\" data-id=\"d381fd4\" data-element_type=\"widget\" data-widget_type=\"icon-list.default\">\n\t\t\t\t\t\t\t<ul class=\"elementor-icon-list-items elementor-inline-items\">\n\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.cnshining.com\/fr\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-icon\">\n\t\t\t\t\t\t\t<svg aria-hidden=\"true\" class=\"e-font-icon-svg e-fas-home\" viewbox=\"0 0 576 512\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M280.37 148.26L96 300.11V464a16 16 0 0 0 16 16l112.06-.29a16 16 0 0 0 15.92-16V368a16 16 0 0 1 16-16h64a16 16 0 0 1 16 16v95.64a16 16 0 0 0 16 16.05L464 480a16 16 0 0 0 16-16V300L295.67 148.26a12.19 12.19 0 0 0-15.3 0zM571.6 251.47L488 182.56V44.05a12 12 0 0 0-12-12h-56a12 12 0 0 0-12 12v72.61L318.47 43a48 48 0 0 0-61 0L4.34 251.47a12 12 0 0 0-1.6 16.9l25.5 31A12 12 0 0 0 45.15 301l235.22-193.74a12.19 12.19 0 0 1 15.3 0L530.9 301a12 12 0 0 0 16.9-1.6l25.5-31a12 12 0 0 0-1.7-16.93z\"><\/path><\/svg>\t\t\t\t\t\t<\/span>\n\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Maison \/<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t\t\t<li class=\"elementor-icon-list-item elementor-inline-item\">\n\t\t\t\t\t\t\t\t\t\t\t<a href=\"https:\/\/www.cnshining.com\/fr\/centre-doutils-demballage\/\" target=\"_blank\">\n\n\t\t\t\t\t\t\t\t\t\t\t<span class=\"elementor-icon-list-text\">Centre d&#039;outils d&#039;emballage<\/span>\n\t\t\t\t\t\t\t\t\t\t\t<\/a>\n\t\t\t\t\t\t\t\t\t<\/li>\n\t\t\t\t\t\t<\/ul>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-2b4f7e93 e-flex e-con-boxed e-con e-parent\" data-id=\"2b4f7e93\" data-element_type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-c6722f3 e-con-full e-flex e-con e-child\" data-id=\"c6722f3\" data-element_type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-35015ca elementor-widget elementor-widget-html\" data-id=\"35015ca\" data-element_type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<section id=\"abc-calculator\" class=\"sp-bottle-capacity-calculator\" data-sp-bottle-capacity-calculator>\r\n  <style>\r\n    #abc-calculator,\r\n    #abc-calculator * {\r\n      box-sizing: border-box;\r\n    }\r\n\r\n    #abc-calculator {\r\n      --sp-bg: #f5f7fb;\r\n      --sp-panel: #ffffff;\r\n      --sp-text: #152033;\r\n      --sp-muted: #5f708c;\r\n      --sp-line: #d8e2ef;\r\n      --sp-blue: #1363df;\r\n      --sp-blue-dark: #082a5e;\r\n      --sp-silver: #eef3fa;\r\n      --sp-shadow: 0 20px 48px rgba(8, 42, 94, .08);\r\n      --abc-value-size: 24px;\r\n\r\n      max-width: 1180px;\r\n      margin: 28px auto;\r\n      color: var(--sp-text);\r\n      font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, \"Segoe UI\", Roboto, Arial, sans-serif;\r\n      line-height: 1.55;\r\n    }\r\n\r\n    #abc-calculator h2,\r\n    #abc-calculator h3,\r\n    #abc-calculator p {\r\n      margin: 0;\r\n    }\r\n\r\n    #abc-calculator .abc-shell {\r\n      background: linear-gradient(180deg, #fbfcfe 0%, var(--sp-bg) 100%);\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 30px;\r\n      padding: clamp(24px, 5vw, 56px);\r\n      box-shadow: 0 12px 30px rgba(15, 36, 74, .04);\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator .abc-hero {\r\n      width: 100%;\r\n      margin-bottom: clamp(24px, 4vw, 36px);\r\n    }\r\n\r\n    #abc-calculator .abc-badge {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      gap: 8px;\r\n      padding: 8px 14px;\r\n      margin-bottom: 18px;\r\n      border: 1px solid #bcd0f1;\r\n      border-radius: 999px;\r\n      background: #fff;\r\n      color: var(--sp-blue);\r\n      font-size: 13px;\r\n      font-weight: 800;\r\n      letter-spacing: .02em;\r\n      text-transform: uppercase;\r\n    }\r\n\r\n    #abc-calculator .abc-badge::before {\r\n      content: \"\";\r\n      width: 9px;\r\n      height: 9px;\r\n      border-radius: 50%;\r\n      background: var(--sp-blue);\r\n      box-shadow: 0 0 0 5px rgba(19, 99, 223, .12);\r\n      flex: 0 0 auto;\r\n    }\r\n\r\n    #abc-calculator .abc-intro h2 {\r\n      margin-bottom: 18px;\r\n      color: var(--sp-blue-dark);\r\n      font-size: clamp(28px, 4vw, 40px);\r\n      line-height: .98;\r\n      letter-spacing: -.05em;\r\n      max-width: 980px;\r\n    }\r\n\r\n    #abc-calculator .abc-intro p {\r\n      max-width: 980px;\r\n      color: var(--sp-muted);\r\n      font-size: clamp(16px, 2vw, 18px);\r\n      line-height: 1.75;\r\n    }\r\n\r\n    #abc-calculator .abc-feature-row {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 14px;\r\n      margin-top: 28px;\r\n      width: 100%;\r\n    }\r\n\r\n    #abc-calculator .abc-feature {\r\n      background: #fff;\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 18px;\r\n      padding: 16px;\r\n      min-height: 112px;\r\n    }\r\n\r\n    #abc-calculator .abc-feature strong {\r\n      display: block;\r\n      color: var(--sp-blue-dark);\r\n      font-size: 18px;\r\n      line-height: 1.25;\r\n      letter-spacing: -.02em;\r\n      margin-bottom: 8px;\r\n    }\r\n\r\n    #abc-calculator .abc-feature span {\r\n      display: block;\r\n      color: var(--sp-muted);\r\n      font-size: 13px;\r\n      line-height: 1.45;\r\n    }\r\n\r\n    #abc-calculator .abc-workspace {\r\n      display: grid;\r\n      grid-template-columns: minmax(360px, 1.18fr) minmax(360px, .82fr);\r\n      gap: clamp(22px, 4vw, 36px);\r\n      align-items: start;\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator .abc-preview-column {\r\n      display: flex;\r\n      flex-direction: column;\r\n      gap: 18px;\r\n    }\r\n\r\n    #abc-calculator .abc-panel,\r\n    #abc-calculator .abc-preview-panel,\r\n    #abc-calculator .abc-note-panel {\r\n      position: relative;\r\n      background: var(--sp-panel);\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 24px;\r\n      box-shadow: var(--sp-shadow);\r\n    }\r\n\r\n    #abc-calculator .abc-panel {\r\n      padding: clamp(22px, 3vw, 30px);\r\n      overflow: visible;\r\n      z-index: 20;\r\n    }\r\n\r\n    #abc-calculator .abc-preview-panel {\r\n      padding: clamp(22px, 3vw, 30px);\r\n      overflow: hidden;\r\n      min-height: 540px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n    }\r\n\r\n    #abc-calculator .abc-note-panel {\r\n      padding: 18px 20px;\r\n    }\r\n\r\n    #abc-calculator .abc-panel::before,\r\n    #abc-calculator .abc-preview-panel::before {\r\n      content: \"\";\r\n      position: absolute;\r\n      left: 18px;\r\n      right: 18px;\r\n      top: 0;\r\n      height: 4px;\r\n      background: linear-gradient(90deg, var(--sp-blue), var(--sp-blue-dark));\r\n      border-radius: 999px;\r\n    }\r\n\r\n    #abc-calculator .abc-title-row {\r\n      display: flex;\r\n      align-items: flex-start;\r\n      justify-content: space-between;\r\n      gap: 18px;\r\n      margin-bottom: 20px;\r\n      padding-top: 4px;\r\n    }\r\n\r\n    #abc-calculator h3 {\r\n      color: var(--sp-blue-dark);\r\n      font-size: 25px;\r\n      line-height: 1.1;\r\n      letter-spacing: -.03em;\r\n    }\r\n\r\n    #abc-calculator .abc-title-row p {\r\n      margin-top: 8px;\r\n      color: var(--sp-muted);\r\n      font-size: 14px;\r\n    }\r\n\r\n    #abc-calculator .abc-reset,\r\n    #abc-calculator .abc-copy,\r\n    #abc-calculator .abc-clear,\r\n    #abc-calculator .abc-height-quick {\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 13px;\r\n      background: #fff;\r\n      color: var(--sp-blue-dark);\r\n      padding: 12px 14px;\r\n      font-size: 14px;\r\n      font-weight: 800;\r\n      cursor: pointer;\r\n      transition: transform .16s ease, border-color .16s ease, background .16s ease, box-shadow .16s ease;\r\n      text-transform: none !important;\r\n      white-space: nowrap;\r\n    }\r\n\r\n    #abc-calculator .abc-reset:hover,\r\n    #abc-calculator .abc-copy:hover,\r\n    #abc-calculator .abc-clear:hover,\r\n    #abc-calculator .abc-height-quick:hover {\r\n      transform: translateY(-1px);\r\n      border-color: rgba(19, 99, 223, .4);\r\n      background: #f7fbff;\r\n      box-shadow: 0 10px 24px rgba(22, 32, 51, .05);\r\n    }\r\n\r\n    #abc-calculator .abc-copy {\r\n      border-color: transparent;\r\n      background: linear-gradient(135deg, var(--sp-blue), var(--sp-blue-dark));\r\n      color: #fff;\r\n      box-shadow: 0 12px 28px rgba(19, 99, 223, .18);\r\n    }\r\n\r\n    #abc-calculator .abc-input-grid {\r\n      display: grid;\r\n      grid-template-columns: 1fr;\r\n      gap: 14px;\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator .abc-field {\r\n      display: block;\r\n      position: relative;\r\n      z-index: 1;\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 18px;\r\n      background: #fff;\r\n      padding: 14px;\r\n      transition: border-color .16s ease, box-shadow .16s ease, transform .16s ease;\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator .abc-field:focus-within,\r\n    #abc-calculator .abc-field.is-open {\r\n      z-index: 10000;\r\n      border-color: rgba(19, 99, 223, .58);\r\n      box-shadow: 0 12px 28px rgba(19, 99, 223, .10);\r\n      transform: translateY(-1px);\r\n    }\r\n\r\n    #abc-calculator .abc-field > span {\r\n      display: block;\r\n      margin-bottom: 2px;\r\n      color: var(--sp-muted);\r\n      font-size: 12px;\r\n      font-weight: 850;\r\n      text-transform: uppercase;\r\n      letter-spacing: .055em;\r\n    }\r\n\r\n    #abc-calculator .abc-field small {\r\n      display: block;\r\n      margin-bottom: 8px;\r\n      color: #8ba0bb;\r\n      font-size: 12px;\r\n    }\r\n\r\n    #abc-calculator .abc-height-range {\r\n      margin: 8px 0 10px;\r\n      color: var(--sp-blue);\r\n      font-size: 13px;\r\n      font-weight: 800;\r\n      line-height: 1.45;\r\n    }\r\n\r\n    #abc-calculator .abc-height-quick-row {\r\n      display: grid;\r\n      grid-template-columns: repeat(3, minmax(0, 1fr));\r\n      gap: 8px;\r\n      margin-top: 12px;\r\n    }\r\n\r\n    #abc-calculator .abc-height-quick {\r\n      padding: 9px 10px;\r\n      font-size: 13px;\r\n      border-radius: 12px;\r\n      background: #f8fbff;\r\n    }\r\n\r\n    #abc-calculator .abc-input-box {\r\n      display: grid;\r\n      grid-template-columns: minmax(0, 1fr) auto;\r\n      gap: 12px;\r\n      align-items: center;\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator input,\r\n    #abc-calculator .abc-field .abc-select-value,\r\n    #abc-calculator .abc-select-trigger,\r\n    #abc-calculator .abc-select-trigger .abc-select-value {\r\n      color: var(--sp-blue-dark) !important;\r\n      font-size: var(--abc-value-size) !important;\r\n      font-weight: 900 !important;\r\n      line-height: 1.15 !important;\r\n      letter-spacing: -.04em !important;\r\n      text-transform: none !important;\r\n    }\r\n\r\n    #abc-calculator input {\r\n      width: 100%;\r\n      min-width: 0;\r\n      border: 0 !important;\r\n      outline: 0 !important;\r\n      box-shadow: none !important;\r\n      background: transparent !important;\r\n      padding: 2px 0 !important;\r\n      appearance: textfield;\r\n    }\r\n\r\n    #abc-calculator input::-webkit-outer-spin-button,\r\n    #abc-calculator input::-webkit-inner-spin-button {\r\n      -webkit-appearance: none;\r\n      margin: 0;\r\n    }\r\n\r\n    #abc-calculator .abc-input-box em {\r\n      display: inline-flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      min-width: 58px;\r\n      padding: 9px 12px;\r\n      border-radius: 999px;\r\n      background: var(--sp-silver);\r\n      color: var(--sp-blue);\r\n      font-size: 14px;\r\n      font-style: normal;\r\n      font-weight: 900;\r\n      white-space: nowrap;\r\n      text-transform: none !important;\r\n    }\r\n\r\n    #abc-calculator .abc-select {\r\n      position: relative;\r\n      width: 100%;\r\n      z-index: 20;\r\n    }\r\n\r\n    #abc-calculator .abc-select.is-open {\r\n      z-index: 10001;\r\n    }\r\n\r\n    \/* Match dropdown value display with the total height input value style. *\/\r\n    #abc-calculator .abc-select-trigger {\r\n      width: 100%;\r\n      min-height: 0;\r\n      border: 0 !important;\r\n      background: transparent !important;\r\n      padding: 2px 0 !important;\r\n      margin: 0 !important;\r\n      text-align: left;\r\n      cursor: pointer;\r\n      position: relative;\r\n      display: block;\r\n      appearance: none;\r\n      -webkit-appearance: none;\r\n      outline: none !important;\r\n      box-shadow: none !important;\r\n      line-height: 1.15 !important;\r\n      border-radius: 0 !important;\r\n    }\r\n\r\n    #abc-calculator .abc-select-trigger:hover,\r\n    #abc-calculator .abc-select-trigger:focus {\r\n      border: 0 !important;\r\n      background: transparent !important;\r\n      box-shadow: none !important;\r\n      outline: none !important;\r\n      transform: none !important;\r\n    }\r\n\r\n    #abc-calculator .abc-select-trigger::after {\r\n      display: none;\r\n    }\r\n\r\n    #abc-calculator .abc-select.is-open .abc-select-trigger::after {\r\n      display: none;\r\n    }\r\n\r\n    #abc-calculator .abc-select-trigger .abc-select-value {\r\n      display: block !important;\r\n      margin: 0 !important;\r\n      padding: 0 !important;\r\n      line-height: 1.15 !important;\r\n    }\r\n\r\n    #abc-calculator .abc-select-menu {\r\n      position: absolute;\r\n      left: -18px;\r\n      right: -72px;\r\n      top: calc(100% + 14px);\r\n      z-index: 9999;\r\n      display: none;\r\n      padding: 10px 0;\r\n      margin: 0;\r\n      list-style: none;\r\n      background: #ffffff;\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 0;\r\n      box-shadow: 0 22px 42px rgba(8, 42, 94, .13);\r\n      max-height: 360px;\r\n      overflow-y: auto;\r\n    }\r\n\r\n    #abc-calculator .abc-select.is-open .abc-select-menu {\r\n      display: block;\r\n      z-index: 10002;\r\n    }\r\n\r\n    #abc-calculator .abc-select-option {\r\n      width: 100%;\r\n      min-height: 56px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: flex-start;\r\n      padding: 12px 22px;\r\n      border: 0;\r\n      border-radius: 0;\r\n      background: #fff;\r\n      color: var(--sp-text);\r\n      font-size: var(--abc-value-size) !important;\r\n      font-weight: 700;\r\n      line-height: 1.2;\r\n      text-align: left;\r\n      cursor: pointer;\r\n      transition: background .14s ease, color .14s ease;\r\n      text-transform: none !important;\r\n    }\r\n\r\n    #abc-calculator .abc-select-option:hover,\r\n    #abc-calculator .abc-select-option:focus {\r\n      background: #f3f7ff;\r\n      color: var(--sp-blue-dark);\r\n      outline: none;\r\n    }\r\n\r\n    #abc-calculator .abc-select-option.is-selected {\r\n      background: var(--sp-blue-dark);\r\n      color: #ffffff;\r\n      font-weight: 800;\r\n    }\r\n\r\n    #abc-calculator .abc-warning {\r\n      margin-top: 16px;\r\n      border: 1px solid #bfdcff;\r\n      border-radius: 16px;\r\n      background: #eef7ff;\r\n      color: #d62828;\r\n      padding: 14px 16px;\r\n      font-size: 14px;\r\n      line-height: 1.7;\r\n    }\r\n\r\n    #abc-calculator .abc-result-grid {\r\n      display: grid;\r\n      grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      gap: 10px;\r\n      margin-top: 18px;\r\n    }\r\n\r\n    #abc-calculator .abc-result {\r\n      padding: 16px;\r\n      border-radius: 16px;\r\n      background: linear-gradient(180deg, #fbfdff, #f5f9ff);\r\n      border: 1px dashed rgba(19, 99, 223, .32);\r\n      min-height: 132px;\r\n    }\r\n\r\n    #abc-calculator .abc-result span {\r\n      display: block;\r\n      color: var(--sp-muted);\r\n      font-size: 12px;\r\n      font-weight: 900;\r\n      letter-spacing: .04em;\r\n      text-transform: uppercase;\r\n      margin-bottom: 8px;\r\n    }\r\n\r\n    #abc-calculator .abc-result strong {\r\n      display: block;\r\n      color: var(--sp-blue-dark);\r\n      font-size: 34px;\r\n      line-height: 1.08;\r\n      word-break: break-word;\r\n      text-transform: none !important;\r\n    }\r\n\r\n    #abc-calculator .abc-result b,\r\n    #abc-calculator .abc-result i {\r\n      font-style: normal;\r\n    }\r\n\r\n    #abc-calculator .abc-result small {\r\n      display: block;\r\n      margin-top: 9px;\r\n      color: var(--sp-muted);\r\n      font-size: 12px;\r\n      line-height: 1.45;\r\n    }\r\n\r\n    #abc-calculator .abc-action-row {\r\n      display: grid;\r\n      grid-template-columns: 1fr 1fr 1fr;\r\n      gap: 10px;\r\n      margin-top: 18px;\r\n    }\r\n\r\n    #abc-calculator .abc-note {\r\n      margin-top: 0;\r\n      border-left: 4px solid var(--sp-blue);\r\n      border-radius: 16px;\r\n      background: #edf4ff;\r\n      padding: 15px 16px;\r\n      color: #24465f;\r\n      font-size: 14px;\r\n      line-height: 1.8;\r\n    }\r\n\r\n    #abc-calculator .abc-note strong {\r\n      color: var(--sp-blue-dark);\r\n    }\r\n\r\n    #abc-calculator .abc-svg-wrap {\r\n      width: 100%;\r\n      min-height: 460px;\r\n      background: #fff;\r\n      border: 1px solid var(--sp-line);\r\n      border-radius: 24px;\r\n      padding: 18px;\r\n      display: flex;\r\n      align-items: center;\r\n      justify-content: center;\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator .abc-svg {\r\n      display: block;\r\n      width: auto;\r\n      height: auto;\r\n      max-width: 100%;\r\n      margin: 0 auto;\r\n      overflow: visible;\r\n    }\r\n\r\n    #abc-calculator .abc-svg-text {\r\n      fill: #64748b;\r\n      font-size: 3.2px;\r\n      font-weight: 800;\r\n      text-transform: none !important;\r\n    }\r\n\r\n    #abc-calculator .abc-svg-text.small {\r\n      font-size: 3px;\r\n    }\r\n\r\n    #abc-calculator .abc-toast {\r\n      position: fixed;\r\n      right: 20px;\r\n      bottom: 20px;\r\n      z-index: 99999;\r\n      transform: translateY(18px);\r\n      opacity: 0;\r\n      pointer-events: none;\r\n      background: #082a5e;\r\n      color: #fff;\r\n      padding: 12px 14px;\r\n      border-radius: 14px;\r\n      box-shadow: 0 18px 50px rgba(8, 42, 94, .22);\r\n      transition: opacity .18s ease, transform .18s ease;\r\n      font-weight: 800;\r\n      font-size: 14px;\r\n    }\r\n\r\n    #abc-calculator .abc-toast.is-visible {\r\n      opacity: 1;\r\n      transform: translateY(0);\r\n    }\r\n\r\n    @media (max-width: 980px) {\r\n      #abc-calculator .abc-workspace {\r\n        grid-template-columns: 1fr;\r\n      }\r\n\r\n      #abc-calculator .abc-preview-panel {\r\n        min-height: auto;\r\n      }\r\n\r\n      #abc-calculator .abc-preview-column {\r\n        gap: 16px;\r\n      }\r\n\r\n      #abc-calculator .abc-feature-row {\r\n        grid-template-columns: repeat(2, minmax(0, 1fr));\r\n      }\r\n    }\r\n\r\n    @media (max-width: 720px) {\r\n      #abc-calculator {\r\n        --abc-value-size: 22px;\r\n      }\r\n\r\n      #abc-calculator .abc-action-row,\r\n      #abc-calculator .abc-result-grid,\r\n      #abc-calculator .abc-feature-row,\r\n      #abc-calculator .abc-height-quick-row {\r\n        grid-template-columns: 1fr;\r\n      }\r\n\r\n      #abc-calculator .abc-select-menu {\r\n        right: -58px;\r\n      }\r\n\r\n      #abc-calculator .abc-svg-wrap {\r\n        min-height: 420px;\r\n      }\r\n    }\r\n\r\n    @media (max-width: 620px) {\r\n      #abc-calculator .abc-shell {\r\n        padding: 22px 16px;\r\n      }\r\n\r\n      #abc-calculator .abc-title-row {\r\n        flex-direction: column;\r\n      }\r\n\r\n      #abc-calculator .abc-reset {\r\n        width: 100%;\r\n      }\r\n\r\n      #abc-calculator .abc-select-menu {\r\n        left: -14px;\r\n        right: -58px;\r\n      }\r\n    }\r\n  <\/style>\r\n\r\n  <div class=\"abc-shell\">\r\n    <div class=\"abc-hero\">\r\n      <div class=\"abc-intro\">\r\n        <div class=\"abc-badge\">Estimateur de capacit\u00e9 des bouteilles en aluminium<\/div>\r\n        <h2>Calculateur de capacit\u00e9 de bouteille en aluminium<\/h2>\r\n        <p>\r\n          Cet outil permet d&#039;estimer la capacit\u00e9 d&#039;une bouteille standard en aluminium \u00e0 corps droit et \u00e9paules arrondies. S\u00e9lectionnez d&#039;abord le diam\u00e8tre du fond, puis indiquez une plage de hauteurs correspondante ou utilisez les boutons de s\u00e9lection rapide de la hauteur.\r\n        <\/p>\r\n        <div class=\"abc-feature-row\">\r\n          <div class=\"abc-feature\">\r\n            <strong>Diam\u00e8tre en premier<\/strong>\r\n            <span>S\u00e9lectionnez d&#039;abord le diam\u00e8tre inf\u00e9rieur pour charger la plage de hauteurs correspondante.<\/span>\r\n          <\/div>\r\n          <div class=\"abc-feature\">\r\n            <strong>Valeurs de hauteur rapides<\/strong>\r\n            <span>Utilisez les boutons Hauteur min, moyenne et max pour le diam\u00e8tre s\u00e9lectionn\u00e9.<\/span>\r\n          <\/div>\r\n          <div class=\"abc-feature\">\r\n            <strong>Tailles de bouche assorties<\/strong>\r\n            <span>Les options d&#039;ouverture sont automatiquement limit\u00e9es par le diam\u00e8tre de la bouteille s\u00e9lectionn\u00e9e.<\/span>\r\n          <\/div>\r\n        <\/div>\r\n      <\/div>\r\n    <\/div>\r\n\r\n    <div class=\"abc-workspace\">\r\n      <div class=\"abc-preview-column\">\r\n        <section class=\"abc-preview-panel\">\r\n          <div class=\"abc-svg-wrap\">\r\n            <svg id=\"abcBottleSvg\" class=\"abc-svg\" viewbox=\"0 0 260 410\" aria-label=\"Sch\u00e9ma de la bouteille en aluminium\">\r\n              <defs>\r\n                <lineargradient id=\"abcMetal\" x1=\"0\" x2=\"1\" y1=\"0\" y2=\"0\">\r\n                  <stop offset=\"0%\" stop-color=\"#cbd5e1\"><\/stop>\r\n                  <stop offset=\"18%\" stop-color=\"#f8fafc\"><\/stop>\r\n                  <stop offset=\"48%\" stop-color=\"#e2e8f0\"><\/stop>\r\n                  <stop offset=\"76%\" stop-color=\"#ffffff\"><\/stop>\r\n                  <stop offset=\"100%\" stop-color=\"#94a3b8\"><\/stop>\r\n                <\/lineargradient>\r\n                <lineargradient id=\"abcLiquid\" x1=\"0\" x2=\"0\" y1=\"0\" y2=\"1\">\r\n                  <stop offset=\"0%\" stop-color=\"#dbeafe\" stop-opacity=\"0.75\"><\/stop>\r\n                  <stop offset=\"100%\" stop-color=\"#bfdbfe\" stop-opacity=\"0.9\"><\/stop>\r\n                <\/lineargradient>\r\n                <clippath id=\"abcBottleClip\">\r\n                  <path id=\"abcBottleClipPath\"><\/path>\r\n                <\/clippath>\r\n              <\/defs>\r\n\r\n              <path id=\"abcBottleFill\" fill=\"url(#abcMetal)\" stroke=\"none\"><\/path>\r\n\r\n              <g clip-path=\"url(#abcBottleClip)\">\r\n                <rect id=\"abcWaterRect\" x=\"0\" y=\"120\" width=\"260\" height=\"230\" fill=\"url(#abcLiquid)\"><\/rect>\r\n                <line id=\"abcWaterLine\" x1=\"40\" y1=\"120\" x2=\"150\" y2=\"120\" stroke=\"#60a5fa\" stroke-width=\"0.6\" stroke-dasharray=\"1.8 1.8\"><\/line>\r\n              <\/g>\r\n\r\n              <path id=\"abcBottleStroke\" fill=\"none\" stroke=\"#475569\" stroke-width=\"0.85\"><\/path>\r\n\r\n              <line id=\"abcHeightLine\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <line id=\"abcHeightTopTick\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <line id=\"abcHeightBottomTick\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <text id=\"abcHeightText\" class=\"abc-svg-text\"><\/text>\r\n\r\n              <line id=\"abcDiameterLine\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <line id=\"abcDiameterLeftTick\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <line id=\"abcDiameterRightTick\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <text id=\"abcDiameterText\" class=\"abc-svg-text\"><\/text>\r\n\r\n              <line id=\"abcMouthLine\" stroke=\"#94a3b8\" stroke-width=\"0.45\"><\/line>\r\n              <text id=\"abcMouthText\" class=\"abc-svg-text small\"><\/text>\r\n            <\/svg>\r\n          <\/div>\r\n        <\/section>\r\n\r\n      <\/div>\r\n\r\n      <section class=\"abc-panel\">\r\n        <div class=\"abc-title-row\">\r\n          <div>\r\n            <h3>Saisie des dimensions<\/h3>\r\n            <p>S\u00e9lectionnez d&#039;abord le diam\u00e8tre. La plage de hauteurs sera mise \u00e0 jour automatiquement.<\/p>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"abc-input-grid\">\r\n          <div class=\"abc-field\" data-dropdown-field>\r\n            <span>Diam\u00e8tre de la bouteille<\/span>\r\n            <small>Choisissez d&#039;abord le diam\u00e8tre de la bouteille<\/small>\r\n            <div class=\"abc-input-box\">\r\n              <div class=\"abc-select\" id=\"abcDiameterDropdown\" data-dropdown=\"diameter\">\r\n                <button type=\"button\" class=\"abc-select-trigger\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\r\n                  <span class=\"abc-select-value\">53<\/span>\r\n                <\/button>\r\n                <div class=\"abc-select-menu\" role=\"listbox\"><\/div>\r\n              <\/div>\r\n              <em>mm<\/em>\r\n            <\/div>\r\n          <\/div>\r\n\r\n          <label class=\"abc-field\">\r\n            <span>Hauteur de la bouteille<\/span>\r\n            <small>De la base de la bouteille jusqu&#039;au goulot<\/small>\r\n            <div class=\"abc-height-range\" id=\"abcHeightRange\">Hauteurs disponibles : 120\u2013235 mm<\/div>\r\n            <div class=\"abc-input-box\">\r\n              <input id=\"abcHeight\" type=\"number\" min=\"120\" max=\"235\" value=\"180\" \/>\r\n              <em>mm<\/em>\r\n            <\/div>\r\n            <div class=\"abc-height-quick-row\">\r\n              <button type=\"button\" class=\"abc-height-quick\" id=\"abcMinHeight\">Min 120<\/button>\r\n              <button type=\"button\" class=\"abc-height-quick\" id=\"abcMidHeight\">Milieu de l&#039;ann\u00e9e 178<\/button>\r\n              <button type=\"button\" class=\"abc-height-quick\" id=\"abcMaxHeight\">Max 235<\/button>\r\n            <\/div>\r\n          <\/label>\r\n\r\n          <div class=\"abc-field\" data-dropdown-field>\r\n            <span>diam\u00e8tre de la bouche<\/span>\r\n            <small>Tailles d&#039;ouverture disponibles pour le diam\u00e8tre s\u00e9lectionn\u00e9<\/small>\r\n            <div class=\"abc-input-box\">\r\n              <div class=\"abc-select\" id=\"abcMouthDropdown\" data-dropdown=\"mouth\">\r\n                <button type=\"button\" class=\"abc-select-trigger\" aria-haspopup=\"listbox\" aria-expanded=\"false\">\r\n                  <span class=\"abc-select-value\">24<\/span>\r\n                <\/button>\r\n                <div class=\"abc-select-menu\" role=\"listbox\"><\/div>\r\n              <\/div>\r\n              <em>mm<\/em>\r\n            <\/div>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div id=\"abcWarning\" class=\"abc-warning\" style=\"display:none;\">\r\n          Veuillez saisir une hauteur dans la plage disponible.\r\n        <\/div>\r\n\r\n        <div class=\"abc-result-grid\">\r\n          <div class=\"abc-result abc-result-full\">\r\n            <span>pleine capacit\u00e9<\/span>\r\n            <strong><b id=\"abcFullMl\">0<\/b> mL<\/strong>\r\n            <small>fl oz US : <i id=\"abcFullUsOz\">0<\/i><br>oz liq. Royaume-Uni : <i id=\"abcFullUkOz\">0<\/i><\/small>\r\n          <\/div>\r\n\r\n          <div class=\"abc-result abc-result-filling\">\r\n            <span>Capacit\u00e9 de remplissage<\/span>\r\n            <strong><b id=\"abcFillingMl\">0<\/b> mL<\/strong>\r\n            <small>fl oz US : <i id=\"abcFillingUsOz\">0<\/i><br>oz liq. Royaume-Uni : <i id=\"abcFillingUkOz\">0<\/i><\/small>\r\n          <\/div>\r\n        <\/div>\r\n\r\n        <div class=\"abc-action-row\">\r\n          <button type=\"button\" class=\"abc-copy\" id=\"abcCopy\">Copier le r\u00e9sultat<\/button>\r\n          <button type=\"button\" class=\"abc-reset\" id=\"abcResetBottom\">Exemple de r\u00e9initialisation<\/button>\r\n          <button type=\"button\" class=\"abc-clear\" id=\"abcClear\">Clair<\/button>\r\n        <\/div>\r\n      <\/section>\r\n    <\/div>\r\n  <\/div>\r\n\r\n  <div class=\"abc-toast\" id=\"abcToast\" role=\"status\" aria-live=\"polite\">Copi\u00e9<\/div>\r\n\r\n  <script>\r\n    (function () {\r\n      var root = document.getElementById(\"abc-calculator\");\r\n      if (!root || root.dataset.abcReady === \"true\") return;\r\n      root.dataset.abcReady = \"true\";\r\n\r\n      var DEFAULT_HEIGHT = 180;\r\n      var DEFAULT_DIAMETER = 53;\r\n      var DEFAULT_MOUTH = 24;\r\n      var DIAGRAM_SCALE = 1.7;\r\n      var warningTimer = null;\r\n\r\n      var state = {\r\n        diameter: DEFAULT_DIAMETER,\r\n        mouth: DEFAULT_MOUTH\r\n      };\r\n\r\n      var diameterOptions = [22, 25, 28, 35, 40, 45, 50, 53, 59, 66, 74, 80];\r\n\r\n      var diameterMouthMap = {\r\n        22: [18, 20],\r\n        25: [20],\r\n        28: [20, 24],\r\n        35: [20, 24, 28],\r\n        40: [20, 24, 28],\r\n        45: [20, 24, 28],\r\n        50: [24, 28],\r\n        53: [24, 28, 38],\r\n        59: [24, 28, 38],\r\n        66: [28, 38],\r\n        74: [28, 38],\r\n        80: [28, 38]\r\n      };\r\n\r\n      var diameterHeightMap = {\r\n        22: { min: 68, max: 90 },\r\n        25: { min: 75, max: 90 },\r\n        28: { min: 75, max: 100 },\r\n        35: { min: 95, max: 160 },\r\n        40: { min: 80, max: 180 },\r\n        45: { min: 100, max: 190 },\r\n        50: { min: 110, max: 225 },\r\n        53: { min: 120, max: 235 },\r\n        59: { min: 120, max: 250 },\r\n        66: { min: 140, max: 240 },\r\n        74: { min: 160, max: 300 },\r\n        80: { min: 180, max: 300 }\r\n      };\r\n\r\n      var neckShoulderMap = {\r\n        22: {\r\n          18: { neck: 12, shoulder: 7 },\r\n          20: { neck: 13, shoulder: 7 }\r\n        },\r\n        25: {\r\n          20: { neck: 13, shoulder: 7 }\r\n        },\r\n        28: {\r\n          20: { neck: 13, shoulder: 7 },\r\n          24: { neck: 19, shoulder: 10 }\r\n        },\r\n        35: {\r\n          20: { neck: 13, shoulder: 15 },\r\n          24: { neck: 19, shoulder: 10 },\r\n          28: { neck: 16, shoulder: 8 }\r\n        },\r\n        40: {\r\n          20: { neck: 13, shoulder: 17 },\r\n          24: { neck: 19, shoulder: 15 },\r\n          28: { neck: 17, shoulder: 15 }\r\n        },\r\n        45: {\r\n          20: { neck: 13, shoulder: 21 },\r\n          24: { neck: 19, shoulder: 15 },\r\n          28: { neck: 17, shoulder: 15 }\r\n        },\r\n        50: {\r\n          24: { neck: 19, shoulder: 20 },\r\n          28: { neck: 17, shoulder: 22 }\r\n        },\r\n        53: {\r\n          24: { neck: 19, shoulder: 25 },\r\n          28: { neck: 19, shoulder: 25 },\r\n          38: { neck: 25, shoulder: 35, profile: \"bullet\" }\r\n        },\r\n        59: {\r\n          24: { neck: 19, shoulder: 25 },\r\n          28: { neck: 19, shoulder: 25 },\r\n          38: { neck: 25, shoulder: 22 }\r\n        },\r\n        66: {\r\n          28: { neck: 19, shoulder: 30 },\r\n          38: { neck: 25, shoulder: 45, profile: \"bullet\" }\r\n        },\r\n        74: {\r\n          28: { neck: 19, shoulder: 30 },\r\n          38: { neck: 22, shoulder: 43 }\r\n        },\r\n        80: {\r\n          28: { neck: 19, shoulder: 40 },\r\n          38: { neck: 22, shoulder: 43 }\r\n        }\r\n      };\r\n\r\n\r\n      function $(id) {\r\n        return root.querySelector(\"#\" + id);\r\n      }\r\n\r\n      function clamp(value, min, max) {\r\n        return Math.min(Math.max(value, min), max);\r\n      }\r\n\r\n      function roundTo(value, digits) {\r\n        var base = Math.pow(10, digits || 0);\r\n        return Math.round(value * base) \/ base;\r\n      }\r\n\r\n      function formatMm(value) {\r\n        var rounded = Math.round(Number(value || 0) * 100) \/ 100;\r\n        return String(rounded);\r\n      }\r\n\r\n      function setLine(el, x1, y1, x2, y2) {\r\n        el.setAttribute(\"x1\", x1);\r\n        el.setAttribute(\"y1\", y1);\r\n        el.setAttribute(\"x2\", x2);\r\n        el.setAttribute(\"y2\", y2);\r\n      }\r\n\r\n      function getHeight() {\r\n        var value = parseFloat($(\"abcHeight\").value);\r\n        return isNaN(value) ? 0 : value;\r\n      }\r\n\r\n      function getHeightRange() {\r\n        return diameterHeightMap[state.diameter] || { min: 1, max: 999 };\r\n      }\r\n\r\n      function getNeckShoulderDimensions(diameter, mouth, totalHeight) {\r\n        var diameterData = neckShoulderMap[Number(diameter)];\r\n        var dimensions = diameterData ? diameterData[Number(mouth)] : null;\r\n\r\n        if (dimensions) {\r\n          return {\r\n            neck: Number(dimensions.neck),\r\n            shoulder: Number(dimensions.shoulder),\r\n            profile: dimensions.profile || \"standard\"\r\n          };\r\n        }\r\n\r\n        return {\r\n          neck: clamp(totalHeight * 0.11, 18, 45),\r\n          shoulder: clamp(totalHeight * 0.16, 22, 62),\r\n          profile: \"standard\"\r\n        };\r\n      }\r\n\r\n      function showToast(message) {\r\n        var toast = $(\"abcToast\");\r\n        if (!toast) return;\r\n\r\n        toast.textContent = message;\r\n        toast.classList.add(\"is-visible\");\r\n\r\n        clearTimeout(showToast.timer);\r\n        showToast.timer = setTimeout(function () {\r\n          toast.classList.remove(\"is-visible\");\r\n        }, 1400);\r\n      }\r\n\r\n      function showWarning(message) {\r\n        var warning = $(\"abcWarning\");\r\n        warning.textContent = message;\r\n        warning.style.display = \"block\";\r\n\r\n        clearTimeout(warningTimer);\r\n        warningTimer = setTimeout(function () {\r\n          warning.style.display = \"none\";\r\n        }, 3600);\r\n      }\r\n\r\n      function hideWarning() {\r\n        clearTimeout(warningTimer);\r\n        $(\"abcWarning\").style.display = \"none\";\r\n      }\r\n\r\n      function clampHeightToRange() {\r\n        var range = getHeightRange();\r\n        var input = $(\"abcHeight\");\r\n        var current = parseFloat(input.value);\r\n\r\n        if (isNaN(current)) return false;\r\n\r\n        if (current < range.min) {\r\n          input.value = range.min;\r\n          return true;\r\n        }\r\n\r\n        if (current > range.max) {\r\n          input.value = range.max;\r\n          return true;\r\n        }\r\n\r\n        return false;\r\n      }\r\n\r\n      function updateHeightRange() {\r\n        var range = getHeightRange();\r\n        var mid = Math.round((range.min + range.max) \/ 2);\r\n\r\n        $(\"abcHeight\").setAttribute(\"min\", range.min);\r\n        $(\"abcHeight\").setAttribute(\"max\", range.max);\r\n\r\n        $(\"abcHeightRange\").textContent = \"Available height range: \" + range.min + \"\u2013\" + range.max + \" mm\";\r\n        $(\"abcMinHeight\").textContent = \"Min \" + range.min;\r\n        $(\"abcMidHeight\").textContent = \"Mid \" + mid;\r\n        $(\"abcMaxHeight\").textContent = \"Max \" + range.max;\r\n\r\n        clampHeightToRange();\r\n        hideWarning();\r\n      }\r\n\r\n      function validateHeight(showMessage) {\r\n        var H = getHeight();\r\n        var range = getHeightRange();\r\n\r\n        if (!H) return true;\r\n\r\n        if (H < range.min || H > range.max) {\r\n          if (showMessage) {\r\n            showWarning(\r\n              \"For \" + state.diameter + \"mm diameter, height must be between \" +\r\n              range.min + \"mm and \" + range.max + \"mm.\"\r\n            );\r\n          }\r\n          return false;\r\n        }\r\n\r\n        hideWarning();\r\n        return true;\r\n      }\r\n\r\n      function setQuickHeight(type) {\r\n        var range = getHeightRange();\r\n        var value = range.min;\r\n\r\n        if (type === \"mid\") {\r\n          value = Math.round((range.min + range.max) \/ 2);\r\n        }\r\n\r\n        if (type === \"max\") {\r\n          value = range.max;\r\n        }\r\n\r\n        $(\"abcHeight\").value = value;\r\n        hideWarning();\r\n        calculate();\r\n      }\r\n\r\n      function getDropdown(type) {\r\n        return type === \"diameter\" ? $(\"abcDiameterDropdown\") : $(\"abcMouthDropdown\");\r\n      }\r\n\r\n      function setDropdownValue(type, value) {\r\n        var dropdown = getDropdown(type);\r\n        var valueEl = dropdown.querySelector(\".abc-select-value\");\r\n\r\n        valueEl.textContent = String(value);\r\n\r\n        if (type === \"diameter\") {\r\n          state.diameter = Number(value);\r\n        } else {\r\n          state.mouth = Number(value);\r\n        }\r\n\r\n        dropdown.querySelectorAll(\".abc-select-option\").forEach(function (btn) {\r\n          btn.classList.toggle(\"is-selected\", Number(btn.dataset.value) === Number(value));\r\n        });\r\n      }\r\n\r\n      function closeAllDropdowns() {\r\n        root.querySelectorAll(\".abc-select\").forEach(function (dropdown) {\r\n          dropdown.classList.remove(\"is-open\");\r\n          dropdown.querySelector(\".abc-select-trigger\").setAttribute(\"aria-expanded\", \"false\");\r\n\r\n          var field = dropdown.closest(\"[data-dropdown-field]\");\r\n          if (field) field.classList.remove(\"is-open\");\r\n        });\r\n      }\r\n\r\n      function toggleDropdown(type) {\r\n        var dropdown = getDropdown(type);\r\n        var isOpen = dropdown.classList.contains(\"is-open\");\r\n\r\n        closeAllDropdowns();\r\n\r\n        if (!isOpen) {\r\n          dropdown.classList.add(\"is-open\");\r\n          dropdown.querySelector(\".abc-select-trigger\").setAttribute(\"aria-expanded\", \"true\");\r\n\r\n          var field = dropdown.closest(\"[data-dropdown-field]\");\r\n          if (field) field.classList.add(\"is-open\");\r\n        }\r\n      }\r\n\r\n      function buildDropdown(type, options, selectedValue) {\r\n        var dropdown = getDropdown(type);\r\n        var menu = dropdown.querySelector(\".abc-select-menu\");\r\n        var trigger = dropdown.querySelector(\".abc-select-trigger\");\r\n\r\n        menu.innerHTML = \"\";\r\n\r\n        options.forEach(function (value) {\r\n          var option = document.createElement(\"button\");\r\n\r\n          option.type = \"button\";\r\n          option.className = \"abc-select-option\";\r\n          option.dataset.value = String(value);\r\n          option.setAttribute(\"role\", \"option\");\r\n          option.textContent = String(value);\r\n\r\n          if (Number(value) === Number(selectedValue)) {\r\n            option.classList.add(\"is-selected\");\r\n          }\r\n\r\n          option.addEventListener(\"click\", function () {\r\n            var nextValue = Number(option.dataset.value);\r\n\r\n            if (type === \"diameter\") {\r\n              state.diameter = nextValue;\r\n              setDropdownValue(\"diameter\", nextValue);\r\n              syncMouthForDiameter();\r\n              updateHeightRange();\r\n              closeAllDropdowns();\r\n              calculate();\r\n            } else {\r\n              state.mouth = nextValue;\r\n              setDropdownValue(\"mouth\", nextValue);\r\n              hideWarning();\r\n              closeAllDropdowns();\r\n              calculate();\r\n            }\r\n          });\r\n\r\n          menu.appendChild(option);\r\n        });\r\n\r\n        trigger.onclick = function () {\r\n          toggleDropdown(type);\r\n        };\r\n\r\n        setDropdownValue(type, selectedValue);\r\n      }\r\n\r\n      function syncMouthForDiameter() {\r\n        var allowedMouths = diameterMouthMap[state.diameter] || [];\r\n        var nextMouth = state.mouth;\r\n\r\n        if (allowedMouths.indexOf(state.mouth) === -1) {\r\n          nextMouth = allowedMouths[0] || DEFAULT_MOUTH;\r\n        }\r\n\r\n        state.mouth = nextMouth;\r\n        buildDropdown(\"mouth\", allowedMouths, state.mouth);\r\n      }\r\n\r\n      function getShoulderRadiusAtHeight(offset, shoulderH, bodyR, mouthR) {\r\n        if (!shoulderH) return mouthR;\r\n        return bodyR + (mouthR - bodyR) * (offset \/ shoulderH);\r\n      }\r\n\r\n      function getPartialShoulderVolume(fillHeight, shoulderH, bodyR, mouthR) {\r\n        if (fillHeight <= 0) return 0;\r\n        if (fillHeight >= shoulderH) {\r\n          return Math.PI * shoulderH * (Math.pow(bodyR, 2) + bodyR * mouthR + Math.pow(mouthR, 2)) \/ 3;\r\n        }\r\n\r\n        var radiusAtFill = getShoulderRadiusAtHeight(fillHeight, shoulderH, bodyR, mouthR);\r\n        return Math.PI * fillHeight * (\r\n          Math.pow(bodyR, 2) +\r\n          bodyR * radiusAtFill +\r\n          Math.pow(radiusAtFill, 2)\r\n        ) \/ 3;\r\n      }\r\n\r\n      function getFillHeightFromRatio(fillRatio, bodyH, shoulderH, neckH, bodyR, mouthR) {\r\n        var safeRatio = clamp(Number(fillRatio || 0), 0, 1);\r\n        var bodyVolume = Math.PI * Math.pow(bodyR, 2) * Math.max(bodyH, 0);\r\n        var shoulderVolume = Math.PI * Math.max(shoulderH, 0) * (Math.pow(bodyR, 2) + bodyR * mouthR + Math.pow(mouthR, 2)) \/ 3;\r\n        var neckVolume = Math.PI * Math.pow(mouthR, 2) * Math.max(neckH, 0);\r\n        var totalVolume = bodyVolume + shoulderVolume + neckVolume;\r\n\r\n        if (!totalVolume) return 0;\r\n\r\n        var targetVolume = totalVolume * safeRatio;\r\n\r\n        if (targetVolume <= bodyVolume || shoulderH <= 0) {\r\n          return targetVolume \/ (Math.PI * Math.pow(bodyR, 2));\r\n        }\r\n\r\n        if (targetVolume <= bodyVolume + shoulderVolume || neckH <= 0) {\r\n          var shoulderTarget = targetVolume - bodyVolume;\r\n          var low = 0;\r\n          var high = shoulderH;\r\n          var mid = 0;\r\n\r\n          for (var i = 0; i < 28; i++) {\r\n            mid = (low + high) \/ 2;\r\n            if (getPartialShoulderVolume(mid, shoulderH, bodyR, mouthR) < shoulderTarget) {\r\n              low = mid;\r\n            } else {\r\n              high = mid;\r\n            }\r\n          }\r\n\r\n          return bodyH + (low + high) \/ 2;\r\n        }\r\n\r\n        var neckTarget = targetVolume - bodyVolume - shoulderVolume;\r\n        return bodyH + shoulderH + neckTarget \/ (Math.PI * Math.pow(mouthR, 2));\r\n      }\r\n\r\n      function calculate() {\r\n        validateHeight(false);\r\n\r\n        var H = getHeight();\r\n        var D = state.diameter;\r\n        var M = state.mouth;\r\n\r\n        var wallThickness = 0.8;\r\n        var innerHeight = Math.max(H - 2 * wallThickness, 0);\r\n        var innerDiameter = Math.max(D - 2 * wallThickness, 0);\r\n        var innerMouth = Math.max(M - 2 * wallThickness, 0);\r\n\r\n        var neckShoulder = getNeckShoulderDimensions(D, M, H);\r\n        var neckH = neckShoulder.neck;\r\n        var shoulderH = neckShoulder.shoulder;\r\n        var baseDeductionH = clamp(D * 0.07, 3, 9);\r\n        var bodyH = Math.max(innerHeight - neckH - shoulderH - baseDeductionH, 0);\r\n\r\n        var bodyR = innerDiameter \/ 2;\r\n        var mouthR = innerMouth \/ 2;\r\n\r\n        var bodyVolume = Math.PI * Math.pow(bodyR, 2) * bodyH;\r\n        var shoulderVolume = Math.PI * shoulderH * (Math.pow(bodyR, 2) + bodyR * mouthR + Math.pow(mouthR, 2)) \/ 3;\r\n        var neckVolume = Math.PI * Math.pow(mouthR, 2) * neckH;\r\n\r\n        var fullMl = (bodyVolume + shoulderVolume + neckVolume) \/ 1000;\r\n        var fillingMl = fullMl * 0.95;\r\n        var fillRatio = fullMl > 0 ? fillingMl \/ fullMl : 0;\r\n\r\n        $(\"abcFullMl\").textContent = roundTo(fullMl, 0);\r\n        $(\"abcFullUsOz\").textContent = roundTo(fullMl \/ 29.5735295625, 2);\r\n        $(\"abcFullUkOz\").textContent = roundTo(fullMl \/ 28.4130625, 2);\r\n        $(\"abcFillingMl\").textContent = roundTo(fillingMl, 0);\r\n        $(\"abcFillingUsOz\").textContent = roundTo(fillingMl \/ 29.5735295625, 2);\r\n        $(\"abcFillingUkOz\").textContent = roundTo(fillingMl \/ 28.4130625, 2);\r\n\r\n        drawBottle(H, D, M, bodyH, shoulderH, neckH, fillRatio);\r\n      }\r\n\r\n      function drawBottle(height, diameter, mouth, bodyH, shoulderH, neckH, fillRatio) {\r\n        var actualHeight = Math.max(Number(height || 0), 0);\r\n        var actualDiameter = Math.max(Number(diameter || 0), 0);\r\n        var actualMouth = Math.max(Number(mouth || 0), 0);\r\n        var actualMouthForDrawing = Math.max(actualMouth - 1, 1);\r\n\r\n        var displayHeight = Math.max(actualHeight \/ DIAGRAM_SCALE, 1);\r\n        var displayDiameter = Math.max(actualDiameter \/ DIAGRAM_SCALE, 1);\r\n        var displayMouth = Math.max(actualMouthForDrawing \/ DIAGRAM_SCALE, 1);\r\n\r\n        var displayNeckH = Math.max(Number(neckH || 0) \/ DIAGRAM_SCALE, 1);\r\n        var displayShoulderH = Math.max(Number(shoulderH || 0) \/ DIAGRAM_SCALE, 1);\r\n\r\n        if (displayNeckH + displayShoulderH > displayHeight * 0.85) {\r\n          var ratio = displayHeight * 0.85 \/ (displayNeckH + displayShoulderH);\r\n          displayNeckH = displayNeckH * ratio;\r\n          displayShoulderH = displayShoulderH * ratio;\r\n        }\r\n\r\n        var bodyHalf = displayDiameter \/ 2;\r\n        var neckHalf = displayMouth \/ 2;\r\n\r\n        var topSpace = 13;\r\n        var bottomSpace = 18;\r\n        var leftSpace = 28;\r\n        var rightSpace = 48;\r\n\r\n        var shapeWidth = Math.max(displayDiameter, displayMouth);\r\n        var viewW = leftSpace + shapeWidth + rightSpace;\r\n        var viewH = topSpace + displayHeight + bottomSpace;\r\n\r\n        var svg = $(\"abcBottleSvg\");\r\n        svg.setAttribute(\"viewBox\", \"0 0 \" + viewW + \" \" + viewH);\r\n        svg.style.width = viewW + \"mm\";\r\n        svg.style.height = viewH + \"mm\";\r\n\r\n        var x = leftSpace + shapeWidth \/ 2;\r\n        var yTop = topSpace;\r\n        var yBottom = yTop + displayHeight;\r\n        var yNeckEnd = yTop + displayNeckH;\r\n        var yShoulderEnd = yNeckEnd + displayShoulderH;\r\n\r\n        var bottomRound = Math.min(bodyHalf * 0.85, displayHeight * 0.08, 5);\r\n        var shoulderCurve = Math.max(displayShoulderH, 1);\r\n\r\n        var fillPath = [\r\n          \"M\", x - neckHalf, yTop,\r\n          \"L\", x + neckHalf, yTop,\r\n          \"L\", x + neckHalf, yNeckEnd,\r\n          \"C\",\r\n          x + neckHalf, yNeckEnd + shoulderCurve * 0.28,\r\n          x + bodyHalf, yNeckEnd + shoulderCurve * 0.42,\r\n          x + bodyHalf, yShoulderEnd,\r\n          \"L\", x + bodyHalf, yBottom - bottomRound,\r\n          \"C\",\r\n          x + bodyHalf, yBottom - bottomRound * 0.25,\r\n          x + bodyHalf - bottomRound * 0.25, yBottom,\r\n          x + bodyHalf - bottomRound, yBottom,\r\n          \"L\", x - bodyHalf + bottomRound, yBottom,\r\n          \"C\",\r\n          x - bodyHalf + bottomRound * 0.25, yBottom,\r\n          x - bodyHalf, yBottom - bottomRound * 0.25,\r\n          x - bodyHalf, yBottom - bottomRound,\r\n          \"L\", x - bodyHalf, yShoulderEnd,\r\n          \"C\",\r\n          x - bodyHalf, yNeckEnd + shoulderCurve * 0.42,\r\n          x - neckHalf, yNeckEnd + shoulderCurve * 0.28,\r\n          x - neckHalf, yNeckEnd,\r\n          \"Z\"\r\n        ].join(\" \");\r\n\r\n        var strokePath = [\r\n          \"M\", x - neckHalf, yTop,\r\n          \"L\", x - neckHalf, yNeckEnd,\r\n          \"C\",\r\n          x - neckHalf, yNeckEnd + shoulderCurve * 0.28,\r\n          x - bodyHalf, yNeckEnd + shoulderCurve * 0.42,\r\n          x - bodyHalf, yShoulderEnd,\r\n          \"L\", x - bodyHalf, yBottom - bottomRound,\r\n          \"C\",\r\n          x - bodyHalf, yBottom - bottomRound * 0.25,\r\n          x - bodyHalf + bottomRound * 0.25, yBottom,\r\n          x - bodyHalf + bottomRound, yBottom,\r\n          \"L\", x + bodyHalf - bottomRound, yBottom,\r\n          \"C\",\r\n          x + bodyHalf - bottomRound * 0.25, yBottom,\r\n          x + bodyHalf, yBottom - bottomRound * 0.25,\r\n          x + bodyHalf, yBottom - bottomRound,\r\n          \"L\", x + bodyHalf, yShoulderEnd,\r\n          \"C\",\r\n          x + bodyHalf, yNeckEnd + shoulderCurve * 0.42,\r\n          x + neckHalf, yNeckEnd + shoulderCurve * 0.28,\r\n          x + neckHalf, yNeckEnd,\r\n          \"L\", x + neckHalf, yTop\r\n        ].join(\" \");\r\n\r\n        $(\"abcBottleFill\").setAttribute(\"d\", fillPath);\r\n        $(\"abcBottleStroke\").setAttribute(\"d\", strokePath);\r\n        $(\"abcBottleClipPath\").setAttribute(\"d\", fillPath);\r\n\r\n        var displayBodyH = Math.max(yBottom - yShoulderEnd, 0);\r\n        var displayedFillHeight = getFillHeightFromRatio(fillRatio, displayBodyH, displayShoulderH, displayNeckH, bodyHalf, neckHalf);\r\n        var clampedFillHeight = clamp(displayedFillHeight, 0, displayHeight);\r\n        var waterY = yBottom - clampedFillHeight;\r\n        var waterHalfWidth = bodyHalf;\r\n\r\n        if (clampedFillHeight > displayBodyH + displayShoulderH) {\r\n          waterHalfWidth = neckHalf;\r\n        } else if (clampedFillHeight > displayBodyH && displayShoulderH > 0) {\r\n          var shoulderOffset = clampedFillHeight - displayBodyH;\r\n          waterHalfWidth = getShoulderRadiusAtHeight(shoulderOffset, displayShoulderH, bodyHalf, neckHalf);\r\n        }\r\n\r\n        $(\"abcWaterRect\").setAttribute(\"x\", 0);\r\n        $(\"abcWaterRect\").setAttribute(\"y\", waterY);\r\n        $(\"abcWaterRect\").setAttribute(\"width\", viewW);\r\n        $(\"abcWaterRect\").setAttribute(\"height\", Math.max(yBottom - waterY, 0));\r\n\r\n        setLine($(\"abcWaterLine\"), x - waterHalfWidth + 0.8, waterY, x + waterHalfWidth - 0.8, waterY);\r\n\r\n        setLine($(\"abcHeightLine\"), x + bodyHalf + 7, yTop, x + bodyHalf + 7, yBottom);\r\n        setLine($(\"abcHeightTopTick\"), x + bodyHalf + 5, yTop, x + bodyHalf + 9, yTop);\r\n        setLine($(\"abcHeightBottomTick\"), x + bodyHalf + 5, yBottom, x + bodyHalf + 9, yBottom);\r\n\r\n        var heightText = $(\"abcHeightText\");\r\n        heightText.textContent = \"Height \" + formatMm(actualHeight) + \"mm\";\r\n        heightText.setAttribute(\"x\", x + bodyHalf + 13);\r\n        heightText.setAttribute(\"y\", (yTop + yBottom) \/ 2);\r\n        heightText.setAttribute(\r\n          \"transform\",\r\n          \"rotate(90 \" + (x + bodyHalf + 13) + \" \" + ((yTop + yBottom) \/ 2) + \")\"\r\n        );\r\n\r\n        setLine($(\"abcDiameterLine\"), x - bodyHalf, yBottom + 5, x + bodyHalf, yBottom + 5);\r\n        setLine($(\"abcDiameterLeftTick\"), x - bodyHalf, yBottom + 3, x - bodyHalf, yBottom + 7);\r\n        setLine($(\"abcDiameterRightTick\"), x + bodyHalf, yBottom + 3, x + bodyHalf, yBottom + 7);\r\n\r\n        var diameterText = $(\"abcDiameterText\");\r\n        diameterText.textContent = \"Diameter \" + formatMm(actualDiameter) + \"mm\";\r\n        diameterText.setAttribute(\"x\", x);\r\n        diameterText.setAttribute(\"y\", yBottom + 12);\r\n        diameterText.setAttribute(\"text-anchor\", \"middle\");\r\n        diameterText.removeAttribute(\"transform\");\r\n\r\n        setLine($(\"abcMouthLine\"), x - neckHalf, yTop - 3, x + neckHalf, yTop - 3);\r\n\r\n        var mouthText = $(\"abcMouthText\");\r\n        mouthText.textContent = \"Mouth \" + formatMm(actualMouth) + \"mm\";\r\n        mouthText.setAttribute(\"x\", x);\r\n        mouthText.setAttribute(\"y\", yTop - 6);\r\n        mouthText.setAttribute(\"text-anchor\", \"middle\");\r\n      }\r\n\r\n      function resetExample() {\r\n        $(\"abcHeight\").value = DEFAULT_HEIGHT;\r\n        state.diameter = DEFAULT_DIAMETER;\r\n        state.mouth = DEFAULT_MOUTH;\r\n\r\n        buildDropdown(\"diameter\", diameterOptions, state.diameter);\r\n        syncMouthForDiameter();\r\n        updateHeightRange();\r\n        hideWarning();\r\n        calculate();\r\n      }\r\n\r\n      function clearInputs() {\r\n        $(\"abcHeight\").value = \"\";\r\n        state.diameter = DEFAULT_DIAMETER;\r\n        state.mouth = DEFAULT_MOUTH;\r\n\r\n        buildDropdown(\"diameter\", diameterOptions, state.diameter);\r\n        syncMouthForDiameter();\r\n        updateHeightRange();\r\n        hideWarning();\r\n        calculate();\r\n        $(\"abcHeight\").focus();\r\n      }\r\n\r\n      function copyResult() {\r\n        var range = getHeightRange();\r\n\r\n        var text =\r\n          \"Aluminum Bottle Capacity Estimate\\n\" +\r\n          \"Bottom diameter: \" + state.diameter + \" mm\\n\" +\r\n          \"Available height range: \" + range.min + \"\u2013\" + range.max + \" mm\\n\" +\r\n          \"Total height: \" + $(\"abcHeight\").value + \" mm\\n\" +\r\n          \"Mouth diameter: \" + state.mouth + \" mm\\n\" +\r\n          \"Full capacity: \" + $(\"abcFullMl\").textContent + \" mL \/ \" +\r\n          $(\"abcFullUsOz\").textContent + \" US fl oz \/ \" +\r\n          $(\"abcFullUkOz\").textContent + \" UK fl oz\\n\" +\r\n          \"Filling capacity: \" + $(\"abcFillingMl\").textContent + \" mL \/ \" +\r\n          $(\"abcFillingUsOz\").textContent + \" US fl oz \/ \" +\r\n          $(\"abcFillingUkOz\").textContent + \" UK fl oz\\n\" +\r\n          \"Filling capacity rule: approx. 95% of full capacity\\n\" +\r\n          \"Diagram display scale: 1:3\";\r\n\r\n        if (navigator.clipboard && navigator.clipboard.writeText) {\r\n          navigator.clipboard.writeText(text).then(function () {\r\n            showToast(\"Result copied\");\r\n          }).catch(function () {\r\n            showToast(\"Copy failed\");\r\n          });\r\n        } else {\r\n          showToast(\"Copy not supported\");\r\n        }\r\n      }\r\n\r\n      document.addEventListener(\"click\", function (event) {\r\n        if (!root.contains(event.target)) {\r\n          closeAllDropdowns();\r\n        }\r\n      });\r\n\r\n      root.addEventListener(\"keydown\", function (event) {\r\n        if (event.key === \"Escape\") {\r\n          closeAllDropdowns();\r\n        }\r\n      });\r\n\r\n      $(\"abcHeight\").addEventListener(\"input\", function () {\r\n        validateHeight(true);\r\n        calculate();\r\n      });\r\n\r\n      $(\"abcMinHeight\").addEventListener(\"click\", function () {\r\n        setQuickHeight(\"min\");\r\n      });\r\n\r\n      $(\"abcMidHeight\").addEventListener(\"click\", function () {\r\n        setQuickHeight(\"mid\");\r\n      });\r\n\r\n      $(\"abcMaxHeight\").addEventListener(\"click\", function () {\r\n        setQuickHeight(\"max\");\r\n      });\r\n\r\n      $(\"abcResetBottom\").addEventListener(\"click\", resetExample);\r\n      $(\"abcClear\").addEventListener(\"click\", clearInputs);\r\n      $(\"abcCopy\").addEventListener(\"click\", copyResult);\r\n\r\n      buildDropdown(\"diameter\", diameterOptions, state.diameter);\r\n      syncMouthForDiameter();\r\n      updateHeightRange();\r\n      calculate();\r\n    })();\r\n  <\/script>\r\n<\/section>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t<div class=\"elementor-element elementor-element-e29ffe0 e-flex e-con-boxed e-con e-parent\" data-id=\"e29ffe0\" data-element_type=\"container\" data-settings=\"{&quot;background_background&quot;:&quot;classic&quot;}\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t<div class=\"elementor-element elementor-element-3d3882a e-con-full e-flex e-con e-child\" data-id=\"3d3882a\" data-element_type=\"container\">\n\t\t<a class=\"elementor-element elementor-element-2e30c56 e-con-full e-flex e-con e-child\" data-id=\"2e30c56\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/flacon-aluminium-1oz-flacon-aluminium-30ml%e2%80%8b\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-363f717 img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"363f717\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/1oz-Aluminum-Package-Size-Capacity-rfzjj27fzibtww2plweip20nh1iuk1hyn49s5ofnr6.webp);\" role=\"img\" aria-label=\"Format et capacit\u00e9 de l&#039;emballage en aluminium de 1 oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-41986f8 elementor-widget elementor-widget-heading\" data-id=\"41986f8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 30 ml (1 oz)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-98df9cd e-con-full e-flex e-con e-child\" data-id=\"98df9cd\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/bouteille-aluminium-2-oz-sur-mesure-bouteille-aluminium-60ml%e2%80%8b\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5537b7f img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"5537b7f\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/2oz-Aluminum-Package-Size-Capacity-rfzjj27fzibtww2plweip20nh1iuk1hyn49s5ofnr6.webp);\" role=\"img\" aria-label=\"Format et capacit\u00e9 de l&#039;emballage en aluminium de 2 oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-dfb3535 elementor-widget elementor-widget-heading\" data-id=\"dfb3535\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 60 ml (2 oz)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-cc03fd7 e-con-full e-flex e-con e-child\" data-id=\"cc03fd7\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/personnalise-3-oz-4-oz-bouteille-en-aluminium-100ml-bouteille-en-aluminium\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-ce8dee4 img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"ce8dee4\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/3-4oz-Aluminum-Package-Size-Capacity-rfzjj434d6eek3zzax7ru1jknt9kzfpfbdkr48cveq.webp);\" role=\"img\" aria-label=\"Taille et capacit\u00e9 de l&#039;emballage en aluminium de 3 \u00e0 4 oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6a5fa33 elementor-widget elementor-widget-heading\" data-id=\"6a5fa33\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 3 oz et 4 oz<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-780c74b e-con-full e-flex e-con e-child\" data-id=\"780c74b\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/6-oz-8-oz-bouteille-en-aluminium-200ml-250ml-300ml-bouteille-en-aluminium\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2ceaffc img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"2ceaffc\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/6-8oz-Aluminum-Package-Size-Capacity-rfzjj434d6eek3zzax7ru1jknt9kzfpfbdkr48cveq.webp);\" role=\"img\" aria-label=\"Dimensions et capacit\u00e9 de l&#039;emballage en aluminium de 6 \u00e0 8 oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-a548bbd elementor-widget elementor-widget-heading\" data-id=\"a548bbd\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 177 ml (6 oz) et 237 ml (8 oz)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-1f11cec e-con-full e-flex e-con e-child\" data-id=\"1f11cec\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/10-oz-12-oz-bouteille-en-aluminium-300ml-350ml-bouteille-en-aluminium\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-69d0a42 img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"69d0a42\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/10-12oz-Aluminum-Package-Size-Capacity-rfzjj434d6eek3zzax7ru1jknt9kzfpfbdkr48cveq.webp);\" role=\"img\" aria-label=\"Dimensions et capacit\u00e9 de l&#039;emballage en aluminium\u00a0: 10 \u00e0 12\u00a0oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-80ac887 elementor-widget elementor-widget-heading\" data-id=\"80ac887\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteilles en aluminium de 10 oz et 12 oz<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-d1ec5b1 e-con-full e-flex e-con e-child\" data-id=\"d1ec5b1\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/bouteille-en-aluminium-sur-mesure-16-oz-bouteille-en-aluminium-500ml\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-fe86c65 img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"fe86c65\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/16oz-Aluminum-Package-Size-Capacity-rfzjj5ysqugz7bx8zy10z12hul0betwvzmvq2sa32a.webp);\" role=\"img\" aria-label=\"Format et capacit\u00e9 de l&#039;emballage en aluminium de 473 ml (16 oz)\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-7eeba52 elementor-widget elementor-widget-heading\" data-id=\"7eeba52\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 500 ml (16 oz)<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-fdc6daf e-con-full e-flex e-con e-child\" data-id=\"fdc6daf\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/25oz-bouteille-en-aluminium-700-750ml-bouteille-en-aluminium\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-a365cdc img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"a365cdc\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/24-25oz-Aluminum-Package-Size-Capacity-rfzjj5ysqugz7bx8zy10z12hul0betwvzmvq2sa32a.webp);\" role=\"img\" aria-label=\"Dimensions et capacit\u00e9 de l&#039;emballage en aluminium\u00a0: 24 \u00e0 25\u00a0oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-15c1812 elementor-widget elementor-widget-heading\" data-id=\"15c1812\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 24 oz et 25 oz<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-39f0de8 e-con-full e-flex e-con e-child\" data-id=\"39f0de8\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/33-oz-34-oz-bouteille-en-aluminium-1000ml-bouteille-en-aluminium\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-627daa7 img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"627daa7\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/33-34oz-Aluminum-Package-Size-Capacity-rfzjj7uh4ijjujuioyua40lf1cr1u84cnw6p1c7apu.webp);\" role=\"img\" aria-label=\"Dimensions et capacit\u00e9 de l&#039;emballage en aluminium\u00a0: 33-34 oz\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-6f442dc elementor-widget elementor-widget-heading\" data-id=\"6f442dc\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 33 oz et 34 oz<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t<a class=\"elementor-element elementor-element-bd0166e e-con-full e-flex e-con e-child\" data-id=\"bd0166e\" data-element_type=\"container\" href=\"https:\/\/www.cnshining.com\/fr\/grande-bouteille-aluminium\/\" target=\"_blank\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5a6600d img elementor-cta--skin-classic elementor-animated-content elementor-bg-transform elementor-bg-transform-zoom-in elementor-widget elementor-widget-call-to-action\" data-id=\"5a6600d\" data-element_type=\"widget\" data-widget_type=\"call-to-action.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-cta\">\n\t\t\t\t\t<div class=\"elementor-cta__bg-wrapper\">\n\t\t\t\t<div class=\"elementor-cta__bg elementor-bg\" style=\"background-image: url(https:\/\/www.cnshining.com\/wp-content\/uploads\/elementor\/thumbs\/1L-Aluminum-Package-Size-Capacity-rfzjj0brlu999o5fwvl9k2hqa9s44nahyuyt74ig3m.webp);\" role=\"img\" aria-label=\"&gt;1L Dimensions et capacit\u00e9 de l&#039;emballage en aluminium\"><\/div>\n\t\t\t\t<div class=\"elementor-cta__bg-overlay\"><\/div>\n\t\t\t<\/div>\n\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-5e5dbe8 elementor-widget elementor-widget-heading\" data-id=\"5e5dbe8\" data-element_type=\"widget\" data-widget_type=\"heading.default\">\n\t\t\t\t\t<h2 class=\"elementor-heading-title elementor-size-default\">Bouteille en aluminium de 1 litre<\/h2>\t\t\t\t<\/div>\n\t\t\t\t<\/a>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"<p>Accueil \/ Centre d&#039;outils d&#039;emballage Estimation de la capacit\u00e9 des bouteilles en aluminium Calculateur de capacit\u00e9 des bouteilles en aluminium Cet outil estime la capacit\u00e9 d&#039;une bouteille en aluminium standard \u00e0 corps droit et \u00e9paulement arrondi. S\u00e9lectionnez d&#039;abord le diam\u00e8tre du fond, puis saisissez une plage de hauteurs correspondante ou utilisez les boutons de s\u00e9lection rapide de la hauteur. Diam\u00e8tre en premier S\u00e9lectionnez d&#039;abord le diam\u00e8tre du fond pour charger la plage de hauteurs correspondante. S\u00e9lection rapide de la hauteur [\u2026]<\/p>","protected":false},"author":1,"featured_media":0,"parent":48526,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-48366","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/pages\/48366","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/comments?post=48366"}],"version-history":[{"count":78,"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/pages\/48366\/revisions"}],"predecessor-version":[{"id":48569,"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/pages\/48366\/revisions\/48569"}],"up":[{"embeddable":true,"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/pages\/48526"}],"wp:attachment":[{"href":"https:\/\/www.cnshining.com\/fr\/wp-json\/wp\/v2\/media?parent=48366"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}