diff --git a/app/assets/stylesheets/admin/pure.sass b/app/assets/stylesheets/admin/pure.sass
index b3638de514982db5fb02d87543400830c493721b..0f2e9021a18806e06d9109fb8d0cf85cc52ca717 100644
--- a/app/assets/stylesheets/admin/pure.sass
+++ b/app/assets/stylesheets/admin/pure.sass
@@ -1,6 +1,7 @@
 @import 'pure/utils'
 @import 'pure/fonts'
 @import 'pure/variables'
+@import 'pure/mixins'
 @import 'pure/grid'
 @import 'bootstrap'
 @import 'bootstrap-icons/font/bootstrap-icons'
diff --git a/app/assets/stylesheets/admin/pure/grid.sass b/app/assets/stylesheets/admin/pure/grid.sass
index ffdb47b85b9d4a40d07889a70e80e9d6f0ad4053..3e5bfe59d5d79fd8fe6cabd7ba2737df90bb5bf6 100644
--- a/app/assets/stylesheets/admin/pure/grid.sass
+++ b/app/assets/stylesheets/admin/pure/grid.sass
@@ -1,4 +1,4 @@
 *
-    --bs-gutter-x: 64px !important
+    @include root-prop(--bs-gutter-x, 64px !important)
     @media (max-width: 768px)
-        --bs-gutter-x: 32px !important
+        @include root-prop(--bs-gutter-x, 32px !important)
\ No newline at end of file
diff --git a/app/assets/stylesheets/admin/pure/mixins.sass b/app/assets/stylesheets/admin/pure/mixins.sass
new file mode 100644
index 0000000000000000000000000000000000000000..c56b37cac1e96709ce75972df65e1988085b4990
--- /dev/null
+++ b/app/assets/stylesheets/admin/pure/mixins.sass
@@ -0,0 +1,3 @@
+@mixin root-prop($prop: null, $value: null)
+    @if ($prop and $value)
+        #{$prop}: $value
\ No newline at end of file
diff --git a/app/assets/stylesheets/extranet/layout/_default.sass b/app/assets/stylesheets/extranet/layout/_default.sass
index a5b9fc61089829ad11af1f7ddc3807e61b2656a8..101169d4715d8817fdb9af969d7cfdf64e2fe791 100644
--- a/app/assets/stylesheets/extranet/layout/_default.sass
+++ b/app/assets/stylesheets/extranet/layout/_default.sass
@@ -1,7 +1,7 @@
 .container
     @include media-breakpoint-up(md)
-        padding-right: var(--bs-gutter-x)
         padding-left: var(--bs-gutter-x)
+        padding-right: var(--bs-gutter-x)
 
 .action-show
     dl
@@ -11,11 +11,11 @@
         dd
             margin-bottom: px2rem(26)
         a
-            transition: text-decoration 0.5s
             text-decoration: underline
+            text-decoration-color: adjust-color(black, $alpha: -0.8)
             text-decoration-thickness: 1px
             text-underline-offset: 4px
-            text-decoration-color: adjust-color(black, $alpha: -0.8)
+            transition: text-decoration 0.5s
             &:hover
                 text-decoration-color: black
 
diff --git a/app/models/ability.rb b/app/models/ability.rb
index e21baef7eea93efa0694c98252d55ee8f7d30d97..3d101269e5f2a1d6b1c05bf5bb000b89af1206d9 100644
--- a/app/models/ability.rb
+++ b/app/models/ability.rb
@@ -81,14 +81,45 @@ class Ability
   end
 
   def admin
-    can :read, Administration::Qualiopi
-    can :read, Administration::Qualiopi::Criterion
-    can :read, Administration::Qualiopi::Indicator
+    admin_university
+    admin_education
+    admin_research
+    admin_communication
+    admin_communication_extranet
+    admin_administration
+  end
+
+  def admin_university
     can :manage, University::Person, university_id: @user.university_id
     can :manage, University::Person::Category, university_id: @user.university_id
     can :manage, University::Person::Involvement, university_id: @user.university_id
     can :manage, University::Organization, university_id: @user.university_id
     can :manage, University::Organization::Category, university_id: @user.university_id
+    can :manage, University::Role, university_id: @user.university_id
+    can :read, User, university_id: @user.university_id
+    can :manage, User, university_id: @user.university_id, role: @user.managed_roles
+  end
+
+  def admin_education
+    can :manage, Education::AcademicYear, university_id: @user.university_id
+    can :manage, Education::Cohort, university_id: @user.university_id
+    can :manage, Education::School, university_id: @user.university_id
+    can :manage, Education::Diploma, university_id: @user.university_id
+    can :manage, Education::Program, university_id: @user.university_id
+    can :manage, :all_programs # needed to prevent program_manager to access specific global screens
+  end
+
+  def admin_research
+    can :manage, Research::Journal, university_id: @user.university_id
+    can :manage, Research::Journal::Paper, university_id: @user.university_id
+    can :manage, Research::Journal::Paper::Kind, university_id: @user.university_id
+    can :manage, Research::Journal::Volume, university_id: @user.university_id
+    can :manage, Research::Laboratory, university_id: @user.university_id
+    can :manage, Research::Laboratory::Axis, university_id: @user.university_id
+    can :manage, Research::Thesis, university_id: @user.university_id
+  end
+
+  def admin_communication
     can :manage, Communication::Block, university_id: @user.university_id
     can :create, Communication::Block
     can :read, Communication::Website, university_id: @user.university_id
@@ -102,28 +133,21 @@ class Ability
     can :manage, Communication::Website::Imported::Page, university_id: @user.university_id
     can :manage, Communication::Website::Imported::Post, university_id: @user.university_id
     can [:read, :update], Communication::Extranet, university_id: @user.university_id
+  end
+
+  def admin_communication_extranet
     can :manage, Communication::Extranet::Post, university_id: @user.university_id
     can :manage, Communication::Extranet::Post::Category, university_id: @user.university_id
     can :manage, Communication::Extranet::Document, university_id: @user.university_id
     can :manage, Communication::Extranet::Document::Category, university_id: @user.university_id
     can :manage, Communication::Extranet::Document::Kind, university_id: @user.university_id
     can :manage, Communication::Extranet::Connection, university_id: @user.university_id
-    can :manage, Education::AcademicYear, university_id: @user.university_id
-    can :manage, Education::Cohort, university_id: @user.university_id
-    can :manage, Education::School, university_id: @user.university_id
-    can :manage, Education::Diploma, university_id: @user.university_id
-    can :manage, Education::Program, university_id: @user.university_id
-    can :manage, :all_programs # needed to prevent program_manager to access specific global screens
-    can :manage, Research::Journal, university_id: @user.university_id
-    can :manage, Research::Journal::Paper, university_id: @user.university_id
-    can :manage, Research::Journal::Paper::Kind, university_id: @user.university_id
-    can :manage, Research::Journal::Volume, university_id: @user.university_id
-    can :manage, Research::Laboratory, university_id: @user.university_id
-    can :manage, Research::Laboratory::Axis, university_id: @user.university_id
-    can :manage, Research::Thesis, university_id: @user.university_id
-    can :manage, University::Role, university_id: @user.university_id
-    can :read, User, university_id: @user.university_id
-    can :manage, User, university_id: @user.university_id, role: @user.managed_roles
+  end
+
+  def admin_administration
+    can :read, Administration::Qualiopi
+    can :read, Administration::Qualiopi::Criterion
+    can :read, Administration::Qualiopi::Indicator
   end
 
   def server_admin