<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>mgf-cloud</title>
<style>
 :root{
  --bg:#f5f6f8;
  --surface:#ffffff;
  --ink:#1b1f2a;
  --ink-soft:#5b6472;
  --ink-faint:#8a929e;
  --border:#e4e7ec;
  --border-strong:#d4d9e0;
  --navbg:#151821;
  --navbg-2:#1d2230;
  --nav-ink:#c8cdd8;
  --nav-ink-hi:#ffffff;
  --accent:#4caf50;
  --accent-hi:#43a047;
  --accent-soft:#e8f5e9;
  --radius:8px;
  --shadow:0 1px 2px rgba(16,24,40,.05), 0 1px 3px rgba(16,24,40,.08);
  --shadow-lg:0 4px 12px rgba(16,24,40,.08);
  --mono:ui-monospace, SFMono-Regular, Menlo, Consolas, "Liberation Mono", monospace;
  --sans:system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
 }
 *{box-sizing:border-box}
 html,body{margin:0}
 body{font-family:var(--sans);color:var(--ink);background:var(--bg);font-size:14px;line-height:1.5;-webkit-font-smoothing:antialiased}

 /* ---- Navbar ---- */
 .navbar{background:linear-gradient(180deg,var(--navbg-2),var(--navbg));border-bottom:1px solid #0c0e14}
 .navbar-inner{max-width:1080px;margin:0 auto;padding:0 1.25rem;display:flex;align-items:center;flex-wrap:wrap;gap:.25rem 1.25rem;min-height:54px}
 .brand{display:flex;align-items:center;gap:.55rem;color:var(--nav-ink-hi);font-weight:700;font-size:1.02rem;letter-spacing:-.01em;text-decoration:none;margin-right:.5rem}
 .brand .logo{width:22px;height:22px;border-radius:6px;background:var(--accent);display:inline-flex;align-items:center;justify-content:center;color:#0e2a12;font-weight:800;font-size:.8rem;box-shadow:0 0 0 1px rgba(255,255,255,.06) inset}
 .navlinks{display:flex;flex-wrap:wrap;align-items:center;gap:.15rem;margin-left:auto}
 .navlinks a{color:var(--nav-ink);text-decoration:none;font-size:.86rem;padding:.4rem .7rem;border-radius:6px;transition:background .12s,color .12s}
 .navlinks a:hover{color:var(--nav-ink-hi);background:rgba(255,255,255,.07)}

 /* ---- Layout ---- */
 main{max-width:1080px;margin:0 auto;padding:1.6rem 1.25rem 3rem}

 /* ---- Page header ---- */
 .page-header{display:flex;align-items:flex-start;justify-content:space-between;flex-wrap:wrap;gap:.75rem;margin:0 0 1.25rem}
 .page-header .titles{min-width:0}
 .page-header h1{font-size:1.45rem;font-weight:700;letter-spacing:-.02em;margin:0;line-height:1.2}
 .page-header .subtitle{color:var(--ink-soft);margin:.25rem 0 0;font-size:.9rem}
 .page-header .actions{display:flex;gap:.5rem;flex-wrap:wrap}

 h2{font-size:1.05rem;font-weight:650;letter-spacing:-.01em;margin:1.8rem 0 .7rem}
 a{color:var(--accent-hi)}
 .muted{color:var(--ink-faint)}

 /* ---- Cards ---- */
 .card{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1.1rem 1.25rem;margin:0 0 1.1rem}
 .card-title{font-size:.78rem;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:var(--ink-soft);margin:0 0 .85rem}
 .card-body{padding:0}

 /* ---- Stat cards ---- */
 .stat-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(150px,1fr));gap:.9rem;margin:0 0 1.1rem}
 .stat{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);padding:1rem 1.1rem}
 .stat .num{font-size:1.85rem;font-weight:700;line-height:1.1;letter-spacing:-.02em;color:var(--ink)}
 .stat .label{margin-top:.2rem;font-size:.82rem;color:var(--ink-soft)}

 /* ---- Empty placeholder ---- */
 .placeholder{color:var(--ink-faint);font-size:.9rem;padding:1.4rem;border:1px dashed var(--border-strong);border-radius:var(--radius);text-align:center}

 /* ---- Tables ---- */
 .table-wrap{background:var(--surface);border:1px solid var(--border);border-radius:var(--radius);box-shadow:var(--shadow);overflow-x:auto;margin:0 0 1.1rem}
 table{border-collapse:collapse;width:100%;font-size:.875rem}
 thead th{background:#fafbfc;color:var(--ink-soft);font-weight:600;font-size:.74rem;text-transform:uppercase;letter-spacing:.05em;text-align:left;padding:.65rem .85rem;border-bottom:1px solid var(--border);white-space:nowrap}
 tbody td{padding:.6rem .85rem;border-bottom:1px solid var(--border);vertical-align:middle}
 tbody tr:last-child td{border-bottom:none}
 tbody tr:hover{background:#f8f9fb}
 td.num,th.num{text-align:right;font-variant-numeric:tabular-nums}
 td.actions,th.actions{text-align:right;white-space:nowrap}
 td.actions form.inline{margin-left:.35rem}

 /* key/value table (detail views) */
 table.kv tbody th{background:#fafbfc;color:var(--ink-soft);font-weight:600;text-align:left;width:170px;padding:.6rem .85rem;border-bottom:1px solid var(--border);white-space:nowrap;text-transform:none;letter-spacing:normal;font-size:.875rem}

 /* ---- Monospace ---- */
 .mono,code{font-family:var(--mono);font-size:.84em}

 /* ---- Badges ---- */
 .badge{display:inline-block;padding:.16rem .55rem;border-radius:999px;font-size:.74rem;font-weight:600;line-height:1.4;letter-spacing:.01em;border:1px solid transparent;white-space:nowrap}
 .badge-ok{background:var(--accent-soft);color:#1e6b27;border-color:#bfe3c2}
 .badge-info{background:#e7f0fd;color:#1c4f9c;border-color:#c4d9f7}
 .badge-warn{background:#fef3da;color:#8a5a00;border-color:#f6dca0}
 .badge-danger{background:#fde8e8;color:#a3271f;border-color:#f4c2bf}
 .badge-neutral{background:#eef0f3;color:#566;border-color:#dfe3e8}

 /* ---- Buttons ---- */
 button,.btn{font-family:inherit;cursor:pointer;font-size:.82rem;font-weight:600;line-height:1.4;padding:.4rem .8rem;border-radius:6px;border:1px solid var(--border-strong);background:var(--surface);color:var(--ink);text-decoration:none;display:inline-block;transition:background .12s,border-color .12s,box-shadow .12s;white-space:nowrap}
 button:hover,.btn:hover{background:#f3f4f6;border-color:#c4cad2}
 button:active,.btn:active{box-shadow:inset 0 1px 2px rgba(16,24,40,.08)}
 .btn-primary,button.primary{background:var(--accent);border-color:var(--accent-hi);color:#fff}
 .btn-primary:hover,button.primary:hover{background:var(--accent-hi);border-color:var(--accent-hi)}
 button.danger,.btn-danger,.danger button{color:#b42318;border-color:#f1c6c1;background:#fff}
 button.danger:hover,.btn-danger:hover{background:#fde8e8;border-color:#eaa9a3}
 .btn-link{color:var(--accent-hi);text-decoration:none;font-weight:600;font-size:.85rem}
 .btn-link:hover{text-decoration:underline}

 /* ---- Forms ---- */
 form.inline{display:inline}
 input,select,textarea{font-family:inherit;font-size:.85rem;color:var(--ink);padding:.45rem .6rem;border:1px solid var(--border-strong);border-radius:6px;background:#fff;max-width:100%}
 input:focus,select:focus,textarea:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 3px rgba(76,175,80,.15)}
 input[type=checkbox]{padding:0;vertical-align:middle}
 input[type=file]{padding:.35rem;border-style:dashed}
 textarea{font-family:var(--mono);font-size:.82rem;width:100%}
 .form-stack p{margin:0 0 .9rem}
 .form-stack label.field{display:block;font-weight:600;font-size:.82rem;color:var(--ink-soft);margin-bottom:.3rem}
 .form-row{display:flex;flex-wrap:wrap;align-items:flex-end;gap:.7rem}
 .form-row label.field{display:flex;flex-direction:column;font-weight:600;font-size:.82rem;color:var(--ink-soft);gap:.3rem}
 td.actions input{padding:.35rem .5rem;width:6.5rem}

 .error-title{color:#b42318}

 @media (max-width:700px){
  .navbar-inner{min-height:0;padding-top:.5rem;padding-bottom:.5rem}
  .navlinks{margin-left:0;width:100%}
  main{padding:1.1rem .85rem 2.5rem}
  table.kv tbody th{width:auto}
 }
</style>
</head>
<body>
<nav class="navbar">
 <div class="navbar-inner">
  <a class="brand" href="/"><span class="logo">m</span>mgf-cloud</a>
  <div class="navlinks">
   <a href="/">Dashboard</a><a href="/vms">VMs</a><a href="/volumes">Volumes</a>
   <a href="/floating-ips">Floating IPs</a><a href="/security-groups">Security groups</a>
   <a href="/keypairs">Keypairs</a><a href="/objects">Object storage</a>
  </div>
 </div>
</nav>
<main>{% block content %}{% endblock %}</main>
</body>
</html>
