/* ===========================================================================
   iframe_form_mobile.css
   ---------------------------------------------------------------------------
   Mise en page des blocs 2D / 3D des formulaires du logiciel optique.

   S'applique a deux contextes :
     - la page directe centered_and_folded_systems-surfaces-parameters
     - le meme formulaire charge dans #form-iframe (mode MCP), auquel cas ce
       fichier doit etre inclus dans core_centered_and_folded_systems.php :
       le CSS de la page parente n'a AUCUN effet dans une iframe.

   AUCUNE MEDIA QUERY : le centrage doit valoir a toute largeur d'ecran.

   PROBLEMES TRAITES ET MESURES
     - #content garde min-width:1450px (css/default.css) : le document
       debordait (scrollWidth 1231 pour 1151 d'ecran) et tout centrage se
       calculait sur cette largeur, pas sur celle de la fenetre.
     - Un .row porte padding-left:50px en style inline : decalage general.
     - Le .col-10.offset-0 limitait le conteneur a 967px alors que les blocs
       en demandent plus de 1100.
     - Un .row porte margin-left:-15px sans margin-right correspondant :
       15px a gauche contre 45 a droite.
     - Le conteneur interne s'etirait sur toute la largeur : margin:auto
       n'avait alors rien a repartir et le centrage restait sans effet.
   =========================================================================== */


/* ===========================================================================
   1. LARGEUR DU DOCUMENT
   =========================================================================== */

body,
#content,
#content .row,
#content .col-12 {
    min-width: 0 !important;
    max-width: 100%;
}


/* ===========================================================================
   2. CHAINE DES CONTENEURS
   ---------------------------------------------------------------------------
   Un style inline bat toute regle externe : !important est necessaire pour
   neutraliser les valeurs en dur sans modifier le PHP.
   =========================================================================== */

/* padding-left:50px en style inline sur un .row de la chaine. */
#content .row[style*="padding-left"] {
    padding-left: 0 !important;
}

/* Le col-10 laissait 2/12 inutilises alors que le contenu manque de place. */
#content .col-10.offset-0 {
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
    padding-left: 0 !important;
    padding-right: 0 !important;
}

/* margin-left:-15px sans margin-right correspondant : Bootstrap les applique
   normalement par paire. */
#content .col-12 > .row,
#content .col-12.ps-2 > .row,
#content .col-10.offset-0 > .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

#content .col-12.ps-2 {
    padding-left: 0 !important;
    padding-right: 0 !important;
    width: 100%;
    max-width: 100%;
}

/* Le bloc de titre suit la largeur reelle de son parent au lieu de faire
   100% de la fenetre. */
#content .overlayTitle-div {
    max-width: 100%;
    width: 100%;
}


/* ===========================================================================
   3. BLOCS 2D / 3D : tailles conservees, ecarts symetriques
   ---------------------------------------------------------------------------
   Les deux blocs gardent leurs largeurs en dur (400 et 700px) : le canvas 3D
   ne supporte pas d'etre reduit en CSS -- essai fait, il se retrouve ecrase
   en une simple barre verticale.

   L'ensemble est centre dans la page, avec un ecart identique de chaque cote.
   L'espace ENTRE les deux blocs se reduit quand l'ecran se retrecit, jusqu'a
   un minimum de 8px ; en dessous, les blocs s'empilent.
   =========================================================================== */

#content .container.d-flex.justify-content-center {
    max-width: 100% !important;
    width: 100%;
    padding-left: 4px !important;
    padding-right: 4px !important;
    margin-left: auto !important;
    margin-right: auto !important;
}

/* fit-content est le point cle : le bloc interne fait exactement la largeur
   des deux cadres plus l'ecart, et margin:auto le centre reellement. Sans
   cela il s'etire sur toute la largeur disponible et margin:auto n'a plus
   rien a repartir -- c'est ce qui faisait echouer le centrage. */
#content .container.d-flex.justify-content-center > .d-flex {
    display: flex;
    flex-wrap: wrap;
    justify-content: center !important;
    align-items: flex-start;
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin-left: auto !important;
    margin-right: auto !important;

    /* L'ecart suit la place disponible : 40px au large, 8px au plus serre.
       Cela repousse d'une trentaine de pixels le seuil d'empilement. */
    gap: clamp(8px, 3vw, 40px) !important;
}

/* Tailles conservees. max-width evite un debordement sur tres petit ecran. */
#content .container.d-flex.justify-content-center > .d-flex > .advanced-input {
    flex: 0 0 auto;
    max-width: 100%;
}



/* Le bloc 3D est declare a 700px mais sa scene n'en occupe que 402 : 268px
   de vide, contre 16 seulement dans le bloc 2D. Les cadres visibles ne sont
   donc pas a egale distance du centre de la page, meme si les blocs le sont.

   Reduire le bloc ecrase le canvas WebGL (essai fait : il se retrouve reduit
   a une barre verticale). On compense donc le vide par des marges negatives,
   qui ramenent le cadre visible a sa place sans toucher a la largeur reelle. */
#content .container.d-flex.justify-content-center > .d-flex > .advanced-input:nth-child(2) {
    margin-left: -134px;
    margin-right: -134px;
}

/* ---------------------------------------------------------------------------
   CHAMPS DE SAISIE DES FORMULAIRES
   ---------------------------------------------------------------------------
   Les champs portent des largeurs en pourcentage en style inline
   (width:4% sur "number of surfaces", par exemple). A 800px d'ecran, 4% du
   conteneur donne 14px : le champ devient inutilisable.

   min-width en ch : l'unite vaut la largeur du caractere "0" dans la police
   courante. 4ch garantit qu'un champ a trois chiffres reste lisible, quelle
   que soit la largeur d'ecran.

   16px sur la police : en dessous, iOS zoome automatiquement au clic dans
   un champ et desaligne toute la page.
   --------------------------------------------------------------------------- */

#content form input[type="text"],
#content form input[type="number"],
#content form input:not([type]) {
    min-width: 4ch;
    padding: 3px 6px;
    box-sizing: content-box;
}


/* ---------------------------------------------------------------------------
   FORMULAIRE "Number of surfaces"
   ---------------------------------------------------------------------------
   Cible par la classe posee sur <body> a partir de input_choice : les autres
   formulaires du logiciel ne sont pas affectes.

   PROBLEMES TRAITES
     - .col-6.numSurf et .col-6.advancedButton portent margin-left:17% en dur,
       prevu pour un ecran large. Sur ecran etroit, ce decalage repousse le
       champ et le bouton hors de l'axe du formulaire.
     - Les .row de Bootstrap portent margin-left:-15px sans colonne pour le
       compenser : 15px de decalage supplementaire.
   --------------------------------------------------------------------------- */

body.oc-form-number-of-surfaces #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

body.oc-form-number-of-surfaces #content form .col-6 {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
}


/* ===========================================================================
   FORMULAIRE "Aperture and fields"
   ---------------------------------------------------------------------------
   Cible par la classe du <body> : les autres formulaires ne sont pas touches.

   MESURES DE DEPART (ecran 1400px, centre a 700)
     table 0  gauche 142  largeur 417  hauteur 236   dans col-4.offset-1
     table 1  gauche 700  largeur 417  hauteur 244   dans col-4.offset-1
     table 2  gauche 298  largeur 640  hauteur 346   dans col-6 (margin-left:20%)
     boutons  centres a 642 au lieu de 700

   OBJECTIFS
     1. Les deux tableaux Aperture cote a cote, meme hauteur
     2. Leur ensemble centre dans la page
     3. Bouton "apply aperture" centre sous les deux
     4. Largeur naturelle : les tableaux ne s'etirent pas sur grand ecran
     5. Tableau Fields centre, assez large sur petit ecran, bouton centre
   =========================================================================== */

/* --- Neutralisation des decalages de grille ------------------------------
   Les .row portent margin:-15px sans colonne pour compenser, et le .col-6
   du tableau Fields porte margin-left:20% en style inline. */
body.oc-form-aperture-and-fields #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

body.oc-form-aperture-and-fields #content form .col-6 {
    margin-left: 0 !important;
    margin-right: 0 !important;
}


/* --- 1, 2, 4 : les deux tableaux Aperture --------------------------------
   Le .row qui les contient devient un flex centre. Les colonnes prennent
   leur largeur de contenu (auto) au lieu de 4/12 : les tableaux cessent de
   s'etirer. L'ecart entre eux suit la place disponible.

   align-items:stretch (defaut du flex) donne aux deux colonnes la meme
   hauteur ; height:100% la transmet aux tableaux. */
body.oc-form-aperture-and-fields #content form .row:has(> .col-4) {
    display: flex;
    flex-wrap: nowrap;
    justify-content: center;
    align-items: stretch;
    gap: clamp(12px, 4vw, 60px);
    overflow-x: auto;
    max-width: 100%;
}

body.oc-form-aperture-and-fields #content form .col-4 {
    flex: 0 0 auto;
    width: auto;
    max-width: none;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0;
    padding-right: 0;
    display: flex;
}

body.oc-form-aperture-and-fields #content form .col-4 .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    height: 100%;
    margin: 0;
}


/* --- 5 : le tableau Fields ------------------------------------------------
   Largeur naturelle, centre. min-width evite qu'il ne se comprime trop sur
   petit ecran ; au-dela, il defile dans son bloc. */
body.oc-form-aperture-and-fields #content form .col-6 {
    flex: 0 0 100%;
    max-width: 100%;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

body.oc-form-aperture-and-fields #content form .col-6 .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    min-width: 420px;
    max-width: 100%;
    margin: 0 auto;
}


/* --- Cellules : texte sur une ligne --------------------------------------
   Sans nowrap, un libelle qui passe sur deux lignes fait grandir son
   tableau seul, et les deux hauteurs divergent. */
body.oc-form-aperture-and-fields #content form .table-stripedAdv th,
body.oc-form-aperture-and-fields #content form .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 10px;
}

/* Le champ ne doit pas deborder de sa cellule : a 78px dans une cellule de
   69, il recouvrait le bord droit du tableau. */
body.oc-form-aperture-and-fields #content form .table-stripedAdv input[type="text"],
body.oc-form-aperture-and-fields #content form .table-stripedAdv input:not([type]) {
    max-width: 100%;
    box-sizing: border-box;
}


/* --- 3 : les boutons ------------------------------------------------------
   Centres sur toute la largeur du formulaire, sous leur tableau. */
body.oc-form-aperture-and-fields #content form .row.text-center,
body.oc-form-aperture-and-fields #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
}

/* ---------------------------------------------------------------------------
   Sous 1150px, les deux tableaux Aperture ne tiennent plus cote a cote :
   le premier se retrouve tronque a gauche par le defilement. Ils s'empilent
   alors, chacun centre.
   --------------------------------------------------------------------------- */

@media (max-width: 1150px) {

    body.oc-form-aperture-and-fields #content form .row:has(> .col-4) {
        flex-wrap: wrap;
        overflow-x: visible;
        row-gap: 20px;
    }

    body.oc-form-aperture-and-fields #content form .col-4 {
        flex: 0 0 100%;
        justify-content: center;
    }

    /* Empiles, ils n'ont plus besoin d'une hauteur commune. */
    body.oc-form-aperture-and-fields #content form .col-4 .table-stripedAdv {
        height: auto;
    }

}

/* Espace vertical entre la section Aperture et la section Fields.
   ---------------------------------------------------------------------------
   Correction 04/09/2026 : l'ancien selecteur visait TOUS les .overlayTitle-div
   de la page. Le titre "Aperture", premier bloc, recevait lui aussi les 30px
   et demarrait donc 30px plus bas que le bloc titre + boutons beiges des
   autres formulaires (surfaces parameters, number of surfaces...).

   Mesures : les deux .overlayTitle-div sont chacun seul dans un .col-10, donc
   :first-of-type ne les distingue pas ; en revanche leurs deux .row parentes
   partagent le meme parent, ce qui rend le combinateur ~ utilisable.

   Retire du selecteur : "#content h1 + .row". Mesure faite, toutes les .row
   de la page sont a margin-top:0 -- cette partie ne matchait rien.
   --------------------------------------------------------------------------- */

body.oc-form-aperture-and-fields #content .row:has(.overlayTitle-div)
  ~ .row:has(.overlayTitle-div) .overlayTitle-div {
    margin-top: 30px;
}

/* ===========================================================================
   FORMULAIRE "Wavelengths"
   ---------------------------------------------------------------------------
   Mesures a 900px : le .col-6 porte margin-left:20% en style inline, d'ou un
   tableau a 198px du bord gauche contre 312 du droit. Et le champ de la
   derniere colonne fait 106px dans une cellule de 97 : il deborde et recouvre
   la bordure droite, d'ou l'impression de tableau inacheve.
   =========================================================================== */

body.oc-form-wavelengths #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* Le col-6 prend toute la largeur et centre son tableau. */
body.oc-form-wavelengths #content form .col-6 {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

/* Largeur naturelle : le tableau ne s'etire pas sur grand ecran et ne se
   comprime pas sur petit -- au-dela, il defile dans son bloc. */
body.oc-form-wavelengths #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    min-width: 390px;
    max-width: 100%;
    margin: 0 auto;
}

/* Le texte reste sur une ligne : sans cela les rangees grandissent et le
   tableau se deforme sur ecran etroit. */
body.oc-form-wavelengths #content form .table-stripedAdv th,
body.oc-form-wavelengths #content form .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 10px;
}

/* Le champ ne deborde plus de sa cellule : la bordure droite redevient
   visible. */
body.oc-form-wavelengths #content form .table-stripedAdv input[type="text"],
body.oc-form-wavelengths #content form .table-stripedAdv input:not([type]),
body.oc-form-wavelengths #content form .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Bouton centre sous le tableau. */
body.oc-form-wavelengths #content form .row.text-center,
body.oc-form-wavelengths #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
}

/* ===========================================================================
   FORMULAIRE "Laser and light source"
   ---------------------------------------------------------------------------
   Mesures a 1800px :
     table 0  gauche 74   droite 307   parent col-10  margin-left: 2.5%
     table 1  gauche 361  droite 599   parent col-6   margin-left: 19%
     table 2  gauche 601  droite 409   parent col-10  margin-left: 28.5%
   Trois decalages en dur differents : aucun tableau n'est centre.

   Les champs debordent de 8px de leur cellule (163 dans 155, 353 dans 345,
   135 dans 126) et recouvrent la bordure droite.

   Le second groupe de boutons beiges s'empile verticalement (haut 769, 807,
   845) : le <ul id="menucalcs"> est en display:block et ses <li> passent a
   la ligne. Le premier groupe, lui, est bien horizontal.
   =========================================================================== */

/* --- Tableaux : largeur naturelle, centres ------------------------------- */

body.oc-form-laser-and-light-source #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
}

body.oc-form-laser-and-light-source #content form .table-stripedAdv th,
body.oc-form-laser-and-light-source #content form .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 10px;
}

/* Les champs debordaient de 8px et recouvraient la bordure droite. */
body.oc-form-laser-and-light-source #content form .table-stripedAdv input[type="text"],
body.oc-form-laser-and-light-source #content form .table-stripedAdv input:not([type]),
body.oc-form-laser-and-light-source #content form .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}


/* menucalcs est une CLASSE, pas un id. Le <ul> est en display:block et son
   conteneur #menuCalculAdvanced est etroit dans la seconde section : les
   <li>, en inline-block, passent a la ligne. flex + nowrap les maintient
   sur une seule ligne. */
body.oc-form-laser-and-light-source #content .menucalcs {
    display: flex !important;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    list-style: none;
    margin: 0;
    /* padding: 0 mettait le premier bouton a left:359 contre 399 sur les
       autres formulaires (mesures a 1000px). Le <ul> en display:block y
       conserve son padding-left de 40px, que le passage en flex ecrasait :
       on le restitue pour uniformiser la position du bloc de boutons. */
    padding: 0 0 0 40px;
}

body.oc-form-laser-and-light-source #content .menucalcs > li {
    display: block;
    margin: 0;
    flex: 0 1 auto;
}

body.oc-form-laser-and-light-source #content .menucalcs > li > .btn {
    margin-left: 0 !important;
    white-space: nowrap;
}




/* --- Boutons de validation ----------------------------------------------- */

body.oc-form-laser-and-light-source #content form .row.text-center,
body.oc-form-laser-and-light-source #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
}

body.oc-form-laser-and-light-source #content .menucalcs {
    flex-wrap: nowrap;
}


/* Le bloc des boutons beiges est en float:left : il sort du flux, donc
   .overlayTitle-div ne reprend pas sa hauteur et le tableau suivant remonte
   a hauteur du titre.
   flow-root cree un contexte de formatage qui englobe le contenu flottant,
   sans modifier le positionnement du float lui-meme -- contrairement aux
   regles precedentes, qui deplacaient aussi les boutons. */
body.oc-form-laser-and-light-source #content .overlayTitle-div {
    display: flow-root;
}



/* Espace vertical AVANT le bouton (entre le tableau et lui) et APRES
   (entre la section "source" et la section "Laser"). */
body.oc-form-laser-and-light-source #content form .row.text-center {
    margin-top: 22px !important;
    margin-bottom: 40px !important;
}

/* clear:both empeche le formulaire de remonter a hauteur des boutons beiges,
   qui sont en float:left.
   flex/width : le <form> est enfant direct d'un .row en display:flex, donc
   element flex. Sans largeur declaree, il prend celle de son contenu (1096px)
   au lieu de la pleine largeur (1440) -- ses tableaux ne pouvaient alors pas
   se centrer sur la page. */
body.oc-form-laser-and-light-source #content form {
    clear: both;
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
}

/* La section Laser se retrouve dans un .row imbrique directement dans un
   autre .row -- structure invalide en Bootstrap, faute de la colonne
   intermediaire (col-12.ps-2) que possede la premiere section. Le flex
   parent ne lui accorde alors que 281px au lieu de 1740. */
body.oc-form-laser-and-light-source #content .row > .row {
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
}

/* ---------------------------------------------------------------------------
   Tableaux et boutons centres sur la page
   ---------------------------------------------------------------------------
   Les .col- portent des margin-left en pourcentage en dur (2.5%, 19%, 28.5%,
   -6%, 19.75%) : chaque tableau et chaque bouton se retrouve a une abscisse
   differente. On neutralise ces decalages et on centre l'ensemble.
   --------------------------------------------------------------------------- */

body.oc-form-laser-and-light-source #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
    justify-content: center;
}

body.oc-form-laser-and-light-source #content form .row > [class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
}

body.oc-form-laser-and-light-source #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
}

/* Les boutons "apply" sont dans des col- portant eux aussi des marges en
   pourcentage : le display:flex + justify-content:center ci-dessus les
   centre, il reste a annuler le text-align herite. */
body.oc-form-laser-and-light-source #content form .advancedButton {
    text-align: center;
}

/* Le .row du formulaire de la section Laser est lui aussi imbrique et ne
   recoit que 1096px au lieu de 1440 : son tableau ne peut donc pas se
   centrer sur la page. La regle sur .row > .row ne l'atteignait pas, ce
   niveau etant plus profond. */
body.oc-form-laser-and-light-source #content form .row {
    flex: 0 0 100% !important;
    max-width: 100% !important;
    width: 100% !important;
}




/* Mesures a 800px : le texte du titre s'arrete a 353, les boutons commencent
   a 289 -- 64px de recouvrement. Or il reste 170px libres a droite des
   boutons (570 sur 740 de conteneur) : la place existe, les boutons sont
   simplement centres au lieu d'etre cales a droite.
   float:right les envoie a l'oppose du titre, ce qui supprime le
   recouvrement sans les faire passer a la ligne.

   ---------------------------------------------------------------------------
   REGLE DESACTIVEE (04/09/2026) -- uniformisation du positionnement du bloc
   titre + boutons beiges sur tous les formulaires d'entree, et debordement
   du tooltip.

   Meme cause que sur "surfaces parameters" : float:right colle le bloc de
   boutons contre le bord droit du conteneur, et le tooltip -- large de 400px
   et centre sur le bouton survole -- sort alors du viewport.

   Les pages du software n'etant pas accessibles sous 768px, cette regle ne
   s'appliquait que sur 768-1020px.

   Sans elle, le bloc conserve son float:left + margin-left:35%
   (advancedBlock.css l.981-986) a toutes les largeurs.

   A surveiller entre 768 et 1020px : le recouvrement titre/boutons decrit
   ci-dessus. S'il reapparait, corriger le <h3> (width:fit-content ou
   padding-right) plutot que de retablir l'alignement des boutons.
   ---------------------------------------------------------------------------

@media (max-width: 1020px) {
    body.oc-form-laser-and-light-source #content #menuCalculAdvanced {
        float: right;
        margin-right: 0;
    }
}
*/

/* ===========================================================================
   FORMULAIRE "Fiber optics"
   ---------------------------------------------------------------------------
   Mesures a 1400px : le col-10 porte margin-left:4% en style inline, d'ou un
   tableau centre a 627 au lieu de 700. Et le champ de la derniere colonne
   fait 212px dans une cellule de 203 : il deborde et recouvre la bordure
   droite, qui n'est de toute facon pas declaree.
   =========================================================================== */

body.oc-form-fiber-optics #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

body.oc-form-fiber-optics #content form .col-10 {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

body.oc-form-fiber-optics #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-fiber-optics #content form .table-stripedAdv th,
body.oc-form-fiber-optics #content form .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 10px;
}

/* Le champ debordait de 9px et recouvrait la bordure droite. */
body.oc-form-fiber-optics #content form .table-stripedAdv input[type="text"],
body.oc-form-fiber-optics #content form .table-stripedAdv input:not([type]),
body.oc-form-fiber-optics #content form .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Bouton centre sous le tableau. */
body.oc-form-fiber-optics #content form .row.text-center,
body.oc-form-fiber-optics #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
}

@media (max-width: 870px) {
    body.oc-form-fiber-optics #content form .col-10 {
        padding-left: 10px;
        padding-right: 10px;
    }
}




/* Sous 870px, le tableau deborde de 40px (contenu 780 pour 740 visibles).
   Les colonnes 3, 4 et 5 sont dimensionnees par leurs LIBELLES, pas par leur
   contenu : "numerical aperture" impose 163px pour afficher 0.22.
   white-space:normal sur les en-tetes les fait passer sur deux lignes, ce qui
   libere largement les 40px manquants. Les cellules de valeurs gardent leur
   nowrap.
   Le !important est necessaire : le bloc principal impose nowrap sur tous les
   th et td, sans media query.
   16px reste obligatoire sur les champs : en dessous, iOS zoome au clic. */
@media (max-width: 870px) {

    body.oc-form-fiber-optics #content form .table-stripedAdv th {
        white-space: normal !important;
        font-size: 12px;
        line-height: 1.2;
        padding: 4px 6px;
    }

    body.oc-form-fiber-optics #content form .table-stripedAdv td {
        padding: 4px 6px;
        font-size: 13px;
    }

    body.oc-form-fiber-optics #content form .table-stripedAdv input[type="text"],
    body.oc-form-fiber-optics #content form .table-stripedAdv input:not([type]) {
        width: 4.5rem;
        max-width: 4.5rem;
        font-size: 16px;
        padding: 3px 4px;
    }

}

/* ===========================================================================
   FORMULAIRE "Detector"
   ---------------------------------------------------------------------------
   Mesures a 1000px : le col-2 porte margin-left:35% en style inline, d'ou un
   tableau centre a 422 au lieu de 500. Et le champ fait 134px dans une
   cellule de 126 : il deborde et recouvre la bordure droite, qui n'est de
   toute facon pas declaree.

   Une seule colonne : pas de risque de debordement, donc pas de media query
   ni de defilement necessaires.
   =========================================================================== */

body.oc-form-detector #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

body.oc-form-detector #content form .col-2 {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
}

body.oc-form-detector #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-detector #content form .table-stripedAdv th,
body.oc-form-detector #content form .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 10px;
}

/* Le champ debordait de 8px et recouvrait la bordure droite. */
body.oc-form-detector #content form .table-stripedAdv input[type="text"],
body.oc-form-detector #content form .table-stripedAdv input:not([type]),
body.oc-form-detector #content form .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Bouton centre sous le tableau. */
body.oc-form-detector #content form .row.text-center,
body.oc-form-detector #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
}



/* ===========================================================================
   FORMULAIRE "Optimization"
   ---------------------------------------------------------------------------
   MESURES A 1400px (centre de page : 700)

   6 tableaux, 3 sections, chacune avec son bouton "apply".

   Chaque .col- porte un margin-left different en style inline :
       table 0  col-12  -3.5%   centre 638   (deborde meme a gauche : -17)
       table 1  col-8   25%     centre 678
       table 2  col-6   33%     centre 674
       table 3  col-12  11%     centre 708
       table 4  col-12  11%     centre 708
       table 5  col-12  -1.5%   centre 665
   Aucun tableau n'est centre, et les boutons non plus (591, 708, 651).

   Aucune cellule n'a de bordure droite declaree, et les champs debordent
   systematiquement de 8 a 9px, recouvrant le bord du tableau.

   Le conteneur de la section 1 ne fait que 321px contre 1067 et 1340 pour
   les deux autres : ses boutons beiges s'empilent sur 3 lignes et son titre
   est recouvert.
   =========================================================================== */


/* --- Decalages de grille -------------------------------------------------- */

body.oc-form-optimization #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
    justify-content: center;
}

body.oc-form-optimization #content form .row > [class*="col-"] {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

/* Le <form> est enfant direct d'un .row en display:flex : sans largeur
   declaree il prend celle de son contenu, et ses tableaux ne peuvent pas
   se centrer sur la page. */
body.oc-form-optimization #content form {
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
    clear: both;
}


/* --- Tableaux : largeur naturelle, centres, bordure droite ---------------- */

body.oc-form-optimization #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    /* margin bas conserve : la section "merit functions" empile quatre
       tableaux, qui se retrouvaient colles sans lui. */
    margin: 0 auto 18px auto;
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-optimization #content form .table-stripedAdv th,
body.oc-form-optimization #content form .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 8px;
}

/* Les champs debordaient de 8 a 9px et recouvraient la bordure droite. */
body.oc-form-optimization #content form .table-stripedAdv input[type="text"],
body.oc-form-optimization #content form .table-stripedAdv input:not([type]),
body.oc-form-optimization #content form .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}


/* --- Conteneurs des titres : meme largeur pour les trois sections ---------
   La section 1 se retrouve dans un conteneur de 321px : ses boutons beiges
   s'empilent et son titre est recouvert. */

body.oc-form-optimization #content .row > .row {
    flex: 0 0 100%;
    max-width: 100%;
    width: 100%;
}

body.oc-form-optimization #content .row > [class*="col-"]:has(> .overlayTitle-div) {
    flex: 0 0 100%;
    max-width: 100%;
}

/* Le bloc titre de la section "Merit functions" est imbrique dans une .row
   supplementaire qui porte les marges negatives de Bootstrap (ml:-15px) sans
   margin-right correspondant. La regle qui les neutralise plus haut est
   scopee a "form .row" : ce bloc etant hors du <form>, il y echappait.

   Mesures a 1000px : "Merit functions" a L15 contre L30 pour "Variable
   parameters" et "Boundaries". */

body.oc-form-optimization #content .row > .row:has(.overlayTitle-div) {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* --- Alignement horizontal des titres et du bloc de boutons beiges --------
   Le .col-10 de la premiere section porte la classe padding-left-40, absente
   du HTML de "surfaces parameters". Mesures a 1000px :

       optimization  section 1 : pl=40px -> titre L70,  boutons L422
       optimization  section 2 : pl=0    -> titre L15
       surfaces-parameters     : pl=0    -> titre L30,  boutons L359

   Les boutons etant dans le conteneur de la section 1, ils heritaient du
   decalage : 70 + 311 (margin-left:35%) + 40 (padding du <ul>) = 422.
   Neutraliser ce padding aligne les deux titres de la page entre eux ET
   ramene les boutons a 359, sans toucher au .menucalcs.
   ------------------------------------------------------------------------- */

body.oc-form-optimization #content .row > [class*="col-"].padding-left-40 {
    padding-left: 0 !important;
}


/* --- Boutons beiges : une seule ligne ------------------------------------- */

body.oc-form-optimization #content .menucalcs {
    display: flex !important;
    flex-wrap: wrap;
    justify-content: center;
    gap: 8px;
    list-style: none;
    margin: 0;
    /* Meme correction que sur "laser and light source" : padding:0 supprimait
       le padding-left de 40px que le <ul> conserve en display:block sur les
       autres formulaires, decalant le bloc de boutons vers la gauche. */
    padding: 0 0 0 40px;
}

body.oc-form-optimization #content .menucalcs > li {
    display: block;
    margin: 0;
    flex: 0 1 auto;
}

body.oc-form-optimization #content .menucalcs > li > .btn {
    margin-left: 0 !important;
    white-space: nowrap;
}


/* --- Boutons "apply" centres sous leur tableau ---------------------------- */

body.oc-form-optimization #content form .row.text-center,
body.oc-form-optimization #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
    margin-top: 22px !important;
    margin-bottom: 40px !important;
}


/* --- Titre et boutons beiges : recouvrement sur ecran etroit --------------
   Meme mecanisme que sur "laser and light source" : le <h3> est un bloc de
   pleine largeur, le flottant se pose dessus et seul le TEXTE s'ecarte.
   Sous 1100px, les boutons sont pousses a droite du conteneur : la place y
   existe, ils etaient simplement centres.

   ---------------------------------------------------------------------------
   REGLE DESACTIVEE (04/09/2026) -- uniformisation du positionnement du bloc
   titre + boutons beiges sur tous les formulaires d'entree, et debordement
   du tooltip (large de 400px, centre sur le bouton survole, il sort du
   viewport quand le bloc est colle au bord droit).

   Les pages du software n'etant pas accessibles sous 768px, cette regle ne
   s'appliquait que sur 768-1100px.

   A surveiller entre 768 et 1100px : le recouvrement titre/boutons decrit
   ci-dessus. S'il reapparait, corriger le <h3> (width:fit-content ou
   padding-right) plutot que de retablir l'alignement des boutons.
   ---------------------------------------------------------------------------

@media (max-width: 1100px) {
    body.oc-form-optimization #content #menuCalculAdvanced {
        float: right;
        margin-right: 0;
    }
}
*/



/* Le tableau "variable parameters" (28 colonnes, 1107px) est le seul a
   deborder sous 1200px. Son conteneur defile, mais partiellement : a 900px
   d'ecran il n'expose que 989px sur 1107, soit 118px inaccessibles.

   La cause est le margin:auto : un element centre par marges automatiques
   ne deborde pas correctement d'un conteneur scrollable. Sur ce tableau, on
   remplace le centrage par un alignement a gauche des qu'il ne tient plus,
   ce qui retablit un defilement complet.

   28 colonnes ne peuvent de toute facon pas tenir sous 1100px sans devenir
   illisibles : le defilement horizontal est ici la seule option. */
@media (max-width: 1200px) {

    body.oc-form-optimization #content form .table-stripedAdv:first-of-type {
        margin-left: 0;
        margin-right: 0;
    }

    /* Le conteneur doit pouvoir defiler sur toute la largeur du tableau.
       Restreint au seul conteneur du tableau a 28 colonnes : applique a tous
       les [class*="col-"], il decalait aussi les boutons a gauche. */
    body.oc-form-optimization #content form .row > [class*="col-"]:has(> .table-stripedAdv:first-of-type) {
        justify-content: flex-start;
    }

}

/* ===========================================================================
   FORMULAIRE "Settings" (input_choice = output-options)
   ---------------------------------------------------------------------------
   Mesures a 1200px : le col-8 porte margin-left:12% en style inline, d'ou un
   tableau centre a 532 au lieu de 600, et un bouton a 528.

   La colonne "comment" fait 437px sur 730 : sur ecran etroit elle se
   comprime, et un mot long peut alors deborder sur la colonne voisine.
   overflow-wrap coupe le mot plutot que de le laisser sortir de sa cellule.
   =========================================================================== */

body.oc-form-output-options #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
}

body.oc-form-output-options #content form .col-8,
body.oc-form-output-options #content form .col-6 {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

body.oc-form-output-options #content form .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
    border-right: 1px solid rgb(214, 219, 223);
}

/* Les deux premieres colonnes portent des libelles courts : nowrap.
   La troisieme porte les commentaires : elle doit revenir a la ligne. */
body.oc-form-output-options #content form .table-stripedAdv th,
body.oc-form-output-options #content form .table-stripedAdv td {
    padding: 4px 10px;
    vertical-align: middle;
}

body.oc-form-output-options #content form .table-stripedAdv th:nth-child(-n+2),
body.oc-form-output-options #content form .table-stripedAdv td:nth-child(-n+2) {
    white-space: nowrap;
}

/* overflow-wrap:break-word coupe un mot trop long au lieu de le laisser
   sortir de sa cellule ; min-width empeche la colonne de se reduire au
   point de rendre le texte illisible. */
body.oc-form-output-options #content form .table-stripedAdv th:nth-child(3),
body.oc-form-output-options #content form .table-stripedAdv td:nth-child(3) {
    white-space: normal;
    overflow-wrap: break-word;
    word-break: normal;
    hyphens: auto;
    min-width: 12rem;
    max-width: 28rem;
}

body.oc-form-output-options #content form .table-stripedAdv input[type="text"],
body.oc-form-output-options #content form .table-stripedAdv input:not([type]),
body.oc-form-output-options #content form .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

body.oc-form-output-options #content form .row.text-center,
body.oc-form-output-options #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
    margin-top: 22px !important;
    /* Le bouton est le dernier element de la page : sans marge basse, elle
       se termine a ras du bouton. */
    margin-bottom: 40px !important;
}

/* ===========================================================================
   FORMULAIRE "Surfaces management"
   ---------------------------------------------------------------------------
   Mesures a 1400px (centre : 700) :
       table 0  centre 586  dans col-6.numSurf de 670px
       table 1  centre 587  dans col-6.numSurf de 670px (min-width:500px inline)
       boutons  centres a 654 et 557

   Deux particularites :
     - les tableaux n'ont PAS la classe table-stripedAdv : on cible donc
       directement l'element table ;
     - les conteneurs portent .numSurf, la meme classe que le formulaire
       "number of surfaces" -- d'ou la necessite du prefixe body.oc-form-*
       pour ne pas l'affecter.
   =========================================================================== */

body.oc-form-surfaces-management #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
    justify-content: center;
}

body.oc-form-surfaces-management #content form .col-6 {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

body.oc-form-surfaces-management #content form table {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto 18px auto;
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-surfaces-management #content form table th,
body.oc-form-surfaces-management #content form table td {
    white-space: nowrap;
    padding: 4px 10px;
}

body.oc-form-surfaces-management #content form table input[type="text"],
body.oc-form-surfaces-management #content form table input:not([type]),
body.oc-form-surfaces-management #content form table select {
    max-width: 100%;
    box-sizing: border-box;
}

body.oc-form-surfaces-management #content form .row.text-center,
body.oc-form-surfaces-management #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
    /* 8px ici s'ajoutent aux 18px de margin-bottom du tableau : 26px au
       total entre le tableau et son bouton. */
    margin-top: 0px !important;
    margin-bottom: 50px !important;
}

/* Le <h3> est un bloc de pleine largeur : les boutons beiges, en float:left,
   se posent sur son texte. Sous 1000px, "Add or remove a surface" atteint
   leur position et ils le recouvrent.
   float:right les envoie a l'oppose du titre : la place existe de ce cote,
   ils etaient simplement centres dans le conteneur.

   ---------------------------------------------------------------------------
   REGLE DESACTIVEE (04/09/2026) -- uniformisation du positionnement du bloc
   titre + boutons beiges sur tous les formulaires d'entree, et debordement
   du tooltip (large de 400px, centre sur le bouton survole, il sort du
   viewport quand le bloc est colle au bord droit).

   Les pages du software n'etant pas accessibles sous 768px, cette regle ne
   s'appliquait que sur 768-1000px.

   ATTENTION : c'est sur ce formulaire que le risque de retour du recouvrement
   est le plus eleve, le titre "Add or remove a surface" etant le plus long.
   S'il reapparait entre 768 et 1000px, corriger le <h3> (width:fit-content ou
   padding-right) plutot que de retablir l'alignement des boutons.
   ---------------------------------------------------------------------------

@media (max-width: 1000px) {
    body.oc-form-surfaces-management #content #menuCalculAdvanced {
        float: right;
        margin-right: 0;
    }
}
*/

/* ===========================================================================
   FORMULAIRE "Component insertion" (input_choice = add-a-component)
   ---------------------------------------------------------------------------
   Mesures a 1100px (centre : 550) :
       table 0  centre 523  dans col-6.numSurf de 520px
       bouton   centre 416

   Meme structure que "surfaces management" : le tableau n'a pas la classe
   table-stripedAdv, et le conteneur porte .numSurf -- d'ou le prefixe
   body.oc-form-* indispensable pour ne pas affecter les autres formulaires.
   =========================================================================== */

body.oc-form-add-a-component #content form .row {
    margin-left: 0 !important;
    margin-right: 0 !important;
    justify-content: center;
}

body.oc-form-add-a-component #content form .col-6 {
    flex: 0 0 100%;
    max-width: 100%;
    min-width: 0 !important;
    margin-left: 0 !important;
    margin-right: 0 !important;
    display: flex;
    justify-content: center;
    overflow-x: auto;
}

/* Pas de border-right ici : contrairement aux autres formulaires, la
   derniere cellule fait 207px pour un champ de 91 -- le trait se retrouvait
   isole a droite du contenu au lieu de fermer le tableau. */
body.oc-form-add-a-component #content form table {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto 18px auto;
}

body.oc-form-add-a-component #content form table th,
body.oc-form-add-a-component #content form table td {
    white-space: nowrap;
    padding: 4px 10px;
}

body.oc-form-add-a-component #content form table input[type="text"],
body.oc-form-add-a-component #content form table input:not([type]),
body.oc-form-add-a-component #content form table select {
    max-width: 100%;
    box-sizing: border-box;
}

body.oc-form-add-a-component #content form .row.text-center,
body.oc-form-add-a-component #content form .advancedButton {
    flex: 0 0 100%;
    max-width: 100%;
    margin-left: 0 !important;
    text-align: center;
    margin-top: 8px !important;
    margin-bottom: 40px !important;
}

/* Le <h3> est un bloc de pleine largeur : les boutons beiges, en float:left,
   se posent sur son texte des que celui-ci atteint leur position.
   float:right les envoie a l'oppose du titre.

   ---------------------------------------------------------------------------
   REGLE DESACTIVEE (04/09/2026) -- uniformisation du positionnement du bloc
   titre + boutons beiges sur tous les formulaires d'entree, et debordement
   du tooltip (large de 400px, centre sur le bouton survole, il sort du
   viewport quand le bloc est colle au bord droit).

   Les pages du software n'etant pas accessibles sous 768px, cette regle ne
   s'appliquait que sur 768-1000px.

   A surveiller entre 768 et 1000px : le recouvrement titre/boutons decrit
   ci-dessus. S'il reapparait, corriger le <h3> (width:fit-content ou
   padding-right) plutot que de retablir l'alignement des boutons.
   ---------------------------------------------------------------------------

@media (max-width: 1000px) {
    body.oc-form-add-a-component #content #menuCalculAdvanced {
        float: right;
        margin-right: 0;
    }
}
*/

/* ===========================================================================
   FORMULAIRE "Quick set up"
   ---------------------------------------------------------------------------
   Structure differente des autres formulaires : pas de .overlayTitle-div.
   Le titre et les icones d'information sont dans un .col-12.miseEnPageQSU
   portant un style inline complet :
       display:flex; align-items:center; justify-content:space-between;
       flex-wrap:nowrap; overflow-x:auto; padding-right:40px

   Mesures a 1200px : le titre occupe 45 -> 893 (848px de texte en 32px) et
   les icones commencent a 872. Le nowrap les maintient sur une ligne, d'ou
   le chevauchement et le defilement du conteneur.

   Sous 1200px : le titre passe sur deux lignes et se comprime, les icones
   restent centrees verticalement en face de lui.
   =========================================================================== */

@media (max-width: 1200px) {

    /* Un style inline bat toute regle externe : !important est necessaire
       pour lever le nowrap et le defilement.

       .col-12 UNIQUEMENT : appliquee a tous les .miseEnPageQSU, cette regle
       forcait aussi le second .row (titre + vues 2D et 3D) en nowrap. Les
       trois colonnes devaient alors tenir sur une ligne et les vues se
       retrouvaient ecrasees a 12px. */
    body.oc-form-quick-set-up #content .col-12.miseEnPageQSU {
        flex-wrap: nowrap !important;
        overflow-x: visible !important;
        align-items: center !important;
        gap: 16px;
        padding-right: 10px !important;
    }

    /* Le titre se comprime et passe sur plusieurs lignes au lieu d'imposer
       sa largeur. flex-shrink autorise la reduction, min-width:0 la rend
       effective -- sans lui, un element flex ne descend jamais sous la
       largeur de son contenu. */
    body.oc-form-quick-set-up #content .miseEnPageQSU > h1 {
        flex: 1 1 auto;
        min-width: 0;
        white-space: normal;
        font-size: 26px;
        line-height: 1.25;
        margin: 0;
    }

    /* Le bloc des icones garde sa largeur et reste centre en face du titre. */
    body.oc-form-quick-set-up #content .miseEnPageQSU > div {
        flex: 0 0 auto;
        align-self: center;
    }

}

/* Sous 1000px, le titre et les icones ne tiennent plus sur une ligne, meme
   avec le titre comprime : le bloc de droite est tronque. Il passe alors
   sous le titre, aligne a gauche. */
@media (max-width: 1000px) {

    body.oc-form-quick-set-up #content .miseEnPageQSU {
        flex-wrap: wrap !important;
        align-items: flex-start !important;
        /* row-gap : espace entre le titre et le bloc des icones passe en
           dessous. Ne s'applique que dans ce mode empile. */
        row-gap: 30px;
    }

    body.oc-form-quick-set-up #content .miseEnPageQSU > h1 {
        flex: 0 0 100%;
        max-width: 100%;
        font-size: 24px;
    }

    body.oc-form-quick-set-up #content .miseEnPageQSU > div {
        flex: 0 0 100%;
        max-width: 100%;
        justify-content: flex-start;
        align-self: flex-start;
    }

}

/* ===========================================================================
   FORMULAIRE "Quick set up" — tableaux "fields" et "wavelengths"
   ---------------------------------------------------------------------------
   Mesures a 1200px (centre : 600) :
       table 0  gauche 65   largeur 488  centre 309   bouton 294  ecart -15
       table 1  gauche 623  largeur 488  centre 866   bouton 851  ecart -15
       bloc des deux : marge gauche 65, marge droite 90 -> decentre de 25px

   Le .col-12.advancedButton commence a 50 alors que le tableau commence a
   65 : il porte le padding de la grille Bootstrap que rien ne compense a ce
   niveau, d'ou les 15px de decalage du bouton.

   Aucune cellule n'a de bordure droite declaree, et les champs debordent de
   8 a 9px, recouvrant le bord du tableau.
   =========================================================================== */

body.oc-form-quick-set-up #content form.sc .table-stripedAdv {
    width: -moz-fit-content;
    width: fit-content;
    max-width: 100%;
    margin: 0 auto;
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-quick-set-up #content form.sc .table-stripedAdv th,
body.oc-form-quick-set-up #content form.sc .table-stripedAdv td {
    white-space: nowrap;
    padding: 4px 10px;
}

body.oc-form-quick-set-up #content form.sc .table-stripedAdv input[type="text"],
body.oc-form-quick-set-up #content form.sc .table-stripedAdv input:not([type]),
body.oc-form-quick-set-up #content form.sc .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Le conteneur du bouton s'aligne sur celui du tableau : meme origine, donc
   meme centre. */
/* flex-basis:100% force le conteneur du bouton sur sa propre ligne : avec
   width:100% seul, il restait un element de la grille et se plaçait a droite
   du tableau des que la place le permettait -- a partir de 1366px pour
   "wavelengths", de 1767px pour "fields". */
body.oc-form-quick-set-up #content form.sc .advancedButton {
    flex: 0 0 100% !important;
    width: 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    padding-left: 0 !important;
    padding-right: 0 !important;
    text-align: center;
    margin-top: 10px;
}

/* Le .row du bouton ne fait que 47px et commence a 1258 : il ne prend pas
   la largeur du <form> (585px), d'ou un bouton cale a droite au lieu d'etre
   centre sous le tableau. Tableau et bouton sont deux enfants successifs du
   <form>, pas d'un meme .row : c'est la largeur du .row qu'il faut forcer. */
body.oc-form-quick-set-up #content form.sc .row {
    flex-wrap: wrap;
    width: 100%;
    max-width: 100%;
    margin-left: 0 !important;
    margin-right: 0 !important;
    justify-content: center;
}

/* ---------------------------------------------------------------------------
   Quick set up : largeur commune, centrage du bloc et des boutons
   ---------------------------------------------------------------------------
   Mesures a 1800px (centre : 900) :
     table 0  "fields"       5 colonnes de 148px  ->  739px
     table 1  "wavelengths"  4 colonnes de 134px  ->  538px
     bloc : marge gauche 65, marge droite 342  ->  decentre de 277px
     boutons decales de 23 et 124px : ils se centrent sur le <form> (785px),
     pas sur leur tableau

   Les deux tableaux n'auront jamais la meme largeur naturelle : le nombre de
   colonnes differe. On leur impose donc une largeur commune, celle de leur
   conteneur, et les colonnes se repartissent l'espace.
   --------------------------------------------------------------------------- */

/* Largeur commune : chaque tableau occupe tout son formulaire. */
body.oc-form-quick-set-up #content form.sc .table-stripedAdv {
    width: 100% !important;
    max-width: 100% !important;
    table-layout: fixed;
    margin: 0 auto;
}

/* Les colonnes se repartissent alors l'espace a parts egales. */
body.oc-form-quick-set-up #content form.sc .table-stripedAdv th,
body.oc-form-quick-set-up #content form.sc .table-stripedAdv td {
    overflow: hidden;
    text-overflow: ellipsis;
}

/* Le bouton se centre sur le formulaire, qui a desormais la meme largeur
   que le tableau : les deux centres coincident. */
body.oc-form-quick-set-up #content form.sc .advancedButton {
    flex: 0 0 100% !important;
    width: 100%;
    text-align: center;
}

/* Le bloc des deux colonnes se centre dans la page : leur .row parent
   portait le margin negatif de Bootstrap sans compensation, d'ou les 277px
   d'ecart entre les marges gauche et droite. */
body.oc-form-quick-set-up #content .row > .col-6.advanced-input {
    display: flex;
    justify-content: center;
}

body.oc-form-quick-set-up #content .col-12.miseEnPageQSU > .row {
    justify-content: center;
    margin-left: 0 !important;
    margin-right: 0 !important;
}

/* ---------------------------------------------------------------------------
   Quick set up : bloc "Obj. surface position"
   ---------------------------------------------------------------------------
   Ce bloc est le seul du formulaire dans un .col-3 ; "Fields", "Wavelengths"
   et "Components" sont dans des .col-6. C'est ce qui permet de le cibler sans
   affecter les autres -- le selecteur .col-12:has(> h3) les touchait tous.

   Mesures : le conteneur passe de 300px a 1400 d'ecran a 795px a 900, les
   colonnes s'empilant en pleine largeur quand l'ecran retrecit. L'icone
   d'information passe alors sous le titre a 1400, faute de place dans 300px.
   --------------------------------------------------------------------------- */

/* Titre et icone sur une seule ligne, a toute largeur.
   min-width:0 rend le flex-shrink effectif : sans lui, un element flex ne
   descend jamais sous la largeur de son contenu. */
body.oc-form-quick-set-up #content .col-3.advanced-input > .col-12 {
    display: flex;
    /* wrap : le <hr>, devenu element flex, se placait A COTE du titre au
       lieu de passer dessous -- d'ou la disparition de l'espace avant le
       tableau. Avec wrap et flex-basis:100%, il retrouve sa ligne. */
    flex-wrap: wrap;
    align-items: center;
    gap: 12px;
}

body.oc-form-quick-set-up #content .col-3.advanced-input > .col-12 > hr {
    flex: 0 0 100%;
    margin: 10px 0 16px 0;
}

/* Le titre fait 295px pour 248 disponibles : l'ellipsis le tronquait.
   white-space:normal le laisse passer sur deux lignes, l'icone restant a
   sa droite sur la premiere. */
body.oc-form-quick-set-up #content .col-3.advanced-input > .col-12 > h3 {
    flex: 1 1 auto;
    min-width: 0;
    margin: 0;
    white-space: nowrap;
    overflow: visible;
    font-size: 17px;
    line-height: 1.25;
}

/* Le tableau n'a qu'une colonne : largeur fixe, alignee a gauche, au lieu
   de s'etirer jusqu'a 765px quand le conteneur s'elargit. */
body.oc-form-quick-set-up #content .col-3.advanced-input .table-stripedAdv {
    width: 270px !important;
    max-width: 100% !important;
    margin-left: 0 !important;
    margin-right: auto !important;
}

/* Le tableau de ce bloc fait 270px alignes a gauche, mais le bouton se
   centre sur toute la largeur du conteneur (jusqu'a 795px sur ecran
   etroit) : il derive vers la droite.
   On lui donne la meme largeur et la meme origine que le tableau. */
/* display:block force le conteneur du bouton sur sa propre ligne : il
   commençait a 321, juste apres le tableau (qui finit a 321), au lieu de
   passer dessous -- 96px separaient alors le bouton du tableau. */
body.oc-form-quick-set-up #content .col-3.advanced-input .advancedButton {
    display: block !important;
    clear: both;
    width: 270px !important;
    max-width: 100% !important;
    margin-left: 0 !important;
    margin-right: auto !important;
    margin-top: 14px !important;
    text-align: center;
}

/* La marge sur le bouton restait sans effet : une regle anterieure definit
   margin en raccourci et l'ecrase. On la pose sur le tableau, qui le
   precede. */
body.oc-form-quick-set-up #content .col-3.advanced-input .table-stripedAdv {
    margin-bottom: 18px !important;
}

/* ---------------------------------------------------------------------------
   Quick set up : bloc "Obj. surface position" + vues 2D / 3D
   ---------------------------------------------------------------------------
   Structure a 1400px :
       .col-3  335px  titre + icone + tableau (270px)
       .col-9 1005px  vues 2D et 3D (canvas de 309px)
   Les deux portent 20px de padding de chaque cote, soit 80px perdus.

   Sous 1600px environ, le col-3 se reduit a 25% et le titre est tronque,
   l'icone disparaissant faute de place. On recupere le padding et on donne
   au col-3 la largeur dont il a besoin (270px de tableau + marges), le
   col-9 prenant le reste.

   Le canvas 3D n'est PAS reduit : l'essai fait sur centered_and_folded_systems
   l'a montre, il s'ecrase en une barre verticale des qu'on touche a sa
   largeur en CSS.
   --------------------------------------------------------------------------- */

@media (max-width: 1600px) {

    /* Padding ramene de 20 a 6px : 56px recuperes sur les deux colonnes. */
    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-3.advanced-input,
    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-9.advanced-input {
        padding-left: 6px !important;
        padding-right: 6px !important;
    }

    /* Le col-3 prend la largeur dont il a besoin plutot qu'un quart fixe :
       270px de tableau plus les marges. Le col-9 occupe le reste. */
    /* 290px suffisaient au tableau (270) mais pas au titre, qui demande
       295px plus l'icone : il etait tronque alors que le col-9 voisin avait
       de la place a revendre. 360px couvrent titre et icone sur une ligne. */
    /* Cette largeur ne vaut QUE pour le premier .row (col-3 + col-9), dont
       le col-9 est vide. Le second .row a une grille complete et valide
       (col-3 + col-4 + col-5 = 12) : lui imposer 360px au lieu de ses 25%
       (335px a 1400) ajoutait 25px et faisait passer la vue 3D a la ligne.

       Les deux col-3 se distinguent par leurs classes de padding :
         .row 1 : padding-left-20 padding-right-20
         .row 2 : padding-left-20 seul */
    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-3.padding-right-20 {
        flex: 0 0 auto !important;
        width: 360px !important;
        max-width: 360px !important;
    }

    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-9.advanced-input {
        flex: 1 1 auto !important;
        width: auto !important;
        max-width: none !important;
        min-width: 0;
    }

    /* Le titre peut alors s'afficher en entier, avec son icone. */
    body.oc-form-quick-set-up #content .col-3.advanced-input > .col-12 > h3 {
        font-size: 17px;
    }

}

/* ---------------------------------------------------------------------------
   Quick set up : le .col-9 vide monopolise la ligne
   ---------------------------------------------------------------------------
   Mesures a 1400px : le .row.miseEnPageQSU (1340px) contient
       .col-3  360px   titre + tableau
       .col-9  980px   VIDE (son seul enfant est en display:none)
       .col-5  558px   vue 3D  -> repoussee a la ligne suivante
   360 + 980 = 1340 : le col-9 consomme toute la place restante et chasse le
   col-5, alors qu'il n'affiche rien.

   On le neutralise quand il est vide : le col-5 remonte alors sur la ligne
   du titre et du tableau.
   --------------------------------------------------------------------------- */

body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-9.advanced-input:has(> div[style*="display: none"]) {
    flex: 0 0 auto !important;
    width: 0 !important;
    max-width: 0 !important;
    padding: 0 !important;
    overflow: hidden;
}

/* ---------------------------------------------------------------------------
   Quick set up : second .row.miseEnPageQSU (titre + vues 2D et 3D)
   ---------------------------------------------------------------------------
   Mesures a 1400px : les trois colonnes totalisent 1365px pour 1340
   disponibles -- il manque 25px et le .col-5 de la vue 3D passe a la ligne.

       col-3  360px  titre + tableau   (largeur imposee, padding 6px)
       col-4  447px  vue 2D            (padding 20px)
       col-5  558px  vue 3D            (padding 20px)

   Les paddings de 20px des col-4 et col-5 coutent 80px a eux deux : les
   ramener a 6px libere 56px, soit plus que les 25 manquants.
   Le canvas 3D (309px) n'est pas touche : il s'ecrase des qu'on reduit sa
   largeur en CSS.
   --------------------------------------------------------------------------- */

body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-4,
body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-5 {
    padding-left: 6px !important;
    padding-right: 6px !important;
}

/* Sous 1200px, les vues passent sous le titre et le tableau. */




/* ---------------------------------------------------------------------------
   Quick set up : paliers du second .row (titre + vue 2D + vue 3D)
   ---------------------------------------------------------------------------
   La grille col-3 + col-4 + col-5 = 12 est valide et tient d'elle-meme.
   Sous 1290px, les trois colonnes deviennent trop etroites : le tooltip du
   titre est tronque, puis la vue 3D disparait.

   On empile alors les trois : d'abord le bloc titre + tableau en pleine
   largeur, puis les deux vues cote a cote tant qu'elles tiennent, puis
   l'une sous l'autre.
   --------------------------------------------------------------------------- */

@media (max-width: 1290px) {

    /* Le bloc titre + tableau prend toute la largeur : le titre et son
       tooltip cessent d'etre comprimes. */
    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-3.padding-left-20:not(.padding-right-20) {
        flex: 0 0 100% !important;
        width: 100% !important;
        max-width: 100% !important;
    }

    /* Les deux vues se partagent la ligne suivante, a parts egales.
       flex-basis:0 avec grow:1 les fait se repartir l'espace ; avec
       flex:1 1 auto elles pouvaient se reduire a zero, leur contenu
       (image et canvas en position absolue) ne les forcant pas a s'etendre. */
    /* min-width porte a 400px : l'image 2D fait 384px et le canvas 3D 309.
       A 330px, l'image debordait et le canvas etait reduit a 189px, ce qui
       l'ecrase -- le rendu WebGL ne supporte pas d'etre redimensionne en CSS.
       Avec 400px, chaque vue a la place de son contenu ; en dessous de deux
       fois cette valeur, le flex-wrap du .row les empile. */
    /* Les deux vues restent COTE A COTE sur leur propre ligne, sous le
       bloc titre. Chacune prend la moitie de la largeur disponible, avec
       un minimum de 320px : l'image 2D fait 384px et le canvas 3D 309, ils
       se comprimeront legerement mais resteront lisibles.
       nowrap les empeche de s'empiler l'une sous l'autre. */
    /* order:2 place les vues APRES le bloc titre : sans lui, le col-3 en
       flex-basis:100% se retrouvait rejete a la ligne suivante et les vues
       remontaient au-dessus, en se chevauchant.
       flex-basis:0 avec grow:1 leur fait partager la largeur a parts egales
       au lieu de rester bloquees a leur min-width. */
    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-4,
    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-5 {
        order: 2;
        flex: 1 1 0 !important;
        min-width: 0 !important;
        max-width: 50% !important;
    }

    body.oc-form-quick-set-up #content .row.miseEnPageQSU > .col-3.padding-left-20:not(.padding-right-20) {
        order: 1;
    }

}



/* ---------------------------------------------------------------------------
   Quick set up : tableaux de composants
   ---------------------------------------------------------------------------
   Ces tableaux n'ont pas de classe et aucune bordure : leur cadre visuel est
   un fond gris rgb(235,235,235) avec border-radius 8px.

   La derniere ligne finit exactement au bord du tableau (1103 pour les deux) :
   le contenu touche le bas, d'ou l'impression de tableau coupe. Un padding
   bas rend au fond l'epaisseur qui manque sous la derniere ligne.
   --------------------------------------------------------------------------- */

/* Un <table> en border-collapse:collapse ignore son padding : on le pose
   sur les cellules de la derniere ligne, qui touchaient le bord du fond. */
body.oc-form-quick-set-up #content table:not([class]) {
    margin-bottom: 14px;
}

/* tbody > tr:last-child : sans le tbody, le selecteur ne matchait pas et le
   padding restait a 5px, la derniere ligne touchant le bord du fond gris. */
body.oc-form-quick-set-up #content table:not([class]) tbody > tr:last-child > td,
body.oc-form-quick-set-up #content table:not([class]) tbody > tr:last-child > th {
    padding-bottom: 12px !important;
}

/* Le <select> fait 36px avec margin:2px, les <input> 34px avec margin:5px :
   il commence 6px plus bas et parait desaligne. On les harmonise. */
body.oc-form-quick-set-up #content table:not([class]) select {
    height: 34px;
    margin-top: 5px !important;
    margin-bottom: 5px !important;
    padding-top: 3.2px;
    padding-bottom: 3.2px;
    box-sizing: border-box;
    vertical-align: middle;
}

/* Le bouton "apply" de la section "stop surface" touchait le bloc des
   composants qui le suit. */
body.oc-form-quick-set-up #content .advancedButton {
    margin-bottom: 20px;
}

/* ---------------------------------------------------------------------------
   Quick set up : bloc composant
   ---------------------------------------------------------------------------
   Le .row.component porte un border-bottom qui ferme visuellement le bloc.
   Le bouton "apply" de "stop surface" finit a 1684, le trait a 1685 : ils se
   touchent. Un padding bas ecarte le trait du contenu.
   --------------------------------------------------------------------------- */

body.oc-form-quick-set-up #content .row.component {
    padding-bottom: 16px;
}

/* Le .component-header porte le fond gris et le trait de separation, sans
   aucun padding vertical : les boutons du bandeau (info, reset, flip,
   remove) occupent 852-890 dans un conteneur de 848-891 et touchent ses
   deux bords. */
body.oc-form-quick-set-up #content .component-header {
    padding-top: 8px !important;
    padding-bottom: 8px !important;
}

/* ===========================================================================
   FORMULAIRE "Glass catalog" (input_choice = glasses)
   ---------------------------------------------------------------------------
   Mesures a 1250px (centre : 625) :
       table 0  "filtrage"  353px  centre 212  dans un .row de 353
       table 1  "resultats"  737px  centre 802  dans un .col-8 (66.67%)
   Les deux sont cote a cote dans un .row commun de 1150px, en flex-wrap:wrap.
   Aucune cellule n'a de bordure droite declaree.
   =========================================================================== */

body.oc-form-glasses #content .table-stripedAdv {
    border-right: 1px solid rgb(214, 219, 223);
}

/* Le champ de la derniere colonne fait 154px dans une cellule de 170 : il ne
   deborde pas, mais la bordure manquait. */
body.oc-form-glasses #content .table-stripedAdv input[type="text"],
body.oc-form-glasses #content .table-stripedAdv input:not([type]),
body.oc-form-glasses #content .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Sous 1250px, le tableau des resultats passe sous celui de filtrage, les
   deux centres dans la page. */
@media (max-width: 1250px) {

    body.oc-form-glasses #content .row > .col-8 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        display: flex;
        justify-content: center;
        overflow-x: auto;
    }

    /* Le tableau de filtrage est dans un .row imbrique : on le centre aussi. */
    body.oc-form-glasses #content .row > .row {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        justify-content: center;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-glasses #content .table-stripedAdv {
        margin-left: auto !important;
        margin-right: auto !important;
        margin-bottom: 20px;
    }

}

/* ===========================================================================
   FORMULAIRE "Lens catalog" (input_choice = lenses)
   ---------------------------------------------------------------------------
   Mesures a 1350px (centre : 675) :
       table 0  "filtrage"   283px  centre 176  dans un .row de 283
       table 1  "resultats"  980px  centre 852  dans un .col-9 (75%) de 938
   Le tableau des resultats deborde deja de son conteneur (980 pour 938).
   Aucune cellule n'a de bordure droite declaree.

   Seuil d'empilement a 1400px, contre 1250 pour le catalogue de verres : le
   tableau des resultats y a une colonne de plus.
   =========================================================================== */

body.oc-form-lenses #content .table-stripedAdv {
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-lenses #content .table-stripedAdv input[type="text"],
body.oc-form-lenses #content .table-stripedAdv input:not([type]),
body.oc-form-lenses #content .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Sous 1400px, le tableau des resultats passe sous celui de filtrage, les
   deux centres dans la page. */
@media (max-width: 1400px) {

    body.oc-form-lenses #content .row > .col-9 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        display: flex;
        justify-content: center;
        overflow-x: auto;
    }

    body.oc-form-lenses #content .row > .row {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        justify-content: center;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-lenses #content .table-stripedAdv {
        margin-left: auto !important;
        margin-right: auto !important;
        margin-bottom: 20px;
    }

}

/* Sous 1100px, le tableau des resultats (980px) deborde de son conteneur.
   Le margin:auto pose plus haut l'empeche de defiler completement : un
   element centre par marges automatiques ne deborde pas correctement d'un
   conteneur scrollable, une partie reste inaccessible.
   On l'aligne a gauche des qu'il ne tient plus, ce qui retablit un
   defilement complet. */
@media (max-width: 1100px) {

    /* Le col-9 porte 15px de padding : le tableau commence a 50 dans un
       conteneur qui commence a 35, et sa fin (1030) depasse le scrollWidth
       (1010) -- 20px restaient tronques a droite. */
    body.oc-form-lenses #content .row > .col-9 {
        justify-content: flex-start;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    body.oc-form-lenses #content .row > .col-9 .table-stripedAdv {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

}

/* Le tableau de filtrage est dans un .col-3, soit 25% de la largeur : 175px
   a 800px d'ecran, alors qu'il en demande 164 plus ses marges. Il se
   comprime donc, alors qu'il n'a que quelques colonnes et devrait garder sa
   taille.

   Le tableau des resultats etant dans un .col-9, les deux se distinguent
   sans ambiguite : cette regle ne l'affecte pas. */
body.oc-form-lenses #content .row > .col-3 {
    flex: 0 0 auto !important;
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
    min-width: -moz-fit-content;
    min-width: fit-content;
}

body.oc-form-lenses #content .col-3 .table-stripedAdv {
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
}

body.oc-form-lenses #content .col-3 .table-stripedAdv th,
body.oc-form-lenses #content .col-3 .table-stripedAdv td {
    white-space: nowrap;
}

/* Le .overlayTitle-div2 fait 900px (100% de la fenetre) mais commence a 50 :
   il finit a 950 et elargit le document de 50px. Toute la page defile alors
   horizontalement, ce qui decale le tableau des resultats et le fait
   paraitre coupe a droite, en plus de son propre defilement interne. */
body.oc-form-lenses #content .overlayTitle-div2 {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

body.oc-form-lenses #content .overlayTitle-div2 h3,
body.oc-form-lenses #content .overlayTitle-div2 hr {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

/* La barre de defilement du conteneur a une hauteur de 0 : le systeme la
   masque tant qu'on ne fait pas defiler, et rien n'indique que le tableau
   continue au-dela du bord. On la rend visible en permanence. */
body.oc-form-lenses #content .row > .col-9 {
    scrollbar-width: thin;
    scrollbar-color: #b0b8c0 #eef1f4;
    padding-bottom: 4px;
}

body.oc-form-lenses #content .row > .col-9::-webkit-scrollbar {
    height: 10px;
    -webkit-appearance: none;
}

body.oc-form-lenses #content .row > .col-9::-webkit-scrollbar-track {
    background: #eef1f4;
    border-radius: 5px;
}

body.oc-form-lenses #content .row > .col-9::-webkit-scrollbar-thumb {
    background: #b0b8c0;
    border-radius: 5px;
}

/* Sous 1100px, le tableau des resultats (980px) ne tient plus et son
   defilement horizontal reste peu pratique -- la barre est masquee par le
   systeme. On reduit sa largeur : les en-tetes passent sur deux lignes au
   lieu d'imposer celle de leur libelle, et les cellules se resserrent.
   Le !important est necessaire : le bloc principal impose nowrap. */
@media (max-width: 1100px) {

    body.oc-form-lenses #content .col-9 .table-stripedAdv th {
        white-space: normal !important;
        font-size: 11.5px;
        line-height: 1.2;
        padding: 4px 4px;
    }

    body.oc-form-lenses #content .col-9 .table-stripedAdv td {
        font-size: 12px;
        padding: 4px 4px;
        white-space: nowrap;
    }

    body.oc-form-lenses #content .col-9 .table-stripedAdv input[type="text"],
    body.oc-form-lenses #content .col-9 .table-stripedAdv input:not([type]),
    body.oc-form-lenses #content .col-9 .table-stripedAdv select {
        font-size: 13px;
        padding: 2px 4px;
        max-width: 4.5rem;
    }

}

/* Meme correction que sur "lens catalog", mais le tableau de filtrage est
   ici dans un .col-4 (33.33%) : 233px a 800px d'ecran, alors que le tableau
   en demande 203 plus ses marges. Il se comprime, alors qu'il n'a que
   quelques colonnes.
   Le tableau des resultats etant dans un .col-8, il n'est pas affecte. */
body.oc-form-glasses #content .row > .col-4 {
    flex: 0 0 auto !important;
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
    min-width: -moz-fit-content;
    min-width: fit-content;
}

body.oc-form-glasses #content .col-4 .table-stripedAdv {
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
}

body.oc-form-glasses #content .col-4 .table-stripedAdv th,
body.oc-form-glasses #content .col-4 .table-stripedAdv td {
    white-space: nowrap;
}

/* Le tableau des resultats se reduit sur petit ecran plutot que de defiler :
   les en-tetes passent sur deux lignes au lieu d'imposer la largeur de leur
   libelle. */
@media (max-width: 1100px) {

    body.oc-form-glasses #content .col-8 .table-stripedAdv th {
        white-space: normal !important;
        font-size: 11.5px;
        line-height: 1.2;
        padding: 4px 4px;
    }

    body.oc-form-glasses #content .col-8 .table-stripedAdv td {
        font-size: 12px;
        padding: 4px 4px;
        white-space: nowrap;
    }

    body.oc-form-glasses #content .col-8 .table-stripedAdv input[type="text"],
    body.oc-form-glasses #content .col-8 .table-stripedAdv input:not([type]),
    body.oc-form-glasses #content .col-8 .table-stripedAdv select {
        font-size: 13px;
        padding: 2px 4px;
        max-width: 4.5rem;
    }

}

/* Premiere colonne des tableaux de filtrage : "wavelength (micron)" demande
   205px pour 191 disponibles et se retrouve tronque. Un min-width sur la
   colonne libere la place, sans elargir le reste du tableau. */
body.oc-form-glasses #content .col-4 .table-stripedAdv td:first-child,
body.oc-form-glasses #content .col-4 .table-stripedAdv th:first-child,
body.oc-form-lenses #content .col-3 .table-stripedAdv td:first-child,
body.oc-form-lenses #content .col-3 .table-stripedAdv th:first-child {
    min-width: 13rem;
    padding-right: 12px;
}

/* ===========================================================================
   FORMULAIRE "Mirrors catalog" (input_choice = mirrors)
   ---------------------------------------------------------------------------
   Mesures a 800px : document a 940 pour 800 d'ecran -- il deborde.
       table 0  "filtrage"   146px  dans .row 145 < .col-3 175
       table 1  "resultats"  715px  dans .col-9 de 525
   Aucune bordure droite, et "reference" tronque dans la premiere colonne
   (94px demandes pour 90 disponibles).
   Structure identique a "lens catalog".
   =========================================================================== */

body.oc-form-mirrors #content .table-stripedAdv {
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-mirrors #content .table-stripedAdv input[type="text"],
body.oc-form-mirrors #content .table-stripedAdv input:not([type]),
body.oc-form-mirrors #content .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Le tableau de filtrage garde sa largeur de contenu au lieu de se
   comprimer avec le .col-3 (25% de la largeur). */
body.oc-form-mirrors #content .row > .col-3 {
    flex: 0 0 auto !important;
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
    min-width: -moz-fit-content;
    min-width: fit-content;
}

body.oc-form-mirrors #content .col-3 .table-stripedAdv {
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
}

body.oc-form-mirrors #content .col-3 .table-stripedAdv th,
body.oc-form-mirrors #content .col-3 .table-stripedAdv td {
    white-space: nowrap;
}

/* "reference" demandait 94px pour 90 disponibles. */
body.oc-form-mirrors #content .col-3 .table-stripedAdv td:first-child,
body.oc-form-mirrors #content .col-3 .table-stripedAdv th:first-child {
    min-width: 14rem;
    padding-right: 12px;
}

/* Le .overlayTitle-div2 elargit le document : meme correction que sur les
   autres catalogues. */
body.oc-form-mirrors #content .overlayTitle-div2,
body.oc-form-mirrors #content .overlayTitle-div2 h3,
body.oc-form-mirrors #content .overlayTitle-div2 hr {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

/* Sous 1200px, le tableau des resultats passe sous celui de filtrage. */
@media (max-width: 1200px) {

    body.oc-form-mirrors #content .row > .col-9 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        display: flex;
        justify-content: center;
        overflow-x: auto;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    body.oc-form-mirrors #content .row > .row {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        justify-content: center;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-mirrors #content .col-9 .table-stripedAdv {
        margin-left: auto !important;
        margin-right: auto !important;
        margin-bottom: 20px;
    }

}

/* Sous 1000px, le tableau des resultats se reduit plutot que de defiler. */
@media (max-width: 1000px) {

    body.oc-form-mirrors #content .col-9 .table-stripedAdv th {
        white-space: normal !important;
        font-size: 11.5px;
        line-height: 1.2;
        padding: 4px 4px;
    }

    body.oc-form-mirrors #content .col-9 .table-stripedAdv td {
        font-size: 12px;
        padding: 4px 4px;
        white-space: nowrap;
    }

    body.oc-form-mirrors #content .col-9 .table-stripedAdv input[type="text"],
    body.oc-form-mirrors #content .col-9 .table-stripedAdv input:not([type]),
    body.oc-form-mirrors #content .col-9 .table-stripedAdv select {
        font-size: 13px;
        padding: 2px 4px;
        max-width: 4.5rem;
    }

    body.oc-form-mirrors #content .col-9 .table-stripedAdv {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-mirrors #content .row > .col-9 {
        justify-content: flex-start;
    }

}

/* ===========================================================================
   FORMULAIRE "Grating catalog" (input_choice = gratings)
   ---------------------------------------------------------------------------
   Mesures a 800px : document a 859 pour 800 -- il deborde.
       table 0  "filtrage"   145px  dans .row 145 < .col-3 175
       table 1  "resultats"  634px  dans .col-9 de 525
   Structure identique a "mirrors catalog", tableau de resultats plus etroit
   (634 contre 715) : seuil d'empilement abaisse a 1100px.
   =========================================================================== */

body.oc-form-gratings #content .table-stripedAdv {
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-gratings #content .table-stripedAdv input[type="text"],
body.oc-form-gratings #content .table-stripedAdv input:not([type]),
body.oc-form-gratings #content .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

/* Le tableau de filtrage garde sa largeur de contenu. */
body.oc-form-gratings #content .row > .col-3 {
    flex: 0 0 auto !important;
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
    min-width: -moz-fit-content;
    min-width: fit-content;
}

body.oc-form-gratings #content .col-3 .table-stripedAdv {
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
}

body.oc-form-gratings #content .col-3 .table-stripedAdv th,
body.oc-form-gratings #content .col-3 .table-stripedAdv td {
    white-space: nowrap;
}

body.oc-form-gratings #content .col-3 .table-stripedAdv td:first-child,
body.oc-form-gratings #content .col-3 .table-stripedAdv th:first-child {
    min-width: 11rem;
    padding-right: 12px;
}

/* Le .overlayTitle-div2 elargit le document (859 pour 800). */
body.oc-form-gratings #content .overlayTitle-div2,
body.oc-form-gratings #content .overlayTitle-div2 h3,
body.oc-form-gratings #content .overlayTitle-div2 hr {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

/* Sous 1100px, le tableau des resultats passe sous celui de filtrage. */
@media (max-width: 1100px) {

    body.oc-form-gratings #content .row > .col-9 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        display: flex;
        justify-content: center;
        overflow-x: auto;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    body.oc-form-gratings #content .row > .row {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        justify-content: center;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-gratings #content .col-9 .table-stripedAdv {
        margin-left: auto !important;
        margin-right: auto !important;
        margin-bottom: 20px;
    }

}

/* Sous 900px, le tableau des resultats se reduit plutot que de defiler. */
@media (max-width: 900px) {

    body.oc-form-gratings #content .col-9 .table-stripedAdv th {
        white-space: normal !important;
        font-size: 11.5px;
        line-height: 1.2;
        padding: 4px 4px;
    }

    body.oc-form-gratings #content .col-9 .table-stripedAdv td {
        font-size: 12px;
        padding: 4px 4px;
        white-space: nowrap;
    }

    body.oc-form-gratings #content .col-9 .table-stripedAdv input[type="text"],
    body.oc-form-gratings #content .col-9 .table-stripedAdv input:not([type]),
    body.oc-form-gratings #content .col-9 .table-stripedAdv select {
        font-size: 13px;
        padding: 2px 4px;
        max-width: 4.5rem;
    }

    body.oc-form-gratings #content .col-9 .table-stripedAdv {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-gratings #content .row > .col-9 {
        justify-content: flex-start;
    }

}

/* ===========================================================================
   FORMULAIRE "Prism catalog" (input_choice = prisms)
   ---------------------------------------------------------------------------
   Mesures a 800px : document a 850 pour 800 -- il deborde.
       table 0  "filtrage"   146px  dans .row 145 < .col-3 175
       table 1  "resultats"  520px  dans .col-9 de 525
   "reference" tronque (94px demandes pour 90 disponibles).
   Tableau de resultats le plus etroit des quatre catalogues : seuil
   d'empilement a 1000px.
   =========================================================================== */

body.oc-form-prisms #content .table-stripedAdv {
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-prisms #content .table-stripedAdv input[type="text"],
body.oc-form-prisms #content .table-stripedAdv input:not([type]),
body.oc-form-prisms #content .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

body.oc-form-prisms #content .row > .col-3 {
    flex: 0 0 auto !important;
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
    min-width: -moz-fit-content;
    min-width: fit-content;
}

body.oc-form-prisms #content .col-3 .table-stripedAdv {
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
}

body.oc-form-prisms #content .col-3 .table-stripedAdv th,
body.oc-form-prisms #content .col-3 .table-stripedAdv td {
    white-space: nowrap;
}

body.oc-form-prisms #content .col-3 .table-stripedAdv td:first-child,
body.oc-form-prisms #content .col-3 .table-stripedAdv th:first-child {
    min-width: 11rem;
    padding-right: 12px;
}

body.oc-form-prisms #content .overlayTitle-div2,
body.oc-form-prisms #content .overlayTitle-div2 h3,
body.oc-form-prisms #content .overlayTitle-div2 hr {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

/* Sous 1000px, le tableau des resultats passe sous celui de filtrage. */
@media (max-width: 1000px) {

    body.oc-form-prisms #content .row > .col-9 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        display: flex;
        justify-content: center;
        overflow-x: auto;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    body.oc-form-prisms #content .row > .row {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        justify-content: center;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-prisms #content .col-9 .table-stripedAdv {
        margin-left: auto !important;
        margin-right: auto !important;
        margin-bottom: 20px;
    }

}

/* Sous 800px, le tableau des resultats se reduit plutot que de defiler. */
@media (max-width: 800px) {

    body.oc-form-prisms #content .col-9 .table-stripedAdv th {
        white-space: normal !important;
        font-size: 11.5px;
        line-height: 1.2;
        padding: 4px 4px;
    }

    body.oc-form-prisms #content .col-9 .table-stripedAdv td {
        font-size: 12px;
        padding: 4px 4px;
        white-space: nowrap;
    }

    body.oc-form-prisms #content .col-9 .table-stripedAdv input[type="text"],
    body.oc-form-prisms #content .col-9 .table-stripedAdv input:not([type]),
    body.oc-form-prisms #content .col-9 .table-stripedAdv select {
        font-size: 13px;
        padding: 2px 4px;
        max-width: 4.5rem;
    }

    body.oc-form-prisms #content .col-9 .table-stripedAdv {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-prisms #content .row > .col-9 {
        justify-content: flex-start;
    }

}

/* ===========================================================================
   FORMULAIRE "Windows catalog" (input_choice = windows)
   ---------------------------------------------------------------------------
   Mesures a 800px : document a 850 pour 800 -- il deborde.
       table 0  "filtrage"   145px  dans .row 145 < .col-3 175
       table 1  "resultats"  549px  dans .col-9 de 525
   "min. thickness" et "max. thickness" tronques (93px demandes pour 89).
   =========================================================================== */

body.oc-form-windows #content .table-stripedAdv {
    border-right: 1px solid rgb(214, 219, 223);
}

body.oc-form-windows #content .table-stripedAdv input[type="text"],
body.oc-form-windows #content .table-stripedAdv input:not([type]),
body.oc-form-windows #content .table-stripedAdv select {
    max-width: 100%;
    box-sizing: border-box;
}

body.oc-form-windows #content .row > .col-3 {
    flex: 0 0 auto !important;
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
    min-width: -moz-fit-content;
    min-width: fit-content;
}

body.oc-form-windows #content .col-3 .table-stripedAdv {
    width: -moz-fit-content !important;
    width: fit-content !important;
    max-width: none !important;
}

body.oc-form-windows #content .col-3 .table-stripedAdv th,
body.oc-form-windows #content .col-3 .table-stripedAdv td {
    white-space: nowrap;
}

/* 15rem au lieu de 11 : les libelles vont recevoir leurs unites
   ("min. thickness (mm)"), il faut anticiper la place. */
body.oc-form-windows #content .col-3 .table-stripedAdv td:first-child,
body.oc-form-windows #content .col-3 .table-stripedAdv th:first-child {
    min-width: 15rem;
    padding-right: 12px;
}

body.oc-form-windows #content .overlayTitle-div2,
body.oc-form-windows #content .overlayTitle-div2 h3,
body.oc-form-windows #content .overlayTitle-div2 hr {
    width: 100%;
    max-width: 100%;
    box-sizing: border-box;
}

/* Sous 1050px, le tableau des resultats passe sous celui de filtrage. */
@media (max-width: 1050px) {

    body.oc-form-windows #content .row > .col-9 {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        display: flex;
        justify-content: center;
        overflow-x: auto;
        padding-left: 0 !important;
        padding-right: 0 !important;
    }

    body.oc-form-windows #content .row > .row {
        flex: 0 0 100% !important;
        max-width: 100% !important;
        justify-content: center;
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-windows #content .col-9 .table-stripedAdv {
        margin-left: auto !important;
        margin-right: auto !important;
        margin-bottom: 20px;
    }

}

/* Sous 850px, le tableau des resultats se reduit plutot que de defiler. */
@media (max-width: 850px) {

    body.oc-form-windows #content .col-9 .table-stripedAdv th {
        white-space: normal !important;
        font-size: 11.5px;
        line-height: 1.2;
        padding: 4px 4px;
    }

    body.oc-form-windows #content .col-9 .table-stripedAdv td {
        font-size: 12px;
        padding: 4px 4px;
        white-space: nowrap;
    }

    body.oc-form-windows #content .col-9 .table-stripedAdv input[type="text"],
    body.oc-form-windows #content .col-9 .table-stripedAdv input:not([type]),
    body.oc-form-windows #content .col-9 .table-stripedAdv select {
        font-size: 13px;
        padding: 2px 4px;
        max-width: 4.5rem;
    }

    body.oc-form-windows #content .col-9 .table-stripedAdv {
        margin-left: 0 !important;
        margin-right: 0 !important;
    }

    body.oc-form-windows #content .row > .col-9 {
        justify-content: flex-start;
    }

}

/* ---------------------------------------------------------------------------
   Formulaire "Surfaces parameters" : titre et boutons beiges
   ---------------------------------------------------------------------------
   Mesures dans l'iframe (848px) : le texte du titre s'etend de 15 a 308, les
   boutons flottants commencent a 243 -- 64px de recouvrement.

   Meme mecanisme que sur "laser and light source" et "optimization" : le <h3>
   est un bloc de pleine largeur qui PRECEDE le flottant dans le DOM, donc
   seul son TEXTE s'ecarte, pas sa boite.

   float:right envoie les boutons a l'oppose du titre : les boutons vont de
   243 a 564 dans 848px disponibles, la place existe a droite.

   ---------------------------------------------------------------------------
   REGLE DESACTIVEE (04/09/2026) -- debordement du tooltip "caution".

   float:right collait le bloc de boutons contre le bord droit du conteneur.
   Mesures a 1000px de viewport : #menuCalculAdvanced allait jusqu'a x=970,
   et le tooltip (largeur 400px, centre sur le bouton survole) s'etendait de
   636 a 1036 -- soit 36px hors du viewport.

   Les pages du software n'etant pas accessibles sous 768px, cette regle ne
   s'appliquait que sur 768-1100px, precisement la plage ou le tooltip
   deborde : aucun seuil de repli n'est necessaire.

   Sans elle, le bloc conserve son float:left + margin-left:35%
   (advancedBlock.css l.981-986) a toutes les largeurs.

   A surveiller entre 768 et 1100px : le recouvrement titre/boutons decrit
   ci-dessus. S'il reapparait, corriger le <h3> (width:fit-content ou
   padding-right) plutot que de retablir l'alignement des boutons.
   ---------------------------------------------------------------------------

@media (max-width: 1100px) {
    body.oc-form-surfaces-parameters #content #menuCalculAdvanced {
        float: right;
        margin-right: 0;
    }
}
*/


/* ===========================================================================
   ECART HORIZONTAL TITRE / BOUTONS BEIGES  --  REGLE GENERALE
   ---------------------------------------------------------------------------
   Valable sur TOUS les formulaires et a TOUTE largeur d'ecran : pas de media
   query, conformement au principe pose en tete de fichier.

   advancedBlock.css (l.981-986) positionne le bloc par margin-left:35% du
   conteneur. Sur les titres longs -- "Add or remove a surface" en particulier
   -- le <h3>, bloc de pleine largeur, atteint cette position et les boutons,
   en float:left, se posent sur son texte.

   Les anciennes corrections traitaient le probleme formulaire par formulaire
   avec float:right sous un seuil ; elles sont desactivees plus haut (le bloc
   se collait au bord droit et le tooltip, large de 400px, sortait alors du
   viewport). On decale ici le bloc de 30px vers la droite, uniformement.

   Specificite : #content #menuCalculAdvanced = 2 id, contre 1 seul pour la
   regle d'advancedBlock.css -- pas besoin de !important.
   =========================================================================== */

#content #menuCalculAdvanced {
    margin-left: calc(35% + 30px);
}
