Browse Source

Feature UI (#17069)

* 16649 general contrast issues (#16759)

* fixes #16647: navigation contrast issues updated

* fixes #16651: table contrast issues new

* fixed #16649: general contrast issues

* fixes #16649: feedback changes

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.broadband>

* 16648 dashboard contrast issues (#16824)

* fixed #16648: dashboard contrast issues

* reinstate amendment to 16649

* fixed #16648: created gridstack override and removed inline bug fix

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>

* fixed #16853: accessibility issues

* fixed #16847: updated font (#16848)

* fixed #16847: updated font

* fixed #16847: changed font to local and added current font as fallback

* fixed #16847: removed inter and added padding to page header

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* 16849 document hierarchy issues (#16875)

* fixed #16849: h elements not in sequential order

* fixed #16849: Lists do not contain only li elements

* fixed #16849: fixed h hierarchy on rack object pages

* Remove standalone h5 classes

* Remove unnecessary line breaks

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* 16650 button contrast issues (#16845)

* fixed #16650: button contrast issues

* fixed #16650: green bg text contrast issue

* Revert errant JS resource updates

* Revert custom button colors

* Fix indentation

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* 16907 web UI refresh (#16915)

* closes #16907: web ui refresh

* closes #16907: changed default widget color to primary color

* closes #16907: removed comma

* Revert dashboard widget color changes

* Rename logo images for consistency

* Restore original dashboard widget config

* Remove .navbar-brand-autodark from logo

* Restore logo file names

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* 16394 distinguish product edition (#16924)

* closes #16907: web ui refresh

* closes #16907: changed default widget color to primary color

* closes #16907: removed comma

* closes #16394: distinguish product edition

* Revert dashboard changes

* Clean up redundant styling (merge error)

* removed labs logo and added sub text for all editions

* fixed motif bug

* Fix "flashing" of side nav under dark mode

* Use title case for edition label

* altered edition text style

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Query release features to toggle commercial theme

* fixes dark mode primary button contrast issue

* fixes #16913: hidden admin nav link (#16978)

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* fixed 16852: misc accessbility problems (#16977)

* fixed 16852: misc accessbility problems

* Restore tooltip text

* Add translation support

* Add missing i18n

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* fixes issues in #16850 (#16986)

* fixes issues in #16850: issue 3 and 5

* Add link text for 'clear' button on table column

* Translate aria label

---------

Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>

* Use alternate footer links for commercial releases

* Remove Inter font

* Adjust base font weight to 500

* Retain default text color for hyperlinks inside tables

* Logo & edition cleanup

* Move dashboard styling

* Misc cleanup

* Remove unused styles

* Misc cleanup & refactoring

---------

Co-authored-by: Andrew Gormley <andrewgormley91@gmail.com>
Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.local>
Co-authored-by: Andrew Gormley <Andrew@MacBook-Pro-3.broadband>
Jeremy Stretch 1 year ago
parent
commit
02dd1a3970
100 changed files with 602 additions and 254 deletions
  1. 2 1
      netbox/netbox/tables/columns.py
  2. 0 0
      netbox/project-static/dist/netbox-external.css
  3. 0 0
      netbox/project-static/dist/netbox.css
  4. BIN
      netbox/project-static/dist/plus-jakarta-sans-cyrillic-ext-wght-normal-3FNWYSHQ.woff2
  5. BIN
      netbox/project-static/dist/plus-jakarta-sans-latin-ext-wght-normal-WWG75Y4U.woff2
  6. BIN
      netbox/project-static/dist/plus-jakarta-sans-latin-wght-normal-S6EFCQOU.woff2
  7. BIN
      netbox/project-static/dist/plus-jakarta-sans-vietnamese-wght-normal-NNXUV3SN.woff2
  8. 20 0
      netbox/project-static/img/logo_netbox_bright_teal.svg
  9. 20 0
      netbox/project-static/img/logo_netbox_dark_teal.svg
  10. 36 0
      netbox/project-static/img/motif.svg
  11. 1 1
      netbox/project-static/package.json
  12. 15 1
      netbox/project-static/styles/_variables.scss
  13. 12 0
      netbox/project-static/styles/custom/_dashboard.scss
  14. 5 0
      netbox/project-static/styles/custom/_misc.scss
  15. 1 1
      netbox/project-static/styles/external.scss
  16. 1 0
      netbox/project-static/styles/netbox.scss
  17. 5 0
      netbox/project-static/styles/overrides/_bootstrap.scss
  18. 96 11
      netbox/project-static/styles/overrides/_tabler.scss
  19. 6 0
      netbox/project-static/styles/transitional/_cards.scss
  20. 7 0
      netbox/project-static/styles/transitional/_forms.scss
  21. 105 6
      netbox/project-static/styles/transitional/_navigation.scss
  22. 13 1
      netbox/project-static/styles/transitional/_tables.scss
  23. 5 5
      netbox/project-static/yarn.lock
  24. 2 2
      netbox/templates/500.html
  25. 8 9
      netbox/templates/account/base.html
  26. 3 1
      netbox/templates/account/password.html
  27. 2 2
      netbox/templates/account/preferences.html
  28. 3 3
      netbox/templates/account/profile.html
  29. 1 1
      netbox/templates/account/token.html
  30. 2 2
      netbox/templates/base/40x.html
  31. 1 1
      netbox/templates/base/base.html
  32. 45 19
      netbox/templates/base/layout.html
  33. 3 3
      netbox/templates/circuits/circuit.html
  34. 1 1
      netbox/templates/circuits/circuitgroup.html
  35. 1 1
      netbox/templates/circuits/circuitgroupassignment.html
  36. 1 1
      netbox/templates/circuits/circuittype.html
  37. 2 2
      netbox/templates/circuits/inc/circuit_termination.html
  38. 3 3
      netbox/templates/circuits/provider.html
  39. 2 2
      netbox/templates/circuits/provideraccount.html
  40. 2 2
      netbox/templates/circuits/providernetwork.html
  41. 2 2
      netbox/templates/core/configrevision.html
  42. 2 2
      netbox/templates/core/datafile.html
  43. 3 3
      netbox/templates/core/datasource.html
  44. 3 3
      netbox/templates/core/job.html
  45. 5 5
      netbox/templates/core/objectchange.html
  46. 3 3
      netbox/templates/core/plugin.html
  47. 1 1
      netbox/templates/core/rq_task.html
  48. 1 1
      netbox/templates/core/rq_worker.html
  49. 2 3
      netbox/templates/core/system.html
  50. 3 3
      netbox/templates/dcim/cable.html
  51. 1 1
      netbox/templates/dcim/cable_trace.html
  52. 2 2
      netbox/templates/dcim/consoleport.html
  53. 2 2
      netbox/templates/dcim/consoleserverport.html
  54. 12 12
      netbox/templates/dcim/device.html
  55. 3 3
      netbox/templates/dcim/device/render_config.html
  56. 15 15
      netbox/templates/dcim/device_edit.html
  57. 2 2
      netbox/templates/dcim/devicebay.html
  58. 1 1
      netbox/templates/dcim/devicebay_populate.html
  59. 1 1
      netbox/templates/dcim/devicerole.html
  60. 1 1
      netbox/templates/dcim/devicetype.html
  61. 2 2
      netbox/templates/dcim/frontport.html
  62. 6 6
      netbox/templates/dcim/htmx/cable_edit.html
  63. 2 2
      netbox/templates/dcim/inc/panels/inventory_items.html
  64. 1 1
      netbox/templates/dcim/inc/panels/racktype_dimensions.html
  65. 1 1
      netbox/templates/dcim/inc/panels/racktype_numbering.html
  66. 1 1
      netbox/templates/dcim/inc/rack_elevation.html
  67. 9 9
      netbox/templates/dcim/interface.html
  68. 1 1
      netbox/templates/dcim/inventoryitem.html
  69. 1 1
      netbox/templates/dcim/inventoryitemrole.html
  70. 5 5
      netbox/templates/dcim/location.html
  71. 1 1
      netbox/templates/dcim/manufacturer.html
  72. 1 1
      netbox/templates/dcim/module.html
  73. 2 2
      netbox/templates/dcim/modulebay.html
  74. 1 1
      netbox/templates/dcim/moduletype.html
  75. 1 1
      netbox/templates/dcim/moduletype/component_templates.html
  76. 1 1
      netbox/templates/dcim/platform.html
  77. 3 3
      netbox/templates/dcim/powerfeed.html
  78. 2 2
      netbox/templates/dcim/poweroutlet.html
  79. 2 2
      netbox/templates/dcim/powerpanel.html
  80. 2 2
      netbox/templates/dcim/powerport.html
  81. 4 4
      netbox/templates/dcim/rack.html
  82. 1 1
      netbox/templates/dcim/rack_elevation_list.html
  83. 4 4
      netbox/templates/dcim/rackreservation.html
  84. 1 1
      netbox/templates/dcim/rackrole.html
  85. 2 2
      netbox/templates/dcim/racktype.html
  86. 2 2
      netbox/templates/dcim/rearport.html
  87. 3 3
      netbox/templates/dcim/region.html
  88. 5 5
      netbox/templates/dcim/site.html
  89. 3 3
      netbox/templates/dcim/sitegroup.html
  90. 3 3
      netbox/templates/dcim/virtualchassis.html
  91. 3 3
      netbox/templates/dcim/virtualchassis_add.html
  92. 1 1
      netbox/templates/dcim/virtualchassis_add_member.html
  93. 3 3
      netbox/templates/dcim/virtualchassis_edit.html
  94. 2 2
      netbox/templates/dcim/virtualdevicecontext.html
  95. 2 2
      netbox/templates/extras/configcontext.html
  96. 3 3
      netbox/templates/extras/configtemplate.html
  97. 6 6
      netbox/templates/extras/customfield.html
  98. 2 2
      netbox/templates/extras/customfieldchoiceset.html
  99. 4 8
      netbox/templates/extras/customlink.html
  100. 6 3
      netbox/templates/extras/dashboard/widget.html

+ 2 - 1
netbox/netbox/tables/columns.py

@@ -173,6 +173,7 @@ class ToggleColumn(tables.CheckBoxColumn):
             kwargs['attrs'] = {
                 'th': {
                     'class': 'w-1',
+                    'aria-label': _('Select all'),
                 },
                 'td': {
                     'class': 'w-1',
@@ -284,7 +285,7 @@ class ActionsColumn(tables.Column):
                 if len(self.actions) == 1 or (self.split_actions and idx == 0):
                     dropdown_class = attrs.css_class
                     button = (
-                        f'<a class="btn btn-sm btn-{attrs.css_class}" href="{url}{url_appendix}" type="button">'
+                        f'<a class="btn btn-sm btn-{attrs.css_class}" href="{url}{url_appendix}" type="button" aria-label="{attrs.title}">'
                         f'<i class="mdi mdi-{attrs.icon}"></i></a>'
                     )
 

File diff suppressed because it is too large
+ 0 - 0
netbox/project-static/dist/netbox-external.css


File diff suppressed because it is too large
+ 0 - 0
netbox/project-static/dist/netbox.css


BIN
netbox/project-static/dist/plus-jakarta-sans-cyrillic-ext-wght-normal-3FNWYSHQ.woff2


BIN
netbox/project-static/dist/plus-jakarta-sans-latin-ext-wght-normal-WWG75Y4U.woff2


BIN
netbox/project-static/dist/plus-jakarta-sans-latin-wght-normal-S6EFCQOU.woff2


BIN
netbox/project-static/dist/plus-jakarta-sans-vietnamese-wght-normal-NNXUV3SN.woff2


File diff suppressed because it is too large
+ 20 - 0
netbox/project-static/img/logo_netbox_bright_teal.svg


File diff suppressed because it is too large
+ 20 - 0
netbox/project-static/img/logo_netbox_dark_teal.svg


+ 36 - 0
netbox/project-static/img/motif.svg

@@ -0,0 +1,36 @@
+<svg width="288" height="359" viewBox="0 0 288 359" fill="none" xmlns="http://www.w3.org/2000/svg">
+<g clip-path="url(#clip0_216_33510)">
+<g clip-path="url(#clip1_216_33510)">
+<path d="M-53.9824 216.116L75.6871 144.077L205.357 216.116L75.6871 288.154L-53.9824 216.116Z" fill="#80FFE0"/>
+<path d="M-53.9824 72.0386L75.6871 0V144.077L-53.9824 216.116V72.0386Z" fill="#B8FFEE"/>
+<path d="M205.356 216.116L335.026 288.154V432.232L205.356 360.193V216.116Z" fill="#00FFDC"/>
+<path d="M-53.9824 216.116L75.6871 288.154V432.232L-53.9824 360.193V216.116Z" fill="#00FFDC"/>
+<path d="M335.026 144.077L205.357 72.0386" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M207.109 68.8813C205.368 67.9147 203.165 68.5391 202.199 70.286C201.232 72.0269 201.856 74.2301 203.603 75.1966C205.344 76.1632 207.548 75.5388 208.514 73.7919C209.481 72.045 208.856 69.8478 207.109 68.8813Z" fill="#00F2D4"/>
+<path d="M-53.9819 216.116L75.6876 144.077" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M77.4396 147.234C79.1805 146.268 79.8109 144.065 78.8443 142.324C77.8778 140.583 75.6746 139.953 73.9337 140.919C72.1927 141.886 71.5624 144.089 72.5289 145.83C73.4955 147.571 75.6987 148.201 77.4396 147.234Z" fill="#00F2D4"/>
+<path d="M75.6866 432.231L-53.9829 360.193" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M75.6865 432.231L205.356 360.193" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M207.109 363.35C208.85 362.384 209.48 360.18 208.514 358.44C207.547 356.699 205.344 356.068 203.603 357.035C201.862 358.001 201.232 360.204 202.198 361.945C203.165 363.686 205.368 364.317 207.109 363.35Z" fill="#00F2D4"/>
+<path d="M205.356 216.116L75.6865 144.077" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M207.109 212.958C208.85 213.924 209.48 216.127 208.514 217.868C207.547 219.609 205.344 220.24 203.603 219.273C201.862 218.307 201.232 216.103 202.198 214.362C203.165 212.621 205.368 211.991 207.109 212.958Z" fill="#00F2D4"/>
+<path d="M77.4399 140.919C75.6989 139.953 73.4957 140.577 72.5292 142.324C71.5627 144.065 72.187 146.268 73.9339 147.235C75.6749 148.201 77.8781 147.577 78.8446 145.83C79.8111 144.083 79.1868 141.886 77.4399 140.919Z" fill="#00F2D4"/>
+<path d="M205.356 216.116L335.026 144.077" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M205.356 360.193V216.116" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M205.356 363.807C207.352 363.807 208.97 362.189 208.97 360.193C208.97 358.197 207.352 356.579 205.356 356.579C203.36 356.579 201.742 358.197 201.742 360.193C201.742 362.189 203.36 363.807 205.356 363.807Z" fill="#00F2D4"/>
+<path d="M75.6866 288.154L-53.9829 216.116" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M77.4391 284.997C79.1801 285.963 79.8104 288.166 78.8439 289.907C77.8773 291.648 75.6741 292.279 73.9332 291.312C72.1923 290.346 71.5619 288.142 72.5285 286.401C73.495 284.661 75.6982 284.03 77.4391 284.997Z" fill="#00F2D4"/>
+<path d="M75.6865 288.154L205.356 216.116" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+<path d="M207.109 219.273C208.85 218.307 209.48 216.103 208.514 214.362C207.547 212.621 205.344 211.991 203.603 212.958C201.862 213.924 201.232 216.127 202.198 217.868C203.165 219.609 205.368 220.24 207.109 219.273Z" fill="#00F2D4"/>
+<path d="M75.6865 432.232V288.154" stroke="#00F2D4" stroke-width="4" stroke-miterlimit="10"/>
+</g>
+</g>
+<defs>
+<clipPath id="clip0_216_33510">
+<rect width="288" height="359" fill="white"/>
+</clipPath>
+<clipPath id="clip1_216_33510">
+<rect width="1300.31" height="724" fill="white" transform="translate(-832)"/>
+</clipPath>
+</defs>
+</svg>

+ 1 - 1
netbox/project-static/package.json

@@ -22,6 +22,7 @@
     "validate:formatting:scripts": "prettier -c src/**/*.ts"
   },
   "dependencies": {
+    "@fontsource-variable/plus-jakarta-sans": "^5.0.21",
     "@mdi/font": "7.4.47",
     "@tabler/core": "1.0.0-beta20",
     "bootstrap": "5.3.3",
@@ -32,7 +33,6 @@
     "query-string": "9.1.0",
     "sass": "1.77.8",
     "tom-select": "2.3.1",
-    "typeface-inter": "3.18.1",
     "typeface-roboto-mono": "1.1.13"
   },
   "devDependencies": {

+ 15 - 1
netbox/project-static/styles/_variables.scss

@@ -1,9 +1,10 @@
 // Global variables
 
 // Set base fonts
-$font-family-sans-serif: 'Inter';
+$font-family-sans-serif: 'Plus Jakarta Sans Variable', system-ui, sans-serif;
 // See https://github.com/tabler/tabler/issues/1812
 $font-family-monospace: 'Roboto Mono';
+$font-weight-base: 500;
 
 // Set the navigation sidebar width
 $sidebar-width: 18rem;
@@ -21,3 +22,16 @@ $hover-bg: rgba(var(--tblr-secondary-rgb), 0.08);
 
 // Ensure active nav-pill has a background color in dark mode
 $nav-pills-link-active-bg: rgba(var(--tblr-secondary-rgb), 0.15);
+
+// Brand colors
+$rich-black: #001423;
+$rich-black-light: #081B2A;
+$rich-black-lighter: #0D202E;
+$rich-black-lightest: #1A2C39;
+$bright-teal: #00F2D4;
+$dark-teal: #00857D;
+
+$primary: $dark-teal;
+
+// Navbar active dropdown border color
+$navbar-active-border-color: $dark-teal;

+ 12 - 0
netbox/project-static/styles/custom/_dashboard.scss

@@ -0,0 +1,12 @@
+// Alter default color for dashboard widget headings
+.grid-stack {
+  .card-header {
+    // Default color of card header changes depending on theme
+    &.bg-default {
+      background: var(--tblr-bg-surface-secondary) !important;
+    }
+    a {
+      color: inherit !important;
+    }
+  }
+}

+ 5 - 0
netbox/project-static/styles/custom/_misc.scss

@@ -28,3 +28,8 @@ span.color-label {
   visibility: hidden;
   opacity: 0;
 }
+
+// NetBox edition text
+.netbox-edition {
+  letter-spacing: .15rem;
+}

+ 1 - 1
netbox/project-static/styles/external.scss

@@ -4,5 +4,5 @@
 @import 'gridstack/dist/gridstack.min.css';
 
 // Fonts
-@import url("../node_modules/typeface-inter/inter.css");
 @import url("../node_modules/typeface-roboto-mono/index.css");
+@import url("../node_modules/@fontsource-variable/plus-jakarta-sans/index.css");

+ 1 - 0
netbox/project-static/styles/netbox.scss

@@ -21,6 +21,7 @@
 
 // Custom styling
 @import 'custom/code';
+@import 'custom/dashboard';
 @import 'custom/interfaces';
 @import 'custom/markdown';
 @import 'custom/misc';

+ 5 - 0
netbox/project-static/styles/overrides/_bootstrap.scss

@@ -20,3 +20,8 @@ hr.dropdown-divider {
   margin-bottom: 0.25rem;
   margin-top: 0.25rem;
 }
+
+// Bootstrap forces the font weight for dropdown items to $font-weight-normal
+.dropdown-item {
+  font-weight: $font-weight-base;
+}

+ 96 - 11
netbox/project-static/styles/overrides/_tabler.scss

@@ -11,16 +11,38 @@ pre {
   color: inherit;
 }
 
-// Buttons
+// Slightly increase alert contrast between bg and text
+.alert {
+  background: var(--#{$prefix}bg-surface);
+}
+
+// Button adjustments
 .btn {
   // Tabler sets display: flex
   display: inline-block;
+
+  &:focus {
+    // Add button focus state
+    border: 1px solid var(--tblr-primary-fg);
+    outline: 2px solid var(--tblr-primary) !important;
+  }
 }
 .btn-sm {
   // $border-radius-sm (2px) is too small
   border-radius: $border-radius;
 }
 
+// Dropdown items
+.dropdown-item {
+  // Tabler sets display: flex
+  display: inline-block;
+}
+
+// Set footer icon color
+.footer .text-primary {
+  color: $rich-black !important;
+}
+
 // Tabs
 .nav-tabs {
   .nav-link {
@@ -29,18 +51,81 @@ pre {
   }
 }
 
-// Dropdown items
-.dropdown-item {
-  // Tabler sets display: flex
-  display: inline-block;;
+// Altering background colors
+.page, .page-tabs .nav-tabs .nav-link.active {
+  background-color: var(--#{$prefix}bg-surface-tertiary) !important;
+}
+.page-body .card .card-header {
+  background: var(--tblr-bg-surface-secondary) !important;
 }
 
-table a {
-  // Adjust table anchor link contrast as not enough contrast in dark mode
-  filter: brightness(110%);
+// Dark mode colors
+@if $enable-dark-mode {
+  @include color-mode(dark, true) {
+    --#{$prefix}alert-color: darken(var(--#{$prefix}warning),10%);
+    --#{$prefix}link-color: #{$bright-teal};
+    --#{$prefix}link-color-rgb: 0,242,212;
+    --#{$prefix}link-hover-color-rgb: 0,242,212;
+    --#{$prefix}secondary: #{$gray-400};
+    --#{$prefix}primary: #{$bright-teal};
+    --#{$prefix}primary-fg: #{$rich-black};
+    --#{$prefix}primary-rgb: 0,242,212;
+    --#{$prefix}btn-active-color: #{$rich-black};
+  }
 }
 
-// Override background color alpha value
-[data-bs-theme=dark] ::selection {
-  background-color: rgba(var(--tblr-primary-rgb),.48)
+// Dark mode overrides
+body[data-bs-theme=dark] {
+  // Override background color alpha value
+  ::selection {
+    background-color: rgba(var(--tblr-primary-rgb),.48);
+  }
+
+  .btn-primary {
+    color: $rich-black !important;
+  }
+
+  // Change content color when primary teal changes with theme
+  .bg-primary {
+    .card-title,a,i {
+      color: $rich-black !important;
+    }
+  }
+  .text-bg-primary {
+    color: $rich-black !important;
+  }
+
+  // Altering background colors
+  .card {
+    background: $rich-black !important;
+  }
+
+  // Background colors to match brand colors
+  background-color: $rich-black;
+  .navbar, .page-header {
+    background-color: $rich-black;
+  }
+  .page, .page-tabs .nav-tabs .nav-link.active {
+    background-color: $rich-black-light !important;
+  }
+
+  .page-link.active, .active>.page-link {
+    color: $rich-black;
+  }
+
+  // Adjusting text colors
+  .text- {
+    &bg-primary {
+      color: $rich-black !important;
+    }
+    &muted {
+      color: var(--#{$prefix}secondary-color) !important;
+    }
+    &secondary {
+      color: $gray-400 !important;
+    }
+  }
+  .footer .text-primary {
+    color: white !important;
+  }
 }

+ 6 - 0
netbox/project-static/styles/transitional/_cards.scss

@@ -16,6 +16,12 @@
       background: var(--#{$prefix}bg-surface-tertiary);
     }
 
+    // Use <h5> font size for card headers
+    h2.card-header {
+      @extend h5;
+      margin-bottom: 0;
+    }
+
     // Reduce padding
     .list-group-item {
       padding: 0.5rem 0.75rem;

+ 7 - 0
netbox/project-static/styles/transitional/_forms.scss

@@ -4,6 +4,13 @@ form.object-edit {
   max-width: 800px;
 }
 
+// Use <h3> style for field group headings
+.field-group {
+  h2 {
+    @extend h3;
+  }
+}
+
 // Set bond font & append an asterisk to labels for required fields
 .col-form-label.required {
   font-weight: bold;

+ 105 - 6
netbox/project-static/styles/transitional/_navigation.scss

@@ -1,18 +1,34 @@
-// Navbar styling
+// Navbar and light theme styling
 .navbar-vertical.navbar-expand-lg {
+
+  // Adds spacing to the bottom of the side navigation to avoid hidden nav items
+  @include media-breakpoint-up(lg) {
+    padding-bottom: 2rem;
+  }
+
+  // Adjust hover color & style for menu items
   .navbar-collapse {
+    .nav-link-icon {
+      color: var(--tblr-nav-link-color) !important;
+    }
+    .text-secondary {
+      color: $dark-teal !important;
+    }
+
     .dropdown-menu {
+
+      // Adjust hover color & style for menu items
       .dropdown-item {
         a {
-          color: inherit;
+          color: $rich-black;
         }
         .btn-group {
           visibility: hidden;
         }
 
-        // Adjust hover color & style for menu items
+        // Style menu item hover state
         &:hover {
-          background-color: $gray-700;
+          background-color: var(--tblr-navbar-active-bg);
           a {
             text-decoration: none;
           }
@@ -23,9 +39,9 @@
 
         // Style active menu item
         &.active {
-          background-color: $gray-700;
+          background-color: var(--tblr-navbar-active-bg);
           a {
-            color: white;
+            color: $rich-black;
           }
           .btn-group {
             visibility: visible;
@@ -35,4 +51,87 @@
       }
     }
   }
+
+  // Ensures theme toggle appears above background image
+  .navbar-nav {
+    z-index: 1;
+  }
+
+  // Logo text for non-community editions
+  .navbar-brand {
+
+    // Reduce logo padding on mobile view
+    @include media-breakpoint-down(lg) {
+      padding: 0.2rem 0;
+    }
+
+    a:hover {
+      text-decoration: none;
+    }
+  }
+
+  // Navigation geometric graphic for non-community editions
+  img.motif {
+    bottom: 0;
+    display: none;
+    left:0;
+    mask-image: linear-gradient(180deg, rgba(0, 0, 0, 0.00) 0%, rgba(0, 0, 0, 0.30) 100%);
+    opacity: .5;
+    position: fixed;
+    user-drag: none;
+    user-select: none;
+    -moz-user-select: none;
+    -webkit-user-drag: none;
+    -webkit-user-select: none;
+    -ms-user-select: none;
+    width:18rem;
+
+    @include media-breakpoint-up(lg) {
+      display: block;
+    }
+  }
+}
+
+// Light theme styling
+body[data-bs-theme=light] .navbar-vertical.navbar-expand-lg {
+  // Background Gradient
+  background: linear-gradient(180deg, rgba(0, 133, 125, 0.00) 0%, rgba(0, 133, 125, 0.10) 100%), #FFF;
+}
+
+// Dark theme styling
+body[data-bs-theme=dark] .navbar-vertical.navbar-expand-lg {
+
+  // Background Gradient
+  background: linear-gradient(180deg, rgba(0, 242, 212, 0.00) 0%, rgba(0, 242, 212, 0.10) 100%), #001423;
+
+  // Border color for active dropdown list
+  .nav-item.dropdown.active:after {
+    border-color: $bright-teal !important;
+  }
+
+  // Adjust hover color & style for menu items
+  .dropdown-item {
+    a {
+      color: white !important;
+    }
+    &.active {
+      background-color: $navbar-dark-active-bg !important;
+      a {
+        color: white !important;
+      }
+    }
+    &:hover {
+      background-color: $navbar-dark-active-bg !important;
+    }
+    .nav-link-title {
+      color: white !important;
+    }
+  }
+  .text-secondary {
+    color: $bright-teal !important;
+  }
+
+  img.motif {
+    opacity: .25;
+  }
 }

+ 13 - 1
netbox/project-static/styles/transitional/_tables.scss

@@ -23,7 +23,7 @@ table.attr-table {
 
   // Restyle row header
   th {
-    font-weight: normal;
+    font-weight: $font-weight-base;
     width: min-content;
   }
 
@@ -48,3 +48,15 @@ table.attr-table {
 td pre {
   margin-bottom: 0;
 }
+
+// Use base text color for table header links
+table th.orderable a {
+  color: var(--#{$prefix}body-color);
+}
+
+body[data-bs-theme=dark] {
+  // Adjust table header background color
+  .table thead th, .markdown>table thead th {
+    background: $rich-black !important;
+  }
+}

+ 5 - 5
netbox/project-static/yarn.lock

@@ -80,6 +80,11 @@
   resolved "https://registry.yarnpkg.com/@floating-ui/utils/-/utils-0.2.2.tgz#d8bae93ac8b815b2bd7a98078cf91e2724ef11e5"
   integrity sha512-J4yDIIthosAsRZ5CPYP/jQvUAQtlZTTD/4suA08/FEnlxqW3sKS9iAhgsa9VYLZ6vDHn/ixJgIqRQPotoBjxIw==
 
+"@fontsource-variable/plus-jakarta-sans@^5.0.21":
+  version "5.0.21"
+  resolved "https://registry.yarnpkg.com/@fontsource-variable/plus-jakarta-sans/-/plus-jakarta-sans-5.0.21.tgz#3bb6e0d16add99f0b93981443d4d763ea85ad13b"
+  integrity sha512-VTQB+MnaYbjLNmfxQJ/Fc2rayLGlqTiZa6nZTpplS0lJF3XKcWPPItilGFMZW4lfwIiroo+FIfBewBOF3MrMPQ==
+
 "@graphiql/plugin-explorer@2.0.0":
   version "2.0.0"
   resolved "https://registry.yarnpkg.com/@graphiql/plugin-explorer/-/plugin-explorer-2.0.0.tgz#d6869cba019ae6fac006ce61ae3470d8c8a83938"
@@ -2781,11 +2786,6 @@ typed-array-length@^1.0.6:
     is-typed-array "^1.1.13"
     possible-typed-array-names "^1.0.0"
 
-typeface-inter@3.18.1:
-  version "3.18.1"
-  resolved "https://registry.yarnpkg.com/typeface-inter/-/typeface-inter-3.18.1.tgz#24cccdf29923f318589783997be20a662cd3ab9c"
-  integrity sha512-c+TBanYFCvmg3j5vPk+zxK4ocMZbPxMEmjnwG7rPQoV87xvQ6b07VbAOC0Va0XBbbZCGw6cWNeFuLeg1YQru3Q==
-
 typeface-roboto-mono@1.1.13:
   version "1.1.13"
   resolved "https://registry.yarnpkg.com/typeface-roboto-mono/-/typeface-roboto-mono-1.1.13.tgz#2af8662db8f9119c00efd55d6ed8877d2a69ec94"

+ 2 - 2
netbox/templates/500.html

@@ -14,9 +14,9 @@
         <div class="row">
             <div class="col col-md-6 offset-md-3">
                 <div class="card border-danger mt-5">
-                    <h5 class="card-header">
+                    <h2 class="card-header">
                         <i class="mdi mdi-alert"></i> {% trans "Server Error" %}
-                    </h5>
+                    </h2>
                     <div class="card-body">
                         {% block message %}
                             <p>

+ 8 - 9
netbox/templates/account/base.html

@@ -2,30 +2,29 @@
 {% load i18n %}
 
 {% block tabs %}
-  <ul class="nav nav-tabs">
-    <li role="presentation" class="nav-item">
+  <ul class="nav nav-tabs" role="presentation">
+    <li class="nav-item">
       <a class="nav-link{% if active_tab == 'profile' %} active{% endif %}" href="{% url 'account:profile' %}">{% trans "Profile" %}</a>
     </li>
-    <li role="presentation" class="nav-item">
+    <li class="nav-item">
       <a class="nav-link{% if active_tab == 'bookmarks' %} active{% endif %}" href="{% url 'account:bookmarks' %}">{% trans "Bookmarks" %}</a>
     </li>
-    <li role="presentation" class="nav-item">
+    <li class="nav-item">
       <a class="nav-link{% if active_tab == 'notifications' %} active{% endif %}" href="{% url 'account:notifications' %}">{% trans "Notifications" %}</a>
     </li>
-    <li role="presentation" class="nav-item">
+    <li class="nav-item">
       <a class="nav-link{% if active_tab == 'subscriptions' %} active{% endif %}" href="{% url 'account:subscriptions' %}">{% trans "Subscriptions" %}</a>
     </li>
-    <li role="presentation" class="nav-item">
+    <li class="nav-item">
       <a class="nav-link{% if active_tab == 'preferences' %} active{% endif %}" href="{% url 'account:preferences' %}">{% trans "Preferences" %}</a>
     </li>
     {% if not request.user.ldap_username %}
-      <li role="presentation" class="nav-item">
+      <li class="nav-item">
         <a class="nav-link{% if active_tab == 'password' %} active{% endif %}" href="{% url 'account:change_password' %}">{% trans "Password" %}</a>
       </li>
     {% endif %}
-    <li role="presentation" class="nav-item">
+    <li class="nav-item">
       <a class="nav-link{% if active_tab == 'api-tokens' %} active{% endif %}" href="{% url 'account:usertoken_list' %}">{% trans "API Tokens" %}</a>
     </li>
   </ul>
 {% endblock %}
-

+ 3 - 1
netbox/templates/account/password.html

@@ -8,7 +8,9 @@
   <form action="." method="post" class="object-edit">
     {% csrf_token %}
     <div class="field-group mb-5">
-      <h5 class="col-9 offset-3">{% trans "Password" %}</h5>
+      <div class="row">
+        <h2 class="col-9 offset-3">{% trans "Password" %}</h2>
+      </div>
       {% render_field form.old_password %}
       {% render_field form.new_password1 %}
       {% render_field form.new_password2 %}

+ 2 - 2
netbox/templates/account/preferences.html

@@ -19,7 +19,7 @@
       {% if plugin_fields %}
         <div class="field-group my-5">
           <div class="row">
-            <h5 class="col-9 offset-3">{% trans "Plugins" %}</h5>
+            <h2 class="col-9 offset-3">{% trans "Plugins" %}</h2>
           </div>
           {% for name in plugin_fields %}
             {% render_field form|getfield:name %}
@@ -31,7 +31,7 @@
     {# Table configurations #}
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Table Configurations" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Table Configurations" %}</h2>
       </div>
       <div class="row">
         {% if request.user.config.data.tables %}

+ 3 - 3
netbox/templates/account/profile.html

@@ -9,7 +9,7 @@
   <div class="row mb-3">
     <div class="col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Account Details" %}</h5>
+        <h2 class="card-header">{% trans "Account Details" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Username" %}</th>
@@ -50,7 +50,7 @@
     </div>
     <div class="col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Assigned Groups" %}</h5>
+        <h2 class="card-header">{% trans "Assigned Groups" %}</h2>
         <ul class="list-group list-group-flush">
           {% for group in request.user.groups.all %}
             <li class="list-group-item">{{ group }}</li>
@@ -65,7 +65,7 @@
     <div class="row">
       <div class="col-md-12">
         <div class="card">
-          <h5 class="card-header text-center">{% trans "Recent Activity" %}</h5>
+          <h2 class="card-header text-center">{% trans "Recent Activity" %}</h2>
           <div class="table-responsive">
             {% render_table changelog_table 'inc/table.html' %}
           </div>

+ 1 - 1
netbox/templates/account/token.html

@@ -16,7 +16,7 @@
   <div class="row">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Token" %}</h5>
+        <h2 class="card-header">{% trans "Token" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Key" %}</th>

+ 2 - 2
netbox/templates/base/40x.html

@@ -7,9 +7,9 @@
 <div class="row my-5">
     <div class="col-6 offset-3">
         <div class="card">
-            <h5 class="card-header text-danger">
+            <h2 class="card-header text-danger">
                 {{ request_path }}
-            </h5>
+            </h2>
             <div class="card-body">
                 {% block message %}{% endblock %}
             </div>

+ 1 - 1
netbox/templates/base/base.html

@@ -15,7 +15,7 @@
   >
   <head>
     <meta charset="UTF-8" />
-    <meta name="viewport" content="initial-scale=1, maximum-scale=1, user-scalable=no, width=device-width, viewport-fit=cover" />
+    <meta name="viewport" content="initial-scale=1, maximum-scale=5, width=device-width, viewport-fit=cover" />
     <meta name="htmx-config" content='{"scrollBehavior": "auto"}'>
 
     {# Page title #}

+ 45 - 19
netbox/templates/base/layout.html

@@ -19,7 +19,12 @@ Blocks:
   <div class="page">
 
     {# Sidebar #}
-    <aside class="navbar navbar-vertical navbar-expand-lg" data-bs-theme="dark">
+    <aside class="navbar navbar-vertical navbar-expand-lg">
+
+      {% if 'commercial' in settings.RELEASE.features %}
+        <img class="motif" src="{% static 'motif.svg' %}" alt="{% trans "NetBox Motif" %}">
+      {% endif %}
+
       <div class="container-fluid">
 
         {# Menu toggle (mobile view) #}
@@ -28,9 +33,11 @@ Blocks:
         </button>
 
         {# Logo #}
-        <h1 class="navbar-brand navbar-brand-autodark">
+        <h1 class="navbar-brand pb-0">
           <a href="{% url 'home' %}">
-            <img src="{% static 'netbox_logo.svg' %}" alt="{% trans "NetBox Logo" %}" class="navbar-brand-image">
+            <img src="{% static 'logo_netbox_dark_teal.svg' %}" alt="{% trans "NetBox Logo" %}" class="navbar-brand-image hide-theme-dark">
+            <img src="{% static 'logo_netbox_bright_teal.svg' %}" alt="{% trans "NetBox Logo" %}" class="navbar-brand-image hide-theme-light">
+            <div class="netbox-edition fw-semibold text-center fs-5 my-1">{{ settings.RELEASE.edition }}</div>
           </a>
         </h1>
 
@@ -140,42 +147,61 @@ Blocks:
               {% block footer_links %}
                 {# Documentation #}
                 <li class="list-inline-item">
-                  <a href="{% static 'docs/' %}" target="_blank" class="link-secondary" rel="noopener">
+                  <a href="{% static 'docs/' %}" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "Docs" %}">
                     <i title="{% trans "Docs" %}" class="mdi mdi-book-open-variant text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
                   </a>
                 </li>
                 {# REST API #}
                 <li class="list-inline-item">
-                  <a href="{% url 'api-root' %}" target="_blank" class="link-secondary" rel="noopener">
+                  <a href="{% url 'api-root' %}" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "REST API" %}">
                     <i title="{% trans "REST API" %}" class="mdi mdi-cloud-braces text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
                   </a>
                 </li>
                 {# API docs #}
                 <li class="list-inline-item">
-                  <a href="{% url 'api_docs' %}" target="_blank" class="link-secondary" rel="noopener">
+                  <a href="{% url 'api_docs' %}" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "REST API documentation" %}">
                     <i title="{% trans "REST API documentation" %}" class="mdi mdi-book text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
                   </a>
                 </li>
                 {# GraphQL API #}
                 {% if config.GRAPHQL_ENABLED %}
                   <li class="list-inline-item">
-                    <a href="{% url 'graphql' %}" target="_blank" class="link-secondary" rel="noopener">
+                    <a href="{% url 'graphql' %}" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "GraphQL API" %}">
                       <i title="{% trans "GraphQL API" %}" class="mdi mdi-graphql text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
                     </a>
                   </li>
                 {% endif %}
-                {# GitHub #}
-                <li class="list-inline-item">
-                  <a href="https://github.com/netbox-community/netbox" target="_blank" class="link-secondary" rel="noopener">
-                    <i title="{% trans "Source Code" %}" class="mdi mdi-github text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
-                  </a>
-                </li>
-                {# NetDev Slack #}
-                <li class="list-inline-item">
-                  <a href="https://netdev.chat" target="_blank" class="link-secondary" rel="noopener">
-                    <i title="{% trans "Community" %}" class="mdi mdi-slack text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
-                  </a>
-                </li>
+
+                {# Commercial links #}
+                {% if settings.RELEASE.features.commercial %}
+                  {# LinkedIn #}
+                  <li class="list-inline-item">
+                    <a href="https://www.linkedin.com/company/netboxlabs/" target="_blank" class="link-secondary" rel="noopener" aria-label="LinkedIn">
+                      <i title="LinkedIn" class="mdi mdi-linkedin text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
+                    </a>
+                  </li>
+                  {# Support #}
+                  <li class="list-inline-item">
+                    <a href="mailto:support@netboxlabs.com" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "NetBox Labs Support" %}">
+                      <i title="{% trans "NetBox Labs Support" %}" class="mdi mdi-lifebuoy text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
+                    </a>
+                  </li>
+
+                {# Community links #}
+                {% else %}
+                  {# GitHub #}
+                  <li class="list-inline-item">
+                    <a href="https://github.com/netbox-community/netbox" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "Source Code" %}">
+                      <i title="{% trans "Source Code" %}" class="mdi mdi-github text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
+                    </a>
+                  </li>
+                  {# NetDev Slack #}
+                  <li class="list-inline-item">
+                    <a href="https://netdev.chat" target="_blank" class="link-secondary" rel="noopener" aria-label="{% trans "Community" %}">
+                      <i title="{% trans "Community" %}" class="mdi mdi-slack text-primary" data-bs-placement="top" data-bs-toggle="tooltip"></i>
+                    </a>
+                  </li>
+                {% endif %}
               {% endblock footer_links %}
             </ul>
             {# /Footer links #}

+ 3 - 3
netbox/templates/circuits/circuit.html

@@ -12,7 +12,7 @@
   <div class="row">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Circuit" %}</h5>
+        <h2 class="card-header">{% trans "Circuit" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Provider" %}</th>
@@ -62,7 +62,7 @@
         </table>
       </div>
       <div class="card">
-        <h5 class="card-header">
+        <h2 class="card-header">
           {% trans "Group Assignments" %}
           {% if perms.circuits.add_circuitgroupassignment %}
             <div class="card-actions">
@@ -71,7 +71,7 @@
               </a>
             </div>
           {% endif %}
-        </h5>
+        </h2>
         {% htmx_table 'circuits:circuitgroupassignment_list' circuit_id=object.pk %}
       </div>
       {% include 'inc/panels/custom_fields.html' %}

+ 1 - 1
netbox/templates/circuits/circuitgroup.html

@@ -22,7 +22,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Circuit Group" %}</h5>
+        <h2 class="card-header">{% trans "Circuit Group" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Name" %}</th>

+ 1 - 1
netbox/templates/circuits/circuitgroupassignment.html

@@ -16,7 +16,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Circuit Group Assignment" %}</h5>
+        <h2 class="card-header">{% trans "Circuit Group Assignment" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Group" %}</th>

+ 1 - 1
netbox/templates/circuits/circuittype.html

@@ -16,7 +16,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Circuit Type" %}</h5>
+      <h2 class="card-header">{% trans "Circuit Type" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>

+ 2 - 2
netbox/templates/circuits/inc/circuit_termination.html

@@ -2,7 +2,7 @@
 {% load i18n %}
 
 <div class="card">
-    <h5 class="card-header d-flex justify-content-between">
+    <h2 class="card-header d-flex justify-content-between">
       {% blocktrans %}Termination{% endblocktrans %} {{ side }}
       <div>
         {% if not termination and perms.circuits.add_circuittermination %}
@@ -24,7 +24,7 @@
             </a>
         {% endif %}
       </div>
-    </h5>
+    </h2>
       {% if termination %}
         <table class="table table-hover attr-table">
           {% include 'circuits/inc/circuit_termination_fields.html' with termination=termination %}

+ 3 - 3
netbox/templates/circuits/provider.html

@@ -17,7 +17,7 @@
 <div class="row mb-3">
 	  <div class="col col-md-6">
         <div class="card">
-          <h5 class="card-header">{% trans "Provider" %}</h5>
+          <h2 class="card-header">{% trans "Provider" %}</h2>
           <table class="table table-hover attr-table">
             <tr>
               <th scope="row">{% trans "ASNs" %}</th>
@@ -48,13 +48,13 @@
 <div class="row mb-3">
   <div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">{% trans "Provider Accounts" %}</h5>
+      <h2 class="card-header">{% trans "Provider Accounts" %}</h2>
       {% htmx_table 'circuits:provideraccount_list' provider_id=object.pk %}
     </div>
   </div>
   <div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">{% trans "Circuits" %}</h5>
+      <h2 class="card-header">{% trans "Circuits" %}</h2>
       {% htmx_table 'circuits:circuit_list' provider_id=object.pk %}
     </div>
     {% plugin_full_width_page object %}

+ 2 - 2
netbox/templates/circuits/provideraccount.html

@@ -14,7 +14,7 @@
   <div class="row mb-3">
 	  <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Provider Account" %}</h5>
+        <h2 class="card-header">{% trans "Provider Account" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Provider" %}</th>
@@ -41,7 +41,7 @@
     </div>
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Circuits" %}</h5>
+        <h2 class="card-header">{% trans "Circuits" %}</h2>
         {% htmx_table 'circuits:circuit_list' provider_account_id=object.pk %}
       </div>
     {% plugin_full_width_page object %}

+ 2 - 2
netbox/templates/circuits/providernetwork.html

@@ -14,7 +14,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Provider Network" %}</h5>
+        <h2 class="card-header">{% trans "Provider Network" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Provider" %}</th>
@@ -47,7 +47,7 @@
   <div class="row mb-3">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Circuits" %}</h5>
+        <h2 class="card-header">{% trans "Circuits" %}</h2>
         {% htmx_table 'circuits:circuit_list' provider_network_id=object.pk %}
       </div>
       {% plugin_full_width_page object %}

+ 2 - 2
netbox/templates/core/configrevision.html

@@ -32,12 +32,12 @@
   <div class="row">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Configuration Data" %}</h5>
+        <h2 class="card-header">{% trans "Configuration Data" %}</h2>
         {% include 'core/inc/config_data.html' with config=object.data %}
       </div>
 
       <div class="card">
-        <h5 class="card-header">{% trans "Comment" %}</h5>
+        <h2 class="card-header">{% trans "Comment" %}</h2>
         <div class="card-body">
           {{ object.comment|placeholder }}
         </div>

+ 2 - 2
netbox/templates/core/datafile.html

@@ -21,7 +21,7 @@
   <div class="row mb-3">
     <div class="col">
       <div class="card">
-        <h5 class="card-header">{% trans "Data File" %}</h5>
+        <h2 class="card-header">{% trans "Data File" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Source" %}</th>
@@ -52,7 +52,7 @@
         </table>
       </div>
       <div class="card">
-        <h5 class="card-header">{% trans "Content" %}</h5>
+        <h2 class="card-header">{% trans "Content" %}</h2>
         <div class="card-body">
           <pre>{{ object.data_as_string }}</pre>
         </div>

+ 3 - 3
netbox/templates/core/datasource.html

@@ -28,7 +28,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Data Source" %}</h5>
+        <h2 class="card-header">{% trans "Data Source" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Name" %}</th>
@@ -81,7 +81,7 @@
     </div>
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Backend" %}</h5>
+        <h2 class="card-header">{% trans "Backend" %}</h2>
           {% with backend=object.backend_class %}
             <table class="table table-hover attr-table">
               {% for name, field in backend.parameters.items %}
@@ -111,7 +111,7 @@
   <div class="row mb-3">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Files" %}</h5>
+        <h2 class="card-header">{% trans "Files" %}</h2>
         {% htmx_table 'core:datafile_list' source_id=object.pk %}
       </div>
       {% plugin_full_width_page object %}

+ 3 - 3
netbox/templates/core/job.html

@@ -26,7 +26,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Job" %}</h5>
+        <h2 class="card-header">{% trans "Job" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Object Type" %}</th>
@@ -57,7 +57,7 @@
     </div>
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Scheduling" %}</h5>
+        <h2 class="card-header">{% trans "Scheduling" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Created" %}</th>
@@ -87,7 +87,7 @@
   <div class="row">
     <div class="col col-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Data" %}</h5>
+        <h2 class="card-header">{% trans "Data" %}</h2>
         <div class="card-body">
           <pre>{{ object.data|json }}</pre>
         </div>

+ 5 - 5
netbox/templates/core/objectchange.html

@@ -26,7 +26,7 @@
 <div class="row">
     <div class="col col-md-5">
         <div class="card">
-            <h5 class="card-header">{% trans "Change" %}</h5>
+            <h2 class="card-header">{% trans "Change" %}</h2>
             <table class="table table-hover attr-table">
                 <tr>
                     <th scope="row">{% trans "Time" %}</th>
@@ -75,7 +75,7 @@
     </div>
     <div class="col col-md-7">
         <div class="card">
-            <h5 class="card-header d-flex justify-content-between">
+            <h2 class="card-header d-flex justify-content-between">
               {% trans "Difference" %}
               <div class="btn-group btn-group-sm d-print-none">
                 <a {% if prev_change %}href="{% url 'core:objectchange' pk=prev_change.pk %}"{% else %}disabled{% endif %} class="btn btn-outline-secondary">
@@ -85,7 +85,7 @@
                   {% trans "Next" %} <i class="mdi mdi-chevron-right" aria-hidden="true"></i>
                 </a>
               </div>
-            </h5>
+            </h2>
             <div class="card-body">
                 {% if diff_added == diff_removed %}
                     <span class="text-muted" style="margin-left: 10px;">
@@ -108,7 +108,7 @@
 <div class="row">
     <div class="col col-md-6">
         <div class="card">
-            <h5 class="card-header">{% trans "Pre-Change Data" %}</h5>
+            <h2 class="card-header">{% trans "Pre-Change Data" %}</h2>
             <div class="card-body">
             {% if object.prechange_data %}
               {% spaceless %}
@@ -128,7 +128,7 @@
     </div>
     <div class="col col-md-6">
         <div class="card">
-            <h5 class="card-header">{% trans "Post-Change Data" %}</h5>
+            <h2 class="card-header">{% trans "Post-Change Data" %}</h2>
             <div class="card-body">
                 {% if object.postchange_data %}
                   {% spaceless %}

+ 3 - 3
netbox/templates/core/plugin.html

@@ -47,7 +47,7 @@
     <div class="row">
       <div class="col col-6">
         <div class="card">
-          <h5 class="card-header">{% trans "Plugin Details" %}</h5>
+          <h2 class="card-header">{% trans "Plugin Details" %}</h2>
           <table class="table table-hover attr-table">
             <tr>
               <th scope="row">{% trans "Name" %}</th>
@@ -92,7 +92,7 @@
       </div>
       <div class="col col-6">
         <div class="card">
-          <h5 class="card-header">{% trans "Version History" %}</h5>
+          <h2 class="card-header">{% trans "Version History" %}</h2>
           <div class="htmx-container table-responsive" id="object_list">
             {% include 'htmx/table.html' %}
           </div>
@@ -103,7 +103,7 @@
   {% if not plugin.is_local and not settings.RELEASE.features.commercial %}
     <div class="tab-pane" id="install" role="tabpanel" aria-labelledby="install-tab">
       <div class="card">
-        <h5 class="card-header">{% trans "Local Installation Instructions" %}</h5>
+        <h2 class="card-header">{% trans "Local Installation Instructions" %}</h2>
         <div class="card-body">
           {% include 'core/inc/plugin_installation.html' %}
         </div>

+ 1 - 1
netbox/templates/core/rq_task.html

@@ -55,7 +55,7 @@
   <div class="row">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Job" %}</h5>
+        <h2 class="card-header">{% trans "Job" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Queue" %}</th>

+ 1 - 1
netbox/templates/core/rq_worker.html

@@ -37,7 +37,7 @@
     <div class="row">
       <div class="col col-md-12">
         <div class="card">
-          <h5 class="card-header">{% trans "Worker" %}</h5>
+          <h2 class="card-header">{% trans "Worker" %}</h2>
           <table class="table table-hover attr-table">
             <tr>
               <th scope="row">{% trans "Name" %}</th>

+ 2 - 3
netbox/templates/core/system.html

@@ -25,7 +25,7 @@
   <div class="row mb-3">
     <div class="col">
       <div class="card">
-        <h5 class="card-header">{% trans "System Status" %}</h5>
+        <h2 class="card-header">{% trans "System Status" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "NetBox release" %}</th>
@@ -82,10 +82,9 @@
   <div class="row mb-3">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Current Configuration" %}</h5>
+        <h2 class="card-header">{% trans "Current Configuration" %}</h2>
         {% include 'core/inc/config_data.html' %}
       </div>
-
     </div>
   </div>
 {% endblock content %}

+ 3 - 3
netbox/templates/dcim/cable.html

@@ -9,7 +9,7 @@
   <div class="row">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Cable" %}</h5>
+        <h2 class="card-header">{% trans "Cable" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Type" %}</th>
@@ -65,11 +65,11 @@
     </div>
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Termination" %} A</h5>
+        <h2 class="card-header">{% trans "Termination" %} A</h2>
         {% include 'dcim/inc/cable_termination.html' with terminations=object.a_terminations %}
       </div>
       <div class="card">
-        <h5 class="card-header">{% trans "Termination" %} B</h5>
+        <h2 class="card-header">{% trans "Termination" %} B</h2>
         {% include 'dcim/inc/cable_termination.html' with terminations=object.b_terminations %}
       </div>
       {% plugin_right_page object %}

+ 1 - 1
netbox/templates/dcim/cable_trace.html

@@ -82,7 +82,7 @@
         {# Related paths #}
         <div class="col col-md-7">
             <div class="card">
-                <h5 class="card-header">{% trans "Related Paths" %}</h5>
+                <h2 class="card-header">{% trans "Related Paths" %}</h2>
                 <table class="table table-hover">
                     <thead>
                         <tr>

+ 2 - 2
netbox/templates/dcim/consoleport.html

@@ -14,7 +14,7 @@
     <div class="row">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Console Port" %}</h5>
+                <h2 class="card-header">{% trans "Console Port" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -52,7 +52,7 @@
         </div>
         <div class="col col-md-6">
           <div class="card">
-            <h5 class="card-header">{% trans "Connection" %}</h5>
+            <h2 class="card-header">{% trans "Connection" %}</h2>
             {% if object.mark_connected %}
               <div class="card-body">
                 <span class="text-success"><i class="mdi mdi-check-bold"></i></span>

+ 2 - 2
netbox/templates/dcim/consoleserverport.html

@@ -14,7 +14,7 @@
     <div class="row">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Console Server Port" %}</h5>
+                <h2 class="card-header">{% trans "Console Server Port" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -52,7 +52,7 @@
         </div>
         <div class="col col-md-6">
           <div class="card">
-            <h5 class="card-header">{% trans "Connection" %}</h5>
+            <h2 class="card-header">{% trans "Connection" %}</h2>
             <div class="card-body">
             {% if object.mark_connected %}
               <div class="card-body">

+ 12 - 12
netbox/templates/dcim/device.html

@@ -12,7 +12,7 @@
     <div class="row">
         <div class="col col-12 col-xl-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Device" %}</h5>
+                <h2 class="card-header">{% trans "Device" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Region" %}</th>
@@ -116,14 +116,14 @@
             </div>
             {% if vc_members %}
                 <div class="card">
-                    <h5 class="card-header">
+                    <h2 class="card-header">
                       {% trans "Virtual Chassis" %}
                       <div class="card-actions">
                         <a href="{{ object.virtual_chassis.get_absolute_url }}" class="btn btn-ghost-primary btn-sm">
                           <span class="mdi mdi-arrow-right-bold" aria-hidden="true"></span> {% trans "View Virtual Chassis" %}
                         </a>
                       </div>
-                    </h5>
+                    </h2>
                     <table class="table table-hover attr-table">
                       <thead>
                         <tr class="border-bottom">
@@ -156,7 +156,7 @@
             {% include 'inc/panels/tags.html' %}
             {% include 'inc/panels/comments.html' %}
             <div class="card">
-              <h5 class="card-header">
+              <h2 class="card-header">
                 {% trans "Virtual Device Contexts" %}
                 {% if perms.dcim.add_virtualdevicecontext %}
                   <div class="card-actions">
@@ -165,14 +165,14 @@
                     </a>
                   </div>
                 {% endif %}
-              </h5>
+              </h2>
               {% htmx_table 'dcim:virtualdevicecontext_list' device_id=object.pk %}
             </div>
             {% plugin_left_page object %}
         </div>
         <div class="col col-12 col-xl-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Management" %}</h5>
+                <h2 class="card-header">{% trans "Management" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Status" %}</th>
@@ -249,7 +249,7 @@
             </div>
             {% if object.powerports.exists and object.poweroutlets.exists %}
                 <div class="card">
-                    <h5 class="card-header">{% trans "Power Utilization" %}</h5>
+                    <h2 class="card-header">{% trans "Power Utilization" %}</h2>
                     <table class="table table-hover">
                         <thead>
                           <tr>
@@ -298,7 +298,7 @@
                 </div>
             {% endif %}
             <div class="card">
-              <h5 class="card-header">
+              <h2 class="card-header">
                 {% trans "Services" %}
                 {% if perms.ipam.add_service %}
                   <div class="card-actions">
@@ -307,12 +307,12 @@
                     </a>
                   </div>
                 {% endif %}
-              </h5>
+              </h2>
               {% htmx_table 'ipam:service_list' device_id=object.pk %}
             </div>
             {% include 'inc/panels/image_attachments.html' %}
             <div class="card">
-                <h5 class="card-header">{% trans "Dimensions" %}</h5>
+                <h2 class="card-header">{% trans "Dimensions" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Height" %}</th>
@@ -336,13 +336,13 @@
               <div class="row" style="margin-bottom: 20px">
                 <div class="col col-md-6 col-sm-6 col-xs-12 text-center">
                   <div style="margin-left: 30px">
-                    <h4>{% trans "Front" %}</h4>
+                    <h2 class="h4">{% trans "Front" %}</h2>
                     {% include 'dcim/inc/rack_elevation.html' with object=object.rack face='front' extra_params=svg_extra %}
                   </div>
                 </div>
                 <div class="col col-md-6 col-sm-6 col-xs-12 text-center">
                   <div style="margin-left: 30px">
-                    <h4>{% trans "Rear" %}</h4>
+                    <h2 class="h4">{% trans "Rear" %}</h2>
                     {% include 'dcim/inc/rack_elevation.html' with object=object.rack face='rear' extra_params=svg_extra %}
                   </div>
                 </div>

+ 3 - 3
netbox/templates/dcim/device/render_config.html

@@ -8,7 +8,7 @@
   <div class="row mb-3">
     <div class="col-5">
       <div class="card">
-        <h5 class="card-header">{% trans "Config Template" %}</h5>
+        <h2 class="card-header">{% trans "Config Template" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Config Template" %}</th>
@@ -49,12 +49,12 @@
   <div class="row">
     <div class="col">
       <div class="card">
-        <h5 class="card-header d-flex justify-content-between">
+        <h2 class="card-header d-flex justify-content-between">
           {% trans "Rendered Config" %}
             <a href="?export=True" class="btn btn-primary lh-1" role="button">
               <i class="mdi mdi-download" aria-hidden="true"></i> {% trans "Download" %}
             </a>
-        </h5>
+        </h2>
         {% if config_template %}
           <pre class="card-body">{{ rendered_config }}</pre>
         {% else %}

+ 15 - 15
netbox/templates/dcim/device_edit.html

@@ -4,30 +4,30 @@
 
 {% block form %}
     {% render_errors form %}
-    
+
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Device" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Device" %}</h2>
       </div>
       {% render_field form.name %}
       {% render_field form.role %}
       {% render_field form.description %}
       {% render_field form.tags %}
     </div>
-    
+
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Hardware" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Hardware" %}</h2>
       </div>
       {% render_field form.device_type %}
       {% render_field form.airflow %}
       {% render_field form.serial %}
       {% render_field form.asset_tag %}
     </div>
-    
+
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Location" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Location" %}</h2>
       </div>
       {% render_field form.site %}
       {% render_field form.location %}
@@ -58,10 +58,10 @@
         {% render_field form.longitude %}
       {% endif %}
     </div>
-    
+
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Management" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Management" %}</h2>
       </div>
       {% render_field form.status %}
       {% render_field form.platform %}
@@ -72,17 +72,17 @@
         {% render_field form.oob_ip %}
       {% endif %}
     </div>
-    
+
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Virtualization" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Virtualization" %}</h2>
       </div>
       {% render_field form.cluster %}
     </div>
-    
+
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Tenancy" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Tenancy" %}</h2>
       </div>
       {% render_field form.tenant_group %}
       {% render_field form.tenant %}
@@ -90,7 +90,7 @@
 
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Virtual Chassis" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Virtual Chassis" %}</h2>
       </div>
       {% render_field form.virtual_chassis %}
       {% render_field form.vc_position %}
@@ -100,14 +100,14 @@
     {% if form.custom_fields %}
       <div class="field-group my-5">
         <div class="row">
-          <h5 class="col-9 offset-3">{% trans "Custom Fields" %}</h5>
+          <h2 class="col-9 offset-3">{% trans "Custom Fields" %}</h2>
         </div>
         {% render_custom_fields form %}
       </div>
     {% endif %}
 
     <div class="field-group my-5">
-      <h5 class="text-center">{% trans "Local Config Context Data" %}</h5>
+      <h2 class="text-center">{% trans "Local Config Context Data" %}</h2>
       {% render_field form.local_context_data %}
     </div>
 

+ 2 - 2
netbox/templates/dcim/devicebay.html

@@ -14,7 +14,7 @@
     <div class="row">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Device Bay" %}</h5>
+                <h2 class="card-header">{% trans "Device Bay" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -40,7 +40,7 @@
         </div>
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Installed Device" %}</h5>
+                <h2 class="card-header">{% trans "Installed Device" %}</h2>
                 {% if object.installed_device %}
                     {% with device=object.installed_device %}
                         <table class="table table-hover attr-table">

+ 1 - 1
netbox/templates/dcim/devicebay_populate.html

@@ -10,7 +10,7 @@
     <div class="row mb-3">
         <div class="col col-md-6 offset-md-3">
             <div class="card">
-                <h5 class="card-header">{% block title %}{% trans "Populate" %} {{ device_bay }}{% endblock %}</h5>
+                <h2 class="card-header">{% block title %}{% trans "Populate" %} {{ device_bay }}{% endblock %}</h2>
                 <div class="card-body">
                     <div class="row mb-3">
                         <label class="col-sm-3 col-form-label text-lg-end">{% trans "Parent Device" %}</label>

+ 1 - 1
netbox/templates/dcim/devicerole.html

@@ -20,7 +20,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Device Role" %}</h5>
+      <h2 class="card-header">{% trans "Device Role" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>

+ 1 - 1
netbox/templates/dcim/devicetype.html

@@ -8,7 +8,7 @@
     <div class="row">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Chassis" %}</h5>
+                <h2 class="card-header">{% trans "Chassis" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Manufacturer" %}</th>

+ 2 - 2
netbox/templates/dcim/frontport.html

@@ -14,7 +14,7 @@
     <div class="row">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Front Port" %}</h5>
+                <h2 class="card-header">{% trans "Front Port" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -66,7 +66,7 @@
         </div>
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Connection" %}</h5>
+                <h2 class="card-header">{% trans "Connection" %}</h2>
                 {% if object.mark_connected %}
                     <div class="card-body text-muted">
                       <span class="text-success"><i class="mdi mdi-check-bold"></i></span> {% trans "Marked as Connected" %}

+ 6 - 6
netbox/templates/dcim/htmx/cable_edit.html

@@ -7,7 +7,7 @@
 {# A side termination #}
 <div class="field-group mb-5">
   <div class="row">
-    <h5 class="col-9 offset-3">{% trans "A Side" %}</h5>
+    <h2 class="col-9 offset-3">{% trans "A Side" %}</h2>
   </div>
   {% render_field form.a_terminations_type %}
   {% if 'termination_a_device' in form.fields %}
@@ -27,7 +27,7 @@
 {# B side termination #}
 <div class="field-group mb-5">
   <div class="row">
-    <h5 class="col-9 offset-3">{% trans "B Side" %}</h5>
+    <h2 class="col-9 offset-3">{% trans "B Side" %}</h2>
   </div>
   {% render_field form.b_terminations_type %}
   {% if 'termination_b_device' in form.fields %}
@@ -47,7 +47,7 @@
 {# Cable attributes #}
 <div class="field-group mb-5">
   <div class="row">
-    <h5 class="col-9 offset-3">{% trans "Cable" %}</h5>
+    <h2 class="col-9 offset-3">{% trans "Cable" %}</h2>
   </div>
   {% render_field form.status %}
   {% render_field form.type %}
@@ -69,7 +69,7 @@
 
 <div class="field-group mb-5">
   <div class="row">
-    <h5 class="col-9 offset-3">{% trans "Tenancy" %}</h5>
+    <h2 class="col-9 offset-3">{% trans "Tenancy" %}</h2>
   </div>
   {% render_field form.tenant_group %}
   {% render_field form.tenant %}
@@ -78,7 +78,7 @@
 {% if form.custom_fields %}
   <div class="field-group mb-5">
     <div class="row">
-      <h5 class="col-9 offset-3">{% trans "Custom Fields" %}</h5>
+      <h2 class="col-9 offset-3">{% trans "Custom Fields" %}</h2>
     </div>
     {% render_custom_fields form %}
   </div>
@@ -86,7 +86,7 @@
 
 {% if form.comments %}
   <div class="field-group mb-5">
-    <h5 class="text-center">{% trans "Comments" %}</h5>
+    <h2 class="text-center">{% trans "Comments" %}</h2>
     {% render_field form.comments %}
   </div>
 {% endif %}

+ 2 - 2
netbox/templates/dcim/inc/panels/inventory_items.html

@@ -2,7 +2,7 @@
 {% load i18n %}
 
 <div class="card">
-  <h5 class="card-header">
+  <h2 class="card-header">
     {% trans "Inventory Items" %}
     {% if perms.dcim.add_inventoryitem %}
       <div class="card-actions">
@@ -11,7 +11,7 @@
         </a>
       </div>
     {% endif %}
-  </h5>
+  </h2>
   <table class="table table-hover">
     <thead>
       <tr>

+ 1 - 1
netbox/templates/dcim/inc/panels/racktype_dimensions.html

@@ -1,6 +1,6 @@
 {% load i18n %}
 <div class="card">
-  <h5 class="card-header">{% trans "Dimensions" %}</h5>
+  <h2 class="card-header">{% trans "Dimensions" %}</h2>
   <table class="table table-hover attr-table">
     <tr>
       <th scope="row">{% trans "Form factor" %}</th>

+ 1 - 1
netbox/templates/dcim/inc/panels/racktype_numbering.html

@@ -1,6 +1,6 @@
 {% load i18n %}
 <div class="card">
-  <h5 class="card-header">{% trans "Numbering" %}</h5>
+  <h2 class="card-header">{% trans "Numbering" %}</h2>
   <table class="table table-hover attr-table">
     <tr>
       <th scope="row">{% trans "Starting Unit" %}</th>

+ 1 - 1
netbox/templates/dcim/inc/rack_elevation.html

@@ -1,6 +1,6 @@
 {% load i18n %}
 <div style="margin-left: -30px">
-    <object data="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg{% if extra_params %}&{{ extra_params }}{% endif %}" class="rack_elevation"></object>
+    <object data="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg{% if extra_params %}&{{ extra_params }}{% endif %}" class="rack_elevation" aria-label="{% trans "Rack elevation" %}"></object>
 </div>
 <div class="text-center mt-3">
     <a class="btn btn-outline-primary" href="{% url 'dcim-api:rack-elevation' pk=object.pk %}?face={{face}}&render=svg{% if extra_params %}&{{ extra_params }}{% endif %}" hx-boost="false">

+ 9 - 9
netbox/templates/dcim/interface.html

@@ -24,7 +24,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Interface" %}</h5>
+        <h2 class="card-header">{% trans "Interface" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Device" %}</th>
@@ -96,7 +96,7 @@
         </table>
       </div>
       <div class="card">
-        <h5 class="card-header">{% trans "Related Interfaces" %}</h5>
+        <h2 class="card-header">{% trans "Related Interfaces" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Parent" %}</th>
@@ -119,7 +119,7 @@
     <div class="col col-md-6">
       {% include 'inc/panel_table.html' with table=vdc_table heading="Virtual Device Contexts" %}
       <div class="card">
-        <h5 class="card-header">{% trans "Addressing" %}</h5>
+        <h2 class="card-header">{% trans "Addressing" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "MAC Address" %}</th>
@@ -137,7 +137,7 @@
       </div>
       {% if not object.is_virtual %}
         <div class="card">
-          <h5 class="card-header">{% trans "Connection" %}</h5>
+          <h2 class="card-header">{% trans "Connection" %}</h2>
           {% if object.mark_connected %}
             <div class="card-body">
               <span class="text-success"><i class="mdi mdi-check-bold"></i></span>
@@ -207,7 +207,7 @@
       {% endif %}
       {% if object.is_wireless %}
         <div class="card">
-          <h5 class="card-header">{% trans "Wireless" %}</h5>
+          <h2 class="card-header">{% trans "Wireless" %}</h2>
           {% with peer=object.connected_endpoints.0 %}
             <table class="table table-hover">
               <thead>
@@ -277,7 +277,7 @@
           {% endwith %}
         </div>
         <div class="card">
-          <h5 class="card-header">{% trans "Wireless LANs" %}</h5>
+          <h2 class="card-header">{% trans "Wireless LANs" %}</h2>
           <table class="table table-hover">
             <thead>
               <tr>
@@ -302,7 +302,7 @@
       {% endif %}
       {% if object.is_lag %}
         <div class="card">
-          <h5 class="card-header">{% trans "LAG Members" %}</h5>
+          <h2 class="card-header">{% trans "LAG Members" %}</h2>
           <table class="table table-hover">
             <thead>
               <tr>
@@ -335,7 +335,7 @@
   <div class="row mb-3">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">
+        <h2 class="card-header">
           {% trans "IP Addresses" %}
           {% if perms.ipam.add_ipaddress %}
             <div class="card-actions">
@@ -344,7 +344,7 @@
               </a>
             </div>
           {% endif %}
-        </h5>
+        </h2>
         {% htmx_table 'ipam:ipaddress_list' interface_id=object.pk %}
         
       </div>

+ 1 - 1
netbox/templates/dcim/inventoryitem.html

@@ -14,7 +14,7 @@
     <div class="row mb-3">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Inventory Item" %}</h5>
+                <h2 class="card-header">{% trans "Inventory Item" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>

+ 1 - 1
netbox/templates/dcim/inventoryitemrole.html

@@ -12,7 +12,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Inventory Item Role" %}</h5>
+      <h2 class="card-header">{% trans "Inventory Item Role" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>

+ 5 - 5
netbox/templates/dcim/location.html

@@ -23,7 +23,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Location" %}</h5>
+      <h2 class="card-header">{% trans "Location" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>
@@ -73,7 +73,7 @@
 <div class="row mb-3">
 	<div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">
+      <h2 class="card-header">
         {% trans "Child Locations" %}
         {% if perms.dcim.add_location %}
           <div class="card-actions">
@@ -82,11 +82,11 @@
             </a>
           </div>
         {% endif %}
-      </h5>
+      </h2>
       {% htmx_table 'dcim:location_list' parent_id=object.pk %}
     </div>
     <div class="card">
-      <h5 class="card-header">
+      <h2 class="card-header">
         {% trans "Non-Racked Devices" %}
         {% if perms.dcim.add_device %}
           <div class="card-actions">
@@ -95,7 +95,7 @@
             </a>
           </div>
         {% endif %}
-      </h5>
+      </h2>
       {% htmx_table 'dcim:device_list' location_id=object.pk rack_id='null' parent_bay_id='null' %}
     </div>
     {% plugin_full_width_page object %}

+ 1 - 1
netbox/templates/dcim/manufacturer.html

@@ -30,7 +30,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Manufacturer" %}</h5>
+      <h2 class="card-header">{% trans "Manufacturer" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>

+ 1 - 1
netbox/templates/dcim/module.html

@@ -48,7 +48,7 @@
 <div class="row">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Module" %}</h5>
+      <h2 class="card-header">{% trans "Module" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Device" %}</th>

+ 2 - 2
netbox/templates/dcim/modulebay.html

@@ -14,7 +14,7 @@
   <div class="row">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Module Bay" %}</h5>
+        <h2 class="card-header">{% trans "Module Bay" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Device" %}</th>
@@ -46,7 +46,7 @@
     <div class="col col-md-6">
       {% include 'inc/panels/custom_fields.html' %}
       <div class="card">
-        <h5 class="card-header">{% trans "Installed Module" %}</h5>
+        <h2 class="card-header">{% trans "Installed Module" %}</h2>
         {% if object.installed_module %}
           {% with module=object.installed_module %}
             <table class="table table-hover attr-table">

+ 1 - 1
netbox/templates/dcim/moduletype.html

@@ -8,7 +8,7 @@
   <div class="row">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Module Type" %}</h5>
+        <h2 class="card-header">{% trans "Module Type" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Manufacturer" %}</th>

+ 1 - 1
netbox/templates/dcim/moduletype/component_templates.html

@@ -35,7 +35,7 @@
     </form>
   {% else %}
     <div class="card">
-      <h5 class="card-header">{{ title }}</h5>
+      <h2 class="card-header">{{ title }}</h2>
       <div class="htmx-container table-responsive" id="object_list">
         {% include 'htmx/table.html' %}
       </div>

+ 1 - 1
netbox/templates/dcim/platform.html

@@ -23,7 +23,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Platform" %}</h5>
+      <h2 class="card-header">{% trans "Platform" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>

+ 3 - 3
netbox/templates/dcim/powerfeed.html

@@ -18,7 +18,7 @@
 <div class="row">
 	<div class="col col-md-6">
         <div class="card">
-            <h5 class="card-header">{% trans "Power Feed" %}</h5>
+            <h2 class="card-header">{% trans "Power Feed" %}</h2>
             <table class="table table-hover attr-table">
                 <tr>
                     <th scope="row">{% trans "Power Panel" %}</th>
@@ -77,7 +77,7 @@
             </table>
         </div>
         <div class="card">
-            <h5 class="card-header">{% trans "Electrical Characteristics" %}</h5>
+            <h2 class="card-header">{% trans "Electrical Characteristics" %}</h2>
             <table class="table table-hover attr-table">
                 <tr>
                     <th scope="row">{% trans "Supply" %}</th>
@@ -107,7 +107,7 @@
     </div>
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Connection" %}</h5>
+        <h2 class="card-header">{% trans "Connection" %}</h2>
         {% if object.mark_connected %}
           <div class="card-body">
             <span class="text-success"><i class="mdi mdi-check-bold"></i></span>

+ 2 - 2
netbox/templates/dcim/poweroutlet.html

@@ -14,7 +14,7 @@
     <div class="row mb-3">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Power Outlet" %}</h5>
+                <h2 class="card-header">{% trans "Power Outlet" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -56,7 +56,7 @@
         </div>
         <div class="col col-md-6">
           <div class="card">
-            <h5 class="card-header">{% trans "Connection" %}</h5>
+            <h2 class="card-header">{% trans "Connection" %}</h2>
             {% if object.mark_connected %}
               <div class="card-body">
                 <span class="text-success"><i class="mdi mdi-check-bold"></i></span>

+ 2 - 2
netbox/templates/dcim/powerpanel.html

@@ -16,7 +16,7 @@
 <div class="row">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Power Panel" %}</h5>
+      <h2 class="card-header">{% trans "Power Panel" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Site" %}</th>
@@ -48,7 +48,7 @@
     <form method="post">
       {% csrf_token %}
       <div class="card">
-        <h5 class="card-header">{% trans "Power Feeds" %}</h5>
+        <h2 class="card-header">{% trans "Power Feeds" %}</h2>
         {% htmx_table 'dcim:powerfeed_list' power_panel_id=object.pk %}
         <div class="card-footer d-print-none">
           {% if perms.dcim.change_powerfeed %}

+ 2 - 2
netbox/templates/dcim/powerport.html

@@ -14,7 +14,7 @@
     <div class="row mb-3">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Power Port" %}</h5>
+                <h2 class="card-header">{% trans "Power Port" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -56,7 +56,7 @@
         </div>
         <div class="col col-md-6">
           <div class="card">
-            <h5 class="card-header">{% trans "Connection" %}</h5>
+            <h2 class="card-header">{% trans "Connection" %}</h2>
             {% if object.mark_connected %}
               <div class="card-body">
                 <span class="text-success"><i class="mdi mdi-check-bold"></i></span>

+ 4 - 4
netbox/templates/dcim/rack.html

@@ -10,7 +10,7 @@
   <div class="row">
 	  <div class="col col-12 col-xl-5">
       <div class="card">
-        <h5 class="card-header">{% trans "Rack" %}</h5>
+        <h2 class="card-header">{% trans "Rack" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Region" %}</th>
@@ -78,7 +78,7 @@
       {% include 'dcim/inc/panels/racktype_dimensions.html' %}
       {% include 'dcim/inc/panels/racktype_numbering.html' %}
       <div class="card">
-        <h5 class="card-header">{% trans "Weight" %}</h5>
+        <h2 class="card-header">{% trans "Weight" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Rack Weight" %}</th>
@@ -126,13 +126,13 @@
         <div class="row" style="margin-bottom: 20px">
           <div class="col col-md-6 col-sm-6 col-xs-12 text-center">
             <div style="margin-left: 30px">
-              <h4>{% trans "Front" %}</h4>
+              <h2 class="h4">{% trans "Front" %}</h2>
               {% include 'dcim/inc/rack_elevation.html' with face='front' extra_params=svg_extra %}
             </div>
           </div>
           <div class="col col-md-6 col-sm-6 col-xs-12 text-center">
             <div style="margin-left: 30px">
-              <h4>{% trans "Rear" %}</h4>
+              <h2 class="h4">{% trans "Rear" %}</h2>
               {% include 'dcim/inc/rack_elevation.html' with face='rear' extra_params=svg_extra %}
             </div>
           </div>

+ 1 - 1
netbox/templates/dcim/rack_elevation_list.html

@@ -11,7 +11,7 @@
       <a href="{% url 'dcim:rack_list' %}{% querystring request %}" class="btn btn-primary">
         <i class="mdi mdi-format-list-checkbox"></i> {% trans "View List" %}
       </a>
-      <select class="btn btn-outline-secondary no-ts rack-view">
+      <select class="btn btn-outline-secondary no-ts rack-view" aria-label="{% trans "Select rack view" %}">
         <option value="images-and-labels" selected="selected">{% trans "Images and Labels" %}</option>
         <option value="images-only">{% trans "Images only" %}</option>
         <option value="labels-only">{% trans "Labels only" %}</option>

+ 4 - 4
netbox/templates/dcim/rackreservation.html

@@ -16,7 +16,7 @@
 <div class="row mb-3">
 	<div class="col col-12 col-xl-5">
         <div class="card">
-            <h5 class="card-header">{% trans "Rack" %}</h5>
+            <h2 class="card-header">{% trans "Rack" %}</h2>
             <table class="table table-hover attr-table">
                 <tr>
                     <th scope="row">{% trans "Region" %}</th>
@@ -39,7 +39,7 @@
             </table>
         </div>
         <div class="card">
-            <h5 class="card-header">{% trans "Reservation Details" %}</h5>
+            <h2 class="card-header">{% trans "Reservation Details" %}</h2>
             <table class="table table-hover attr-table">
                 <tr>
                     <th scope="row">{% trans "Units" %}</th>
@@ -73,13 +73,13 @@
         <div class="row" style="margin-bottom: 20px">
             <div class="col col-md-6 col-sm-6 col-xs-12 text-center">
                 <div style="margin-left: 30px">
-                    <h4>{% trans "Front" %}</h4>
+                    <h2 class="h4">{% trans "Front" %}</h2>
                     {% include 'dcim/inc/rack_elevation.html' with object=object.rack face='front' %}
                 </div>
             </div>
             <div class="col col-md-6 col-sm-6 col-xs-12 text-center">
                 <div style="margin-left: -30px">
-                    <h4>{% trans "Rear" %}</h4>
+                    <h2 class="h4">{% trans "Rear" %}</h2>
                     {% include 'dcim/inc/rack_elevation.html' with object=object.rack face='rear' %}
                 </div>
             </div>

+ 1 - 1
netbox/templates/dcim/rackrole.html

@@ -16,7 +16,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Rack Role" %}</h5>
+      <h2 class="card-header">{% trans "Rack Role" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>

+ 2 - 2
netbox/templates/dcim/racktype.html

@@ -10,7 +10,7 @@
   <div class="row">
 	  <div class="col col-6">
       <div class="card">
-        <h5 class="card-header">{% trans "Rack Type" %}</h5>
+        <h2 class="card-header">{% trans "Rack Type" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Manufacturer" %}</th>
@@ -38,7 +38,7 @@
     <div class="col col-6">
       {% include 'dcim/inc/panels/racktype_numbering.html' %}
       <div class="card">
-        <h5 class="card-header">{% trans "Weight" %}</h5>
+        <h2 class="card-header">{% trans "Weight" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Rack Weight" %}</th>

+ 2 - 2
netbox/templates/dcim/rearport.html

@@ -14,7 +14,7 @@
     <div class="row">
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Rear Port" %}</h5>
+                <h2 class="card-header">{% trans "Rear Port" %}</h2>
                 <table class="table table-hover attr-table">
                     <tr>
                         <th scope="row">{% trans "Device" %}</th>
@@ -62,7 +62,7 @@
         </div>
         <div class="col col-md-6">
             <div class="card">
-                <h5 class="card-header">{% trans "Connection" %}</h5>
+                <h2 class="card-header">{% trans "Connection" %}</h2>
                 {% if object.mark_connected %}
                     <div class="card-body text-muted">
                       <span class="text-success"><i class="mdi mdi-check-bold"></i></span> {% trans "Marked as Connected" %}

+ 3 - 3
netbox/templates/dcim/region.html

@@ -23,7 +23,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Region" %}</h5>
+      <h2 class="card-header">{% trans "Region" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>
@@ -51,7 +51,7 @@
 <div class="row mb-3">
 	<div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">
+      <h2 class="card-header">
         {% trans "Child Regions" %}
         {% if perms.dcim.add_region %}
           <div class="card-actions">
@@ -60,7 +60,7 @@
             </a>
           </div>
         {% endif %}
-      </h5>
+      </h2>
       {% htmx_table 'dcim:region_list' parent_id=object.pk %}
     </div>
     {% plugin_full_width_page object %}

+ 5 - 5
netbox/templates/dcim/site.html

@@ -25,7 +25,7 @@
 <div class="row">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Site" %}</h5>
+      <h2 class="card-header">{% trans "Site" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Region" %}</th>
@@ -123,7 +123,7 @@
 <div class="row">
   <div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">
+      <h2 class="card-header">
         {% trans "Locations" %}
         {% if perms.dcim.add_location %}
           <div class="card-actions">
@@ -132,11 +132,11 @@
             </a>
           </div>
         {% endif %}
-      </h5>
+      </h2>
       {% htmx_table 'dcim:location_list' site_id=object.pk %}
     </div>
     <div class="card">
-      <h5 class="card-header">
+      <h2 class="card-header">
         {% trans "Non-Racked Devices" %}
         {% if perms.dcim.add_device %}
           <div class="card-actions">
@@ -145,7 +145,7 @@
             </a>
           </div>
         {% endif %}
-      </h5>
+      </h2>
       {% htmx_table 'dcim:device_list' site_id=object.pk rack_id='null' parent_bay_id='null' %}
     </div>
     {% plugin_full_width_page object %}

+ 3 - 3
netbox/templates/dcim/sitegroup.html

@@ -23,7 +23,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Site Group" %}</h5>
+      <h2 class="card-header">{% trans "Site Group" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>
@@ -51,7 +51,7 @@
 <div class="row mb-3">
 	<div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">
+      <h2 class="card-header">
         {% trans "Child Groups" %}
         {% if perms.dcim.add_sitegroup %}
           <div class="card-actions">
@@ -60,7 +60,7 @@
             </a>
           </div>
         {% endif %}
-      </h5>
+      </h2>
       {% htmx_table 'dcim:sitegroup_list' parent_id=object.pk %}
     </div>
     {% plugin_full_width_page object %}

+ 3 - 3
netbox/templates/dcim/virtualchassis.html

@@ -17,7 +17,7 @@
 <div class="row">
 	<div class="col col-md-4">
     <div class="card">
-      <h5 class="card-header">{% trans "Virtual Chassis" %}</h5>
+      <h2 class="card-header">{% trans "Virtual Chassis" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Domain" %}</th>
@@ -49,7 +49,7 @@
     </div>
     <div class="col col-md-8">
       <div class="card">
-        <h5 class="card-header">
+        <h2 class="card-header">
           {% trans "Members" %}
           {% if perms.dcim.change_virtualchassis %}
             <div class="card-actions">
@@ -58,7 +58,7 @@
               </a>
             </div>
           {% endif %}
-        </h5>
+        </h2>
         <table class="table table-hover object-list">
           <thead>
             <tr>

+ 3 - 3
netbox/templates/dcim/virtualchassis_add.html

@@ -5,7 +5,7 @@
 {% block form %}
   <div class="field-group my-5">
     <div class="row">
-      <h5 class="col-9 offset-3">{% trans "Virtual Chassis" %}</h5>
+      <h2 class="col-9 offset-3">{% trans "Virtual Chassis" %}</h2>
     </div>
     {% render_field form.name %}
     {% render_field form.domain %}
@@ -15,7 +15,7 @@
 
   <div class="field-group my-5">
     <div class="row">
-      <h5 class="col-9 offset-3">{% trans "Member Devices" %}</h5>
+      <h2 class="col-9 offset-3">{% trans "Member Devices" %}</h2>
     </div>
     {% render_field form.region %}
     {% render_field form.site_group %}
@@ -28,7 +28,7 @@
   {% if form.custom_fields %}
     <div class="field-group my-5">
       <div class="row">
-        <h5 class="col-9 offset-3">{% trans "Custom Fields" %}</h5>
+        <h2 class="col-9 offset-3">{% trans "Custom Fields" %}</h2>
       </div>
       {% render_custom_fields form %}
     </div>

+ 1 - 1
netbox/templates/dcim/virtualchassis_add_member.html

@@ -16,7 +16,7 @@
 
       {% csrf_token %}
       <div class="card">
-          <h5 class="card-header">{% trans "Add New Member" %}</h5>
+          <h2 class="card-header">{% trans "Add New Member" %}</h2>
           <div class="card-body">
               {% render_form member_select_form %}
               {% render_form membership_form %}

+ 3 - 3
netbox/templates/dcim/virtualchassis_edit.html

@@ -21,7 +21,7 @@
       {{ formset.management_form }}
       <div class="field-group my-5">
         <div class="row">
-          <h5 class="col-9 offset-3">{% trans "Virtual Chassis" %}</h5>
+          <h2 class="col-9 offset-3">{% trans "Virtual Chassis" %}</h2>
         </div>
         {% render_field vc_form.name %}
         {% render_field vc_form.domain %}
@@ -37,14 +37,14 @@
       {% if vc_form.custom_fields %}
         <div class="field-group mb-5">
           <div class="row">
-            <h5 class="col-9 offset-3">{% trans "Custom Fields" %}</h5>
+            <h2 class="col-9 offset-3">{% trans "Custom Fields" %}</h2>
           </div>
           {% render_custom_fields vc_form %}
         </div>
       {% endif %}
 
       <div class="field-group mb-5">
-        <h5 class="text-center">{% trans "Members" %}</h5>
+        <h2 class="text-center">{% trans "Members" %}</h2>
         <table class="table">
             <thead>
                 <tr>

+ 2 - 2
netbox/templates/dcim/virtualdevicecontext.html

@@ -12,7 +12,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Virtual Device Context" %}</h5>
+      <h2 class="card-header">{% trans "Virtual Device Context" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>
@@ -78,7 +78,7 @@
 <div class="row mb-3">
   <div class="col col-md-12">
     <div class="card">
-      <h5 class="card-header">{% trans "Interfaces" %}</h5>
+      <h2 class="card-header">{% trans "Interfaces" %}</h2>
       {% htmx_table 'dcim:interface_list' vdc_id=object.pk %}
     </div>
     {% plugin_full_width_page object %}

+ 2 - 2
netbox/templates/extras/configcontext.html

@@ -7,7 +7,7 @@
   <div class="row">
     <div class="col col-md-5">
       <div class="card">
-        <h5 class="card-header">{% trans "Config Context" %}</h5>
+        <h2 class="card-header">{% trans "Config Context" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Name" %}</th>
@@ -57,7 +57,7 @@
         </table>
       </div>
       <div class="card">
-        <h5 class="card-header">{% trans "Assignment" %}</h5>
+        <h2 class="card-header">{% trans "Assignment" %}</h2>
         <table class="table table-hover attr-table">
           {% for title, objects in assigned_objects %}
             <tr>

+ 3 - 3
netbox/templates/extras/configtemplate.html

@@ -7,7 +7,7 @@
   <div class="row mb-3">
     <div class="col col-md-5">
       <div class="card">
-        <h5 class="card-header">{% trans "Config Template" %}</h5>
+        <h2 class="card-header">{% trans "Config Template" %}</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">{% trans "Name" %}</th>
@@ -53,7 +53,7 @@
     </div>
     <div class="col col-md-7">
       <div class="card">
-        <h5 class="card-header">{% trans "Environment Parameters" %}</h5>
+        <h2 class="card-header">{% trans "Environment Parameters" %}</h2>
         <div class="card-body">
           <pre>{{ object.environment_params }}</pre>
         </div>
@@ -64,7 +64,7 @@
   <div class="row">
     <div class="col col-md-12">
       <div class="card">
-        <h5 class="card-header">{% trans "Template" %}</h5>
+        <h2 class="card-header">{% trans "Template" %}</h2>
         <div class="card-body">
           {% include 'inc/sync_warning.html' %}
           <pre>{{ object.template_code }}</pre>

+ 6 - 6
netbox/templates/extras/customfield.html

@@ -7,7 +7,7 @@
 <div class="row mb-3">
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Custom Field" %}</h5>
+      <h2 class="card-header">{% trans "Custom Field" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>
@@ -63,7 +63,7 @@
       </table>
     </div>
     <div class="card">
-      <h5 class="card-header">{% trans "Behavior" %}</h5>
+      <h2 class="card-header">{% trans "Behavior" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Search Weight" %}</th>
@@ -98,7 +98,7 @@
 	</div>
 	<div class="col col-md-6">
     <div class="card">
-      <h5 class="card-header">{% trans "Object Types" %}</h5>
+      <h2 class="card-header">{% trans "Object Types" %}</h2>
       <table class="table table-hover attr-table">
         {% for ct in object.object_types.all %}
           <tr>
@@ -108,7 +108,7 @@
       </table>
     </div>
     <div class="card">
-      <h5 class="card-header">{% trans "Validation Rules" %}</h5>
+      <h2 class="card-header">{% trans "Validation Rules" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Minimum Value" %}</th>
@@ -135,8 +135,8 @@
       </table>
     </div>
     <div class="card">
-      <h5 class="card-header">Related Objects</h5>
-      <ul class="list-group list-group-flush">
+      <h2 class="card-header">Related Objects</h2>
+      <ul class="list-group list-group-flush" role="presentation">
         {% for qs in related_models %}
           <a class="list-group-item list-group-item-action d-flex justify-content-between">
             {{ qs.model|meta:"verbose_name_plural"|bettertitle }}

+ 2 - 2
netbox/templates/extras/customfieldchoiceset.html

@@ -6,7 +6,7 @@
   <div class="row mb-3">
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">Custom Field Choice Set</h5>
+        <h2 class="card-header">Custom Field Choice Set</h2>
         <table class="table table-hover attr-table">
           <tr>
             <th scope="row">Name</th>
@@ -44,7 +44,7 @@
     </div>
     <div class="col col-md-6">
       <div class="card">
-        <h5 class="card-header">Choices ({{ object.choices|length }})</h5>
+        <h2 class="card-header">Choices ({{ object.choices|length }})</h2>
         <table class="table table-hover">
           <thead>
             <tr>

+ 4 - 8
netbox/templates/extras/customlink.html

@@ -7,7 +7,7 @@
 <div class="row mb-3">
 	<div class="col col-md-5">
     <div class="card">
-      <h5 class="card-header">{% trans "Custom Link" %}</h5>
+      <h2 class="card-header">{% trans "Custom Link" %}</h2>
       <table class="table table-hover attr-table">
         <tr>
           <th scope="row">{% trans "Name" %}</th>
@@ -36,7 +36,7 @@
       </table>
     </div>
     <div class="card">
-      <h5 class="card-header">{% trans "Assigned Models" %}</h5>
+      <h2 class="card-header">{% trans "Assigned Models" %}</h2>
       <table class="table table-hover attr-table">
         {% for ct in object.object_types.all %}
           <tr>
@@ -49,17 +49,13 @@
 	</div>
 	<div class="col col-md-7">
     <div class="card">
-      <h5 class="card-header">
-        {% trans "Link Text" %}
-      </h5>
+      <h2 class="card-header">{% trans "Link Text" %}</h2>
       <div class="card-body">
         <pre>{{ object.link_text }}</pre>
       </div>
     </div>
     <div class="card">
-      <h5 class="card-header">
-        {% trans "Link URL" %}
-      </h5>
+      <h2 class="card-header">{% trans "Link URL" %}</h2>
       <div class="card-body">
         <pre>{{ object.link_url }}</pre>
       </div>

+ 6 - 3
netbox/templates/extras/dashboard/widget.html

@@ -1,4 +1,5 @@
 {% load dashboard %}
+{% load i18n %}
 
 <div
     class="grid-stack-item"
@@ -9,14 +10,15 @@
     gs-id="{{ widget.id }}"
 >
   <div class="card grid-stack-item-content">
-    <div class="card-header text-{{ widget.fg_color }} bg-{{ widget.color|default:"secondary" }} px-2 py-1 d-flex flex-row">
+    <div class="card-header {% if widget.color %} text-{{ widget.fg_color }} {% endif %} bg-{{ widget.color|default:'default' }} px-2 py-1 d-flex flex-row">
       <a href="#"
         hx-get="{% url 'extras:dashboardwidget_config' id=widget.id %}"
         hx-target="#htmx-modal-content"
         data-bs-toggle="modal"
         data-bs-target="#htmx-modal"
+        aria-label="{{ widget.title }} {% trans "widget configuration" %}"
       >
-        <i class="mdi mdi-cog text-{{ widget.fg_color }}"></i>
+        <i class="mdi mdi-cog {% if widget.color %} text-{{ widget.fg_color }} {% endif %}"></i>
       </a>
       <div class="card-title flex-fill text-center">
         {% if widget.title %}
@@ -28,8 +30,9 @@
         hx-target="#htmx-modal-content"
         data-bs-toggle="modal"
         data-bs-target="#htmx-modal"
+        aria-label="{% trans "Close widget" %} {{ widget.title }}"
       >
-        <i class="mdi mdi-close text-{{ widget.fg_color }}"></i>
+        <i class="mdi mdi-close {% if widget.color %} text-{{ widget.fg_color }} {% endif %}"></i>
       </a>
     </div>
     <div class="card-body p-2 pt-1 overflow-auto">

Some files were not shown because too many files changed in this diff