1
+ /* Algemene reset */
2
+ * {
3
+ margin : 0 ;
4
+ padding : 0 ;
5
+ box-sizing : border-box;
6
+ }
7
+
8
+ /* Body- en container-instellingen */
9
+ body {
10
+ background : # f0f0f0 ;
11
+ font-family : Arial, sans-serif;
12
+ height : 100vh ;
13
+ display : flex;
14
+ align-items : center;
15
+ justify-content : center;
16
+ }
17
+
18
+ .database {
19
+ position : relative;
20
+ width : 300px ;
21
+ height : 200px ;
22
+ perspective : 800px ;
23
+ overflow : visible; /* zodat elementen buiten de box getoond worden */
24
+ }
25
+
26
+ /* Basisstijl voor beide dekseltjes */
27
+ .lid {
28
+ position : absolute;
29
+ left : 0 ;
30
+ width : 100% ;
31
+ background : # 3498db ;
32
+ color : white;
33
+ text-align : center;
34
+ line-height : 50px ;
35
+ font-weight : bold;
36
+ backface-visibility : hidden;
37
+ }
38
+
39
+ /* Bovenste dekseltje (top-lid) */
40
+ .top-lid {
41
+ top : 0 ;
42
+ height : 50px ;
43
+ transform-origin : bottom center;
44
+ /* Animatie voor top-lid:
45
+ - 0–1s: gesloten,
46
+ - 1–2s: opent (roteren naar -90°),
47
+ - 2–4s: open,
48
+ - 4–5s: sluit weer,
49
+ - daarna gesloten. */
50
+ animation : topLidAnim 10s forwards;
51
+ }
52
+
53
+ /* Onderste dekseltje (bottom-lid) */
54
+ .bottom-lid {
55
+ bottom : 0 ;
56
+ height : 50px ;
57
+ transform-origin : top center;
58
+ /* Animatie voor bottom-lid:
59
+ - 0–4s: gesloten,
60
+ - 4–5s: opent (voor de tabel),
61
+ - 5–6s: open,
62
+ - 6–7s: sluit,
63
+ - 7–8s: opent (voor de grafiek),
64
+ - 8–9s: open,
65
+ - 9–10s: sluit. */
66
+ animation : bottomLidAnim 10s forwards;
67
+ }
68
+
69
+ /* De “body” van de database (visueel een frame) */
70
+ .db-body {
71
+ position : absolute;
72
+ top : 50px ;
73
+ left : 0 ;
74
+ width : 100% ;
75
+ height : 100px ;
76
+ background : # ecf0f1 ;
77
+ border : 2px solid # 3498db ;
78
+ }
79
+
80
+ /* --- Content die buiten komt --- */
81
+
82
+ /* Query-container: verschijnt bovenaan (onder het top-lid) */
83
+ .query-container {
84
+ position : absolute;
85
+ top : -40px ; /* startpositie net boven de database */
86
+ width : 100% ;
87
+ text-align : center;
88
+ opacity : 0 ;
89
+ /* Laat de query-container binnen 1 seconde (na 1s vertraging) naar beneden schuiven
90
+ en fade-in, en weer verdwijnen als het top-lid sluit */
91
+ animation : slideDown 1s forwards 1s , fadeOut 0.5s forwards 4s ;
92
+ }
93
+
94
+ /* De query: typewriter-effect */
95
+ .query {
96
+ font-family : monospace;
97
+ font-size : 16px ;
98
+ display : inline-block;
99
+ white-space : nowrap;
100
+ overflow : hidden;
101
+ border-right : 2px solid black;
102
+ width : 0 ; /* start met 0 breedte */
103
+ /* Typewriter-effect: begint na 1s, duurt 2s */
104
+ animation : typing 2s steps (30 , end) forwards 1s , blink-caret 0.75s step-end infinite 3s ;
105
+ }
106
+
107
+ /* Tabel-container: verschijnt onderaan (onder het bottom-lid) */
108
+ .table-container {
109
+ position : absolute;
110
+ bottom : -150px ; /* start buiten beeld */
111
+ width : 100% ;
112
+ text-align : center;
113
+ opacity : 0 ;
114
+ /* Laat de tabel binnen 1s vanuit de onderkant verschijnen (start bij 4s),
115
+ en laat hem weer vervagen als de klep sluit (vanaf 6s) */
116
+ animation : slideUp 1s forwards 4s , fadeOut 0.5s forwards 6s ;
117
+ }
118
+
119
+ /* Chart-container: verschijnt later onderaan */
120
+ .chart-container {
121
+ position : absolute;
122
+ bottom : -150px ;
123
+ width : 100% ;
124
+ text-align : center;
125
+ opacity : 0 ;
126
+ /* Laat de grafiek binnen 1s vanuit de onderkant verschijnen (start bij 7s),
127
+ en laat hem weer vervagen als de klep sluit (vanaf 9s) */
128
+ animation : slideUp 1s forwards 7s , fadeOut 0.5s forwards 9s ;
129
+ }
130
+
131
+ /* Tabel-opmaak */
132
+ table {
133
+ width : 90% ;
134
+ border-collapse : collapse;
135
+ margin : 0 auto;
136
+ font-size : 14px ;
137
+ }
138
+
139
+ th , td {
140
+ border : 1px solid # ccc ;
141
+ padding : 5px ;
142
+ }
143
+
144
+ th {
145
+ background : # 2ecc71 ;
146
+ color : white;
147
+ }
148
+
149
+ /* --- Animatie Keyframes --- */
150
+
151
+ /* Top-lid animatie */
152
+ @keyframes topLidAnim {
153
+ 0% { transform : rotateX (0deg ); }
154
+ 10% { transform : rotateX (0deg ); }
155
+ 20% { transform : rotateX (-90deg ); }
156
+ 40% { transform : rotateX (-90deg ); }
157
+ 50% { transform : rotateX (0deg ); }
158
+ 100% { transform : rotateX (0deg ); }
159
+ }
160
+
161
+ /* Bottom-lid animatie */
162
+ @keyframes bottomLidAnim {
163
+ 0% { transform : rotateX (0deg ); }
164
+ 40% { transform : rotateX (0deg ); }
165
+ 50% { transform : rotateX (90deg ); }
166
+ 60% { transform : rotateX (90deg ); }
167
+ 70% { transform : rotateX (0deg ); }
168
+ 80% { transform : rotateX (90deg ); }
169
+ 90% { transform : rotateX (90deg ); }
170
+ 100% { transform : rotateX (0deg ); }
171
+ }
172
+
173
+ /* Slide-down voor query (van boven naar zijn plek) */
174
+ @keyframes slideDown {
175
+ from { transform : translateY (-50px ); opacity : 0 ; }
176
+ to { transform : translateY (0 ); opacity : 1 ; }
177
+ }
178
+
179
+ /* Slide-up voor tabel en grafiek (van onder naar zijn plek) */
180
+ @keyframes slideUp {
181
+ from { transform : translateY (50px ); opacity : 0 ; }
182
+ to { transform : translateY (0 ); opacity : 1 ; }
183
+ }
184
+
185
+ /* Fade-out (voor het geleidelijk verdwijnen van content) */
186
+ @keyframes fadeOut {
187
+ from { opacity : 1 ; }
188
+ to { opacity : 0 ; }
189
+ }
190
+
191
+ /* Typewriter-effect: breidt de breedte uit */
192
+ @keyframes typing {
193
+ from { width : 0 ; }
194
+ to { width : 100% ; }
195
+ }
196
+
197
+ /* Knipperende cursor */
198
+ @keyframes blink-caret {
199
+ 50% { border-color : transparent; }
200
+ }
201
+
0 commit comments