:root{font-family:Inter,ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;color:#111827;background:#f6f7f9;font-synthesis:none;--border:#e5e7eb;--muted:#6b7280;--panel:#fff;--accent:#111827;--danger:#b42318}*{box-sizing:border-box}body{margin:0;min-height:100vh}button,input,select,textarea{font:inherit}.hidden{display:none!important}.muted{color:var(--muted)}.error{color:#b42318;min-height:1.25rem}.primary,.secondary,.danger,.text-button,.icon-button,.nav-item{border:0;cursor:pointer}.primary{background:var(--accent);color:white;padding:.72rem 1rem;border-radius:.7rem;font-weight:650}.primary:hover{background:#273244}.secondary{background:#f3f4f6;color:#111827;padding:.72rem 1rem;border-radius:.7rem}.danger{background:#fff1f0;color:var(--danger);padding:.72rem 1rem;border-radius:.7rem}.icon-button{background:transparent;font-size:1.3rem;padding:.4rem}.auth-shell{min-height:100vh;display:grid;place-items:center;padding:1.5rem;background:radial-gradient(circle at 50% 0,#e9edf5,transparent 40%),#f7f8fa}.auth-card{width:min(420px,100%);background:#fff;border:1px solid var(--border);border-radius:1.25rem;padding:2rem;box-shadow:0 20px 60px rgba(17,24,39,.08)}.auth-card h1{margin:.8rem 0 .2rem}.auth-card form{display:grid;gap:1rem;margin-top:1.6rem}label{display:grid;gap:.42rem;font-size:.9rem;font-weight:600;color:#374151}input,select,textarea{width:100%;border:1px solid #d1d5db;background:#fff;border-radius:.65rem;padding:.72rem .78rem;color:#111827;outline:none}input:focus,select:focus,textarea:focus{border-color:#6b7280;box-shadow:0 0 0 3px rgba(17,24,39,.07)}.brand-mark{width:48px;height:48px;border-radius:14px;background:#111827;color:#fff;display:grid;place-items:center;font-weight:800;font-size:1.25rem}.brand-mark.small{width:32px;height:32px;border-radius:9px;font-size:.9rem}.app-shell{display:grid;grid-template-columns:240px 1fr;min-height:100vh}.sidebar{position:sticky;top:0;height:100vh;background:#111827;color:#d1d5db;padding:1rem;display:flex;flex-direction:column}.brand{height:52px;display:flex;align-items:center;gap:.75rem;color:#fff;padding:0 .5rem}.sidebar nav{margin-top:1rem;display:grid;gap:.2rem}.nav-item{display:flex;justify-content:space-between;align-items:center;width:100%;text-align:left;background:transparent;color:#cbd5e1;padding:.65rem .7rem;border-radius:.55rem}.nav-item:hover,.nav-item.active{background:#1f2937;color:#fff}.nav-item span{font-size:.76rem;background:#374151;padding:.1rem .42rem;border-radius:999px}.nav-heading{display:flex;justify-content:space-between;align-items:center;color:#9ca3af;text-transform:uppercase;font-size:.7rem;font-weight:800;letter-spacing:.08em;margin:1.1rem .65rem .35rem}.nav-heading button{border:0;background:transparent;color:#9ca3af;cursor:pointer;font-size:1.1rem}.sidebar-footer{margin-top:auto;display:flex;gap:.4rem;flex-wrap:wrap}.text-button{background:transparent;color:#9ca3af;padding:.45rem}.text-button:hover{color:#fff}main{min-width:0}.topbar{height:72px;background:#fff;border-bottom:1px solid var(--border);display:flex;align-items:center;gap:1rem;padding:0 1.5rem;position:sticky;top:0;z-index:5}.search-wrap{flex:1;max-width:700px;position:relative}.search-wrap span{position:absolute;left:.8rem;top:.67rem;color:#9ca3af}.search-wrap input{padding-left:2.2rem;background:#f9fafb}.content{padding:1.5rem 1.75rem}.content-head{display:flex;justify-content:space-between;align-items:end;margin-bottom:1.2rem}.content h2{margin:0}.content-head p{margin:.25rem 0 0}.device-grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(300px,1fr));gap:1rem}.device-card{background:#fff;border:1px solid var(--border);border-radius:.9rem;padding:1rem;transition:.15s ease;display:grid;gap:.9rem}.device-card:hover{border-color:#c5cbd3;box-shadow:0 8px 24px rgba(17,24,39,.06);transform:translateY(-1px)}.card-head{display:flex;gap:.75rem;align-items:flex-start}.pc-icon{width:42px;height:42px;border-radius:.7rem;background:#eef2f7;display:grid;place-items:center;font-size:1.2rem;flex:none}.card-title{min-width:0;flex:1}.card-title strong{display:block;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.card-title small{display:block;color:var(--muted);margin-top:.2rem;white-space:nowrap;overflow:hidden;text-overflow:ellipsis}.star{background:transparent;border:0;color:#9ca3af;cursor:pointer;font-size:1.15rem}.star.on{color:#d97706}.meta{display:flex;gap:.45rem;flex-wrap:wrap}.chip{font-size:.75rem;background:#f3f4f6;color:#4b5563;border-radius:999px;padding:.22rem .5rem}.card-actions{display:flex;gap:.5rem}.connect{flex:1}.edit{width:42px}.empty{background:#fff;border:1px dashed #cbd5e1;border-radius:1rem;min-height:360px;display:grid;place-items:center;align-content:center;text-align:center;padding:2rem}.empty h3{margin:.6rem 0 .2rem}.empty p{color:var(--muted);max-width:420px}.empty-icon{font-size:2.3rem;color:#9ca3af}dialog{border:0;border-radius:1rem;padding:0;width:min(650px,calc(100% - 2rem));box-shadow:0 24px 80px rgba(0,0,0,.22)}dialog::backdrop{background:rgba(15,23,42,.44);backdrop-filter:blur(2px)}dialog form{padding:1.4rem}.dialog-head{display:flex;justify-content:space-between;align-items:flex-start;margin-bottom:1.1rem}.dialog-head h2{margin:0}.dialog-head p{margin:.25rem 0 0}.form-grid{display:grid;grid-template-columns:1fr 1fr;gap:1rem}.span-2{grid-column:1/-1}.check{display:flex;grid-template-columns:auto 1fr;align-items:center;gap:.5rem}.check input{width:auto}.dialog-actions{display:grid;grid-template-columns:auto 1fr auto auto;gap:.6rem;align-items:center;margin-top:1.2rem}.notice{background:#fffaeb;border:1px solid #fedf89;color:#7a2e0e;padding:.8rem;border-radius:.65rem;margin-top:1rem;font-size:.88rem}#toast{position:fixed;right:1rem;bottom:1rem;z-index:50;background:#111827;color:#fff;border-radius:.7rem;padding:.75rem 1rem;opacity:0;transform:translateY(10px);pointer-events:none;transition:.2s}#toast.show{opacity:1;transform:none}.mobile-only{display:none}@media(max-width:760px){.app-shell{grid-template-columns:1fr}.sidebar{position:fixed;z-index:20;width:260px;transform:translateX(-100%);transition:.2s}.sidebar.open{transform:none}.mobile-only{display:block}.topbar{padding:0 .8rem}.topbar .primary{white-space:nowrap}.content{padding:1rem}.device-grid{grid-template-columns:1fr}.form-grid{grid-template-columns:1fr}.span-2{grid-column:auto}.dialog-actions{grid-template-columns:auto 1fr auto auto}}@media(prefers-color-scheme:dark){:root{color:#e5e7eb;background:#0b1018;--border:#253041;--muted:#94a3b8;--panel:#111827;--accent:#f8fafc}.topbar,.device-card,.empty,.auth-card{background:#111827}.auth-shell{background:#0b1018}.primary{background:#f8fafc;color:#111827}.primary:hover{background:#dbe2ea}.secondary{background:#1f2937;color:#e5e7eb}input,select,textarea{background:#0f172a;border-color:#334155;color:#e5e7eb}label{color:#cbd5e1}.search-wrap input{background:#0f172a}.pc-icon,.chip{background:#1f2937;color:#cbd5e1}}

/* Grid/flex automatic minimum sizes must not enlarge the mobile viewport.
   Keep the title ellipsis inside its card and the favorite target inside the
   visible viewport; hiding horizontal overflow would only mask this defect. */
.search-wrap,.device-card,.card-head,.meta{min-width:0}
.star{flex:none;min-width:44px;min-height:44px}
.chip{max-width:100%;overflow-wrap:anywhere}
@media(max-width:760px){.device-grid{grid-template-columns:minmax(0,1fr)}}
dialog{max-height:90vh;overflow-y:auto}.connect{display:grid;place-items:center;text-decoration:none}.webdav-actions{display:flex;flex-wrap:wrap;gap:.55rem;margin-top:1rem}.webdav-actions button{flex:1 1 145px}.webdav-actions #webdav-delete{flex:0 0 auto}.dialog-head code{font-size:.9em}@media(max-width:760px){dialog{max-height:92dvh}.webdav-actions button{flex:1 1 calc(50% - .55rem)}.webdav-actions #webdav-delete{flex:1 1 calc(50% - .55rem)}}
