mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-07 04:34:05 +08:00
209 lines
4.5 KiB
Plaintext
209 lines
4.5 KiB
Plaintext
// out: false
|
|
|
|
// Opt-in surface for native views that do not render a cbi-section.
|
|
.native-page-card() {
|
|
min-width: 0;
|
|
border-radius: var(--radius-card);
|
|
background-color: var(--surface-color);
|
|
box-shadow: var(--section-shadow);
|
|
}
|
|
|
|
.cbi-section,
|
|
.cbi-section-error,
|
|
#iptables,
|
|
.Firewall form,
|
|
#cbi-network>.cbi-section-node,
|
|
#cbi-wireless>.cbi-section-node,
|
|
#cbi-wireless>#wifi_assoclist_table,
|
|
[data-tab-title],
|
|
[data-page="admin-system-opkg"] #maincontent>.container {
|
|
font-family: inherit;
|
|
font-weight: normal;
|
|
font-style: normal;
|
|
line-height: normal;
|
|
min-width: inherit;
|
|
padding: 0;
|
|
border: 0;
|
|
|
|
border-radius: var(--radius-card);
|
|
background-color: var(--surface-color);
|
|
box-shadow: var(--section-shadow);
|
|
|
|
&:last-child {
|
|
margin: 0;
|
|
border: 0;
|
|
}
|
|
|
|
}
|
|
|
|
.cbi-modal .cbi-section,
|
|
.cbi-section .cbi-section {
|
|
padding: 0;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.cbi-modal .cbi-tabmenu {
|
|
margin-left: 0;
|
|
}
|
|
|
|
.cbi-map {
|
|
display: flex;
|
|
flex-direction: column;
|
|
width: 100%;
|
|
min-width: 0;
|
|
gap: var(--section-gap);
|
|
container-type: inline-size;
|
|
}
|
|
|
|
.cbi-map-descr {
|
|
font-size: small;
|
|
line-height: 1.5;
|
|
padding: 0 var(--section-inset);
|
|
}
|
|
|
|
.cbi-section > .cbi-section-descr:not(:empty) {
|
|
padding-block: var(--field-gap);
|
|
}
|
|
|
|
.cbi-section-descr:not(:empty) {
|
|
font-size: small;
|
|
line-height: 1.5;
|
|
padding: 0 var(--section-inset);
|
|
}
|
|
|
|
.cbi-section-descr:empty {
|
|
display: none !important;
|
|
}
|
|
|
|
// Older Lua CBI forms omit the body inset supplied by modern tab containers.
|
|
// Page adapters opt in so headings, descriptions and fields share one rhythm.
|
|
.legacy-cbi-section-spacing() {
|
|
.cbi-section {
|
|
> .cbi-section-node:not(.cbi-section-node-tabbed):where(:has(> .cbi-value, > [id] > .cbi-value)) {
|
|
padding-block: var(--field-gap);
|
|
}
|
|
|
|
// Descriptions already inset the body, but a painted heading is a separate
|
|
// surface: its bottom padding cannot supply space below that surface.
|
|
> .cbi-section-descr:not(:empty) ~ .cbi-section-node:not(.cbi-section-node-tabbed) {
|
|
padding-block-start: 0;
|
|
}
|
|
|
|
> .cbi-value {
|
|
padding-block: var(--field-gap);
|
|
}
|
|
|
|
> .cbi-value ~ .cbi-value,
|
|
> .cbi-section-descr:not(:empty) ~ .cbi-value {
|
|
padding-block-start: 0;
|
|
}
|
|
|
|
> .cbi-section-create {
|
|
padding: var(--field-gap) var(--section-inset);
|
|
}
|
|
}
|
|
}
|
|
|
|
.cbi-map-descr+fieldset {
|
|
margin-top: 0;
|
|
}
|
|
|
|
.cbi-map-descr>abbr {
|
|
cursor: help;
|
|
text-decoration: underline;
|
|
}
|
|
|
|
.cbi-section>legend {
|
|
display: none !important;
|
|
}
|
|
|
|
fieldset>fieldset,
|
|
.cbi-section>.cbi-section {
|
|
margin: 0;
|
|
padding: 0;
|
|
border: 0;
|
|
box-shadow: none;
|
|
}
|
|
|
|
.cbi-section>h3:first-child,
|
|
.panel-title {
|
|
font-size: 1.1rem;
|
|
line-height: 1.4;
|
|
display: block;
|
|
width: 100%;
|
|
margin: 0;
|
|
margin-bottom: 0;
|
|
padding: var(--field-gap) var(--section-inset);
|
|
color: var(--text-strong);
|
|
|
|
}
|
|
|
|
.cbi-section>h3:first-child,
|
|
.cbi-section>h4:first-child,
|
|
.cbi-section>p:first-child,
|
|
[data-tab-title]>h3:first-child,
|
|
[data-tab-title]>h4:first-child,
|
|
[data-tab-title]>p:first-child {
|
|
padding: var(--field-gap) var(--section-inset);
|
|
// These backgrounds meet the card edge, so only the outer corners curve.
|
|
border-start-start-radius: inherit;
|
|
border-start-end-radius: inherit;
|
|
border-end-start-radius: 0;
|
|
border-end-end-radius: 0;
|
|
}
|
|
|
|
// Anonymous removable sections share one heading before their first instance.
|
|
// Keep its first Delete beside that heading, in normal source order.
|
|
.cbi-section:has(> h3:first-child + .cbi-section-remove + .cbi-section-node) {
|
|
display: grid;
|
|
grid-template-columns: minmax(0, 1fr) auto;
|
|
align-items: center;
|
|
|
|
> :not(h3, .cbi-section-remove) {
|
|
grid-column: 1 / -1;
|
|
}
|
|
|
|
> h3 {
|
|
grid-column: 1;
|
|
min-width: 0;
|
|
overflow-wrap: anywhere;
|
|
}
|
|
|
|
> .cbi-section-remove {
|
|
grid-column: 2;
|
|
display: flex;
|
|
justify-content: flex-end;
|
|
min-width: 0;
|
|
margin: 0;
|
|
padding: var(--control-gap) var(--section-inset);
|
|
padding-inline-start: 0;
|
|
|
|
> .cbi-button {
|
|
min-height: 2.5rem;
|
|
}
|
|
}
|
|
|
|
// Further actions stay above the fields belonging to their own instance.
|
|
> .cbi-section-remove ~ .cbi-section-remove {
|
|
grid-column: 1 / -1;
|
|
border-block-start: 1px solid var(--border-color);
|
|
}
|
|
}
|
|
|
|
.cbi-section p {
|
|
padding: var(--field-gap) var(--section-inset);
|
|
}
|
|
|
|
// TypedSection renders its empty-state hint directly as an em element.
|
|
.cbi-section > em {
|
|
display: block;
|
|
margin: 0;
|
|
padding: var(--field-gap) var(--section-inset);
|
|
color: var(--muted-text);
|
|
font-size: .875rem;
|
|
font-style: normal;
|
|
line-height: 1.5;
|
|
text-align: start;
|
|
overflow-wrap: anywhere;
|
|
}
|