app.vue 1.5 KB

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