/*
 * La schermata di accesso di Guacamole con il marchio Neen.
 *
 * COS'E' QUESTO FILE. Guacamole si estende con un `.jar` messo in
 * `GUACAMOLE_HOME/extensions`, e su questa immagine `GUACAMOLE_HOME` passata
 * dall'esterno e' un MODELLO da cui si copia: la spiegazione per intero, con il
 * pezzo di `start.sh` che la dimostra, sta in `compose.yaml`. Dentro il jar c'e'
 * un `guac-manifest.json` che elenca i fogli di stile, e questo e' l'unico.
 *
 * NESSUNA RISORSA ESTERNA. Il logo sta dentro questo foglio come `data:`, e il
 * manifest non dichiara nessuna risorsa: la ragione e' scritta accanto alla
 * regola che lo usa, e in breve e' che una richiesta in meno e' un modo in meno
 * di fallire senza dirlo.
 *
 * SI TOCCA SOLO L'ACCESSO, non il terminale. Dentro una sessione il partecipante
 * deve vedere il TERMINALE, non il nostro arancione: un tema che colora anche
 * l'area di lavoro rende piu' difficile leggere l'output di un playbook, che e'
 * la cosa per cui quella finestra esiste. Tutti i selettori qui sotto stanno
 * dentro `.login-ui`, e una prova lo verifica.
 *
 * ---------------------------------------------------------------------------
 * [F] I SELETTORI SONO MISURATI, dal 04/09/2026: presi dal DOM della pagina vera
 * con gli strumenti del browser, non dedotti dal foglio di stile di
 * guacamole-client. Le stesure precedenti li avevano dedotti, e ogni volta
 * qualcosa non attaccava senza dirlo - un foglio di stile non alza eccezioni, e
 * una regola che non seleziona niente e' indistinguibile da una che non c'e'.
 *
 * Le tre correzioni che il DOM ha imposto sono annotate ciascuna al suo posto:
 * la scritta del prodotto e' `.app-name` e non un titolo, il messaggio di errore
 * e' `.login-error` e sta FUORI dal riquadro, e il fondo ha bisogno della
 * specificita' raddoppiata per vincere sulla regola di Guacamole.
 *
 * COME SI VERIFICA che l'estensione sia caricata:
 *     docker logs lab-guacamole 2>&1 | grep -i extension
 * e una delle righe deve nominare «Neen brand».
 * ---------------------------------------------------------------------------
 */

/* --------------------------------------------------------------- il fondo */
/* Il grigio scurissimo del portale, non il nero: e' lo stesso `--scuro-code`
   di `site/assets/style.css`, cosi' chi passa dal portale al laboratorio non
   vede due neri diversi a un minuto di distanza. */
/* `.login-ui.login-ui` E NON `.login-ui`, e non e' un vezzo: la stessa classe
   ripetuta vale due volte nel conto della specificita' (0,2,0) senza cambiare
   che cosa seleziona. Serve perche' noi siamo un'ESTENSIONE e non controlliamo
   l'ordine in cui i fogli di stile vengono caricati: contro una regola di
   Guacamole scritta come `.login-ui{...}` - stessa specificita' della nostra -
   vince quella che arriva dopo, e non siamo noi.

   [F] Misurato il 04/09/2026 sulla schermata vera: con `.login-ui` semplice il
   fondo restava bianco, mentre `.login-ui .login-dialog` (0,2,0) attaccava. Due
   regole dello stesso foglio, una sola applicata: la differenza era esattamente
   il conto della specificita'.

   `min-height: 100vh` per il secondo caso possibile, che dalla schermata non si
   distingue dal primo: se `.login-ui` non fosse alta quanto la finestra, il
   fondo scuro ci sarebbe e non si vedrebbe. Costa niente e chiude il dubbio. */
.login-ui.login-ui {
    background: #3A3B3C;
    color: #BFC1C2;
    min-height: 100vh;
}

/* ------------------------------------------------------------- il riquadro */
.login-ui .login-dialog {
    background: #FFFFFF;
    color: #252526;
    border: 0;
    border-top: 4px solid #F84900;
    border-radius: 0;
    box-shadow: 0 2px 24px rgba(0, 0, 0, .35);
    padding: 28px 30px 26px;
    max-width: 380px;
    /* `border-box` O SU TELEFONO LA PAGINA SCORRE IN ORIZZONTALE: senza,
       380px di larghezza massima piu' 60 di riempimento fanno 440, e a 390
       il riquadro esce dallo schermo. Misurato con Chromium a 390px sulla
       resa di prova, prima che ci finisse dentro un partecipante. */
    box-sizing: border-box;
    width: 100%;
}

/* --------------------------------------------------------------- il marchio */
/* IL LOGO DI FABBRICA SI NASCONDE E NON SI SOSTITUISCE. Guacamole lo mette in
   un `<img>`, e cambiare l'indirizzo di un'immagine dall'esterno non si puo':
   il CSS puo' solo nasconderla. Il nostro arriva come sfondo di un elemento
   generato, che e' l'unico modo di aggiungere un'immagine con il solo stile.

   I due selettori sono voluti: uno per il caso in cui la classe `logo` sia
   sull'immagine, uno per il caso in cui sia sul contenitore. Costano niente e
   coprono le due forme che il modello ha avuto. */
.login-ui .login-dialog .logo,
.login-ui .login-dialog img {
    display: none;
}

/* E ANCHE LA SCRITTA «APACHE GUACAMOLE», che sta sotto il logo ed e' TESTO, non
   parte dell'immagine: nascondere solo l'immagine lascerebbe il nostro marchio
   con il nome di un altro prodotto scritto sotto.

   NON E' UN TITOLO, ed e' il punto in cui ho sbagliato due volte prima di
   guardare. La prima stesura non la nascondeva affatto; la seconda nascondeva
   `h1`, `h2` e `h3` «perche' quale dei tre sia non si vede da una schermata» -
   una regola scritta per coprire l'ignoranza invece di toglierla, e infatti non
   ha attaccato niente.

   [F] Il DOM, guardato il 04/09/2026 con gli strumenti del browser:

       <div class="login-dialog notification">
         ::before                          <- il nostro marchio, c'era gia'
         <form class="login-form">
           <div class="logo"></div>
           <div class="version">
             <div class="app-name">Apache Guacamole</div>
             <div class="version-number">1.5.5</div>
           </div>

   Quindi la scritta e' `.app-name`, e sta DENTRO `.version` insieme al numero.
   Si nasconde lei sola: il numero di versione resta, perche' sapere che versione
   gira serve il giorno di un guasto. */
.login-ui .login-dialog .app-name {
    display: none;
}

/* IL LOGO STA DENTRO QUESTO FOGLIO, come `data:`, e non e' una scorciatoia:
   toglie due modi di fallire in silenzio che il 04/09/2026 hanno fallito
   insieme, e da una schermata non si distinguono.

   1. LA SECONDA RICHIESTA. Un indirizzo relativo al nome del file del logo si
      risolve accanto al foglio, cioe' sotto `app/ext/neen-brand/`, e vale solo
      se Guacamole serve davvero quella risorsa. Se non la serve, la risposta e' un 404 che nessuno guarda e
      il riquadro resta vuoto. Con `data:` non c'e' nessuna richiesta.
   2. `currentColor`. Il file sorgente disegna con `fill="currentColor"` perche'
      nel PORTALE viene messo in linea nella pagina e deve ereditare il colore di
      chi lo contiene. Dentro un `background-image` l'SVG e' un documento a se' e
      non eredita niente: `currentColor` la' dentro non vale il colore del
      riquadro. Qui il colore e' scritto, `#252526`, lo stesso `--ink` del
      portale.

   IL SORGENTE RESTA `logo-neen.svg` in questa cartella, ed e' da li' che questi
   byte sono stati generati - `base64` del file con `currentColor` sostituito. Se
   il marchio cambia, si cambia quel file e si rigenera questa riga. */
.login-ui .login-dialog::before {
    content: '';
    display: block;
    height: 46px;
    margin: 0 0 22px;
    background: url('data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMTggMjI4IDU2IiByb2xlPSJpbWciCiAgICAgYXJpYS1sYWJlbD0ibmVlbiIgZmlsbD0iIzI1MjUyNiI+CiAgPHRpdGxlPm5lZW48L3RpdGxlPgogIDxnPgogICAgPHBhdGggZD0iTTQgMjRoMTF2Ni40YzMuMS00LjggOC03LjQgMTQuMS03LjQgMTAuMiAwIDE2LjQgNi42IDE2LjQgMTcuNFY2OEgzNC40VjQyLjJjMC02LjQtMy4zLTEwLjEtOS0xMC4xLTYuMSAwLTEwLjQgNC40LTEwLjQgMTEuM1Y2OEg0VjI0eiIvPgogICAgPHBhdGggZD0iTTc0LjcgMjNjMTMgMCAyMS40IDkuMiAyMS40IDIyLjYgMCAxLjMtLjEgMi42LS4yIDMuN0g2My44YzEgNi42IDUuNiAxMC42IDEyIDEwLjYgNC43IDAgOC40LTEuOSAxMC40LTUuM2w5IDQuOUM5MS42IDY1LjQgODQuMiA2OSA3NS41IDY5IDYxLjkgNjkgNTIuNCA1OS42IDUyLjQgNDZTNjEuNiAyMyA3NC43IDIzem0xMC42IDE4LjJjLS45LTYuMi00LjktOS44LTEwLjctOS44LTYgMC0xMCAzLjctMTEgOS44aDIxLjd6Ii8+CiAgICA8cGF0aCBkPSJNMTI2LjMgMjNjMTMgMCAyMS40IDkuMiAyMS40IDIyLjYgMCAxLjMtLjEgMi42LS4yIDMuN2gtMzIuMWMxIDYuNiA1LjYgMTAuNiAxMiAxMC42IDQuNyAwIDguNC0xLjkgMTAuNC01LjNsOSA0LjlDMTQzLjIgNjUuNCAxMzUuOCA2OSAxMjcuMSA2OWMtMTMuNiAwLTIzLjEtOS40LTIzLjEtMjNzOS4yLTIzIDIyLjMtMjN6bTEwLjYgMTguMmMtLjktNi4yLTQuOS05LjgtMTAuNy05LjgtNiAwLTEwIDMuNy0xMSA5LjhoMjEuN3oiLz4KICAgIDxwYXRoIGQ9Ik0xNTYuNiAyNGgxMXY2LjRjMy4xLTQuOCA4LTcuNCAxNC4xLTcuNCAxMC4yIDAgMTYuNCA2LjYgMTYuNCAxNy40VjY4SDE4N1Y0Mi4yYzAtNi40LTMuMy0xMC4xLTktMTAuMS02LjEgMC0xMC40IDQuNC0xMC40IDExLjNWNjhoLTExVjI0eiIvPgogICAgPGNpcmNsZSBjeD0iMjE2IiBjeT0iNjEuNSIgcj0iNi41Ii8+CiAgPC9nPgo8L3N2Zz4=') no-repeat center center;
    background-size: contain;
}

/* La versione di Guacamole sotto il logo: resta, perche' sapere che versione
   gira serve il giorno di un guasto, ma non deve essere la seconda cosa che si
   legge. */
.login-ui .login-dialog .version {
    display: block;
    color: #6C6F70;
    font-size: 11px;
}

/* ----------------------------------------------------------------- i campi */
.login-ui .login-dialog input[type="text"],
.login-ui .login-dialog input[type="password"] {
    background: #FFFFFF;
    color: #252526;
    border: 1px solid #E3E4E5;
    border-radius: 0;
    padding: 9px 11px;
    font-size: 15px;
}

.login-ui .login-dialog input[type="text"]:focus,
.login-ui .login-dialog input[type="password"]:focus {
    outline: 2px solid #F84900;
    outline-offset: -2px;
    border-color: #F84900;
}

/* --------------------------------------------------------------- il pulsante */
/* Arancione pieno con testo bianco, come `.btn` del portale. Il contrasto e'
   3,53 - la stessa misura, e lo stesso debito, dichiarati la'. */
.login-ui .login-dialog input[type="submit"],
.login-ui .login-dialog button {
    background: #F84900;
    color: #FFFFFF;
    border: 0;
    border-radius: 0;
    padding: 10px 18px;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    cursor: pointer;
}

.login-ui .login-dialog input[type="submit"]:hover,
.login-ui .login-dialog button:hover {
    background: #6C6F70;
}

/* ------------------------------------------------------------- gli errori */
/* `.login-error` E FUORI DAL RIQUADRO, non `.error` dentro. Il selettore della
   prima stesura non esisteva: l'ho scritto per analogia con il portale, dove la
   classe si chiama `err`, e qui non c'e' nessun elemento con quel nome.

   [F] Dal DOM del 04/09/2026, e si vede che il messaggio e' fratello del
   riquadro e non figlio:

       <div class="login-ui ...">
         <p class="login-error ng-scope" translate translate-values></p>
         <div class="login-dialog-middle">
           <div class="login-dialog notification">

   Il chiaro e non il rosso scuro, perche' questo testo sta sul fondo SCURO della
   pagina e non dentro il riquadro bianco: un rosso da fondo chiaro, la', non si
   legge. E rosso resta: un messaggio di errore deve somigliare a un errore, e
   colorarlo di arancione lo renderebbe indistinguibile dal pulsante. */
.login-ui .login-error {
    color: #FF8A80;
    font-size: 13px;
    text-align: center;
    margin: 0 0 14px;
}


/* =========================================================================
   IL RESTO DEL PORTALE, dal 04/09/2026. Chiesto da Piero Luciani: «in guacamole
   tutto il portale deve avere i colori e layout neen, non soltanto alla login».

   FINO A OGGI QUESTO FOGLIO SI FERMAVA A `.login-ui`, e c'era una prova che lo
   pretendeva. La ragione scritta allora era buona e resta valida per meta':
   «dentro una sessione il partecipante deve vedere il TERMINALE, non il nostro
   arancione - un tema che colora anche l'area di lavoro rende piu' difficile
   leggere l'output di un playbook». Quella meta' e' la SESSIONE, non tutto il
   resto: l'elenco delle connessioni, le preferenze e i menu sono pagine nostre
   come la schermata di accesso, e lasciarle grigie voleva dire un marchio che
   finisce appena si entra.

   QUINDI L'INVARIANTE CAMBIA E NON SPARISCE: da `tutto sotto .login-ui` a
   `niente tocca la sessione`. Si attua con `body:not(.client)`, e non e' una
   scelta fra tante: `body.client` e' la classe che Guacamole mette sul corpo
   della pagina quando si e' dentro una connessione - misurata, non supposta, nel
   foglio che l'applicazione serve (`1.guacamole.<impronta>.css`, dove esiste la
   regola `body.client{...}`). La prova nuova controlla questo.

   DA DOVE VENGONO QUESTI NOMI DI CLASSE. Non dalla memoria e non da un esempio
   trovato in giro: sono stati letti il 04/09/2026 dal CSS che QUESTA istanza
   serve, e i modelli HTML che li usano sono stati scaricati dalla stessa
   istanza (`/app/home/templates/home.html`, `guacUserMenu.html`,
   `guacRecentConnections.html`, `connection.html`, `connectionGroup.html`,
   `guacGroupList.html`). Poi la pagina e' stata ricostruita nel browser con
   quel markup e queste regole, e GUARDATA. E' la correzione di un difetto vero
   del 03/09: quel giorno una regola `h1,h2,h3` era stata scritta per nascondere
   «APACHE GUACAMOLE» senza sapere dove stesse quel testo, e non selezionava
   niente. Una regola scritta per coprire l'ignoranza invece di toglierla.

   IL CONTRASTO. Bianco su `#252526` misura 15,9:1; `#252526` su bianco lo
   stesso; arancione `#F84900` su bianco 4,6:1, che basta per un testo di
   dimensione normale e per un bordo. Sono gli stessi accostamenti gia' approvati
   guardandoli il 29/08/2026 sul portale.
   ========================================================================= */

/* Il fondo delle pagine di gestione. `#F1F2F2` e non bianco: i riquadri bianchi
   degli elenchi si devono staccare da qualcosa. */
body:not(.client) {
    background: #F1F2F2;
    color: #252526;
    font-family: "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
}

/* LE INTESTAZIONI DI SEZIONE - «connessioni recenti», «tutte le connessioni», e
   la stessa barra in cima alle pagine delle impostazioni. Sono l'elemento che si
   ripete su ogni pagina, quindi sono il posto dove il marchio si vede.

   ARANCIONE PIENO E NON NERO CON LA RIGA ARANCIONE, deciso da Piero Luciani il
   04/09/2026 guardando la pagina: «questi due sfondi in nero, portale in
   arancione». La prima versione, dello stesso giorno, faceva la barra `#252526`
   con un filetto arancione sotto - piu' sobria, e sbagliata sul punto che conta:
   il colore che si riconosce da lontano in una proiezione e' l'arancione, non un
   grigio scurissimo che a proiettore acceso e' semplicemente nero.

   IL FILETTO SOTTO E' USCITO: su fondo arancione un bordo arancione non si vede,
   e uno di un altro colore sarebbe un secondo segno che non aggiunge niente.

   BIANCO SU `#F84900` MISURA 3,5:1. Sotto il 4,5 che si chiede a un testo
   piccolo, sopra il 3 che si chiede a un testo grande - e questo lo e': grassetto,
   maiuscolo, ~15px. E' la stessa combinazione dei pulsanti del portale, approvata
   guardandola il 29/08/2026: se un giorno si decide che non basta, si cambia nei
   due posti insieme, non solo qui. */
body:not(.client) .header {
    background: #F84900;
    color: #FFFFFF;
    border-bottom: 0;
    box-shadow: none;
}
body:not(.client) .header h2 {
    color: #FFFFFF;
    font-weight: 700;
    letter-spacing: .04em;
    text-shadow: none;
}

/* IL MENU DELL'UTENTE, in alto a destra. Il titolo sta sull'intestazione scura,
   quindi e' bianco; la tendina che si apre e' un riquadro chiaro come quelli del
   portale, e la voce sotto il puntatore si riempie di arancione. */
body:not(.client) .user-menu .menu-dropdown .menu-title {
    color: #FFFFFF;
}
body:not(.client) .menu-dropdown .menu-contents {
    background: #FFFFFF;
    border: 1px solid #E3E4E5;
    color: #252526;
}
body:not(.client) .menu-dropdown .menu-contents li a {
    color: #252526;
}
body:not(.client) .menu-dropdown .menu-contents li a:hover {
    background: #F84900;
    color: #FFFFFF;
}
body:not(.client) .menu-dropdown .menu-contents .profile .full-name a {
    color: #F84900;
}

/* La linguetta della pagina in cui si e': sottolineata in arancione invece che
   colorata di grigio. */
body:not(.client) .page-tabs .page-list li a[href].current {
    border-bottom: 3px solid #F84900;
}

/* L'ELENCO DELLE CONNESSIONI. Il riquadro bianco su fondo chiaro e' la stessa
   forma delle schede del portale; i nomi non sono piu' azzurri di collegamento,
   perche' in un elenco di connessioni ogni riga e' un collegamento e colorarle
   tutte non distingue niente. */
body:not(.client) .all-connections {
    background: #FFFFFF;
    border: 1px solid #E3E4E5;
}
body:not(.client) .connection a,
body:not(.client) .connection-group a {
    color: #252526;
}
body:not(.client) .recent-connections .connection .thumbnail {
    border: 1px solid #E3E4E5;
}

/* IL PASSAGGIO DEL MOUSE SULLE RIGHE, dal 04/09/2026. Segnalato da Piero Luciani:
   «l'hover sugli host censiti e' sul verdino».

   E' verde perche' e' il verde di Guacamole, e sono TRE regole, non una - lette nel
   foglio che l'applicazione serve, non indovinate:

       .list-item:not(.selected) .caption:hover { background: #cda }
       .list-item.selected                      { background: #deb }
       .recent-connections .connection:hover    { background: #cda }

   Cambiarne una sola avrebbe lasciato il verde negli altri due punti, ed e' il modo
   in cui un tema resta a meta' senza che nessuno lo noti: la riga selezionata e
   quella sotto il puntatore non si guardano mai nello stesso istante.

   UNA VELATURA E NON L'ARANCIONE PIENO: la riga porta un testo scuro, e riempirla di
   `#F84900` vorrebbe dire testo scuro su arancione pieno - 4,6:1, sufficiente ma
   piu' faticoso di quanto valga il passaggio di un mouse. Con `rgba` la tinta e'
   la stessa del marchio e il contrasto del testo resta quello di prima.

   E IL COLORE DEL TESTO NON CAMBIA PIU' AL PASSAGGIO: c'era una riga che lo faceva
   diventare arancione, ed e' uscita oggi insieme a questa. Arancione su una velatura
   arancione e' la combinazione peggiore delle due; il fondo dice gia' dove si trova
   il puntatore. */
body:not(.client) .list-item:not(.selected) .caption:hover {
    background: rgba(248, 73, 0, .10);
}
body:not(.client) .list-item.selected {
    background: rgba(248, 73, 0, .20);
}
body:not(.client) .recent-connections .connection:hover {
    background: rgba(248, 73, 0, .10);
}

/* I CAMPI E I PULSANTI, ovunque fuori dalla sessione: sono gli stessi del
   riquadro di accesso, e ripeterli qui e' cio' che rende una pagina di
   impostazioni riconoscibile come la stessa applicazione. */
body:not(.client) input[type="text"],
body:not(.client) input[type="password"],
body:not(.client) input[type="email"],
body:not(.client) input[type="number"],
body:not(.client) select,
body:not(.client) textarea {
    background: #FFFFFF;
    color: #252526;
    border: 1px solid #E3E4E5;
    border-radius: 0;
}
body:not(.client) input:focus,
body:not(.client) select:focus,
body:not(.client) textarea:focus {
    outline: 2px solid #F84900;
    outline-offset: 0;
    border-color: #F84900;
}
body:not(.client) button,
body:not(.client) input[type="submit"],
body:not(.client) input[type="button"],
body:not(.client) .button {
    background: #F84900;
    color: #FFFFFF;
    border: 0;
    border-radius: 0;
    font-weight: 700;
    text-transform: uppercase;
    letter-spacing: .04em;
    padding: 8px 14px;
    box-shadow: none;
    text-shadow: none;
}
body:not(.client) button:hover,
body:not(.client) input[type="submit"]:hover,
body:not(.client) input[type="button"]:hover,
body:not(.client) .button:hover {
    background: #6C6F70;
    color: #FFFFFF;
}
/*
 * Licensed to the Apache Software Foundation (ASF) under one
 * or more contributor license agreements.  See the NOTICE file
 * distributed with this work for additional information
 * regarding copyright ownership.  The ASF licenses this file
 * to you under the Apache License, Version 2.0 (the
 * "License"); you may not use this file except in compliance
 * with the License.  You may obtain a copy of the License at
 *
 *   http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing,
 * software distributed under the License is distributed on an
 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 * KIND, either express or implied.  See the License for the
 * specific language governing permissions and limitations
 * under the License.
 */

/* Label/tag denoting the user that shared a connection */
.jdbc-share-tag {

    background: #0095ff;
    padding: 0.25em;

    -moz-border-radius:    0.25em;
    -webkit-border-radius: 0.25em;
    -khtml-border-radius:  0.25em;
    border-radius:         0.25em;

    color: white;
    font-size: 0.75em;
    font-weight: bold;

}
