From 02dd1a3970020263007d298b5d90d444ff7a5f60 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 2 Aug 2024 09:36:38 -0400 Subject: [PATCH] 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 Co-authored-by: Andrew Gormley * 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 * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Jeremy Stretch * 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 Co-authored-by: Andrew Gormley Co-authored-by: Andrew Gormley --- netbox/netbox/tables/columns.py | 3 +- .../project-static/dist/netbox-external.css | Bin 367034 -> 364140 bytes netbox/project-static/dist/netbox.css | Bin 552044 -> 556903 bytes ...ns-cyrillic-ext-wght-normal-3FNWYSHQ.woff2 | Bin 0 -> 1612 bytes ...-sans-latin-ext-wght-normal-WWG75Y4U.woff2 | Bin 0 -> 21564 bytes ...arta-sans-latin-wght-normal-S6EFCQOU.woff2 | Bin 0 -> 27444 bytes ...sans-vietnamese-wght-normal-NNXUV3SN.woff2 | Bin 0 -> 8304 bytes .../img/logo_netbox_bright_teal.svg | 24 ++++ .../img/logo_netbox_dark_teal.svg | 24 ++++ netbox/project-static/img/motif.svg | 36 ++++++ netbox/project-static/package.json | 2 +- netbox/project-static/styles/_variables.scss | 16 ++- .../styles/custom/_dashboard.scss | 12 ++ .../project-static/styles/custom/_misc.scss | 5 + netbox/project-static/styles/external.scss | 2 +- netbox/project-static/styles/netbox.scss | 1 + .../styles/overrides/_bootstrap.scss | 5 + .../styles/overrides/_tabler.scss | 107 +++++++++++++++-- .../styles/transitional/_cards.scss | 6 + .../styles/transitional/_forms.scss | 7 ++ .../styles/transitional/_navigation.scss | 111 +++++++++++++++++- .../styles/transitional/_tables.scss | 14 ++- netbox/project-static/yarn.lock | 10 +- netbox/templates/500.html | 4 +- netbox/templates/account/base.html | 17 ++- netbox/templates/account/password.html | 4 +- netbox/templates/account/preferences.html | 4 +- netbox/templates/account/profile.html | 6 +- netbox/templates/account/token.html | 2 +- netbox/templates/base/40x.html | 4 +- netbox/templates/base/base.html | 2 +- netbox/templates/base/layout.html | 64 +++++++--- netbox/templates/circuits/circuit.html | 6 +- netbox/templates/circuits/circuitgroup.html | 2 +- .../circuits/circuitgroupassignment.html | 2 +- netbox/templates/circuits/circuittype.html | 2 +- .../circuits/inc/circuit_termination.html | 4 +- netbox/templates/circuits/provider.html | 6 +- .../templates/circuits/provideraccount.html | 4 +- .../templates/circuits/providernetwork.html | 4 +- netbox/templates/core/configrevision.html | 4 +- netbox/templates/core/datafile.html | 4 +- netbox/templates/core/datasource.html | 6 +- netbox/templates/core/job.html | 6 +- netbox/templates/core/objectchange.html | 10 +- netbox/templates/core/plugin.html | 6 +- netbox/templates/core/rq_task.html | 2 +- netbox/templates/core/rq_worker.html | 2 +- netbox/templates/core/system.html | 5 +- netbox/templates/dcim/cable.html | 6 +- netbox/templates/dcim/cable_trace.html | 2 +- netbox/templates/dcim/consoleport.html | 4 +- netbox/templates/dcim/consoleserverport.html | 4 +- netbox/templates/dcim/device.html | 24 ++-- .../templates/dcim/device/render_config.html | 6 +- netbox/templates/dcim/device_edit.html | 30 ++--- netbox/templates/dcim/devicebay.html | 4 +- netbox/templates/dcim/devicebay_populate.html | 2 +- netbox/templates/dcim/devicerole.html | 2 +- netbox/templates/dcim/devicetype.html | 2 +- netbox/templates/dcim/frontport.html | 4 +- netbox/templates/dcim/htmx/cable_edit.html | 12 +- .../dcim/inc/panels/inventory_items.html | 4 +- .../dcim/inc/panels/racktype_dimensions.html | 2 +- .../dcim/inc/panels/racktype_numbering.html | 2 +- netbox/templates/dcim/inc/rack_elevation.html | 2 +- netbox/templates/dcim/interface.html | 18 +-- netbox/templates/dcim/inventoryitem.html | 2 +- netbox/templates/dcim/inventoryitemrole.html | 2 +- netbox/templates/dcim/location.html | 10 +- netbox/templates/dcim/manufacturer.html | 2 +- netbox/templates/dcim/module.html | 2 +- netbox/templates/dcim/modulebay.html | 4 +- netbox/templates/dcim/moduletype.html | 2 +- .../dcim/moduletype/component_templates.html | 2 +- netbox/templates/dcim/platform.html | 2 +- netbox/templates/dcim/powerfeed.html | 6 +- netbox/templates/dcim/poweroutlet.html | 4 +- netbox/templates/dcim/powerpanel.html | 4 +- netbox/templates/dcim/powerport.html | 4 +- netbox/templates/dcim/rack.html | 8 +- .../templates/dcim/rack_elevation_list.html | 2 +- netbox/templates/dcim/rackreservation.html | 8 +- netbox/templates/dcim/rackrole.html | 2 +- netbox/templates/dcim/racktype.html | 4 +- netbox/templates/dcim/rearport.html | 4 +- netbox/templates/dcim/region.html | 6 +- netbox/templates/dcim/site.html | 10 +- netbox/templates/dcim/sitegroup.html | 6 +- netbox/templates/dcim/virtualchassis.html | 6 +- netbox/templates/dcim/virtualchassis_add.html | 6 +- .../dcim/virtualchassis_add_member.html | 2 +- .../templates/dcim/virtualchassis_edit.html | 6 +- .../templates/dcim/virtualdevicecontext.html | 4 +- netbox/templates/extras/configcontext.html | 4 +- netbox/templates/extras/configtemplate.html | 6 +- netbox/templates/extras/customfield.html | 12 +- .../extras/customfieldchoiceset.html | 4 +- netbox/templates/extras/customlink.html | 12 +- netbox/templates/extras/dashboard/widget.html | 9 +- netbox/templates/extras/eventrule.html | 12 +- netbox/templates/extras/exporttemplate.html | 6 +- .../templates/extras/htmx/script_result.html | 6 +- .../extras/inc/configcontext_data.html | 4 +- netbox/templates/extras/journalentry.html | 2 +- .../templates/extras/notificationgroup.html | 6 +- .../extras/object_configcontext.html | 4 +- netbox/templates/extras/object_journal.html | 2 +- netbox/templates/extras/savedfilter.html | 8 +- netbox/templates/extras/script.html | 2 +- netbox/templates/extras/script_list.html | 4 +- netbox/templates/extras/tag.html | 8 +- netbox/templates/extras/webhook.html | 14 +-- netbox/templates/generic/_base.html | 2 +- .../templates/generic/bulk_add_component.html | 2 +- netbox/templates/generic/bulk_edit.html | 6 +- netbox/templates/generic/bulk_import.html | 4 +- netbox/templates/generic/bulk_rename.html | 2 +- .../templates/generic/confirmation_form.html | 2 +- netbox/templates/generic/object.html | 4 +- netbox/templates/htmx/form.html | 2 +- netbox/templates/inc/panel_table.html | 2 +- netbox/templates/inc/panels/comments.html | 4 +- .../templates/inc/panels/custom_fields.html | 2 +- .../inc/panels/image_attachments.html | 4 +- .../templates/inc/panels/related_objects.html | 4 +- netbox/templates/inc/panels/tags.html | 2 +- netbox/templates/inc/table_htmx.html | 2 + netbox/templates/ipam/aggregate.html | 2 +- netbox/templates/ipam/asn.html | 2 +- netbox/templates/ipam/asnrange.html | 2 +- netbox/templates/ipam/fhrpgroup.html | 8 +- .../ipam/inc/panels/fhrp_groups.html | 4 +- netbox/templates/ipam/ipaddress.html | 4 +- netbox/templates/ipam/ipaddress_assign.html | 2 +- netbox/templates/ipam/ipaddress_bulk_add.html | 6 +- netbox/templates/ipam/iprange.html | 2 +- netbox/templates/ipam/prefix.html | 6 +- netbox/templates/ipam/rir.html | 2 +- netbox/templates/ipam/role.html | 2 +- netbox/templates/ipam/routetarget.html | 10 +- netbox/templates/ipam/service.html | 2 +- netbox/templates/ipam/servicetemplate.html | 2 +- netbox/templates/ipam/vlan.html | 6 +- netbox/templates/ipam/vlan_edit.html | 8 +- netbox/templates/ipam/vlangroup.html | 2 +- netbox/templates/ipam/vrf.html | 2 +- netbox/templates/login.html | 4 +- netbox/templates/tenancy/contact.html | 4 +- netbox/templates/tenancy/contactgroup.html | 6 +- netbox/templates/tenancy/contactrole.html | 2 +- netbox/templates/tenancy/tenant.html | 2 +- netbox/templates/tenancy/tenantgroup.html | 6 +- netbox/templates/users/group.html | 6 +- netbox/templates/users/objectpermission.html | 12 +- netbox/templates/users/token.html | 2 +- netbox/templates/users/user.html | 8 +- netbox/templates/virtualization/cluster.html | 4 +- .../virtualization/clustergroup.html | 2 +- .../templates/virtualization/clustertype.html | 2 +- .../templates/virtualization/virtualdisk.html | 2 +- .../virtualization/virtualmachine.html | 14 +-- .../virtualmachine/render_config.html | 6 +- .../templates/virtualization/vminterface.html | 6 +- netbox/templates/vpn/ikepolicy.html | 4 +- netbox/templates/vpn/ikeproposal.html | 2 +- netbox/templates/vpn/ipsecpolicy.html | 4 +- netbox/templates/vpn/ipsecprofile.html | 6 +- netbox/templates/vpn/ipsecproposal.html | 2 +- netbox/templates/vpn/l2vpn.html | 6 +- netbox/templates/vpn/l2vpntermination.html | 2 +- netbox/templates/vpn/tunnel.html | 6 +- netbox/templates/vpn/tunnelgroup.html | 2 +- netbox/templates/vpn/tunneltermination.html | 4 +- .../wireless/inc/authentication_attrs.html | 2 +- netbox/templates/wireless/wirelesslan.html | 4 +- .../templates/wireless/wirelesslangroup.html | 6 +- netbox/templates/wireless/wirelesslink.html | 6 +- .../form_helpers/render_fieldset.html | 2 +- .../templates/helpers/table_config_form.html | 8 +- .../utilities/templates/navigation/menu.html | 2 +- 181 files changed, 783 insertions(+), 433 deletions(-) create mode 100644 netbox/project-static/dist/plus-jakarta-sans-cyrillic-ext-wght-normal-3FNWYSHQ.woff2 create mode 100644 netbox/project-static/dist/plus-jakarta-sans-latin-ext-wght-normal-WWG75Y4U.woff2 create mode 100644 netbox/project-static/dist/plus-jakarta-sans-latin-wght-normal-S6EFCQOU.woff2 create mode 100644 netbox/project-static/dist/plus-jakarta-sans-vietnamese-wght-normal-NNXUV3SN.woff2 create mode 100644 netbox/project-static/img/logo_netbox_bright_teal.svg create mode 100644 netbox/project-static/img/logo_netbox_dark_teal.svg create mode 100644 netbox/project-static/img/motif.svg create mode 100644 netbox/project-static/styles/custom/_dashboard.scss diff --git a/netbox/netbox/tables/columns.py b/netbox/netbox/tables/columns.py index 32eaf3515..8489648f3 100644 --- a/netbox/netbox/tables/columns.py +++ b/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'' + f'' f'' ) diff --git a/netbox/project-static/dist/netbox-external.css b/netbox/project-static/dist/netbox-external.css index 05e350aa847ae1e7348b94716aa6373b937802ba..603bc14c7db48e128cfb74439693a7c41ee96ae4 100644 GIT binary patch delta 1052 zcmb`GO^eh(5Qgz12wwIej^b(Xw8Pq3U7ciRc0kEjD;`FdVRqb$7{{ldQJ zco7fY!h-)oLGa=q@<&+JS;56a_TZ)KO{KciPra2NUpv3Pbl$B_tWK^@txkWl&b<2m z`J>fatGgep3zzO@%d&erei|25+?~XE+1-wdG=7*R_0Lb1?RN(Nqq3N9E{kma>a}N7 zE}k^yqNH*$e_5nimd-`;q7u({A6Ft@6nk+dlpfD^Cbzcg_`o`UU+nX-Rl3N_%e~Pu zPv?tAi74WHH`$zSfbD_+2lbWdh71NEXc>@3@NEuZ1Oh|NuRYfW;kiTBI>JcMqU-ms zt&43eH(FWt)1=Ddy`)Tzkc`LorrT;#KRB>DZ(Belpa2PqZU<5ll$6qF9FWGL(JpJZ z(H_@$O^v5X`@l5{D6hce6)4u+3Fs-H%?iwBh2}fT94jL_N=BOBAb9?N>PbeX<^PyF zo89a?JNDF=+ujpmL605#gFzJL>G0+RDWg2!`AzqDF_L1Cy7M@i90@ z!-GNJOh+GSI{Nx}6ESL?h=%^}v7We*4z}(bj~v)VFfbrhW3s~o;uz!5_o*>{Koo$1 zYeMKX!6Xk&KhiDaLlIoYy^hc~KL~hSj}p;@A%6pqtiet;08Ge*^gW BF)9E6 delta 2631 zcma);$!^n76oys6LSlg!q^d$fgfex&p|umcv_i;35<9lz)Wdb0ok`tdkpbM4S->I- z5D$>Mf`L_7$`{Jj`!sN{4?Bv`J>ik=lwwZpi#eH8as$`6td?L3W!v?Hl4&(iGjtI_^G z^Z4Z>w!FDDz4VbwS72 zGSWI-zpa@yvVwJJPds63jgF@4h5g5Sz@i?kXX}9a9no@C)#{S)5`@E;U^S{fXUt`u z5;t>+NV;NrJ_o86$-Rql)A^{|OjX^5Mdr*K?pr~=be3*~2S@!Nrdgit7^a>xY|D_G z24#x{66ZJOx$TsCKTAahmdA7j-7!hsn-Gd}4Mhf~sm*n>Rb)yqjc_kI8qiI^v9e+D zg-n#w6h>-v0i3^_?&4FOGMTI=JPTR0d4&^2-zCZSpzUnhWNMYVTG(g&b~)r+&hqVW z5Q(Gy9_<>Isw*ZuZDxbrg6#iEr^zX8!%*hA-;`S^;v#cFG#Ocva(ccxOGkOxs5F~) z9d;_G_qaQc+=iQkJ8NdR2yVn8U;GI^_}D^W>z|SCyGg!)8e; z+T2*yb$Qza7TmNsY}|DVxjxADJK2Sa3J}_oV^-@V`ZjF!X;iFQc30!zvdJOi)+xDK zNJi=&!%0ow&$;Tg3?DsU@v`pus#Y{_xc@`sPi$?mAM~ElEtk~<(9U^jp{)&LJkTq? z#TEXuaPO2zZ0+PIq)-uo09=s6MOzyWD^1<4`M@K5uP6N}y$s@={n2ntpMIH?P!&tl zgD=z-Zx{^1Jvtg5j)P$@++IeTd3h&$H}Pl?49mv{(lxo(0+KuX0kc}#AH{=Uyt15p z)=V$Ir>@OY#N=a65wI0x4N>wflN7=0b_GZsX=XI@ihz@H(uq>|`gs^fgK&6!OkrDg z565r%;r8fBKYDQ#mNxdngVN^7Z?+>z8Ffe9t?P~1mrhO@V5+{ON~--kocn+yC{5w1nU{H zrT8fsA*oO#6pT;*ooFvUZL<)h*ega@(g2rk5>-XT9wmYU=|bN9 z3^&T<6wbY!%jVtBaXE?O)8b06J3pRR#Eh>X;UO0J@?uU(7B5zL2r|O5akanAQM_C2 zwHR@!CtWRe76(;|Ox;);BYU`>usY^yQ7^k_L&)}E4VEpwQ@ewv_#QrB#_Dlc2`e91 zUkcTxe!b-%*hhFlxZ9mhg4B0ldu?PQk_cdr?MyU?4fghyoK(^4d+~gI@rLVlYyB8E zBKmk)77aI?r|l9_83paa^422q(?r1dg}STr|Pre6IeeS-pD{Sp^}1$NePj zYT%7j@z&Y3OnKG}FRdY1^~PDMxOaA|xeVVsLNurYzo1}iJJVA9tM+r66gcedr6=NDtm{9LZ0Z;HWmoJ+NdvFJ4~E|fy2ZR zV|pAK~AHPd2GGL#I$`5CgE3}YIpZd;>vYlgfRM4c?Fb1V*5?~x9TxJKT8mE=S& zgyGdnn=;KgN?j(bVu;f%IBghzVGQa>RIAERgMQt;0Ng3+`v&-dc$an_|Kb#-eQ}Du zGh`G3_H0KE&H67o<~6jnO`QzmG>6-sVqR*3`$MSCp5bz%f_xy`Z^E{trLth4*;fIR z_UA$7K&_egAkVZ_^41DGv%lXEXrKLzxmeTp0K(lIM!)_O!9V_`bXn-g&B47P)H07@ zI6KQEx*oeLmXi0wXG6#}zf-eZU}}lSF$rofGBb~&((+37I)^7<@EFkq=M$7&`^!Zp zU1c05oW5jj(e{4GoY`fb0cu5&TB8KornP9Yrc8^3))hy4+B|+CCy(hz?vrren@Gx8 z#dkoIMp8-)_q)k86Y!fkvIAyzpluYF7IO-C_EIb1?he$!#FBENke`4XZe|6%JWeri z{Vj^J$ps}XWyM$!E;JL3x&STnNSQGi_uH%jKbWFdz^a|70lu*lb^85DSysfH+pmZR z72jA+!X+P{NXTh97sJpDgoB~^&67~~OS%D0zehJQlSUc5(*o*(pGZU-CZrv%zfIfh z3-y=pLJs)$F0>ltVYCd|Bk$J{t(-Gt7+My8a2PE7|>G6xqvrCd7e z^wcIHu$yRsrzFayj~djC@6qtv*DOs`Me2mNcj6RFQU*TRi8kmnXO*8?j~Fg zKR;4lF#Eqxk(9J(2&)$gxur{zvD9tWVcyQ8OQFXA1Fu=g4q<}l5~KPZk`*3SG+mSN zXSw}6movP;p<&d%=nR~cQBFfzE@^#zCmRj$L2h9|bz5~N12M`*{aiwk_L~`cN|XM1 z@#5%>({}!!DcZ~v$rKbg>BM-hJz;G%&VRKj$cqU%i_ug8tqF_=V{U#p(Bbswj05fj zF*fJ6Aqw^lp(-slgmw{@($(#((0&3_V?@g0>s?XgOpMhI??US>YW;8n3iSqfy1t~w4=Eh@LIV;A~Vp55*aoF&C%L?e@ zs7`OFTYtB8b;so~E+Hx7F@GdJCg&wZlC!a-bWjxH1^hnr2{~>A`Zrh{Nnb`jcnre)kv`B6zR1-kM>mKW(~@=J{zkOUW>Bdp!TxeZnn#t8{xUt_=!3t5nl8 zM=ZlVLT{xt{<04KK){-2dnS%DtLm2AzS@xlQmmc+k(?y>@(OPGrAwyNq41?4h)J%H zR$$P>tTb-iz6Iy~sEzo@%}Ptz6#m>&=C{BzDdYyn2>Q42y3ra^=&rTPpA{8eKIjt# bgNhSrQNb?=UtVWvb|mHxL@-IF(7^N&3 zOd-fD3nX*i#4jOi>Jro$X9iDv8s~tRskkiLAB$O*OqeE)Ohz=2Y(`~1%7(i5$4kER zo$sELd%yE;E!pR;+0PzE*egmtr5pKl>@GFJy$!ld_15pZ83wRo>F4-l{;*158Q0zA5&&cJM=i<4@rvVh_G95KX7X`&+{I^ zCq8iNDJ(>(IZelkC0X{e2}?2Y3J#m#5|+i;Uls!?_h?wtmZoqC?3=;{rMgJg8KPcC zRCJVTU(~~L)?Q|utxSpAga}@~AL~A5)l2@MKjdeVN7wKkSqzI>mCsuGH|v8^C@4$J zm8`;{h#X;)#}mrW$#X^+402Xw93&1)lB`)OoSj{nFJlv@&C0-FmmxL4#-X0o-_k1s z@6VwB4k{C;pCqfTeCXPOTuRMI%}S5C&Y0QB&-Kc=&%V&(P$(=ao#P*HsfyK4SlFrY zDJA`@XI5>p!IUH!aJHAvfu-}P3}$RJPno$q;v%kq_Tc3K$QEec*coJO*J(RuBR}|| zA%V8CjenTndOr%NhYzB{%+xEx#a{Fw97~{lsBT9M@WyM1PZ3FtP%rj!ExVx4s5_dx zaD!7X+|cd&h7IC1TAB*r#bN9!6+;1UrPG-R#^TNc@rEWTe#jY1RM^&sec^D#_Xq{) zAK_xwhlg{WI@lEUtgd*Cqiy#sqS!za%{~F~4 zJdsEBer@54VAp%vvCL+^qBNCv$li&paOa4g!hs=vcPf-{^EZ7_a(0MUXNUB+_oSAg zet%bA>sUE5c@^cVRV8H6oWiPa8yUz`3tk}Yrsb5o)$<|JRJFpDog$+~5*2NdBkG0i zqa>s*j1q#ls0V7th#jgvAzhqCEd$j)Mq&o&Um&^aJCo$&x)qI`R_ZmaM&eOPoLs9{nNT1rLU9q9!d0j1M0gCv<5vyprKl5p4L>%tu*sr@ViE8 wQ>Wte2tpz}m!MbGOYO8x2Tyd+Jb0y(ro-GJdJif(s8L<$pg-y0&sS;V-zXNd2><{9 diff --git a/netbox/project-static/dist/plus-jakarta-sans-cyrillic-ext-wght-normal-3FNWYSHQ.woff2 b/netbox/project-static/dist/plus-jakarta-sans-cyrillic-ext-wght-normal-3FNWYSHQ.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..c456409f092b71302322ca2da185a4d555dde5e0 GIT binary patch literal 1612 zcmV-S2DABhPew8T0RR9100v9|6aWAK01Q|F00rLw0RR9100000000000000000000 z0000Q92;&NC_hM6K~h*hO;$ltMh0L%Q&d4zfgAu#FI*7_3WFqqVG9rdFoXyJHUcCA z8U!E(hFk|x3e#}^!K@=%wSE4 ztiIT5NorKosfqj*YVJ=>h!gt1U*!JbnikNw$YPQLD;f~o6Wxaf+D+I6!2cXGU8F@~ z{;hS-M>>%#>b#?EAb>-d z#;C5{`wqcBXX281_|XAg9L;7=T{I6H3~Y21rx9!vS#$*=R7X$%0O|b-jaCSd% zI>Wp}M*Bv&(=Xqa__H56o8E8eoc`z|ck>4y5W7)p#HJ5Fl=$t3+zU5|J@bLP`J*Q8 ziTB^1mZWU_aCgXTFP|HG;xy|iabs25oa%0OwFgC~7) zFFLtyue44Dox+FcKulXXZ141id(l@m=~fW#66sm@&Dyo!tlJ|}ql;-hR3QRb7(Bu| zon+E!-i81!sJQmi^m7X!C?JdlKrH|srUC7^%M1M7k*A3%yi`M|2Kd~-FMl{H@#k;; ziV8~NYs^4^fBvajb#=`9`;=(8r`wQWWqFN=o^1B*x8&x&`|j!_Nb?VvphT3oCE_5z zMx}_+RS+Lw%8?7}Ed*NRWM^T4plv4q{4*`!m?mW29`{E7YL$JHYZmnaOG|9<^xq+Xu; z>#zCwbt0U&&(;3=<+E3w!GS*dI+RsvSFP$1 z%0r>@-wosUTZOdzF6b*7pMA4>y;dzbeB$bu*qZh;z!x_oSpZ+3-#sQZSC(AcGNx=9=2}q|CKRR5 zF7{6^6QhnH2C3l&GS$C!eUpH^cclt3BSXq(gO%@T#6-Ptx}YQew$xx`xX4gKI;PLx zUYv;0TwQWULr*WG?H2Q2d1K4TkPAP#H6q;}Z|69d5+m2vWNmbS(q-`0BMbT=|2M{> zHl|EtjQTfs87JE%s7$%7U08(wMTsW57-lEyS027tH(5C3n{g9tqusAr(Hf`XBR>6; K)Y=>RRsaBK`{)k< literal 0 HcmV?d00001 diff --git a/netbox/project-static/dist/plus-jakarta-sans-latin-ext-wght-normal-WWG75Y4U.woff2 b/netbox/project-static/dist/plus-jakarta-sans-latin-ext-wght-normal-WWG75Y4U.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..bdb7edfd4042e29e0dfba52c53ff82c011e6e123 GIT binary patch literal 21564 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 literal 0 HcmV?d00001 diff --git a/netbox/project-static/dist/plus-jakarta-sans-latin-wght-normal-S6EFCQOU.woff2 b/netbox/project-static/dist/plus-jakarta-sans-latin-wght-normal-S6EFCQOU.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..8c4a84afe03a19fbe1c0142e9ccda0bef64f2f1b GIT binary patch literal 27444 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 DY-mdw literal 0 HcmV?d00001 diff --git a/netbox/project-static/dist/plus-jakarta-sans-vietnamese-wght-normal-NNXUV3SN.woff2 b/netbox/project-static/dist/plus-jakarta-sans-vietnamese-wght-normal-NNXUV3SN.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..57866b15f7e7caee88d94af11747d621ee8b5ed0 GIT binary patch literal 8304 zcmV-$Adla7Pew8T0RR9103dJx6aWAK08%gj03ZDT0RR9100000000000000000000 z0000Qfn*zx794^|KS)+VQi5VXO;$ltMh0L%Q&d4zfgAvWa4%dD2nwxargsa1BmgkJ z76CQ_Bm;yJ1Rw>5TnCE{3zYQAp>LR8zYzswmDkA zP3sBdsYZrvsl`?ds|^2&smfQBAzs9{hftn~Vh~TN*y%;}#_r1@Eb+G26SeGay#GG| z1G*}S?o>~g6q9j;%C^n{P!N}g=g0A$`>6yW{Rxh4TND!57ME9r z2B$?K3Xei|e?ZzKYLXxBr!Tn=L`9PIE?1OhLe07DC*ArUwupXHZBMLduQO|J=Z7=v zM7;VgD+;W#Ven)UB4iS0$WEc17z5$O(3g+zL+?|!Zk_h_Xm04{iBwKrqnC<^M9b~oEoq==K`ED3%`xl&|+%aR7*L4{B{h^U-Bn@KW$&&y^}mg?t7nL;tNb484#aMvNeOYGjJh@79qy4Z^N zOEYzWwYiFX)5}A?T9bMSll`nr?Q@;`&K0;`Fw!BL3~HX?=w zh>-zeM}pXC66uXoPdJJm48Oe3oS~&8wGFkwR@55XQ5#X%GB{#*XcE`M+QALh z)d*(79n$eO0FXQYO~f^G58gt11?icMR5M&;Q!9qynoizqLR};6#=vkhP_Gwu)6>-n zO9=+T81TEMQXt7U$`|$JXfvN0jVvQ-23(WRMaTIf66*e-E-!yBn-Tzbu!WfZg(F!k-_m7cdqoAy*+E z-O6tZYcFoNBeN>M-IsPv>!v5S$YBH6T!=y=P7texn4d%)sQ{5$Mjg^kW-^6F3!OH4?F^!{T20W!EH2leJX2Zp$kE5D zpUr@5z3iqdFjJvf9A=wnhGKJ-n8#&-Qj3&X%wq|+g(g{{!g7^XsA!L45O9z*Qj4~Cz{mq~IO7dzs&r~TBR1w?nl7h?;cz}%4;R&p7Y zv!VNhvUMc6U%~KxF`4t07qlKxRNNg}n|()8)sog*GAmGHfbeiD%W0)4Mo+81v$j?Jo4-j`1;^rDER{r>E&tq|We(@%KMWlHXMC zvCZ#)e(FmM>+~C)Qg`|GEzRB=5^eg7qdj!uDs0dOH&mW}c~81|w%C|A!$f*8~J@4yy{5&_*IV8KHKVlwg-mm9yTJQBjgDE*D-$bg}ZyY z?_0jC`~JIom)sM+H@>MUxUILhVQYF{o%bR!{`*5$FdHKqMOQ?Mkmxv`6D&Q{}qoWQW)5M&jkA6Al))x-N8ea~jE!yrQB? z^2n&qVWEe;tb2ctWnWJ>b6F1#^W2_SRPQLT1|ua8ewh<|J?qBYTwAip+fiK9?%L^W zsH$)^JN5OpKm6V)mZGYjB6rlYG_v5KU+!o#AxIFH0_f=N9`_j)~xu?_P?5(PF_QgE#^O3bp4MQCr^&3|YCaKp0D552h@E$xk#_O~1TugWsT+(SCudn4hI zAJU7D&nk%3tci^MABN*AddtcNY9>dT3v>MYCr&(JMVz$}V`MI4?X7z0$~^4>%QT)# zWmoSztv(c3*=|SIPXc=~UvWTiRqV=cCw2S09WRdQUKpElqW6>&Z7zU(clFdN@2pzC zch=O(>hg}l?N5?Othw*ju2@NNll^oqQs~I7KW$f>wuK#qw&3Y!MruB;xp{5P+clUy zG}CzWGJ>TKfsfz5?Akf;YaxHy5?_pL)GJ?(%)XKO)sQlT?}tXp?XeiMu)Y&{y^{#nT{oYuNi zczT-MhSy$pyL`8&<^P`6Tb_OOowT5+&S}+}rmf7Wke8i^{;ZcpUSWZj1u3 zqik5R!3)riGC1T(xhU>kuL$rabPjIxRWcLO^w6>uM!SlQfcsuptB?v^z}`CgZky`hzs%?_Uw%bvK|;x+u^pQW5oW1} zM&z5Vz6H1K=;bCz!!&|7%MsnK*igS4gV@fO*csn((Qe3regbq8u{Qzo!-a^gzNO{1 zR)2Z?is|AoQMv&*ZOKM2dsdVUSBPzx)rkZv2Whf5=M=XW=A21uy!pIvmF?wYaDM-W zMj@WD(yDw{SVn9_D`t8YNX7CpX{NmFUnB>$>GtX+d!wfYT328D?G*q39_T*iu#2)g z?v?_+4fI}m^K9ucG+h}qLw$6759TOV`4xo(-!{t=tXD9HjWjn36?V`SZZ=kIZpJ%m zt6xxCw2Yoot$?33sS<%Sv``?O5C@wM5*T3)`!>+Q!p)&Rda}YC1@AD$x6T)B;tT2= z<2iI($%!~~)cId?fIxAPZvj1uU%(tz3VEi1e&#SedfYF_n@-?A(Zh4I1uO$PCVg}@ zhnc1rW}twXB`W4J!$K9dS=R!E1f`#yv_f|Fv9phz{p?hoG==>EbZ^Eui2<)in$$Z4 zl3{|kkdr28f+lDJ5|*JBsxLn1i=i@2)n-rpPmM;(MG#0fGkOCf^j6;n*iH zWRpf}bQG{bw&Z&M(*b~>Kt^yS0AwrxAX|xQ5&afeXNPOu?^$pA(r^B8mbgg^=^+cr zda{#TNA4j{kvH%Ke#PH7N2k!~bOqf)ucUX-N9ij}8B@CwfPJrGMA|ny~mD@l)bA z&FAJ9^Ord*kw|osiIPc@MoFh+hU9+9vyyl0SN3=Nue~7Uq${Ocq*q99lRhGSNqSPo z?9%X=?27Ca8L~gNzqbFh&)Z52Tq>+`JGrOMx6UP}7^87J zcf23H%U&ztCS8haii^P_<%aT%@`pe;=^6}6kb?;XOaT0N@sAMmcSJtrIM7Egak@xH z#b`N*CKiv*ob;`5i!tSs3OcaSX4?GBt()c*fgE@ zn$X}#k7WlD5j_|L`5)T@0$e{h7{|&{u>~T(2;$A_grU*>&x7ST-yq<Zk{Qy|3~HH7wU&_H(p)fz+0O1jR+Mj*j{!fboZ^5= z&SfA>r%-f3;i`(QC1p+Uj6;QVKY&FDVr0>G>*fUiO z3_pv+$jcycMYS224e^VLKISbKc?*^qz7%jT|EO4JOtt=PA^&Es8)F4lu1D?7z51S` zr~-Q4@G9!k^&Bl8UHNEBAQDtrotJ6e%#MIC(Pmy;A$*kTT z_*MZUOYmurjA9@%8+jUvcXR?M&y$TA`G1#|{un}`iykE4Zdt(*!3ZXHFexH(uS}#- z5wb&*Zh<)<(ClPTo;V>qtWae{!ws$2r)!u z4t>_MXiNgq5@SuAL%c06r*s!VT9E3YN_IBy52>vkZc+|sy(DMmJEBr|6FMP&{a&Xd z*u*raOL~*(!q}VjdIkHk!8B?a4`u%S$u?L->4u!%V!O7noP?Ki<4n3{5U>w7R6D4g zMW~WTY6CNZ5VRh&MNU4N7ByPz)X>mU^G}o0(J|IB#WW3R9KMRelxPf%9Ty^Kyu-AE&!4%e%voE~RW8?r zhS2t6(pkgBq2-4hJtVG4cYUwg$<0kUzjVIL)%>JRRh`rz1dTk_hvii_593=jD0B?a6vgUZDFQWJEru2fnEL2iko&XHQSwz2i2m!2R9p%1~`|q)sWbv&M@CuIK&0$ z#3zDiMSvMFW5bnE8y@zqv}&w2)!4tyhFY&TBu4`(5a!I2dS1rTngg5`Hs!8m>J+MB z8HQ=(kH&NZ674YbP{^`%)$*(6aVr%M)jG>u=liH8iZWD1-LTDn(bARknkqzefBc|e zAk1JoTA4u^FO(i~ou(4`7va;!C(qUW4`om`UQ3fgG*a1L^E$p%I@a`XzL3&I#41y1 zQ_5FnScGz#Mk$hEWA4`VpH)uCK24!XDfMdWPUnBET1^1c{Eoqxabect_95ZQ;0(Nw zU|r2_d8CUcnE;cB>jt0=T4!G?t%`#))rSh<%c88?Q7`20j1xwvy&U|4!N&Y85qEdj zIaIgjT1~a(cK4*qYFS33iULQMj1xwJuJ}8ApioMmft%GY|4ri^@T?PA=Jw7fr{{4E z5 ztSoCmL9T&IQ;K?&?b9soa3L@~A!eh(Yt07pAF$3>skA0^jce1<3_Dj<1SCbpBb*Y7A%Ra*c)~$voj)o#&0mXOo>R$$7vWR{IG$<>+whN~O~rCCmz%HuWx6<3@0`RrXt37t ztM-yv)-2Cfzc4<+oL@0&eE58pVWh3jaNu&;RH|Po$cLyHLDjkoCKHY&c)x}QwtiK&CwWd9By|~(5@*c ziLzmYz_vvf8}f)<5B+Nc_JK&{2IUgb!TM^xUcj%Sb_4 z8)_4Ik)i@8-QtbeU#Pl>IdT?41b5-8$vsl zKu${`ElmI|Xs66}n`MW{6-tcp+`7ih2=VwUW}SHVFt*nepdp&40foZn8WMz@8sB=F zthwmI(b9`)>eRuTAGlCR93KUw5hS;L*RiPsecfnb3urM)T@_V@8lq|%p1}c}q#SafyEF#4q>=V!;O z4hm|u1}{odp)gUlIxi*}PMZ!WZ4+M8rquLizT@k3Bdw?fCF+H%XPeZyc6*6eoszX; z723m=h@mv`_i^{&hYvSMOO`K4#qp2*l8pIsPtYH0r3+kDeq4*Smz@Ob-E!46fXM3T ziGKO0>{_M;QLWw5Oj(i}lk(UGla$NOiOOy3IOLpp1F^6_u;XqFYZr7?_$Fykxy$7! zEpd43`_{;#=Zz$@^AE74A*Z?_7zoxu4KyrSxcG|xmU>q?pcAa#{ZVZHDB((_TE^J2 zG?8o6s>NqlZ#IX9rmKXSCd-zp4UQWe9GPaSR!cK&YN)F66`WwFCY7ROi1DrL%03;lzaa9c$k7<7x*ryZ*-P3es~PODar4+(#e za6))&R$9`_#co+J!GteG*`fC(zdTc_UHWAdp%m#!I!~$1Set__VI+9+5kA{0ywiFI z!tzY+4*gt=jQ{%+mHMajH$H(%sa~!}i(I{CL1kQ;!nNXbF?UZ2Ile_8xmZ1ef8)SO z)_-PELq|aUzg?}j$H*6n*p)3x^5#5i3>uA6)sn{Ja$jLL>vdJOFLPdJ#{RWHAEgJ>wO0p8OK< zr@s$gxOoNVv^c2M`)U%@IbvMo(=EOn-rcGZ$U4Qw@81X>-f~vM3z)O-HJCrtR0MFP znI!s%n#E=O4QjtW+$>85;GKA>OA$G7LyA(y?i3>!p%lv<+LTD8A5&t*9yv&<-0H&- z26FRLEVSY&5jZVAvCJAGnWg@e6ar^T1}S@rgPI#J-s57}y!PN$N(R{)wS1 zL(HAz=2I~*G27Qc@#`SNm&iL2!=wFJ8Iav6{ z15gW4J*@|g>%$7qLbEGsRhKl+YGakVTWud#Urg|K+Mtm+8KBR;QaW?lHUSEM_(`<- zMj=qpFtBj&2#83KqJScew+%rWH4QBtJwuu>N@vOx8O$cgl*J-j4lA2ndGd3F-9!Zn zITR^Y!kH&r+)9;&gjG4O3X@c-;!~|gEx({sYKo9B1PX&AkTHIR(U>B^;_w8bh^Uyj zgrt;osmRF6$tx%-DXWx=sv4k9($Lh>*3s1i$@&I{M#d(lX66=_R@OGQc1W7K^VZ9D(Zu_)JAS&F?IV?*E9TeA-d2VTx&sf{X@X zWC=tx77vzG(E&oiFy+6|82{3L(4ft(W@d(T=A`#fwydR& u_En7)zPRb~(UUs$*xtTG%6t7L1Kgr+=yU6KXG1SMn_Y literal 0 HcmV?d00001 diff --git a/netbox/project-static/img/logo_netbox_bright_teal.svg b/netbox/project-static/img/logo_netbox_bright_teal.svg new file mode 100644 index 000000000..958a1d401 --- /dev/null +++ b/netbox/project-static/img/logo_netbox_bright_teal.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/netbox/project-static/img/logo_netbox_dark_teal.svg b/netbox/project-static/img/logo_netbox_dark_teal.svg new file mode 100644 index 000000000..5e4d36173 --- /dev/null +++ b/netbox/project-static/img/logo_netbox_dark_teal.svg @@ -0,0 +1,24 @@ + + + + + + + + + + + + \ No newline at end of file diff --git a/netbox/project-static/img/motif.svg b/netbox/project-static/img/motif.svg new file mode 100644 index 000000000..11a49f454 --- /dev/null +++ b/netbox/project-static/img/motif.svg @@ -0,0 +1,36 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/netbox/project-static/package.json b/netbox/project-static/package.json index 8079e8dd3..201b3c541 100644 --- a/netbox/project-static/package.json +++ b/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": { diff --git a/netbox/project-static/styles/_variables.scss b/netbox/project-static/styles/_variables.scss index afd4bc6bd..749f0ba57 100644 --- a/netbox/project-static/styles/_variables.scss +++ b/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; diff --git a/netbox/project-static/styles/custom/_dashboard.scss b/netbox/project-static/styles/custom/_dashboard.scss new file mode 100644 index 000000000..a1c0e13ec --- /dev/null +++ b/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; + } + } +} diff --git a/netbox/project-static/styles/custom/_misc.scss b/netbox/project-static/styles/custom/_misc.scss index 9779bf583..08125e8d3 100644 --- a/netbox/project-static/styles/custom/_misc.scss +++ b/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; +} diff --git a/netbox/project-static/styles/external.scss b/netbox/project-static/styles/external.scss index b3c83aa87..1e09d1803 100644 --- a/netbox/project-static/styles/external.scss +++ b/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"); diff --git a/netbox/project-static/styles/netbox.scss b/netbox/project-static/styles/netbox.scss index 0e1b44d59..effc90dec 100644 --- a/netbox/project-static/styles/netbox.scss +++ b/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'; diff --git a/netbox/project-static/styles/overrides/_bootstrap.scss b/netbox/project-static/styles/overrides/_bootstrap.scss index 59c248541..d443da6f5 100644 --- a/netbox/project-static/styles/overrides/_bootstrap.scss +++ b/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; +} diff --git a/netbox/project-static/styles/overrides/_tabler.scss b/netbox/project-static/styles/overrides/_tabler.scss index 97f1298df..a17a800f5 100644 --- a/netbox/project-static/styles/overrides/_tabler.scss +++ b/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; + } } diff --git a/netbox/project-static/styles/transitional/_cards.scss b/netbox/project-static/styles/transitional/_cards.scss index 6a7666524..1b619ab9b 100644 --- a/netbox/project-static/styles/transitional/_cards.scss +++ b/netbox/project-static/styles/transitional/_cards.scss @@ -16,6 +16,12 @@ background: var(--#{$prefix}bg-surface-tertiary); } + // Use
font size for card headers + h2.card-header { + @extend h5; + margin-bottom: 0; + } + // Reduce padding .list-group-item { padding: 0.5rem 0.75rem; diff --git a/netbox/project-static/styles/transitional/_forms.scss b/netbox/project-static/styles/transitional/_forms.scss index a489d87de..147b11b97 100644 --- a/netbox/project-static/styles/transitional/_forms.scss +++ b/netbox/project-static/styles/transitional/_forms.scss @@ -4,6 +4,13 @@ form.object-edit { max-width: 800px; } +// Use

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; diff --git a/netbox/project-static/styles/transitional/_navigation.scss b/netbox/project-static/styles/transitional/_navigation.scss index fe7b8e75a..67aa19935 100644 --- a/netbox/project-static/styles/transitional/_navigation.scss +++ b/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; + } } diff --git a/netbox/project-static/styles/transitional/_tables.scss b/netbox/project-static/styles/transitional/_tables.scss index 6429fd1aa..4094631ca 100644 --- a/netbox/project-static/styles/transitional/_tables.scss +++ b/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; + } +} diff --git a/netbox/project-static/yarn.lock b/netbox/project-static/yarn.lock index bb0bea154..f87ed8925 100644 --- a/netbox/project-static/yarn.lock +++ b/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" diff --git a/netbox/templates/500.html b/netbox/templates/500.html index b26b61973..4805e9240 100644 --- a/netbox/templates/500.html +++ b/netbox/templates/500.html @@ -14,9 +14,9 @@
-
+

{% trans "Server Error" %} -

+

{% block message %}

diff --git a/netbox/templates/account/base.html b/netbox/templates/account/base.html index 41fe4665e..01d288ea6 100644 --- a/netbox/templates/account/base.html +++ b/netbox/templates/account/base.html @@ -2,30 +2,29 @@ {% load i18n %} {% block tabs %} -