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