1+ <!DOCTYPE html>
2+ < html lang ="en ">
3+ < head >
4+ < meta charset ="UTF-8 ">
5+ < meta name ="viewport " content ="width=device-width, initial-scale=1.0 ">
6+ < title > Access Denied</ title >
7+ < style >
8+ * {
9+ margin : 0 ;
10+ padding : 0 ;
11+ box-sizing : border-box;
12+ }
13+
14+ html , body {
15+ height : 100% ;
16+ width : 100% ;
17+ display : flex;
18+ justify-content : center;
19+ align-items : center;
20+ font-family : -apple-system, BlinkMacSystemFont, 'Segoe UI' , Roboto, system-ui, sans-serif;
21+ background-color : # f8f8f8 ;
22+ color : # 1a1523 ;
23+ }
24+
25+ .page-container {
26+ width : 100% ;
27+ height : 100% ;
28+ display : flex;
29+ justify-content : center;
30+ align-items : center;
31+ padding : 20px ;
32+ background-image :
33+ linear-gradient (0deg , transparent 24% ,
34+ rgba (26 , 21 , 35 , 0.03 ) 25% ,
35+ rgba (26 , 21 , 35 , 0.03 ) 26% ,
36+ transparent 27% , transparent 74% ,
37+ rgba (26 , 21 , 35 , 0.03 ) 75% ,
38+ rgba (26 , 21 , 35 , 0.03 ) 76% ,
39+ transparent 77% ),
40+ linear-gradient (90deg , transparent 24% ,
41+ rgba (26 , 21 , 35 , 0.03 ) 25% ,
42+ rgba (26 , 21 , 35 , 0.03 ) 26% ,
43+ transparent 27% , transparent 74% ,
44+ rgba (26 , 21 , 35 , 0.03 ) 75% ,
45+ rgba (26 , 21 , 35 , 0.03 ) 76% ,
46+ transparent 77% );
47+ background-size : 50px 50px ;
48+ }
49+
50+ .container {
51+ background : white;
52+ padding : 3rem ;
53+ border-radius : 12px ;
54+ box-shadow : 0 4px 24px rgba (26 , 21 , 35 , 0.08 );
55+ width : 100% ;
56+ max-width : 800px ;
57+ position : relative;
58+ overflow : hidden;
59+ text-align : center;
60+ }
61+
62+ .container ::before {
63+ content : '' ;
64+ position : absolute;
65+ top : 0 ;
66+ left : 0 ;
67+ right : 0 ;
68+ bottom : 0 ;
69+ background : repeating-radial-gradient (
70+ circle at 50% 50% ,
71+ transparent,
72+ transparent 40px ,
73+ rgba (26 , 21 , 35 , 0.03 ) 40px ,
74+ rgba (26 , 21 , 35 , 0.03 ) 41px
75+ );
76+ pointer-events : none;
77+ animation : rotateBackground 20s linear infinite;
78+ }
79+
80+ .container ::after {
81+ content : '' ;
82+ position : absolute;
83+ top : 0 ;
84+ left : 0 ;
85+ right : 0 ;
86+ bottom : 0 ;
87+ background : radial-gradient (
88+ circle at 50% 50% ,
89+ transparent 0% ,
90+ rgba (26 , 21 , 35 , 0.02 ) 70% ,
91+ rgba (26 , 21 , 35 , 0.05 ) 100%
92+ );
93+ pointer-events : none;
94+ }
95+
96+ @keyframes rotateBackground {
97+ 0% { transform : rotate (0deg ); }
98+ 100% { transform : rotate (360deg ); }
99+ }
100+
101+ .logo {
102+ margin-bottom : 2rem ;
103+ position : relative;
104+ z-index : 1 ;
105+ }
106+
107+ .logo svg {
108+ width : 500px ;
109+ height : 250px ;
110+ max-width : 100% ;
111+ }
112+
113+ .divider {
114+ margin : 2rem 0 ;
115+ height : 120px ;
116+ position : relative;
117+ z-index : 1 ;
118+ }
119+
120+ .divider svg {
121+ width : 100% ;
122+ height : 100% ;
123+ }
124+
125+ @keyframes textGlitch {
126+ 0% { transform : translate (0 , 0 ); text-shadow : none; }
127+ 2% { transform : translate (-2px , 1px ); text-shadow : -1px 0 # 1a1523 ; }
128+ 4% { transform : translate (2px , -1px ); text-shadow : 1px 0 # 1a1523 ; }
129+ 6% { transform : translate (0 , 0 ); text-shadow : none; }
130+ 100% { transform : translate (0 , 0 ); text-shadow : none; }
131+ }
132+
133+ @keyframes flicker {
134+ 0% { opacity : 0.97 ; }
135+ 5% { opacity : 0.95 ; }
136+ 10% { opacity : 0.97 ; }
137+ 15% { opacity : 0.94 ; }
138+ 25% { opacity : 0.98 ; }
139+ 30% { opacity : 0.93 ; }
140+ 35% { opacity : 0.97 ; }
141+ 40% { opacity : 0.95 ; }
142+ 45% { opacity : 0.98 ; }
143+ 50% { opacity : 0.94 ; }
144+ 100% { opacity : 0.98 ; }
145+ }
146+
147+ h1 {
148+ animation : textGlitch 4s infinite;
149+ margin : 0 0 1rem 0 ;
150+ font-size : 2.5rem ;
151+ font-weight : 600 ;
152+ letter-spacing : -0.02em ;
153+ position : relative;
154+ z-index : 1 ;
155+ }
156+
157+ p {
158+ margin : 1rem 0 ;
159+ line-height : 1.6 ;
160+ color : # 4a4a4a ;
161+ font-size : 1.125rem ;
162+ position : relative;
163+ z-index : 1 ;
164+ }
165+
166+ .contact {
167+ margin-top : 2rem ;
168+ padding-top : 2rem ;
169+ border-top : 1px solid rgba (26 , 21 , 35 , 0.1 );
170+ position : relative;
171+ z-index : 1 ;
172+ }
173+
174+ .contact p {
175+ font-weight : 500 ;
176+ color : # 1a1523 ;
177+ }
178+
179+ @media (max-width : 768px ) {
180+ .container {
181+ padding : 2rem ;
182+ }
183+ .logo svg {
184+ width : 400px ;
185+ height : 200px ;
186+ }
187+ .divider {
188+ height : 80px ;
189+ }
190+ }
191+
192+ @media (max-width : 480px ) {
193+ .container {
194+ padding : 1.5rem ;
195+ }
196+ .logo svg {
197+ width : 280px ;
198+ height : 140px ;
199+ }
200+ .divider {
201+ height : 60px ;
202+ }
203+ }
204+ </ style >
205+ </ head >
206+ < body >
207+ < div class ="page-container ">
208+ < div class ="container ">
209+ < div class ="logo ">
210+ < svg viewBox ="0 0 500 250 " xmlns ="http://www.w3.org/2000/svg ">
211+ <!-- Add defs first -->
212+ < defs >
213+ < filter id ="crtNoise " x ="0% " y ="0% " width ="100% " height ="100% ">
214+ < feTurbulence type ="fractalNoise " baseFrequency ="0.5 " numOctaves ="1 " result ="noise "/>
215+ < feColorMatrix in ="noise " type ="saturate " values ="0 " result ="desaturatedNoise "/>
216+ < feComposite operator ="arithmetic " k1 ="0 " k2 ="0.03 " k3 ="0 " k4 ="0 " in ="SourceGraphic " in2 ="desaturatedNoise "/>
217+ </ filter >
218+ < radialGradient id ="retroGlow " cx ="50% " cy ="50% " r ="50% ">
219+ < stop offset ="0% " stop-color ="#1a1523 " stop-opacity ="0.2 "/>
220+ < stop offset ="100% " stop-color ="#1a1523 " stop-opacity ="0 "/>
221+ </ radialGradient >
222+ < pattern id ="grid " width ="20 " height ="20 " patternUnits ="userSpaceOnUse ">
223+ < path d ="M 20 0 L 0 0 0 20 " fill ="none " stroke ="#1a1523 " stroke-width ="0.5 " stroke-opacity ="0.1 "/>
224+ </ pattern >
225+ </ defs >
226+ <!-- Background grid -->
227+ < rect width ="500 " height ="250 " fill ="url(#grid) " opacity ="0.3 "/>
228+ <!-- Text and other elements -->
229+ < text x ="50% " y ="40% " text-anchor ="middle " fill ="#1a1523 " font-size ="60 " font-weight ="600 " letter-spacing ="-0.02em ">
230+ General Magic
231+ < animate attributeName ="opacity " values ="0.95;1;0.95 " dur ="2s " repeatCount ="indefinite "/>
232+ </ text >
233+ < text x ="50% " y ="65% " text-anchor ="middle " fill ="#1a1523 " font-size ="30 " font-weight ="500 " letter-spacing ="0.02em ">
234+ Devops Team
235+ < animate attributeName ="opacity " values ="0.9;1;0.9 " dur ="2s " repeatCount ="indefinite "/>
236+ </ text >
237+ <!-- Animated stars -->
238+ < g fill ="#1a1523 ">
239+ < path d ="M150,70 l5,-5 l5,5 l-5,5 z ">
240+ < animate attributeName ="opacity " values ="0.6;1;0.6 " dur ="3s " repeatCount ="indefinite "/>
241+ < animateTransform attributeName ="transform " type ="rotate " from ="0 155 70 " to ="360 155 70 " dur ="10s " repeatCount ="indefinite "/>
242+ </ path >
243+ < path d ="M350,70 l5,-5 l5,5 l-5,5 z ">
244+ < animate attributeName ="opacity " values ="1;0.6;1 " dur ="3s " repeatCount ="indefinite "/>
245+ < animateTransform attributeName ="transform " type ="rotate " from ="0 355 70 " to ="360 355 70 " dur ="8s " repeatCount ="indefinite "/>
246+ </ path >
247+ < path d ="M250,90 l4,-4 l4,4 l-4,4 z ">
248+ < animate attributeName ="opacity " values ="0.8;1;0.8 " dur ="3s " repeatCount ="indefinite "/>
249+ < animateTransform attributeName ="transform " type ="rotate " from ="0 254 90 " to ="360 254 90 " dur ="12s " repeatCount ="indefinite "/>
250+ </ path >
251+ </ g >
252+ </ svg >
253+ </ div >
254+
255+ < div class ="divider ">
256+ < svg viewBox ="0 0 800 200 " xmlns ="http://www.w3.org/2000/svg ">
257+ <!-- Animated corner accents -->
258+ < path d ="M50,20 L80,20 L80,50 " fill ="none " stroke ="#1a1523 " stroke-width ="1 " stroke-opacity ="0.2 ">
259+ < animate attributeName ="stroke-dasharray " values ="0,200;200,0 " dur ="3s " repeatCount ="indefinite "/>
260+ </ path >
261+ < path d ="M750,20 L720,20 L720,50 " fill ="none " stroke ="#1a1523 " stroke-width ="1 " stroke-opacity ="0.2 ">
262+ < animate attributeName ="stroke-dasharray " values ="0,200;200,0 " dur ="3s " repeatCount ="indefinite "/>
263+ </ path >
264+ < path d ="M50,180 L80,180 L80,150 " fill ="none " stroke ="#1a1523 " stroke-width ="1 " stroke-opacity ="0.2 ">
265+ < animate attributeName ="stroke-dasharray " values ="0,200;200,0 " dur ="3s " repeatCount ="indefinite "/>
266+ </ path >
267+ < path d ="M750,180 L720,180 L720,150 " fill ="none " stroke ="#1a1523 " stroke-width ="1 " stroke-opacity ="0.2 ">
268+ < animate attributeName ="stroke-dasharray " values ="0,200;200,0 " dur ="3s " repeatCount ="indefinite "/>
269+ </ path >
270+
271+ <!-- Animated pulse circles -->
272+ < circle cx ="400 " cy ="100 " r ="80 " fill ="none " stroke ="#1a1523 " stroke-width ="0.5 " stroke-opacity ="0.1 ">
273+ < animate attributeName ="r " values ="80;85;80 " dur ="4s " repeatCount ="indefinite "/>
274+ < animate attributeName ="stroke-opacity " values ="0.1;0.05;0.1 " dur ="4s " repeatCount ="indefinite "/>
275+ </ circle >
276+ < circle cx ="400 " cy ="100 " r ="90 " fill ="none " stroke ="#1a1523 " stroke-width ="0.5 " stroke-opacity ="0.05 ">
277+ < animate attributeName ="r " values ="90;95;90 " dur ="4s " repeatCount ="indefinite " begin ="1s "/>
278+ < animate attributeName ="stroke-opacity " values ="0.05;0.02;0.05 " dur ="4s " repeatCount ="indefinite "/>
279+ </ circle >
280+
281+ <!-- Rotating triangles -->
282+ < g transform ="translate(400 100) ">
283+ < g >
284+ < path d ="M-30,-30 L30,-30 L0,30 Z " fill ="none " stroke ="#1a1523 " stroke-width ="0.5 " stroke-opacity ="0.1 ">
285+ < animateTransform
286+ attributeName ="transform "
287+ type ="rotate "
288+ from ="0 "
289+ to ="360 "
290+ dur ="20s "
291+ repeatCount ="indefinite "/>
292+ </ path >
293+ </ g >
294+ < g >
295+ < path d ="M-20,-35 L20,-35 L0,20 Z " fill ="none " stroke ="#1a1523 " stroke-width ="0.5 " stroke-opacity ="0.1 ">
296+ < animateTransform
297+ attributeName ="transform "
298+ type ="rotate "
299+ from ="360 "
300+ to ="0 "
301+ dur ="15s "
302+ repeatCount ="indefinite "/>
303+ </ path >
304+ </ g >
305+ </ g >
306+
307+ <!-- Animated sine wave -->
308+ < path d ="M200,100 Q300,60 400,100 T600,100 " fill ="none " stroke ="#1a1523 " stroke-width ="2 " stroke-opacity ="0.3 ">
309+ < animate attributeName ="d "
310+ values ="M200,100 Q300,60 400,100 T600,100;
311+ M200,100 Q300,140 400,100 T600,100;
312+ M200,100 Q300,60 400,100 T600,100 "
313+ dur ="3s "
314+ repeatCount ="indefinite "/>
315+ </ path >
316+
317+ <!-- Central circle with CRT effect -->
318+ < circle cx ="400 " cy ="100 " r ="50 " fill ="url(#retroGlow) " filter ="url(#crtNoise) ">
319+ < animate attributeName ="opacity " values ="0.8;0.9;0.8 " dur ="2s " repeatCount ="indefinite "/>
320+ </ circle >
321+ < circle cx ="400 " cy ="100 " r ="40 " fill ="none " stroke ="#1a1523 " stroke-width ="1 ">
322+ < animate attributeName ="stroke-dasharray " values ="0,251.2;251.2,0 " dur ="3s " repeatCount ="indefinite "/>
323+ </ circle >
324+
325+ <!-- Geometric accents -->
326+ < g fill ="#1a1523 " fill-opacity ="0.2 ">
327+ < rect x ="370 " y ="70 " width ="60 " height ="60 " transform ="rotate(45 400 100) ">
328+ < animate attributeName ="opacity " values ="0.2;0.3;0.2 " dur ="4s " repeatCount ="indefinite "/>
329+ </ rect >
330+ < circle cx ="400 " cy ="100 " r ="25 ">
331+ < animate attributeName ="opacity " values ="0.2;0.4;0.2 " dur ="3s " repeatCount ="indefinite "/>
332+ </ circle >
333+ </ g >
334+ </ svg >
335+ </ div >
336+
337+ < h1 > Access Denied</ h1 >
338+ < p > You don't have permission to access this page.</ p >
339+ < div class ="contact ">
340+ < p > If you believe this is a mistake, please contact your system administrator.</ p >
341+ </ div >
342+ </ div >
343+ </ div >
344+ </ body >
345+ </ html >
0 commit comments