aboutsummaryrefslogtreecommitdiff
path: root/design/Main.hs
blob: 0af225d6b86ff5090c45aa305bdf7bf9b5b9b0dd (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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
{-# LANGUAGE OverloadedStrings #-}

import           Clay
import qualified Clay.Media  as Media
import           Data.Monoid ((<>))

color1 = rgb 113 68 30
color2 = rgb 13 13 81
color3 = rgb 230 230 230

main :: IO ()
main = putCss $ do

  appearKeyframes

  body ? do
    maxWidth responsiveLimit
    sym2 margin (px 0) auto
    mobile $ fontSize (px 14)
    desktop $ fontSize (px 18)

    "a.header" ? do
      display block
      sym2 padding (px 15) (px 0)
      sym2 margin (px 0) auto
      backgroundColor color1
      color white
      fontWeight bold
      textAlign center
      hover & textDecoration none
      desktop $ do
        fontSize (px 32)
        marginBottom (px 30)
        borderRadius (px 0) (px 0) (px 5) (px 5)
      mobile $ do
        fontSize (px 22)
        marginBottom (px 20)

    a ? do
      textDecoration none
      color color2
      hover & textDecoration underline

    "#content" ? do

      animationName "appear"
      animationDuration (sec 0.2)
      animationTimingFunction easeIn
      animationIterationCount (iterationCount 1.0)

      mobile $ sym2 margin (px 0) (px 20)

      (h1 <> h2) ? color color1

      h1 ? do
        desktop $ fontSize (px 28)
        mobile $ fontSize (px 22)

      h2 ? do
        desktop $ fontSize (px 22)
        mobile $ fontSize (px 18)

      ".number" ? do
        fontSize inherit
        backgroundColor color3
        sym borderRadius (px 5)
        sym padding (px 2)
        borderStyle none
        textAlign (alignSide sideCenter)
        desktop $ width (px 70)
        mobile $ width (px 50)

      (ul <> ol) ? do
        listStyleType none
        desktop $ paddingLeft (px 15)
        mobile $ paddingLeft (px 0)

        li ? do
          marginBottom (em 0.8)
          lineHeight (em 1.6)

      (ol <> ul) |> li |> (ol <> ul) ? do
        marginTop (em 0.5)
        marginLeft (px 30)

      ol ? do
        "counter-reset" -: "ol"

        li ? do
          desktop $ paddingLeft (px 40)
          mobile $ paddingLeft (px 30)
          position relative
          textAlign justify
          before & do
            display inline
            position absolute
            top (px 0)
            left (px 0)
            "counter-increment" -: "ol"
            "content" -: "counter(ol)"
            marginRight (px 10)
            backgroundColor color1
            color white
            sym borderRadius (pct 50)
            fontWeight bold
            width (em 1.6)
            textAlign (alignSide sideCenter)

mobile :: Css -> Css
mobile = query Media.screen [ Media.maxWidth responsiveLimit ]

desktop :: Css -> Css
desktop = query Media.screen [ Media.minWidth responsiveLimit ]

responsiveLimit :: Size LengthUnit
responsiveLimit = px 800

appearKeyframes :: Css
appearKeyframes = keyframes
  "appear"
  [ (0, do
      "transform" -: "translateX(20px)"
      opacity 0
    )
  , (100, "transform" -: "translateX(0px)")
  ]