/*
 * 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;

}
/* ==========================================================================
   UDC Studios — Guacamole login theme
   Minimal dark / glassmorphism. Overrides Apache Guacamole 1.6.0 login UI.
   ========================================================================== */

:root {
    --udc-bg:        #0a0b0f;
    --udc-card:      rgba(255, 255, 255, 0.045);
    --udc-card-line: rgba(255, 255, 255, 0.09);
    --udc-text:      #f2f3f7;
    --udc-muted:     rgba(242, 243, 247, 0.45);
    --udc-accent:    #5b7cfa;
    --udc-accent-2:  #8b5cf6;
}

/* ---- page background ---------------------------------------------------- */

body,
.login-ui {
    background: var(--udc-bg) !important;
    color: var(--udc-text);
    font-family: "Inter", -apple-system, BlinkMacSystemFont, "Segoe UI",
                 Roboto, "Helvetica Neue", Arial, sans-serif;
    -webkit-font-smoothing: antialiased;
}

/* Two soft colour blooms behind the glass. Fixed + non-interactive so they
   never intercept clicks on the form. */
.login-ui::before,
.login-ui::after {
    content: "";
    position: fixed;
    border-radius: 50%;
    pointer-events: none;
    z-index: 0;
    filter: blur(100px);
}

.login-ui::before {
    width: 46vw;
    height: 46vw;
    top: -14vw;
    left: -10vw;
    background: radial-gradient(circle, rgba(91,124,250,0.30), transparent 70%);
}

.login-ui::after {
    width: 40vw;
    height: 40vw;
    bottom: -16vw;
    right: -8vw;
    background: radial-gradient(circle, rgba(139,92,246,0.24), transparent 70%);
}

/* ---- the glass card ----------------------------------------------------- */

.login-ui .login-dialog {
    position: relative;
    z-index: 1;
    box-sizing: border-box;
    width: 100%;
    max-width: 400px;
    margin: 0 auto;
    padding: 44px 38px 38px;

    background: var(--udc-card);
    border: 1px solid var(--udc-card-line);
    border-radius: 18px;

    -webkit-backdrop-filter: blur(26px) saturate(150%);
    backdrop-filter: blur(26px) saturate(150%);

    box-shadow:
        0 24px 60px rgba(0, 0, 0, 0.55),
        inset 0 1px 0 rgba(255, 255, 255, 0.07);
}

/* Guacamole's .logo is an empty div at the top of the form, followed by
   .version. The logo artwork goes in the former and the subtitle reuses the
   latter, so each sits in its own box and the two never overlap.

   The mark is embedded as a data URI: one fewer request, and no extension
   resource path to resolve. The source file is theme/logo.png. It is pure
   white with a transparent ground, so it relies on the dark card behind it. */
.login-ui .login-dialog .logo {
    display: block;
    width: 156px;
    height: 78px;
    margin: 0 auto 10px;
    background-image: url("data:image/png;base64,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");
    background-repeat: no-repeat;
    background-position: center;
    background-size: contain;
}

.login-ui .login-dialog .logo::before,
.login-ui .login-dialog .logo::after {
    content: none;
}

/* .version normally shows "Apache Guacamole / 1.6.0"; its children are hidden
   and the element is reused as the sign-in subtitle. */
.login-ui .login-dialog .version {
    display: block;
    margin: 0 0 26px;
    font-size: 13.5px;
    font-weight: 400;
    text-align: center;
    color: var(--udc-muted);
}

.login-ui .login-dialog .version .app-name,
.login-ui .login-dialog .version .version-number {
    display: none;
}

.login-ui .login-dialog .version::before {
    content: "Sign in to continue";
    display: block;
}


/* The expired-password notice is an unclassed <p> inside the form (ng-show
   ="helpText"). It inherits Guacamole's default dark body colour, which is
   unreadable on the dark card, so it is set to the same white as the logo. */
.login-ui .login-dialog .login-form > p {
    margin: 0 0 18px;
    font-size: 13.5px;
    line-height: 1.5;
    text-align: center;
    color: #ffffff;
}

/* ---- fields ------------------------------------------------------------- */

.login-ui .login-dialog .labeled-field {
    position: relative;
    display: block;
    margin-bottom: 14px;
}

/* Guacamole labels each field and sets no placeholder, so the label has to
   stay visible — rendered as a small caption above its input. */
/* Guacamole puts .field-header behind the input (position:absolute,
   z-index:-1) so it reads as a placeholder; those values are overridden here.
   The header becomes a click-through box inset to the input's text column,
   and the label inside it is what actually animates.

   The label stays left-aligned and only rises and shrinks, so the motion is
   just top + font-size. Both are animatable, so it eases cleanly with no
   horizontal travel. */
.login-ui .login-dialog .labeled-field .field-header {
    position: absolute;
    top: 0;
    left: 15px;
    right: 15px;
    height: 52px;
    z-index: 2;
    display: block;
    margin: 0;
    padding: 0;
    opacity: 1;
    overflow: visible;
    pointer-events: none;
}

.login-ui .login-dialog .labeled-field .field-header label {
    position: absolute;
    top: 50%;
    left: 0;
    transform: translate(0, -50%);

    margin: 0;
    white-space: nowrap;
    font-size: 14.5px;
    font-weight: 400;
    line-height: 1;
    color: rgba(242, 243, 247, 0.38);

    transition: top 0.17s ease,
                font-size 0.17s ease,
                color 0.17s ease;
}

/* Focused, or holding a value: shrink into the top-right corner.
   Both classes are applied by floating-labels.js. */
.login-ui .login-dialog .labeled-field.udc-focus .field-header label,
.login-ui .login-dialog .labeled-field.udc-filled .field-header label {
    top: 11px;
    font-size: 10.5px;
    font-weight: 500;
    letter-spacing: 0.03em;
    color: rgba(242, 243, 247, 0.5);
}

.login-ui .login-dialog .labeled-field.udc-focus .field-header label {
    color: var(--udc-accent);
}

/* Respect a reduced-motion preference: end states still apply, just instantly. */
@media (prefers-reduced-motion: reduce) {
    .login-ui .login-dialog .labeled-field .field-header label {
        transition: none;
    }
}

/* The input sits in a .form-field wrapper that must not add its own box. */
.login-ui .login-dialog .labeled-field .form-field {
    display: block;
    margin: 0;
}

.login-ui .login-dialog input[type="text"],
.login-ui .login-dialog input[type="password"],
.login-ui .login-dialog input[type="email"] {
    box-sizing: border-box;
    display: block;
    width: 100%;
    height: 52px;
    /* Top padding reserves the strip the floated label occupies, so typed
       text never runs underneath it. */
    padding: 20px 15px 6px;
    margin: 0;

    font-size: 14.5px;
    font-family: inherit;
    color: var(--udc-text);

    background: rgba(255, 255, 255, 0.04);
    border: 1px solid rgba(255, 255, 255, 0.10);
    border-radius: 10px;
    outline: none;

    transition: border-color 0.18s ease,
                background-color 0.18s ease,
                box-shadow 0.18s ease;
}

.login-ui .login-dialog input::placeholder {
    color: rgba(242, 243, 247, 0.32);
}

.login-ui .login-dialog input[type="text"]:focus,
.login-ui .login-dialog input[type="password"]:focus,
.login-ui .login-dialog input[type="email"]:focus {
    background: rgba(255, 255, 255, 0.065);
    border-color: rgba(91, 124, 250, 0.65);
    box-shadow: 0 0 0 3px rgba(91, 124, 250, 0.16);
}

/* Chrome's autofill paints an opaque yellow box over the glass. The huge
   inset shadow is the only reliable way to repaint it dark. */
.login-ui .login-dialog input:-webkit-autofill,
.login-ui .login-dialog input:-webkit-autofill:hover,
.login-ui .login-dialog input:-webkit-autofill:focus {
    -webkit-text-fill-color: var(--udc-text);
    -webkit-box-shadow: 0 0 0 1000px #16181f inset;
    caret-color: var(--udc-text);
    transition: background-color 9999s ease-in-out 0s;
}

/* ---- submit ------------------------------------------------------------- */

.login-ui .login-dialog .buttons {
    margin-top: 22px;
}

.login-ui .login-dialog input[type="submit"],
.login-ui .login-dialog button {
    box-sizing: border-box;
    display: block;
    width: 100%;
    height: 46px;
    padding: 0;
    margin: 0;

    font-size: 14.5px;
    font-weight: 550;
    font-family: inherit;
    color: #fff;
    letter-spacing: 0.005em;

    background: linear-gradient(135deg, var(--udc-accent), var(--udc-accent-2));
    border: none;
    border-radius: 10px;
    cursor: pointer;

    transition: filter 0.18s ease, transform 0.08s ease, box-shadow 0.18s ease;
}

.login-ui .login-dialog input[type="submit"]:hover,
.login-ui .login-dialog button:hover {
    filter: brightness(1.09);
    box-shadow: 0 8px 22px rgba(91, 124, 250, 0.32);
}

.login-ui .login-dialog input[type="submit"]:active,
.login-ui .login-dialog button:active {
    transform: translateY(1px);
}

/* ---- error / lockout notice --------------------------------------------- */

.login-ui .login-error {
    box-sizing: border-box;
    margin: 0 0 18px;
    padding: 11px 14px;

    font-size: 13px;
    line-height: 1.45;
    color: #ffb4b4;
    text-align: left;

    background: rgba(239, 68, 68, 0.10);
    border: 1px solid rgba(239, 68, 68, 0.28);
    border-radius: 9px;
}

/* Always in the DOM; shown only when Guacamole sets the error state. */
.login-ui .login-error {
    display: none;
}

.login-ui.error .login-error {
    display: block;
    max-width: 400px;
    margin: 0 auto 14px;
}

/* ---- chrome we don't want ----------------------------------------------- */
/* .version is repurposed as the subtitle above, so only the stray copy
   outside the dialog is suppressed here. */

.login-ui > .version {
    display: none !important;
}

/* ---- small screens ------------------------------------------------------ */

@media (max-width: 480px) {

    .login-ui .login-dialog {
        max-width: none;
        margin: 0 16px;
        padding: 34px 24px 28px;
    }

    /* Blurs of this size are expensive on phones and the blooms are mostly
       off-screen here anyway. */
    .login-ui::before,
    .login-ui::after {
        display: none;
    }

}

/* Safari < 16 and Firefox with backdrop-filter disabled fall through to a
   flat dark card rather than a transparent one. */
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {

    .login-ui .login-dialog {
        background: #14161d;
    }

}
