aboutsummaryrefslogtreecommitdiffstats
path: root/src/components/molecules/layout/branding.module.scss
blob: 4d9e32c7be5cc17c6281e97b0236c73ca8ad4339 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
@use "../../../styles/abstracts/functions" as fun;
@use "../../../styles/abstracts/mixins" as mix;

@mixin typing-animation {
  --typing-animation: none;

  width: fit-content;
  position: relative;
  overflow: hidden;

  &::after {
    content: "|";
    display: block;
    width: 100%;
    height: 100%;
    position: absolute;
    top: 0;
    right: 0;
    background: var(--color-bg);
    color: var(--color-primary-darker);
    font-weight: 400;
    text-align: left;
    visibility: hidden;
    transform: translateX(100%);
    transform-origin: right;
    animation: var(--typing-animation);

    :global {
      animation: var(--typing-animation);
    }
  }
}

.wrapper {
  --logo-size: #{clamp(fun.convert-px(90), 12vw, fun.convert-px(100))};

  display: grid;
  grid-template-columns: minmax(0, 1fr);
  justify-items: center;
  width: 100%;

  @include mix.media("screen") {
    @include mix.dimensions("2xs") {
      grid-template-columns:
        var(--logo-size, fun.convert-px(100))
        minmax(0, 1fr);
      grid-template-rows: 1fr min-content;
      align-items: center;
      justify-items: left;
      column-gap: var(--spacing-sm);
      width: unset;
    }
  }

  .logo {
    grid-row: span 2;
    margin-bottom: var(--spacing-sm);

    @include mix.media("screen") {
      @include mix.dimensions("2xs") {
        margin-bottom: 0;
      }
    }
  }

  .title {
    font-size: clamp(var(--font-size-xl), 8vw, var(--font-size-2xl));
    text-align: center;

    @include typing-animation;
  }

  .baseline {
    color: var(--color-fg-light);
    font-size: var(--font-size-lg);
    text-align: center;

    @include typing-animation;
  }

  .link {
    background: linear-gradient(
        to top,
        var(--color-primary-light) fun.convert-px(5),
        transparent fun.convert-px(5)
      )
      left / 0 100% no-repeat;
    text-decoration: none;
    transition: all 0.6s ease-out 0s;

    &:hover,
    &:focus {
      background-size: 100% 100%;
    }

    &:focus {
      color: var(--color-primary-light);
    }

    &:active {
      background-size: 0 100%;
      color: var(--color-primary-dark);
    }
  }
}