:root{--bg: #0e1a14;--bg-elev: #11241a;--panel: #143221;--card: #173c27;--muted: #b2d3c0;--text: #e8fbef;--text-dim: #cde9d9;--accent: #35d086;--accent-2: #1ab06d;--danger: #e45b5b;--shadow: 0 10px 30px rgba(0,0,0,.45);--radius: 16px;--radius-lg: 22px;--ring: 0 0 0 2px rgba(53,208,134,.35);--control-size: 52px}*{box-sizing:border-box}html,body{height:100%}body{margin:0;font-family:Söhne,ui-sans-serif,system-ui,-apple-system,Segoe UI,Roboto,Ubuntu,Cantarell,Noto Sans,Helvetica Neue,Arial,Noto Sans JP,sans-serif,"Apple Color Emoji","Segoe UI Emoji",Segoe UI Symbol,"Noto Color Emoji";color:var(--text);background:radial-gradient(1200px 800px at 10% -20%,rgba(53,208,134,.15),transparent 60%),radial-gradient(1200px 800px at 90% 120%,rgba(53,208,134,.15),transparent 60%),var(--bg)}.app{display:grid;grid-template-columns:minmax(320px,490px) minmax(0,1fr);gap:24px;min-height:100vh;padding:24px 32px;max-width:none;margin:0;align-items:start}@media (max-width: 960px){.app{grid-template-columns:1fr;gap:16px;padding:16px;max-width:none}.sidebar,.main{min-height:auto}}.sidebar{background:var(--panel);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-lg);box-shadow:var(--shadow);display:flex;flex-direction:column;min-height:calc(100vh - 48px);max-height:calc(100vh - 48px);overflow:hidden}.sidebar__header{padding:16px 16px 0}.sidebar__title{display:flex;align-items:center;gap:10px}.sidebar__title h1{font-size:18px;margin:0}.sidebar__bubble{width:28px;height:28px;display:inline-flex;align-items:center;justify-content:center;background:linear-gradient(180deg,var(--accent),var(--accent-2));color:#082114;border-radius:10px;font-weight:700;box-shadow:0 6px 20px #35d08659}.model-selection{margin-left:auto}.model-selection__select{-webkit-appearance:none;-moz-appearance:none;appearance:none;background:#0c241999;border:1px solid rgba(255,255,255,.1);color:var(--text-dim);font-family:inherit;font-size:12px;padding:6px 28px 6px 10px;border-radius:8px;cursor:pointer;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 24 24' fill='none' stroke='%23b2d3c0' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'%3E%3Cpolyline points='6 9 12 15 18 9'%3E%3C/polyline%3E%3C/svg%3E");background-repeat:no-repeat;background-position:right 8px center;transition:border-color .2s ease,box-shadow .2s ease,color .2s ease;max-width:180px;white-space:nowrap;text-overflow:ellipsis;overflow:hidden}.model-selection__select:hover{border-color:#35d08659;color:var(--text)}.model-selection__select:focus{outline:none;border-color:var(--accent);box-shadow:0 0 0 2px #35d08640}.chat{display:flex;flex-direction:column;flex:1 1 auto;min-height:0;padding:0 16px}.chat__log{background:var(--bg-elev);border-radius:12px;border:1px solid rgba(255,255,255,.06);padding:18px 12px 12px;overflow:auto;margin-bottom:16px;flex:1 1 220px;min-height:0}.chat__log,.main,.chat-controller__input{scrollbar-width:thin;scrollbar-color:var(--accent) rgba(8,33,20,.6)}.chat__log::-webkit-scrollbar,.main::-webkit-scrollbar,.chat-controller__input::-webkit-scrollbar{width:10px}.chat__log::-webkit-scrollbar-track,.main::-webkit-scrollbar-track,.chat-controller__input::-webkit-scrollbar-track{background:#0618108c;border-radius:999px}.chat__log::-webkit-scrollbar-thumb,.main::-webkit-scrollbar-thumb,.chat-controller__input::-webkit-scrollbar-thumb{background:linear-gradient(180deg,var(--accent),var(--accent-2));border-radius:999px;border:2px solid rgba(6,24,16,.55)}.chat__log::-webkit-scrollbar-thumb:hover,.main::-webkit-scrollbar-thumb:hover,.chat-controller__input::-webkit-scrollbar-thumb:hover{background:linear-gradient(180deg,var(--accent-2),var(--accent))}.message{display:grid;grid-template-columns:28px 1fr;gap:8px;margin:10px 0}.message__avatar{width:28px;height:28px;border-radius:8px;display:flex;align-items:center;justify-content:center;background:#0c2419;color:var(--accent);border:1px solid rgba(255,255,255,.06)}.message__bubble{background:var(--card);border:1px solid rgba(255,255,255,.06);border-radius:12px;padding:10px 12px;line-height:1.6;word-break:break-word}.message--user .message__bubble{background:linear-gradient(180deg,#18452f,#143924);border-color:#35d08659;box-shadow:var(--ring)}.message__meta{margin-top:6px;font-size:11px;color:var(--text-dim)}.message__images{display:flex;flex-wrap:wrap;gap:8px;margin-top:8px}.message__image{max-width:100%;max-height:300px;border-radius:8px;border:1px solid rgba(255,255,255,.1);cursor:pointer;background:#000;object-fit:contain}.chat-controller{margin:auto 20px 16px;position:sticky;bottom:16px;z-index:1}.chat-controller__inner{display:grid;grid-template-columns:minmax(0,1fr) auto;gap:14px;padding:18px 20px;border-radius:24px;background:linear-gradient(180deg,#205237eb,#0e281af0);border:1px solid rgba(53,208,134,.25);box-shadow:0 18px 40px #00000073;align-items:center}.chat-controller__input{width:100%;background:#0618108c;border:1px solid rgba(53,208,134,.22);border-radius:18px;color:var(--text);font:inherit;font-size:14px;line-height:1.6;resize:none;min-height:94px;padding:12px 14px}.chat-controller__input::placeholder{color:#e8fbef99}.chat-controller__input:focus{outline:none;border-color:#35d08673;box-shadow:0 0 0 2px #35d0864d}.chat-controller__side{display:flex;flex-direction:column;gap:12px;align-items:center}.control-btn{border:none;border-radius:16px;background:#103625d9;color:var(--text);cursor:pointer;display:grid;place-items:center;height:var(--control-size);width:var(--control-size);font-size:18px;transition:transform .12s ease,box-shadow .12s ease,background .2s ease}.control-btn:hover{background:#1c5836e0;box-shadow:0 0 0 3px #35d08647}.control-btn:active{transform:translateY(1px)}.control-btn.is-active{background:linear-gradient(180deg,var(--accent),var(--accent-2));box-shadow:0 0 0 3px #35d08659}.control-btn--send{height:var(--control-size);width:var(--control-size);background:linear-gradient(180deg,var(--accent),var(--accent-2));color:#062015;font-size:20px;font-weight:600;border-radius:18px}.control-btn--send:hover{box-shadow:0 0 0 3px #35d0864d}.control-btn__row{display:grid;grid-template-columns:repeat(2,var(--control-size));gap:10px;justify-content:center}.control-btn__row .control-btn{font-size:20px;border-radius:16px}.chat-controller__inner:focus-within{box-shadow:0 18px 40px #00000073,0 0 0 2px #35d08659}.main{background:var(--panel);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius-lg);box-shadow:var(--shadow);padding:24px;display:flex;flex-direction:column;overflow:hidden;min-height:calc(100vh - 48px)}.main__header{display:flex;justify-content:space-between;align-items:center;gap:12px;padding:4px 4px 14px;border-bottom:1px solid rgba(255,255,255,.06)}.main__title{margin:0;font-size:22px;letter-spacing:.02em}.main__subtitle{margin:4px 0 0;color:var(--text-dim);font-size:12px}.main__actions{display:flex;gap:8px}.main__notice{margin:16px 4px 0;padding:12px 16px;border-radius:14px;border:1px solid rgba(255,255,255,.08);background:#0a2819bf;font-size:13px;color:var(--text-dim);transition:opacity .25s ease}.main__notice--success{border-color:#35d08673;color:var(--text);background:linear-gradient(180deg,#266948c7,#103424d1)}.main__notice--error{border-color:#e45b5b99;color:#ffdede;background:linear-gradient(180deg,#6c2020c7,#3e0e0ed1)}.grid-wrapper{margin:0 -4px;padding:0 4px 14px;overflow:hidden}.grid{--min: 280px;display:grid;grid-auto-flow:column;grid-auto-columns:minmax(var(--min),360px);gap:16px;padding:20px 0 8px;overflow-x:auto;overflow-y:hidden;align-items:stretch;scroll-snap-type:x proximity;-webkit-overflow-scrolling:touch}.grid>*{scroll-snap-align:start}.grid.grid--empty{grid-auto-flow:row;grid-auto-columns:none;justify-content:center;overflow-x:hidden;padding-bottom:20px}.grid.grid--empty>*{scroll-snap-align:none}.grid.grid--empty .empty-state{max-width:420px}.empty-state{padding:40px 28px;border-radius:var(--radius);border:1px dashed rgba(255,255,255,.18);background:#0924178c;text-align:center;color:var(--text-dim);display:grid;gap:8px;font-size:15px}.empty-state__hint{font-size:13px;color:#d0e5d9bf}.card{background:var(--card);border:1px solid rgba(255,255,255,.06);border-radius:var(--radius);padding:16px;display:flex;flex-direction:column;gap:14px;position:relative;min-height:0;min-width:0;box-shadow:inset 0 0 0 1px #ffffff05;overflow:hidden}.card__head{display:flex;align-items:center;justify-content:space-between}.card__title{display:flex;align-items:center;gap:10px}.badge{width:28px;height:28px;border-radius:10px;display:flex;align-items:center;justify-content:center;background:#0c2419;color:var(--accent);border:1px solid rgba(255,255,255,.06)}.card__meta{font-size:12px;color:var(--text-dim);margin-top:2px}.card__tools{display:flex;gap:6px}.iconbtn{width:28px;height:28px;border-radius:8px;display:inline-grid;place-items:center;background:transparent;border:1px solid rgba(255,255,255,.1);color:var(--text);cursor:pointer}.iconbtn:hover{border-color:#35d08673;box-shadow:var(--ring)}.iconbtn--danger{border-color:#ff786e40;color:#ffb3aa}.iconbtn--danger:hover{border-color:#ff786e8c;box-shadow:0 0 0 3px #ff786e33;color:#ffd0c9}.card__body{display:flex;flex-direction:column;gap:16px;flex:1 1 auto;min-width:0}.device-stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(120px,1fr));gap:12px}.device-stat{background:#0b24188c;border:1px solid rgba(255,255,255,.07);border-radius:14px;padding:10px 12px;display:grid;gap:4px;min-width:0}.device-stat__label{font-size:11px;color:var(--text-dim);letter-spacing:.06em;text-transform:uppercase}.device-stat__value{font-size:14px;color:var(--text);font-weight:600;letter-spacing:.01em;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.device-section{display:grid;gap:10px;min-width:0}.device-section__label{font-size:11px;letter-spacing:.12em;text-transform:uppercase;color:#d2eadecc}.chip-list{display:flex;flex-wrap:wrap;gap:6px}.chip{display:inline-flex;align-items:center;gap:6px;padding:6px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.1);background:#0a2016bf;font-size:12px;color:var(--text)}.chip--muted{color:var(--text-dim)}.device-result{display:grid;grid-template-columns:auto 1fr;align-items:start;gap:12px;padding:10px 12px;border-radius:14px;background:#0b241899;border:1px solid rgba(255,255,255,.08)}.device-result__status{display:inline-flex;align-items:center;gap:6px;padding:4px 10px;border-radius:999px;font-size:12px;font-weight:600;letter-spacing:.06em;border:1px solid transparent}.device-result__status--ok{background:#28a06440;border-color:#46d68d73;color:#abf4ce}.device-result__status--error{background:#a8363633;border-color:#eb6d6d66;color:#ffd0d0}.device-result__detail{font-size:12px;color:var(--text-dim);display:grid;gap:6px;min-width:0}.device-result__line{display:flex;gap:6px;align-items:flex-start;min-width:0;word-break:break-word}.device-result__label{font-weight:600;color:var(--text-dim);flex-shrink:0;min-width:64px}.device-result__value{color:var(--text);font-weight:600;min-width:0;display:block}@media (max-width: 640px){.device-result{grid-template-columns:1fr}.device-result__status{justify-self:start}.device-result__label{min-width:auto}}.collapsible-text{display:grid;gap:6px;align-items:start}.collapsible-text__content{position:relative;display:block;white-space:pre-wrap;word-break:break-word;overflow-wrap:anywhere}.collapsible-text[data-state=collapsed] .collapsible-text__content{max-height:7.5em;overflow:hidden}.collapsible-text[data-state=collapsed] .collapsible-text__content:after{content:"";position:absolute;left:0;right:0;bottom:0;height:32px;pointer-events:none;background:linear-gradient(180deg,rgba(23,60,39,0),var(--card))}.collapsible-text__toggle{align-self:start;border:1px solid rgba(255,255,255,.12);background:#0c2619d1;color:var(--text);font:inherit;font-size:12px;border-radius:999px;padding:4px 10px;cursor:pointer;transition:background .2s ease,box-shadow .2s ease}.collapsible-text__toggle:hover{background:#16462ae6;box-shadow:0 0 0 2px #35d08640}.collapsible-text__toggle:focus-visible{outline:none;box-shadow:0 0 0 3px #35d08659}.sensor__value{font-size:32px;font-weight:800;letter-spacing:.02em}.row{display:flex;align-items:center;gap:10px}.pill{display:inline-flex;align-items:center;gap:8px;padding:6px 10px;border-radius:999px;border:1px solid rgba(255,255,255,.1);background:#10291d;color:var(--text-dim);font-size:12px}.switch{display:inline-flex;align-items:center;gap:10px}.switch input{-webkit-appearance:none;-moz-appearance:none;appearance:none;width:46px;height:26px;border-radius:999px;position:relative;background:#203a2c;outline:none;cursor:pointer;transition:background .25s ease,box-shadow .25s ease;border:1px solid rgba(255,255,255,.08)}.switch input:after{content:"";position:absolute;top:3px;left:3px;width:20px;height:20px;border-radius:999px;background:#93c9a9;transition:transform .25s ease,background .25s ease}.switch input:checked{background:linear-gradient(180deg,var(--accent),var(--accent-2));box-shadow:0 0 0 3px #35d08640}.switch input:checked:after{transform:translate(20px);background:#0d3b26}.state-dot{width:9px;height:9px;border-radius:50%;background:#7b8d84}.switch input:checked+.state-dot{background:#19df87}.btn{font:inherit;cursor:pointer;border-radius:12px;padding:8px 12px;border:1px solid transparent;transition:transform .03s ease,opacity .15s ease,box-shadow .2s ease}.btn:active{transform:translateY(1px)}.btn--primary{background:linear-gradient(180deg,var(--accent),var(--accent-2));color:#062015}.btn--ghost{background:transparent;color:var(--text);border:1px solid rgba(255,255,255,.12)}.btn--danger{background:transparent;color:var(--danger);border:1px solid rgba(255,255,255,.12)}.btn--tiny{padding:6px 8px;font-size:12px;border-radius:10px}dialog::backdrop{background:#0009}.dialog{border:none;padding:0;background:transparent}.dialog__panel{width:min(520px,92vw);background:var(--panel);border:1px solid rgba(255,255,255,.08);border-radius:16px;overflow:hidden;box-shadow:var(--shadow)}.dialog__header{padding:14px 16px;border-bottom:1px solid rgba(255,255,255,.06)}.dialog__header h3{margin:0}.dialog__body{padding:16px;display:grid;gap:12px}.dialog__footer{padding:12px 16px;display:flex;justify-content:flex-end;gap:8px;border-top:1px solid rgba(255,255,255,.06)}.form__row{display:grid;gap:6px}.form__label{font-size:12px;color:var(--text-dim)}.form__control{background:var(--bg-elev);color:var(--text);border:1px solid rgba(255,255,255,.1);border-radius:10px;padding:8px 10px}.form__control--textarea{min-height:96px;resize:vertical;line-height:1.4}.form__control:focus{outline:none;box-shadow:var(--ring);border-color:#35d08659}.form__hint{font-size:12px;color:var(--text-dim);margin:0}.form__hint--error{color:#ffb6b6}.form__hint--success{color:#9df5c9}code{font-family:SFMono-Regular,Consolas,Liberation Mono,Menlo,monospace;background:#061e14a6;border-radius:6px;padding:2px 4px;font-size:12px}.sr-only{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);border:0}@media (max-width: 960px){.grid-wrapper{margin:0;padding:0 0 12px}.grid{grid-auto-flow:row;grid-auto-columns:none;grid-template-columns:repeat(auto-fill,minmax(240px,1fr));overflow-x:hidden;scroll-snap-type:none;padding:20px 0 0}.grid>*{scroll-snap-align:unset}}@media (max-width: 980px){.app{grid-template-columns:1fr}.sidebar{order:2}.main{order:1}}body.login-view{background:#f5f5f5;color:#1a1a1a}.login-page{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:24px}.login-container{background:#fff;padding:2rem;border-radius:8px;box-shadow:0 4px 12px #0000001a;width:100%;max-width:360px;color:#1a1a1a}.login-container h1{margin-top:0;font-size:1.5rem;text-align:center;color:#1a1a1a}.login-container label{display:block;margin-bottom:.5rem;font-weight:700;color:#1a1a1a}.login-container input[type=password]{width:100%;padding:.75rem;margin-bottom:1rem;border:1px solid #ccc;border-radius:4px;font-size:1rem}.login-container button{width:100%;padding:.75rem;background-color:#007bff;color:#fff;border:none;border-radius:4px;font-size:1rem;cursor:pointer}.login-container button:hover{background-color:#0056b3}.login-container .error{color:#d9534f;margin-bottom:1rem;text-align:center}body.standalone-view{padding:20px;height:100vh;overflow:hidden;background:var(--bg)}.app-standalone{display:flex;flex-direction:column;height:100%;max-width:1200px;margin:0 auto}.app-standalone .main{display:flex;flex-direction:column;height:100%;width:100%;border:none;box-shadow:none;background:transparent;padding:0}.app-standalone .main__header{border-bottom:1px solid rgba(255,255,255,.06);padding-bottom:10px;margin-bottom:20px}.app-standalone .grid-wrapper{flex:1;overflow-y:auto}.app-standalone .grid{padding-bottom:40px}
