Skip to content
OwnlyPlans

index.html.md

Complete code of the result in the video.

Part of Role and permissions matrix by Admin

Download Open the item

index.html

The finished result as one file. Save it as index.html and open it.

<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Role and permissions matrix</title><style>*{box-sizing:border-box;margin:0;padding:0}
html,body{width:1280px;height:720px;overflow:hidden}
body{font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased}
@property --n{syntax:'<integer>';inherits:false;initial-value:0}
.stage{position:absolute;inset:0;animation:cyc 8s linear infinite both}
@keyframes cyc{0%{opacity:0}4%{opacity:1}94%{opacity:1}100%{opacity:0}}
body:not(.go) *,body:not(.go) *::before,body:not(.go) *::after{animation-play-state:paused!important}
.cnt::after{content:counter(n)}.cnt{counter-reset:n var(--n)}
@media (prefers-reduced-motion:reduce){*{animation:none!important}}


body{background:#150f2b;color:#ece8ff}
.w{position:absolute;left:48px;right:48px;top:34px}
h1{font-size:28px;letter-spacing:-.03em}.sub{color:#9b92c9;font-size:14px;margin:6px 0 22px}
table{width:100%;border-collapse:collapse;background:#1d1640;border-radius:20px;overflow:hidden}
th{padding:18px 20px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:#a79ee0;text-align:center;background:#241b52}th:first-child{text-align:left}
td{height:68px;border-top:1px solid #2b2260;text-align:center;font-size:15px}td:first-child{text-align:left;padding-left:20px}
tr{opacity:0;animation:tr 8s infinite both}tr:nth-child(2){animation-delay:.08s}tr:nth-child(3){animation-delay:.16s}tr:nth-child(4){animation-delay:.24s}tr:nth-child(5){animation-delay:.32s}tr:nth-child(6){animation-delay:.4s}
@keyframes tr{0%,6%{opacity:0;transform:translateY(10px)}14%,100%{opacity:1;transform:none}}
.tg{display:inline-block;width:46px;height:26px;border-radius:99px;background:#3a2f78;position:relative}.tg::after{content:"";position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:50%;background:#fff}
.on{background:#8b5cf6}.on::after{left:23px}
.f1{animation:f1 8s infinite both}.f2{animation:f2 8s infinite both}
@keyframes f1{0%,34%{background:#3a2f78}40%,100%{background:#8b5cf6}}
.f1::after{animation:m1 8s infinite both}@keyframes m1{0%,34%{left:3px}40%,100%{left:23px}}
@keyframes f2{0%,52%{background:#8b5cf6}58%,100%{background:#3a2f78}}
.f2::after{animation:m2 8s infinite both}@keyframes m2{0%,52%{left:23px}58%,100%{left:3px}}
.hl td{animation:hl 8s infinite both}@keyframes hl{0%,30%{background:transparent}36%,46%{background:#8b5cf622}52%,60%{background:#8b5cf622}66%,100%{background:transparent}}
.sv{position:absolute;right:48px;bottom:36px;background:#8b5cf6;color:#fff;border-radius:14px;padding:14px 24px;font-weight:700;animation:sv 8s infinite both}
@keyframes sv{0%,66%{transform:none;opacity:1}70%{transform:scale(.92)}74%,100%{transform:none}}
.ts{position:absolute;left:48px;bottom:36px;background:#123f2b;border:1px solid #34d399;color:#6ee7b7;border-radius:14px;padding:14px 20px;font-weight:700;opacity:0;animation:ts 8s infinite both}
@keyframes ts{0%,74%{opacity:0;transform:translateY(12px)}80%,94%{opacity:1;transform:none}100%{opacity:0}}
</style></head><body><div class="stage"><div class="w"><h1>Roles and permissions</h1><div class="sub">Decide who can view, edit, publish and bill</div>
<table><thead><tr><th>Role</th><th>View</th><th>Edit</th><th>Publish</th><th>Billing</th></tr></thead><tbody><tr><td>Admin</td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg on "></span></td></tr><tr class="hl"><td>Editor</td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg on f2"></span></td><td><span class="tg  "></span></td></tr><tr class="hl"><td>Support agent</td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg  f1"></span></td><td><span class="tg  "></span></td></tr><tr><td>Finance</td><td><span class="tg on "></span></td><td><span class="tg  "></span></td><td><span class="tg  "></span></td><td><span class="tg on "></span></td></tr><tr><td>Viewer</td><td><span class="tg on "></span></td><td><span class="tg  "></span></td><td><span class="tg  "></span></td><td><span class="tg  "></span></td></tr></tbody></table></div><div class="ts">Permissions updated for 2 roles</div><div class="sv">Save changes</div></div><script>window.start=function(){document.body.classList.add("go")};if(!/[?&]rec/.test(location.search))start();</script></body></html>
Source, 39 lines
# index.html

The finished result as one file. Save it as index.html and open it.

```html
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1"><title>Role and permissions matrix</title><style>*{box-sizing:border-box;margin:0;padding:0}
html,body{width:1280px;height:720px;overflow:hidden}
body{font-family:ui-sans-serif,system-ui,-apple-system,"Segoe UI",Roboto,sans-serif;-webkit-font-smoothing:antialiased}
@property --n{syntax:'<integer>';inherits:false;initial-value:0}
.stage{position:absolute;inset:0;animation:cyc 8s linear infinite both}
@keyframes cyc{0%{opacity:0}4%{opacity:1}94%{opacity:1}100%{opacity:0}}
body:not(.go) *,body:not(.go) *::before,body:not(.go) *::after{animation-play-state:paused!important}
.cnt::after{content:counter(n)}.cnt{counter-reset:n var(--n)}
@media (prefers-reduced-motion:reduce){*{animation:none!important}}


body{background:#150f2b;color:#ece8ff}
.w{position:absolute;left:48px;right:48px;top:34px}
h1{font-size:28px;letter-spacing:-.03em}.sub{color:#9b92c9;font-size:14px;margin:6px 0 22px}
table{width:100%;border-collapse:collapse;background:#1d1640;border-radius:20px;overflow:hidden}
th{padding:18px 20px;font-size:12px;letter-spacing:.1em;text-transform:uppercase;color:#a79ee0;text-align:center;background:#241b52}th:first-child{text-align:left}
td{height:68px;border-top:1px solid #2b2260;text-align:center;font-size:15px}td:first-child{text-align:left;padding-left:20px}
tr{opacity:0;animation:tr 8s infinite both}tr:nth-child(2){animation-delay:.08s}tr:nth-child(3){animation-delay:.16s}tr:nth-child(4){animation-delay:.24s}tr:nth-child(5){animation-delay:.32s}tr:nth-child(6){animation-delay:.4s}
@keyframes tr{0%,6%{opacity:0;transform:translateY(10px)}14%,100%{opacity:1;transform:none}}
.tg{display:inline-block;width:46px;height:26px;border-radius:99px;background:#3a2f78;position:relative}.tg::after{content:"";position:absolute;left:3px;top:3px;width:20px;height:20px;border-radius:50%;background:#fff}
.on{background:#8b5cf6}.on::after{left:23px}
.f1{animation:f1 8s infinite both}.f2{animation:f2 8s infinite both}
@keyframes f1{0%,34%{background:#3a2f78}40%,100%{background:#8b5cf6}}
.f1::after{animation:m1 8s infinite both}@keyframes m1{0%,34%{left:3px}40%,100%{left:23px}}
@keyframes f2{0%,52%{background:#8b5cf6}58%,100%{background:#3a2f78}}
.f2::after{animation:m2 8s infinite both}@keyframes m2{0%,52%{left:23px}58%,100%{left:3px}}
.hl td{animation:hl 8s infinite both}@keyframes hl{0%,30%{background:transparent}36%,46%{background:#8b5cf622}52%,60%{background:#8b5cf622}66%,100%{background:transparent}}
.sv{position:absolute;right:48px;bottom:36px;background:#8b5cf6;color:#fff;border-radius:14px;padding:14px 24px;font-weight:700;animation:sv 8s infinite both}
@keyframes sv{0%,66%{transform:none;opacity:1}70%{transform:scale(.92)}74%,100%{transform:none}}
.ts{position:absolute;left:48px;bottom:36px;background:#123f2b;border:1px solid #34d399;color:#6ee7b7;border-radius:14px;padding:14px 20px;font-weight:700;opacity:0;animation:ts 8s infinite both}
@keyframes ts{0%,74%{opacity:0;transform:translateY(12px)}80%,94%{opacity:1;transform:none}100%{opacity:0}}
</style></head><body><div class="stage"><div class="w"><h1>Roles and permissions</h1><div class="sub">Decide who can view, edit, publish and bill</div>
<table><thead><tr><th>Role</th><th>View</th><th>Edit</th><th>Publish</th><th>Billing</th></tr></thead><tbody><tr><td>Admin</td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg on "></span></td></tr><tr class="hl"><td>Editor</td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg on f2"></span></td><td><span class="tg  "></span></td></tr><tr class="hl"><td>Support agent</td><td><span class="tg on "></span></td><td><span class="tg on "></span></td><td><span class="tg  f1"></span></td><td><span class="tg  "></span></td></tr><tr><td>Finance</td><td><span class="tg on "></span></td><td><span class="tg  "></span></td><td><span class="tg  "></span></td><td><span class="tg on "></span></td></tr><tr><td>Viewer</td><td><span class="tg on "></span></td><td><span class="tg  "></span></td><td><span class="tg  "></span></td><td><span class="tg  "></span></td></tr></tbody></table></div><div class="ts">Permissions updated for 2 roles</div><div class="sv">Save changes</div></div><script>window.start=function(){document.body.classList.add("go")};if(!/[?&]rec/.test(location.search))start();</script></body></html>
```

Your AI tool
Starter prompt

		

Download the plan