mirror of
https://github.com/alexhopeoconnor/dnsmasq-webui.git
synced 2026-10-04 04:18:13 +10:00
Unify the pages around the effective-config save workflow, source-aware projections, and hosts-style table UX so draft changes are easier to understand and the specialized editors stay consistent and better covered by tests.
260 lines
5.7 KiB
CSS
260 lines
5.7 KiB
CSS
/* Sizing is owned by the parent (e.g. .app-page-file-filter-wrap); default fills container width. */
|
|
.grouped-select {
|
|
position: relative;
|
|
width: 100%;
|
|
box-sizing: border-box;
|
|
}
|
|
|
|
.grouped-select--open {
|
|
z-index: 1080;
|
|
}
|
|
|
|
.grouped-select__backdrop {
|
|
position: fixed;
|
|
inset: 0;
|
|
z-index: 1070;
|
|
background: transparent;
|
|
}
|
|
|
|
.grouped-select__trigger {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 0.45rem;
|
|
width: 100%;
|
|
min-height: calc(1.5em + 0.75rem);
|
|
padding: 0.375rem 0.65rem;
|
|
font-size: 0.8125rem;
|
|
line-height: 1.4;
|
|
text-align: left;
|
|
color: var(--bs-body-color);
|
|
background: linear-gradient(180deg, #ffffff 0%, #f8fafc 100%);
|
|
border: 1px solid #d8dee9;
|
|
border-radius: 10px;
|
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.75);
|
|
transition: border-color 0.12s ease, box-shadow 0.12s ease, background 0.12s ease;
|
|
}
|
|
|
|
.grouped-select__trigger:hover {
|
|
border-color: #b8c4d4;
|
|
background: linear-gradient(180deg, #ffffff 0%, #f1f5f9 100%);
|
|
}
|
|
|
|
.grouped-select__trigger--filtered {
|
|
border-color: #93b9f0;
|
|
background: linear-gradient(180deg, #f6f9ff 0%, #eef4fc 100%);
|
|
box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.9);
|
|
}
|
|
|
|
.grouped-select__trigger--filtered:hover {
|
|
border-color: #7aa8e8;
|
|
}
|
|
|
|
.grouped-select__trigger--unknown {
|
|
border-color: #e9c46c;
|
|
background: linear-gradient(180deg, #fffdf8 0%, #fff6e5 100%);
|
|
}
|
|
|
|
.grouped-select--open .grouped-select__trigger {
|
|
border-color: #86b7fe;
|
|
box-shadow: 0 0 0 0.2rem rgba(13, 110, 253, 0.2), inset 0 1px 0 rgba(255, 255, 255, 0.85);
|
|
}
|
|
|
|
.grouped-select__trigger-label {
|
|
min-width: 0;
|
|
flex: 1 1 auto;
|
|
}
|
|
|
|
.grouped-select__trigger-label--rich {
|
|
display: flex;
|
|
align-items: center;
|
|
gap: 0.28rem;
|
|
min-width: 0;
|
|
}
|
|
|
|
.grouped-select__trigger-prefix {
|
|
flex-shrink: 0;
|
|
font-size: 0.7rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.03em;
|
|
text-transform: uppercase;
|
|
color: #64748b;
|
|
}
|
|
|
|
.grouped-select__trigger--filtered .grouped-select__trigger-prefix {
|
|
color: #2563eb;
|
|
}
|
|
|
|
.grouped-select__trigger-sep {
|
|
flex-shrink: 0;
|
|
opacity: 0.45;
|
|
font-weight: 500;
|
|
color: #64748b;
|
|
}
|
|
|
|
.grouped-select__trigger-primary {
|
|
flex: 1 1 auto;
|
|
min-width: 0;
|
|
font-weight: 600;
|
|
color: #0f172a;
|
|
}
|
|
|
|
.grouped-select__trigger-meta {
|
|
flex-shrink: 0;
|
|
font-size: 0.75rem;
|
|
font-weight: 500;
|
|
color: #64748b;
|
|
font-variant-numeric: tabular-nums;
|
|
}
|
|
|
|
.grouped-select__trigger-count {
|
|
flex-shrink: 0;
|
|
min-width: 1.35rem;
|
|
padding: 0.12rem 0.4rem;
|
|
font-size: 0.68rem;
|
|
font-weight: 700;
|
|
font-variant-numeric: tabular-nums;
|
|
line-height: 1.2;
|
|
text-align: center;
|
|
color: #1e40af;
|
|
background: rgba(37, 99, 235, 0.12);
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.grouped-select__chevron {
|
|
font-size: 0.8rem;
|
|
opacity: 0.55;
|
|
transition: transform 0.15s ease, opacity 0.12s ease;
|
|
}
|
|
|
|
.grouped-select__trigger:hover .grouped-select__chevron {
|
|
opacity: 0.85;
|
|
}
|
|
|
|
.grouped-select--open .grouped-select__chevron {
|
|
transform: rotate(180deg);
|
|
}
|
|
|
|
.grouped-select__panel {
|
|
position: absolute;
|
|
top: calc(100% + 4px);
|
|
right: 0;
|
|
left: auto;
|
|
min-width: 100%;
|
|
width: max-content;
|
|
max-width: min(26rem, 92vw);
|
|
max-height: min(22rem, 55vh);
|
|
overflow-x: hidden;
|
|
overflow-y: auto;
|
|
z-index: 1085;
|
|
padding: 0.35rem;
|
|
background: var(--bs-body-bg, #fff);
|
|
border: 1px solid var(--bs-border-color, #e2e8f0);
|
|
border-radius: 10px;
|
|
}
|
|
|
|
.grouped-select__option {
|
|
display: flex;
|
|
align-items: center;
|
|
justify-content: space-between;
|
|
gap: 0.65rem;
|
|
width: 100%;
|
|
padding: 0.4rem 0.55rem;
|
|
margin: 0;
|
|
font-size: 0.8125rem;
|
|
line-height: 1.35;
|
|
text-align: left;
|
|
color: #1e293b;
|
|
background: transparent;
|
|
border: none;
|
|
border-radius: 6px;
|
|
cursor: pointer;
|
|
}
|
|
|
|
.grouped-select__option:hover {
|
|
background: rgba(15, 23, 42, 0.06);
|
|
}
|
|
|
|
.grouped-select__option--active {
|
|
background: rgba(13, 110, 253, 0.12);
|
|
font-weight: 600;
|
|
}
|
|
|
|
.grouped-select__option--active:hover {
|
|
background: rgba(13, 110, 253, 0.18);
|
|
}
|
|
|
|
.grouped-select__option--all {
|
|
margin-bottom: 0.25rem;
|
|
border: 1px solid #e7ebf0;
|
|
background: linear-gradient(180deg, #fbfcfe 0%, #f4f6f9 100%);
|
|
}
|
|
|
|
.grouped-select__option-main {
|
|
flex: 1 1 0%;
|
|
min-width: 0;
|
|
}
|
|
|
|
.grouped-select__count {
|
|
flex-shrink: 0;
|
|
padding: 0.1rem 0.45rem;
|
|
font-size: 0.7rem;
|
|
font-weight: 600;
|
|
font-variant-numeric: tabular-nums;
|
|
line-height: 1.3;
|
|
color: #475569;
|
|
background: rgba(15, 23, 42, 0.06);
|
|
border-radius: 999px;
|
|
}
|
|
|
|
.grouped-select__option--active .grouped-select__count {
|
|
color: #0d47a1;
|
|
background: rgba(13, 110, 253, 0.2);
|
|
}
|
|
|
|
.grouped-select__group {
|
|
margin-top: 0.35rem;
|
|
padding: 0.3rem 0.35rem 0.45rem;
|
|
border-radius: 8px;
|
|
border: 1px solid rgba(15, 23, 42, 0.08);
|
|
}
|
|
|
|
.grouped-select__group:first-of-type {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.grouped-select__group--managed {
|
|
background: linear-gradient(180deg, #e8f4fd 0%, #dceef9 100%);
|
|
border-color: #b8d4ee;
|
|
}
|
|
|
|
.grouped-select__group--system {
|
|
background: linear-gradient(180deg, #f1f5f9 0%, #e8edf3 100%);
|
|
border-color: #cbd5e1;
|
|
}
|
|
|
|
.grouped-select__group--addn {
|
|
background: linear-gradient(180deg, #fff8e6 0%, #fff0cc 100%);
|
|
border-color: #e9d48a;
|
|
}
|
|
|
|
.grouped-select__group--hostsdir {
|
|
background: linear-gradient(180deg, #ecfdf3 0%, #dff6e8 100%);
|
|
border-color: #a7e3c0;
|
|
}
|
|
|
|
.grouped-select__group--other {
|
|
background: #f8fafc;
|
|
}
|
|
|
|
.grouped-select__group-header {
|
|
padding: 0.2rem 0.35rem 0.45rem;
|
|
font-size: 0.65rem;
|
|
font-weight: 700;
|
|
letter-spacing: 0.04em;
|
|
text-transform: uppercase;
|
|
color: #334155;
|
|
border-bottom: 1px solid rgba(15, 23, 42, 0.08);
|
|
margin-bottom: 0.15rem;
|
|
}
|