app.vue 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. <template>
  2. <NuxtLayout>
  3. <v-app>
  4. <a id="top" />
  5. <div class="body">
  6. <header>
  7. <Topbar />
  8. </header>
  9. <NuxtPage />
  10. <BackToTheTop />
  11. </div>
  12. <Footer />
  13. </v-app>
  14. </NuxtLayout>
  15. </template>
  16. <script setup lang="ts">
  17. const route = useRoute()
  18. useHead(() => ({
  19. link: [
  20. {
  21. rel: 'canonical',
  22. href: 'https://olivier-massot.ogene.fr' + route.path,
  23. },
  24. ],
  25. }))
  26. </script>
  27. <style lang="scss">
  28. html {
  29. scroll-behavior: smooth;
  30. }
  31. .v-application {
  32. background: rgb(var(--v-theme-background));
  33. color: rgb(var(--v-theme-on-background));
  34. font-family: Inter, sans-serif;
  35. }
  36. .body {
  37. padding: 18px;
  38. display: flex;
  39. flex-direction: column;
  40. flex: 1;
  41. margin: 0 15%;
  42. @media (max-width: 1600px) {
  43. margin: 0 6%;
  44. }
  45. @media (max-width: 600px) {
  46. margin: 0 3%;
  47. }
  48. }
  49. .topbar-container {
  50. padding: 32px 0;
  51. border-bottom: solid 1px rgba(var(--v-theme-on-background), 0.2);
  52. margin-bottom: 3rem;
  53. position: sticky;
  54. top: 0;
  55. background: rgb(var(--v-theme-background));
  56. z-index: 1000;
  57. }
  58. :deep(h2) {
  59. margin: 48px 0 24px 0;
  60. padding-bottom: 9px;
  61. border-bottom: solid 1px rgba(var(--v-theme-on-background), 0.2);
  62. @media (max-width: 600px) {
  63. margin: 24px 0;
  64. }
  65. }
  66. .v-footer {
  67. max-height: 36px;
  68. display: flex;
  69. flex-direction: row;
  70. justify-content: center;
  71. border-top: rgb(var(--v-theme-on-surface));
  72. font-size: 12px;
  73. a {
  74. color: rgb(var(--v-theme-on-background));
  75. }
  76. span {
  77. margin: 0 24px;
  78. }
  79. }
  80. </style>