/* Common CT Styles.
   Assumes use of infra-sk/modules/theme-chooser-sk.

 Can be imported via:

    @import '../style';
*/

/* Classes for styling task triggering form elements. */
.triggering-spinner {
    margin: auto;
    vertical-align: middle;
}

.long-field {
    width: 40em;
}

.smaller-font {
    font-size: 80%;
}

select-sk {
    * {
        padding: 0;
    }

    [selected] {
        background-color: var(--primary-variant);
    }
}

/* Universal table style */
table {
    border-spacing: 0px;
    .nowrap {
        white-space: nowrap;
    }
    th {
        text-align: center;
    }
}

/* Rules for Runs History tables. */
table.runssummary>tbody>tr>td,
table.runssummary>tbody>tr>th {
    padding: 10px;
    border-style: solid;
    border-width: 1px;
}

table.runssummary {
    border-spacing: 0px;
    padding-top: 2em;
    padding-left: 2em;

    th {
        text-align: center;
    }
}

table.inner-table {
    td {
        border: none;
        padding: 0px;
    }
}

.error {
  color: var(--red-500);
}

.darkmode .error {
    color: var(--red-300);
}

.green {
  color: var(--green-400);
}
/* The table used for task triggering form layouts. */
table.options {
    padding-left: 2em;
    margin: 1em;
    border-style: solid;

    td.center {
        text-align: center;
        padding-top: 2em;
    }
}

table.options>tbody>tr>td {
    padding: 1em 2em;
}

/* Detail dialogs and their overlay background. */
div.dialog-background {
    width: 100%;
    height: 100%;
    z-index: 10;
    position: fixed;
    overflow: auto;
    left: 0;
    top: 0;
}

div.hidden {
    display: none;
}

div.dialog-content {
    min-width: 200px;
    max-width: calc(100% - 10px);
    position: fixed;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    padding: 2em;
    border-radius: 1em;
}

/* Make Darkmode links visible */
.darkmode a {
    color: var(--secondary);
}

.darkmode table.options {
    background-color: var(--surface-2dp);
}
