:root{--scheme:dark;--bg:#000;--surface:#1c1c1e;--surface-2:#2c2c2e;--surface-3:#3a3a3c;--separator:#2c2c2e;--hover:#222225;--input-focus:#333336;--header-bg:rgba(0,0,0,.82);--overlay:rgba(0,0,0,.55);--search-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='15' fill='none' stroke='%23636366' stroke-linecap='round' stroke-width='2'%3E%3Ccircle cx='6.5' cy='6.5' r='4.5'/%3E%3Cpath d='m10 10 3.5 3.5'/%3E%3C/svg%3E");--label:#fff;--label-2:#98989d;--label-3:#636366;--blue:#0a84ff;--green:#30d158;--orange:#ff9f0a;--red:#ff453a;--purple:#bf5af2;--pink:#ff2d55;--teal:#64d2ff;--yellow:#ffd60a;--radius:14px;--radius-sm:10px;--font:-apple-system,BlinkMacSystemFont,"SF Pro Text","SF Pro Display","Helvetica Neue",Helvetica,Arial,sans-serif}:root[data-theme=light]{--scheme:light;--bg:#f5f5f7;--surface:#fff;--surface-2:#ececf1;--surface-3:#d1d1d6;--separator:#e5e5ea;--hover:#f2f2f5;--input-focus:#fff;--header-bg:hsla(0,0%,100%,.85);--overlay:rgba(0,0,0,.35);--search-icon:url("data:image/svg+xml;charset=utf-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='15' height='15' fill='none' stroke='%238e8e93' stroke-linecap='round' stroke-width='2'%3E%3Ccircle cx='6.5' cy='6.5' r='4.5'/%3E%3Cpath d='m10 10 3.5 3.5'/%3E%3C/svg%3E");--label:#1d1d1f;--label-2:#6e6e73;--label-3:#aeaeb2;--blue:#007aff;--green:#34c759;--orange:#ff9500;--red:#ff3b30;--purple:#af52de;--pink:#ff2d55;--teal:#5ac8fa;--yellow:#fc0}*{box-sizing:border-box;margin:0;padding:0}html{color-scheme:var(--scheme,dark)}body{background:var(--bg);color:var(--label);font-family:var(--font);line-height:1.5;min-height:100vh;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility}a{text-decoration:none}a,button{color:inherit}button{cursor:pointer;font-family:inherit}::-moz-selection{background:#0a84ff59}::selection{background:#0a84ff59}.app-shell{display:flex;flex-direction:column;min-height:100vh}.site-header{backdrop-filter:blur(20px) saturate(1.8);-webkit-backdrop-filter:blur(20px) saturate(1.8);background:var(--header-bg);border-bottom:1px solid var(--separator);position:sticky;top:0;z-index:40}.header-inner{gap:16px;justify-content:space-between;margin:0 auto;max-width:1080px;padding:12px 22px}.brand,.header-inner{align-items:center;display:flex}.brand{font-size:16px;font-weight:400;gap:10px;letter-spacing:-.01em}.brand strong{font-weight:700}.brand-dot{background:var(--blue);border-radius:50%;height:10px;width:10px}.header-nav{align-items:center;display:flex;gap:10px}.nav-link{border-radius:8px;color:var(--label-2);font-size:14px;font-weight:500;padding:7px 12px;transition:color .15s ease,background .15s ease}.nav-link.active,.nav-link:hover{color:var(--label)}.theme-switch{background:var(--surface-2);border-radius:999px;display:inline-flex;margin:0 4px;padding:2px}.theme-switch button{background:transparent;border:none;border-radius:999px;color:var(--label-2);font-size:12.5px;font-weight:600;padding:5px 11px;transition:color .15s ease,background .15s ease}.theme-switch button:hover{color:var(--label)}.theme-switch button.active{background:var(--surface);box-shadow:0 1px 3px #0003;color:var(--label)}.user-chip{align-items:center;color:var(--label-2);display:flex;font-size:13px;gap:8px;padding:0 4px}.user-chip .role-tag{border:1px solid rgba(10,132,255,.4);border-radius:6px;color:var(--blue);font-size:11px;font-weight:600;letter-spacing:.06em;padding:2px 7px;text-transform:uppercase}.user-chip .role-tag.viewer{border-color:var(--surface-3);color:var(--label-2)}.site-main{flex:1;margin:0 auto;max-width:1080px;padding:30px 22px 64px;width:100%}.site-footer{border-top:1px solid var(--separator);color:var(--label-3);font-size:12px;padding:16px 22px;text-align:center}.btn{align-items:center;background:var(--surface);border:1px solid var(--surface-3);border-radius:var(--radius-sm);color:var(--label);display:inline-flex;font-size:14px;font-weight:600;gap:7px;justify-content:center;padding:9px 15px;transition:background .15s ease,border-color .15s ease,transform .1s ease}.btn:hover{background:var(--surface-2)}.btn:active{transform:scale(.98)}.btn-primary{background:var(--blue);border-color:var(--blue);color:#fff}.btn-primary:hover{background:#3395ff}.btn-danger{background:transparent;border-color:transparent;color:var(--red)}.btn-danger:hover{background:#ff453a1f}.btn-ghost{background:transparent;border-color:transparent;color:var(--label-2)}.btn-ghost:hover{background:var(--surface);color:var(--label)}.btn-sm{border-radius:8px;font-size:13px;padding:6px 12px}.btn-block{font-size:15px;padding:12px;width:100%}.btn:disabled{cursor:default;opacity:.5;transform:none}.text-btn{background:none;border:none;border-radius:6px;color:var(--blue);font-size:13px;font-weight:500;padding:4px 6px;transition:background .15s ease}.text-btn:hover{background:#0a84ff1f}.text-btn.danger{color:var(--red)}.text-btn.danger:hover{background:#ff453a1f}.page-head{align-items:flex-end;display:flex;flex-wrap:wrap;gap:20px;justify-content:space-between;margin-bottom:18px}.page-head h1{font-size:28px;font-weight:700;letter-spacing:-.02em}.page-head .lede{color:var(--label-2);font-size:14px;margin-top:4px}.stats{align-items:center;color:var(--label-2);display:flex;font-size:13.5px;gap:16px;margin-bottom:24px}.stats b{color:var(--label);font-weight:700}.stats .sep{background:var(--surface-3);height:14px;width:1px}.search-row{margin-bottom:22px}.search-input{background:var(--surface);background-image:var(--search-icon);background-position:13px;background-repeat:no-repeat;border:1px solid transparent;border-radius:var(--radius-sm);color:var(--label);font-family:inherit;font-size:14px;max-width:380px;outline:none;padding:10px 14px 10px 38px;transition:border-color .15s ease,background .15s ease;width:100%}.search-input:focus{background-color:var(--surface-2)}.search-input::-moz-placeholder{color:var(--label-3)}.search-input::placeholder{color:var(--label-3)}.projects-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(300px,1fr))}.project-card{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius);display:flex;flex-direction:column;gap:8px;overflow:hidden;padding:18px 18px 14px;position:relative;transition:background .15s ease,border-color .15s ease,transform .12s ease}.project-card:before{background:var(--card-color,var(--blue));content:"";height:3px;left:0;position:absolute;right:0;top:0}.project-card:hover{background:var(--hover);border-color:var(--surface-3);transform:translateY(-1px)}.card-top{align-items:center;display:flex;gap:10px;justify-content:space-between}.avatar{color:var(--card-color,var(--blue));font-size:15px;font-weight:700;letter-spacing:.02em;line-height:1}.badge{color:var(--label-2);font-size:12px;font-weight:600}.project-card h3{font-size:16px;font-weight:600;letter-spacing:-.01em;margin-top:6px}.project-card .desc{color:var(--label-2);display:-webkit-box;font-size:13px;-webkit-line-clamp:2;-webkit-box-orient:vertical;min-height:38px;overflow:hidden}.card-foot{align-items:center;border-top:1px solid var(--separator);display:flex;justify-content:space-between;margin-top:8px;padding-top:10px}.card-foot .updated{color:var(--label-3);font-size:12px}.card-foot .services-count{color:var(--card-color,var(--blue));font-size:12px;font-weight:600}.empty-state{background:var(--surface);border:1px dashed var(--surface-3);border-radius:var(--radius);grid-column:1/-1;padding:56px 24px;text-align:center}.empty-state h3{color:var(--label);font-size:16px;font-weight:600;margin-bottom:6px}.empty-state p{color:var(--label-2);font-size:13.5px;margin:0 auto;max-width:420px}.back-link{align-items:center;color:var(--blue);display:inline-flex;font-size:14px;font-weight:500;gap:6px;margin-bottom:20px;transition:opacity .15s ease}.back-link:hover{opacity:.8}.detail-head{align-items:center;display:flex;flex-wrap:wrap;gap:16px;margin-bottom:20px}.detail-head .avatar{display:grid;font-size:26px;height:46px;place-items:center;width:46px}.detail-head .title-wrap{flex:1;min-width:180px}.detail-head h1{font-size:24px;font-weight:700;letter-spacing:-.02em}.detail-head .count{color:var(--label-2);font-size:13px}.detail-head .actions{display:flex;gap:4px}.detail-desc{color:var(--label-2);font-size:14px;margin-bottom:28px;max-width:680px}.section-head{align-items:center;display:flex;gap:14px;justify-content:space-between;margin-bottom:14px}.section-head h2{font-size:17px;font-weight:600}.readonly-note{color:var(--label-3);font-size:12.5px}.services-grid{display:grid;gap:14px;grid-template-columns:repeat(auto-fill,minmax(320px,1fr))}.service-card{background:var(--surface);border:1px solid var(--separator);border-radius:var(--radius);display:flex;flex-direction:column;gap:10px;padding:16px;transition:background .15s ease,border-color .15s ease,transform .12s ease}.service-card:hover{background:var(--hover);border-color:var(--surface-3);transform:translateY(-1px)}.service-head{align-items:center;display:flex;gap:10px}.service-dot{background:var(--dot-color,var(--blue));border-radius:50%;flex-shrink:0;height:8px;width:8px}.service-head h4{flex:1;font-size:14.5px;font-weight:600}.service-actions{display:flex;gap:2px;opacity:0;transition:opacity .15s ease}.service-card:focus-within .service-actions,.service-card:hover .service-actions{opacity:1}.service-card .desc{color:var(--label-2);font-size:13px;min-height:19px}.links{display:flex;flex-wrap:wrap;gap:6px;margin-top:auto}.link-chip{align-items:center;background:var(--chip-bg,var(--surface-2));border-radius:7px;color:var(--chip-color,var(--label-2));display:inline-flex;font-size:12.5px;font-weight:500;gap:6px;padding:5px 10px;transition:filter .12s ease}.link-chip:hover{filter:brightness(1.25)}.link-chip .dot{background:currentColor;border-radius:50%;height:6px;width:6px}.link-chip.api{--chip-color:var(--teal);--chip-bg:rgba(100,210,255,.12)}.link-chip.github{--chip-color:var(--label-2);--chip-bg:rgba(152,152,157,.12)}.link-chip.grafana{--chip-color:var(--orange);--chip-bg:rgba(255,159,10,.12)}.link-chip.database{--chip-color:var(--purple);--chip-bg:rgba(191,90,242,.12)}.link-chip.analytics{--chip-color:var(--green);--chip-bg:rgba(48,209,88,.12)}.no-links{color:var(--label-3);font-size:12px;font-style:italic}.modal-overlay{backdrop-filter:blur(8px);-webkit-backdrop-filter:blur(8px);background:var(--overlay);display:grid;inset:0;padding:20px;place-items:center;position:fixed;z-index:100}.modal-panel{background:var(--surface);border:1px solid var(--surface-3);border-radius:16px;box-shadow:0 24px 70px #0009;max-height:90vh;max-width:470px;overflow-y:auto;padding:20px;width:100%}.modal-panel.wide{max-width:560px}.modal-head{align-items:center;display:flex;justify-content:space-between;margin-bottom:16px}.modal-head h3{font-size:16px;font-weight:600}.modal-enter-active,.modal-leave-active{transition:opacity .16s ease}.modal-enter-active .modal-panel,.modal-leave-active .modal-panel{transition:transform .16s ease}.modal-enter-from,.modal-leave-to{opacity:0}.modal-enter-from .modal-panel,.modal-leave-to .modal-panel{transform:translateY(8px) scale(.99)}.form-field{margin-bottom:14px}.form-field label{color:var(--label-2);display:block;font-size:12.5px;font-weight:500;margin-bottom:6px}.form-field input,.form-field select,.form-field textarea{background:var(--surface-2);border:1px solid transparent;border-radius:var(--radius-sm);color:var(--label);font-family:inherit;font-size:14px;outline:none;padding:10px 12px;transition:border-color .15s ease,background .15s ease;width:100%}.form-field textarea{min-height:74px;resize:vertical}.form-field input:focus,.form-field select:focus,.form-field textarea:focus{background:var(--input-focus);border-color:var(--blue)}.form-field input::-moz-placeholder,.form-field textarea::-moz-placeholder{color:var(--label-3)}.form-field input::placeholder,.form-field textarea::placeholder{color:var(--label-3)}.form-grid{display:grid;gap:0 12px;grid-template-columns:1fr 1fr}.form-error{color:var(--red);font-size:13px;font-weight:500;margin-bottom:12px}.form-actions{display:flex;gap:8px;justify-content:flex-end;margin-top:18px}.url-hint{color:var(--label-3);font-size:11.5px;margin-bottom:8px;margin-top:-6px}.confirm-message{color:var(--label-2);font-size:14px;margin-bottom:20px}.confirm-message b{color:var(--label);font-weight:600}.toast-stack{bottom:22px;display:flex;flex-direction:column;gap:8px;position:fixed;right:22px;z-index:200}.toast{align-items:center;animation:toast-in .2s ease;background:var(--surface-2);border:1px solid var(--surface-3);border-radius:var(--radius-sm);box-shadow:0 8px 30px #00000080;display:flex;font-size:13px;font-weight:500;gap:9px;padding:11px 15px}.toast:before{background:var(--green);border-radius:50%;content:"";flex-shrink:0;height:7px;width:7px}.toast.error:before{background:var(--red)}@keyframes toast-in{0%{opacity:0;transform:translateY(8px)}to{opacity:1;transform:translateY(0)}}.login-wrap{display:grid;min-height:calc(100vh - 140px);place-items:center}.login-card{max-width:360px;padding:8px 0;width:100%}.login-brand{align-items:center;display:flex;font-size:15px;gap:9px;justify-content:center;margin-bottom:34px}.login-brand strong,.login-card h1{font-weight:700}.login-card h1{font-size:30px;letter-spacing:-.02em;text-align:center}.login-sub{color:var(--label-2);font-size:14px;margin:6px 0 26px;text-align:center}.login-card .form-field{margin-bottom:16px}.skeleton{animation:shimmer 1.4s infinite;background:linear-gradient(100deg,var(--surface) 40%,var(--surface-2) 50%,var(--surface) 60%);background-size:200% 100%;border-radius:var(--radius);min-height:120px}@keyframes shimmer{to{background-position:-200% 0}}@media(max-width:720px){.site-main{padding:22px 16px 48px}.header-inner{padding:11px 16px}.user-chip .email{display:none}.page-head h1{font-size:23px}.form-grid{grid-template-columns:1fr}.service-actions{opacity:1}}.db-engine{background:#0a84ff1f;border-radius:6px;color:var(--blue);font-size:11px;font-weight:600;padding:2px 7px}.db-engine.mysql{background:#ff9f0a1f;color:var(--orange)}.db-meta{display:grid;font-size:13px;gap:4px 12px;grid-template-columns:auto 1fr;margin:10px 0}.db-meta dt{color:var(--label-3)}.db-meta dd{color:var(--label-2);margin:0;overflow-wrap:anywhere}.db-howto{color:var(--label-2);font-size:13px;margin-top:12px}.db-howto summary{color:var(--blue);cursor:pointer;font-weight:500}.db-howto ol{display:flex;flex-direction:column;gap:10px;margin:10px 0 0;padding-left:18px}.db-howto code{font-family:ui-monospace,SF Mono,Menlo,monospace;font-size:12px}.db-cmd{align-items:center;background:var(--surface-2);border-radius:var(--radius-sm);display:flex;gap:8px;margin-top:6px;padding:8px 10px}.db-cmd code{color:var(--label);flex:1;word-break:break-all}.toast-enter-active[data-v-a9b5cfa1],.toast-leave-active[data-v-a9b5cfa1]{transition:opacity .2s ease,transform .2s ease}.toast-enter-from[data-v-a9b5cfa1],.toast-leave-to[data-v-a9b5cfa1]{opacity:0;transform:translateY(10px)}
