*{box-sizing:border-box}html,body{margin:0;height:100%;font-family:"Segoe UI","Microsoft YaHei",sans-serif;color:#17324d}
body{background:linear-gradient(145deg,#8dd7ff 0%,#caefff 36%,#91d3c5 70%,#eaf6cc 100%);overflow:hidden}
body:before{content:"";position:fixed;inset:0;background:
radial-gradient(circle at 15% 20%,rgba(255,255,255,.9),transparent 25%),
radial-gradient(circle at 85% 10%,rgba(255,255,255,.55),transparent 20%),
linear-gradient(180deg,transparent 55%,rgba(70,140,90,.18));pointer-events:none}
.glass{background:linear-gradient(180deg,rgba(255,255,255,.62),rgba(230,248,255,.4));border:1px solid rgba(255,255,255,.82);box-shadow:0 16px 50px rgba(19,67,96,.24),inset 0 1px 0 rgba(255,255,255,.95);backdrop-filter:blur(22px) saturate(140%);-webkit-backdrop-filter:blur(22px) saturate(140%)}
.brand{font-weight:800;font-size:20px;letter-spacing:.2px;text-shadow:0 1px 0 #fff}
.muted{color:#61788e}.primary,.new-chat,.send-btn,.button-link{border:1px solid rgba(56,126,170,.42);background:linear-gradient(#f9ffff,#c6ecff 50%,#90d1f5 51%,#c8efff);box-shadow:inset 0 1px 0 #fff,0 2px 8px rgba(20,91,136,.18);color:#164d72;border-radius:10px;font-weight:700;cursor:pointer}
.primary{width:100%;padding:12px 16px;font-size:15px}.primary:hover,.new-chat:hover,.send-btn:hover{filter:brightness(1.04)}
input,textarea{width:100%;border:1px solid rgba(66,128,160,.4);border-radius:9px;background:rgba(255,255,255,.72);box-shadow:inset 0 1px 3px rgba(60,100,120,.12),0 1px 0 #fff;padding:11px 12px;color:#16334c;outline:none}
input:focus,textarea:focus{border-color:#5aaddc;box-shadow:0 0 0 3px rgba(83,181,236,.2),inset 0 1px 2px rgba(50,90,110,.1)}
label{display:block;font-size:13px;font-weight:700;margin:13px 0 6px}
a{color:#0b6fa8;text-decoration:none}.alert,.success{border-radius:9px;padding:10px 12px;margin:12px 0}.alert{background:#ffe3e3;border:1px solid #efaaaa;color:#9c2929}.success{background:#e7fbe5;border:1px solid #9fd69c;color:#2e7830}

/* auth */
.auth-page{display:grid;place-items:center;overflow:auto;padding:25px}.auth-card{width:min(420px,100%);border-radius:18px;padding:28px;position:relative;z-index:2}
.auth-card h1{margin:14px 0 6px;font-size:28px}.auth-foot{text-align:center;margin-top:18px;font-size:14px}
.aero-orb{position:fixed;border-radius:50%;filter:blur(2px);opacity:.65}.orb1{width:280px;height:280px;left:-70px;bottom:-50px;background:radial-gradient(circle at 35% 35%,#fff,#6fca8b 55%,transparent 70%)}.orb2{width:230px;height:230px;right:-60px;top:-50px;background:radial-gradient(circle at 35% 35%,#fff,#66bdf0 55%,transparent 70%)}

/* app */
.app-page{padding:16px}.app-shell{height:calc(100vh - 32px);max-width:1500px;margin:auto;display:grid;grid-template-columns:300px 1fr;gap:14px}
.sidebar,.chat-panel{border-radius:18px;overflow:hidden;min-height:0}.sidebar{display:flex;flex-direction:column;padding:14px}
.sidebar-head{display:flex;align-items:center;justify-content:space-between;padding:4px 5px 12px}.new-chat{width:100%;padding:11px;margin-bottom:10px}
.conversation-list{overflow:auto;flex:1;display:flex;flex-direction:column;gap:5px;padding-right:3px}.conversation-item{border:0;background:transparent;border-radius:9px;padding:10px;text-align:left;display:flex;gap:8px;cursor:pointer;color:#29465d}.conversation-item:hover,.conversation-item.active{background:rgba(255,255,255,.55);box-shadow:inset 0 0 0 1px rgba(255,255,255,.75)}.conversation-item em{font-style:normal;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}
.sidebar-bottom{border-top:1px solid rgba(255,255,255,.65);padding-top:10px}.user-card{display:flex;align-items:center;gap:9px;padding:8px}.avatar{width:36px;height:36px;border-radius:50%;display:grid;place-items:center;background:linear-gradient(#fff,#a5ddf9);border:1px solid #89bedc;font-weight:800}.user-card small{display:block;color:#6c8496}.side-link{display:block;padding:8px;border-radius:7px}.side-link:hover{background:rgba(255,255,255,.5)}
.chat-panel{display:flex;flex-direction:column}.topbar{height:62px;flex:0 0 auto;display:flex;align-items:center;justify-content:space-between;padding:0 18px;border-bottom:1px solid rgba(255,255,255,.8);background:rgba(255,255,255,.23)}
.topbar>div{display:flex;align-items:center;gap:10px}.status-dot{font-size:11px;color:#3b9a61}.model-badge{font-size:12px;padding:6px 9px;border:1px solid rgba(62,127,160,.25);background:rgba(255,255,255,.46);border-radius:999px}
.messages{flex:1;min-height:0;overflow:auto;padding:25px clamp(16px,4vw,70px);scroll-behavior:smooth}.welcome{text-align:center;margin:14vh auto 0;max-width:560px;color:#4d6f87}.welcome-icon{width:64px;height:64px;margin:auto;display:grid;place-items:center;border-radius:18px;background:linear-gradient(145deg,rgba(255,255,255,.95),rgba(126,206,248,.7));box-shadow:0 8px 22px rgba(25,112,162,.2),inset 0 1px #fff;font-size:29px}.welcome h2{color:#234762;font-size:27px;margin:16px 0 6px}
.message-row{display:flex;gap:11px;margin:16px auto;max-width:900px;align-items:flex-start}.message-row.user{flex-direction:row-reverse}.msg-avatar{width:34px;height:34px;border-radius:50%;display:grid;place-items:center;font-size:12px;font-weight:800;background:linear-gradient(#fff,#c8efff);border:1px solid rgba(70,140,180,.3);flex:0 0 auto}.user .msg-avatar{background:linear-gradient(#fff,#cbeec8)}
.message-bubble{max-width:min(760px,82%);padding:12px 14px;border-radius:15px;border:1px solid rgba(255,255,255,.8);background:rgba(255,255,255,.58);box-shadow:0 5px 14px rgba(30,88,120,.08),inset 0 1px #fff;line-height:1.6;word-break:break-word}.user .message-bubble{background:linear-gradient(180deg,rgba(226,249,255,.84),rgba(183,229,250,.68))}
.loading .message-bubble{opacity:.7}.msg-files{display:flex;gap:8px;flex-wrap:wrap;margin-bottom:8px}.msg-files img{width:180px;max-width:100%;border-radius:10px;border:1px solid rgba(50,100,130,.2)}.file-chip{display:inline-block;padding:7px 9px;background:rgba(255,255,255,.65);border-radius:8px;border:1px solid rgba(70,120,150,.2)}
.composer-wrap{flex:0 0 auto;padding:10px clamp(12px,4vw,65px) 16px}.composer{display:flex;align-items:flex-end;gap:8px;max-width:950px;margin:auto;padding:8px;border:1px solid rgba(80,150,185,.35);border-radius:16px;background:rgba(255,255,255,.63);box-shadow:0 7px 22px rgba(30,88,120,.11),inset 0 1px #fff}.composer textarea{resize:none;border:0;box-shadow:none;background:transparent;min-height:40px;max-height:160px;padding:10px 5px}.attach-btn,.send-btn{width:40px;height:40px;display:grid;place-items:center;border-radius:11px;flex:0 0 auto;margin:0;cursor:pointer}.attach-btn{background:rgba(255,255,255,.45);border:1px solid rgba(60,120,150,.22);font-size:22px}.send-btn{font-size:17px}.composer-note{text-align:center;font-size:11px;color:#688398;margin-top:5px}
.attachment-preview{display:flex;gap:8px;max-width:950px;margin:0 auto 7px;flex-wrap:wrap}.attachment-card{display:flex;align-items:center;gap:7px;padding:6px 8px;background:rgba(255,255,255,.67);border:1px solid rgba(255,255,255,.85);border-radius:9px;font-size:12px}.attachment-card img{width:32px;height:32px;object-fit:cover;border-radius:6px}.attachment-card b{max-width:170px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.attachment-card button{border:0;background:transparent;cursor:pointer;font-size:18px;color:#6e8291}.icon-btn{border:0;background:rgba(255,255,255,.5);border-radius:8px;padding:8px;cursor:pointer}.mobile-only{display:none}

/* admin */
.admin-page{overflow:auto;padding:24px}.admin-shell{width:min(840px,100%);margin:auto;border-radius:18px;padding:25px}.admin-head{display:flex;align-items:center;justify-content:space-between}.admin-head h1{margin:4px 0 18px}.button-link{padding:9px 12px}.admin-form textarea{resize:vertical}.hint{font-size:12px;color:#648095;margin:8px 0 15px}

@media(max-width:760px){
  body.app-page{padding:0}.app-shell{height:100dvh;display:block}.chat-panel{height:100dvh;border-radius:0;border:0}.sidebar{position:fixed;z-index:30;left:0;top:0;bottom:0;width:min(86vw,330px);border-radius:0 18px 18px 0;transform:translateX(-110%);transition:.22s ease;box-shadow:12px 0 35px rgba(19,67,96,.26)}.sidebar.open{transform:translateX(0)}
  .mobile-only{display:inline-grid}.topbar{height:58px;padding:0 10px}.topbar>div{gap:8px}.model-badge{max-width:38vw;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.messages{padding:16px 9px}.message-row{gap:7px}.msg-avatar{width:30px;height:30px}.message-bubble{max-width:84%;padding:10px 11px}.composer-wrap{padding:7px 8px calc(10px + env(safe-area-inset-bottom))}.composer{border-radius:14px}.composer-note{display:none}.welcome{margin-top:18vh;padding:0 16px}.admin-page{padding:0}.admin-shell{min-height:100dvh;border-radius:0;padding:18px}.admin-head{align-items:flex-start;gap:12px}.auth-card{padding:22px}
}

.model-picker-wrap{display:flex;align-items:center;min-width:0}
.model-select{max-width:260px;border:1px solid rgba(62,127,160,.3);background:linear-gradient(180deg,rgba(255,255,255,.82),rgba(205,238,252,.7));box-shadow:inset 0 1px 0 rgba(255,255,255,.95),0 2px 8px rgba(20,91,136,.09);border-radius:9px;padding:7px 30px 7px 10px;color:#194a69;outline:none}
.model-select:focus{border-color:#5aaddc;box-shadow:0 0 0 3px rgba(83,181,236,.18)}
.admin-model-row{display:flex;gap:9px;align-items:center}.admin-model-select{flex:1;max-width:none}
.manual-model{margin:10px 0 15px;padding:10px;border-radius:10px;background:rgba(255,255,255,.32);border:1px solid rgba(255,255,255,.65)}
.manual-model summary{cursor:pointer;font-size:13px;color:#55758a;margin-bottom:8px}
.manual-model input{margin:8px 0}
@media(max-width:760px){
  .model-select{max-width:42vw;font-size:12px;padding:6px 25px 6px 8px}
  .admin-model-row{align-items:stretch;flex-direction:column}
  .admin-model-select{max-width:none;width:100%}
}

/* V4 Markdown / streaming / model permissions */
.msg-text h1,.msg-text h2,.msg-text h3{margin:12px 0 7px;color:#173f5e;line-height:1.25}
.msg-text h1{font-size:1.35em}.msg-text h2{font-size:1.2em}.msg-text h3{font-size:1.08em}
.msg-text ul,.msg-text ol{margin:8px 0;padding-left:24px}.msg-text li{margin:3px 0}
.msg-text blockquote{margin:9px 0;padding:7px 11px;border-left:3px solid rgba(35,127,181,.55);background:rgba(255,255,255,.35);border-radius:0 8px 8px 0;color:#48697f}
.inline-code{padding:2px 5px;border-radius:5px;background:rgba(17,63,88,.09);border:1px solid rgba(17,63,88,.1);font-family:Consolas,monospace;font-size:.93em}
.code-block{margin:10px 0;border-radius:11px;overflow:hidden;border:1px solid rgba(42,91,121,.22);background:rgba(15,35,48,.92);box-shadow:inset 0 1px rgba(255,255,255,.06)}
.code-head{display:flex;align-items:center;justify-content:space-between;padding:7px 10px;background:rgba(255,255,255,.08);color:#cfe9f7;font-size:12px}
.copy-code{border:1px solid rgba(255,255,255,.15);border-radius:6px;background:rgba(255,255,255,.08);color:#eaf8ff;padding:3px 8px;cursor:pointer}
.code-block pre{margin:0;padding:12px;overflow:auto;white-space:pre;font-family:Consolas,"Courier New",monospace;font-size:13px;line-height:1.5;color:#eef8ff}
.tok-key{color:#9ed6ff}.tok-str{color:#c8f2b0}.tok-num{color:#ffd69e}
.thinking-dots{opacity:.7;font-style:italic}
.file-chip small,.attachment-card small{margin-left:6px;padding:2px 5px;border-radius:999px;background:rgba(42,139,191,.1);color:#47738d;font-size:10px}
.allowed-models-box{padding:11px;border-radius:11px;background:rgba(255,255,255,.3);border:1px solid rgba(255,255,255,.7);margin-bottom:13px}
.allow-all-line{display:flex;align-items:center;gap:7px;margin:0 0 10px}.allow-all-line input{width:auto}
.allowed-models-list{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:7px;max-height:250px;overflow:auto}
.model-check{display:flex;gap:7px;align-items:flex-start;margin:0;padding:7px;border-radius:7px;background:rgba(255,255,255,.37);font-size:12px;word-break:break-all}
.model-check input{width:auto;flex:0 0 auto;margin-top:2px}
@media(max-width:760px){
  .allowed-models-list{grid-template-columns:1fr}
  .code-block pre{font-size:12px}
}

.user-panel-shell{max-width:980px}.user-profile-card{display:flex;align-items:center;gap:16px;padding:18px;border-radius:14px;background:rgba(255,255,255,.38);border:1px solid rgba(255,255,255,.7);margin:8px 0 16px}.user-big-avatar{width:64px;height:64px;font-size:24px}.user-profile-card h2{margin:0 0 5px}.stats-grid{display:grid;grid-template-columns:repeat(3,1fr);gap:12px;margin:0 0 16px}.stat-card{padding:18px;border-radius:13px;background:rgba(255,255,255,.36);border:1px solid rgba(255,255,255,.72);text-align:center}.stat-card strong{display:block;font-size:26px;color:#1e587c}.stat-card span{font-size:12px;color:#678398}.panel-grid{display:grid;grid-template-columns:1fr 1fr;gap:15px}.settings-card{padding:18px;border-radius:14px;background:rgba(255,255,255,.34);border:1px solid rgba(255,255,255,.7)}.settings-card h3{margin:0 0 7px}.user-model-select{max-width:none;width:100%}.admin-shortcut{margin-top:16px;padding:13px;border-radius:12px;background:rgba(255,255,255,.35);border:1px solid rgba(255,255,255,.7);display:flex;justify-content:space-between;align-items:center;gap:12px}@media(max-width:760px){.stats-grid{grid-template-columns:1fr}.panel-grid{grid-template-columns:1fr}.admin-shortcut{align-items:stretch;flex-direction:column}}

/* V4.2 avatar + admin user management */
.avatar-image{overflow:hidden;padding:0!important}.avatar-image img{width:100%;height:100%;object-fit:cover;display:block}
.admin-users-section{margin-top:22px;padding-top:18px;border-top:1px solid rgba(255,255,255,.55)}
.section-title-row{display:flex;align-items:center;justify-content:space-between;gap:12px;margin-bottom:12px}.section-title-row h2{margin:0 0 3px}.user-count{padding:5px 9px;border-radius:999px;background:rgba(255,255,255,.43);font-size:12px;color:#496b80}
.admin-user-list{display:grid;gap:12px}.admin-user-card{padding:14px;border-radius:14px;background:rgba(255,255,255,.34);border:1px solid rgba(255,255,255,.72);box-shadow:inset 0 1px #fff}
.admin-user-main{display:flex;gap:12px;align-items:center}.admin-user-avatar{width:52px;height:52px;flex:0 0 52px;font-size:19px}.admin-user-meta h3{margin:0 0 5px}.user-badges{display:flex;gap:6px;margin-bottom:4px}.user-badges span{font-size:10px;padding:2px 6px;border-radius:999px;background:rgba(45,127,174,.12);color:#426f88}
.admin-user-actions{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:12px;padding-top:10px;border-top:1px solid rgba(255,255,255,.55)}.inline-user-form{margin:0}.mini-label{font-size:11px;color:#607f92;display:block;margin:0 0 5px}.mini-row{display:flex;gap:7px;align-items:center}.mini-row input[type=password],.mini-row input[type=file]{min-width:0;flex:1}.tiny-form{margin:0;align-self:end}
@media(max-width:760px){.admin-user-actions{grid-template-columns:1fr}.mini-row{align-items:stretch;flex-direction:column}.admin-user-main{align-items:flex-start}.section-title-row{align-items:flex-start;flex-direction:column}}

/* V4.3 user nickname and usage records */
.stats-grid-four{grid-template-columns:repeat(4,1fr)}
.admin-overview-section{margin-top:20px}
.admin-stats-grid{margin-top:12px}
.record-link{display:inline-block;margin-top:6px;font-size:12px;color:#275f83;text-decoration:none;border-bottom:1px dotted rgba(39,95,131,.45)}
.records-shell{max-width:1180px}
.head-actions{display:flex;gap:8px;flex-wrap:wrap}
.record-filter{display:grid;grid-template-columns:160px minmax(240px,1fr) auto auto;gap:8px;align-items:end;margin:12px 0 18px}
.records-section{margin-top:18px;padding-top:4px}
.record-table-wrap{overflow:auto;border-radius:12px;border:1px solid rgba(255,255,255,.72);background:rgba(255,255,255,.3)}
.record-table{width:100%;border-collapse:collapse;min-width:720px}.record-table th,.record-table td{padding:10px;border-bottom:1px solid rgba(67,108,133,.15);text-align:left;font-size:13px}.record-table th{background:rgba(255,255,255,.42);color:#315d78}.record-table td small{display:block;color:#7890a0;margin-top:2px}
.record-list{display:grid;gap:9px}.record-card{padding:12px;border-radius:12px;background:rgba(255,255,255,.34);border:1px solid rgba(255,255,255,.7)}.record-meta{display:flex;flex-wrap:wrap;gap:6px 12px;font-size:12px;color:#667f91;margin-bottom:7px}.record-meta strong{color:#244f6c}.record-content{white-space:normal;word-break:break-word;line-height:1.55;max-height:320px;overflow:auto}.empty-records{padding:24px;text-align:center}.pager{display:flex;justify-content:center;align-items:center;gap:12px;margin-top:14px}.conv-mark,.file-mark{font-size:10px;min-width:20px;text-align:center;opacity:.7}
@media(max-width:760px){.stats-grid-four{grid-template-columns:repeat(2,1fr)}.record-filter{grid-template-columns:1fr}.head-actions{justify-content:flex-end}.record-meta{flex-direction:column;gap:3px}}

/* V4.4 mobile layout repair */
@media (max-width:760px){
  html,body{width:100%;max-width:100%;overflow:hidden}
  body.app-page{padding:0;min-width:0}
  .app-shell{width:100%;max-width:none;height:100dvh;min-width:0;margin:0}
  .chat-panel{width:100%;min-width:0;height:100dvh;border-radius:0;overflow:hidden}

  /* Keep the header on one row without squeezing the title into nothing. */
  .topbar{
    height:62px;
    min-height:62px;
    display:grid;
    grid-template-columns:auto minmax(0,1fr) minmax(118px,42vw);
    gap:8px;
    align-items:center;
    padding:0 10px;
  }
  .topbar>div{min-width:0;display:flex;align-items:center;gap:7px}
  .topbar>div:nth-of-type(1){overflow:hidden;white-space:nowrap}
  #chatTitle{display:inline-block;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:16px}
  .status-dot{flex:0 0 auto;white-space:nowrap;font-size:11px}
  .model-picker-wrap{width:100%;min-width:0}
  .model-select{width:100%;max-width:none;min-width:0;height:38px;font-size:13px;padding:6px 28px 6px 9px;text-overflow:ellipsis;white-space:nowrap}
  .icon-btn{min-width:52px;height:38px;padding:0 10px;white-space:nowrap;font-size:14px}

  /* Use the full phone width for replies. */
  .messages{width:100%;min-width:0;padding:13px 10px 8px;overflow-x:hidden}
  .message-row{width:100%;max-width:none;margin:12px 0;gap:7px;min-width:0}
  .message-row.assistant{padding-right:0}
  .message-row.user{padding-left:28px}
  .msg-avatar{width:30px;height:30px;flex:0 0 30px;font-size:11px}
  .message-bubble{min-width:0;max-width:calc(100% - 37px);padding:11px 12px;border-radius:13px;font-size:15px;line-height:1.62;overflow-wrap:anywhere;word-break:normal}
  .message-row.assistant .message-bubble{width:calc(100% - 37px)}
  .message-row.user .message-bubble{width:auto;max-width:88%}
  .msg-text{min-width:0;max-width:100%;overflow-wrap:anywhere}
  .msg-text h1,.msg-text h2,.msg-text h3{overflow-wrap:anywhere}
  .msg-text ul,.msg-text ol{padding-left:21px}
  .code-block{max-width:100%}
  .code-block pre{max-width:100%;overflow-x:auto;-webkit-overflow-scrolling:touch}
  .msg-files{max-width:100%}
  .msg-files img{width:min(210px,100%);height:auto}

  /* Composer: prevent Chinese labels from becoming vertical. */
  .composer-wrap{width:100%;min-width:0;padding:7px 8px calc(9px + env(safe-area-inset-bottom));background:linear-gradient(180deg,rgba(255,255,255,0),rgba(217,248,242,.18))}
  .composer{width:100%;max-width:none;min-width:0;display:grid;grid-template-columns:50px minmax(0,1fr) 58px;align-items:end;gap:7px;padding:7px;border-radius:15px}
  .composer textarea{width:100%;min-width:0;min-height:44px;max-height:135px;padding:11px 4px;font-size:15px;line-height:22px;overflow-y:auto}
  .attach-btn,.send-btn{
    width:auto!important;
    min-width:0;
    height:44px;
    min-height:44px;
    padding:0 8px!important;
    display:flex!important;
    align-items:center;
    justify-content:center;
    white-space:nowrap!important;
    word-break:keep-all!important;
    overflow-wrap:normal!important;
    writing-mode:horizontal-tb!important;
    line-height:1!important;
    font-size:14px!important;
    margin:0!important;
  }
  .send-btn{min-width:58px}
  .attach-btn{min-width:50px}
  .composer-note{display:none}
  .attachment-preview{width:100%;max-width:none;padding:0 2px;margin-bottom:6px;overflow-x:auto;flex-wrap:nowrap}
  .attachment-card{flex:0 0 auto;max-width:86vw}

  .welcome{margin-top:16vh;padding:0 18px}
  .welcome h2{font-size:23px}
}

@media (max-width:390px){
  .topbar{grid-template-columns:auto minmax(0,1fr) minmax(105px,39vw);gap:6px;padding:0 7px}
  .icon-btn{min-width:48px;padding:0 8px}
  #chatTitle{font-size:15px}
  .status-dot{font-size:10px}
  .model-select{font-size:12px;padding-left:7px}
  .messages{padding-left:7px;padding-right:7px}
  .composer-wrap{padding-left:6px;padding-right:6px}
  .composer{grid-template-columns:46px minmax(0,1fr) 54px;gap:5px;padding:6px}
  .attach-btn{min-width:46px}.send-btn{min-width:54px}
}
