diff --git a/src/index.html b/src/index.html
index c10199d38b..0163e3c229 100644
--- a/src/index.html
+++ b/src/index.html
@@ -9,10 +9,42 @@
Calendar
-
- Calendar
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/styles/_variables.scss b/src/styles/_variables.scss
new file mode 100644
index 0000000000..270ae3eaac
--- /dev/null
+++ b/src/styles/_variables.scss
@@ -0,0 +1,6 @@
+$day-size: 100px;
+$day-color: #eee;
+$border-color: black;
+$gap: 1px;
+$columns: 7;
+$padding: 10px;
diff --git a/src/styles/index.css b/src/styles/index.css
new file mode 100644
index 0000000000..a4f58229d9
--- /dev/null
+++ b/src/styles/index.css
@@ -0,0 +1,348 @@
+/* stylelint-disable no-descending-specificity */
+/* stylelint-disable rule-empty-line-before */
+body {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
+ margin: 0;
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+}
+
+.calendar .calendar__day:nth-child(1)::before {
+ content: '1';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(2)::before {
+ content: '2';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(3)::before {
+ content: '3';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(4)::before {
+ content: '4';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(5)::before {
+ content: '5';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(6)::before {
+ content: '6';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(7)::before {
+ content: '7';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(8)::before {
+ content: '8';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(9)::before {
+ content: '9';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(10)::before {
+ content: '10';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(11)::before {
+ content: '11';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(12)::before {
+ content: '12';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(13)::before {
+ content: '13';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(14)::before {
+ content: '14';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(15)::before {
+ content: '15';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(16)::before {
+ content: '16';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(17)::before {
+ content: '17';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(18)::before {
+ content: '18';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(19)::before {
+ content: '19';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(20)::before {
+ content: '20';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(21)::before {
+ content: '21';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(22)::before {
+ content: '22';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(23)::before {
+ content: '23';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(24)::before {
+ content: '24';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(25)::before {
+ content: '25';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(26)::before {
+ content: '26';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(27)::before {
+ content: '27';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(28)::before {
+ content: '28';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(29)::before {
+ content: '29';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(30)::before {
+ content: '30';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar .calendar__day:nth-child(31)::before {
+ content: '31';
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+}
+.calendar {
+ display: flex;
+ flex-wrap: wrap;
+ gap: 1px;
+ width: 726px;
+ padding: 10px;
+ box-sizing: border-box;
+}
+.calendar--start-day-mon .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 0);
+}
+.calendar--start-day-tue .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 1);
+}
+.calendar--start-day-wed .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 2);
+}
+.calendar--start-day-thu .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 3);
+}
+.calendar--start-day-fri .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 4);
+}
+.calendar--start-day-sat .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 5);
+}
+.calendar--start-day-sun .calendar__day:first-child {
+ margin-left: calc((100px + 1px) * 6);
+}
+.calendar--month-length-28 .calendar__day:nth-child(n + 29) {
+ display: none;
+}
+.calendar--month-length-29 .calendar__day:nth-child(n + 30) {
+ display: none;
+}
+.calendar--month-length-30 .calendar__day:nth-child(n + 31) {
+ display: none;
+}
+.calendar--month-length-31 .calendar__day:nth-child(n + 32) {
+ display: none;
+}
+.calendar__day {
+ width: 100px;
+ height: 100px;
+ background: #eee;
+ display: flex;
+ border: 1px solid black;
+ position: relative;
+ box-sizing: border-box;
+ transition: all 0.5s;
+}
+.calendar__day:hover {
+ cursor: pointer;
+ background: #ffbfcb;
+ transform: translateY(-20px);
+} /*# sourceMappingURL=index.css.map */
diff --git a/src/styles/index.css.map b/src/styles/index.css.map
new file mode 100644
index 0000000000..ee9e480fab
--- /dev/null
+++ b/src/styles/index.css.map
@@ -0,0 +1 @@
+{"version":3,"sources":["index.scss","index.css"],"names":[],"mappings":"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","file":"index.css"}
\ No newline at end of file
diff --git a/src/styles/index.scss b/src/styles/index.scss
index 293d3b1f13..50c5e67a89 100644
--- a/src/styles/index.scss
+++ b/src/styles/index.scss
@@ -1,3 +1,81 @@
+$day-size: 100px;
+$day-color: #eee;
+$border-color: black;
+$gap: 1px;
+$columns: 7;
+$padding: 10px;
+$days: (
+ mon: 0,
+ tue: 1,
+ wed: 2,
+ thu: 3,
+ fri: 4,
+ sat: 5,
+ sun: 6,
+);
+$month-length: (28, 29, 30, 31);
+$calendar-font: Arial, sans-serif;
+$calendar-font-size: 30px;
+
body {
+ display: flex;
+ flex-direction: column;
+ justify-content: center;
+ align-items: center;
+ height: 100vh;
margin: 0;
+ font-family: Arial, sans-serif;
+ font-size: 30px;
+}
+
+.calendar {
+ @for $i from 1 through 31 {
+ .calendar__day:nth-child(#{$i})::before {
+ content: '#{$i}';
+ font-family: $calendar-font;
+ font-size: $calendar-font-size;
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ }
+ }
+
+ display: flex;
+ flex-wrap: wrap;
+ gap: $gap;
+ width: calc($day-size * $columns + $gap * ($columns - 1) + $padding * 2);
+ padding: $padding;
+ box-sizing: border-box;
+
+ @each $day, $index in $days {
+ &--start-day-#{$day} .calendar__day:first-child {
+ margin-left: calc((#{$day-size} + #{$gap}) * #{$index});
+ }
+ }
+
+ @for $i from 28 through 31 {
+ &--month-length-#{$i} {
+ .calendar__day:nth-child(n + #{$i + 1}) {
+ display: none;
+ }
+ }
+ }
+
+ &__day {
+ width: $day-size;
+ height: $day-size;
+ background: $day-color;
+ display: flex;
+ border: 1px solid $border-color;
+ position: relative;
+ box-sizing: border-box;
+ transition: all 0.5s;
+
+ &:hover {
+ cursor: pointer;
+ background: #ffbfcb;
+ transform: translateY(-20px);
+ }
+ }
}