/* ============================================
   AI Chat & Image Generator —— 前端 MD2 样式
   Material Design 2 风格，现代简洁、视觉高级
   全部原生 CSS，无外部框架依赖
   ============================================ */

/* === 设计令牌（CSS 变量）=== */
:root {
    --aicig-primary: #6366F1;
    --aicig-secondary: #EC4899;
    --aicig-gradient: linear-gradient(135deg, #6366F1, #EC4899);
    --aicig-surface: #F8FAFC;
    --aicig-on-surface: #1E293B;
    --aicig-surface-variant: #E2E8F0;
    --aicig-on-surface-variant: #64748B;
    --aicig-outline: #CBD5E1;
    --aicig-shadow-1: 0 1px 3px rgba(0,0,0,0.08);
    --aicig-shadow-2: 0 4px 12px rgba(0,0,0,0.12);
    --aicig-shadow-3: 0 8px 24px rgba(0,0,0,0.16);
    --aicig-radius: 12px;
    --aicig-radius-sm: 8px;
    --aicig-radius-lg: 16px;
    --aicig-grid: 8px;
    --aicig-font: 'Segoe UI', system-ui, -apple-system, BlinkMacSystemFont, 'Helvetica Neue', Arial, sans-serif;
    --aicig-transition: 0.15s ease;
}

/* 深色模式（跟随系统） */
@media (prefers-color-scheme: dark) {
    :root:not([data-theme="light"]) {
        --aicig-surface: #1E293B;
        --aicig-on-surface: #F8FAFC;
        --aicig-surface-variant: #334155;
        --aicig-on-surface-variant: #94A3B8;
        --aicig-outline: #475569;
        --aicig-shadow-1: 0 1px 3px rgba(0,0,0,0.3);
        --aicig-shadow-2: 0 4px 12px rgba(0,0,0,0.5);
        --aicig-shadow-3: 0 8px 24px rgba(0,0,0,0.6);
    }
}

/* 手动深色模式 */
[data-theme="dark"] {
    --aicig-surface: #1E293B;
    --aicig-on-surface: #F8FAFC;
    --aicig-surface-variant: #334155;
    --aicig-on-surface-variant: #94A3B8;
    --aicig-outline: #475569;
    --aicig-shadow-1: 0 1px 3px rgba(0,0,0,0.3);
    --aicig-shadow-2: 0 4px 12px rgba(0,0,0,0.5);
    --aicig-shadow-3: 0 8px 24px rgba(0,0,0,0.6);
}

/* 手动浅色模式 */
[data-theme="light"] {
    --aicig-surface: #F8FAFC;
    --aicig-on-surface: #1E293B;
    --aicig-surface-variant: #E2E8F0;
    --aicig-on-surface-variant: #64748B;
    --aicig-outline: #CBD5E1;
    --aicig-shadow-1: 0 1px 3px rgba(0,0,0,0.08);
    --aicig-shadow-2: 0 4px 12px rgba(0,0,0,0.12);
    --aicig-shadow-3: 0 8px 24px rgba(0,0,0,0.16);
}

/* === 全局重置 === */
*,
*::before,
*::after {
    box-sizing: border-box;
    margin: 0;
    padding: 0;
}

body {
    font-family: var(--aicig-font);
    -webkit-font-smoothing: antialiased;
    -moz-osx-font-smoothing: grayscale;
}

/* === 主容器 === */
.aicig-app {
    display: flex;
    flex-direction: column;
    height: 100vh;
    max-width: 960px;
    margin: 0 auto;
    background: var(--aicig-surface);
    color: var(--aicig-on-surface);
    overflow: hidden;
    position: relative;
    border-left: 1px solid var(--aicig-outline);
    border-right: 1px solid var(--aicig-outline);
}

/* === 顶栏 === */
.aicig-header {
    display: flex;
    align-items: center;
    justify-content: space-between;
    padding: calc(var(--aicig-grid) * 2) calc(var(--aicig-grid) * 3);
    background: var(--aicig-gradient);
    color: #fff;
    flex-shrink: 0;
    box-shadow: var(--aicig-shadow-2);
    z-index: 10;
}

.aicig-header__brand {
    display: flex;
    align-items: center;
    gap: calc(var(--aicig-grid) * 1.5);
}

.aicig-header__icon {
    font-size: 22px;
}

.aicig-header__title {
    font-size: 18px;
    font-weight: 600;
    letter-spacing: 0.3px;
}

.aicig-header__actions {
    display: flex;
    gap: calc(var(--aicig-grid) * 1);
}

/* 图标按钮 */
.aicig-btn-icon {
    background: rgba(255,255,255,0.15);
    border: none;
    color: #fff;
    font-size: 14px;
    font-weight: 500;
    padding: calc(var(--aicig-grid) * 1) calc(var(--aicig-grid) * 2);
    border-radius: var(--aicig-radius-sm);
    cursor: pointer;
    transition: background var(--aicig-transition);
    font-family: var(--aicig-font);
}

.aicig-btn-icon:hover {
    background: rgba(255,255,255,0.25);
}

.aicig-btn-icon.active {
    background: rgba(255,255,255,0.35);
}

/* === 面板通用 === */
.aicig-panel {
    display: flex;
    flex-direction: column;
    flex: 1;
    overflow: hidden;
}

.aicig-panel--hidden {
    display: none;
}

/* === 消息区域 === */
.aicig-messages {
    flex: 1;
    overflow-y: auto;
    padding: calc(var(--aicig-grid) * 3);
    display: flex;
    flex-direction: column;
    gap: calc(var(--aicig-grid) * 2);
    scroll-behavior: smooth;
}

/* 自定义滚动条 */
.aicig-messages::-webkit-scrollbar {
    width: 6px;
}
.aicig-messages::-webkit-scrollbar-track {
    background: transparent;
}
.aicig-messages::-webkit-scrollbar-thumb {
    background: var(--aicig-on-surface-variant);
    border-radius: 3px;
}

/* === 消息气泡 === */
.aicig-msg {
    display: flex;
    gap: calc(var(--aicig-grid) * 1.5);
    max-width: 75%;
    animation: aicig-fade-in 0.3s ease;
}

@keyframes aicig-fade-in {
    from { opacity: 0; transform: translateY(8px); }
    to   { opacity: 1; transform: translateY(0); }
}

/* 用户消息：靠右 */
.aicig-msg--user {
    flex-direction: row-reverse;
    align-self: flex-end;
}

/* AI 消息：靠左 */
.aicig-msg--ai {
    align-self: flex-start;
}

.aicig-msg__avatar {
    width: 36px;
    height: 36px;
    border-radius: 50%;
    display: flex;
    align-items: center;
    justify-content: center;
    font-size: 13px;
    font-weight: 600;
    flex-shrink: 0;
    color: #fff;
}

.aicig-msg--user .aicig-msg__avatar {
    background: var(--aicig-gradient);
}

.aicig-msg--ai .aicig-msg__avatar {
    background: var(--aicig-surface-variant);
    color: var(--aicig-on-surface);
}

.aicig-msg__bubble {
    padding: calc(var(--aicig-grid) * 1.5) calc(var(--aicig-grid) * 2.5);
    border-radius: var(--aicig-radius-lg);
    font-size: 14px;
    line-height: 1.6;
    word-wrap: break-word;
    position: relative;
}

/* 用户气泡：右方圆角较小 */
.aicig-msg--user .aicig-msg__bubble {
    background: var(--aicig-gradient);
    color: #fff;
    border-bottom-right-radius: calc(var(--aicig-grid) * 0.5);
}

/* AI 气泡：左方圆角较小 */
.aicig-msg--ai .aicig-msg__bubble {
    background: var(--aicig-surface-variant);
    color: var(--aicig-on-surface);
    border-bottom-left-radius: calc(var(--aicig-grid) * 0.5);
}

/* 打字机光标闪烁 */
.aicig-msg--streaming .aicig-msg__bubble::after {
    content: '▋';
    animation: aicig-blink 0.8s infinite;
    margin-left: 2px;
    color: var(--aicig-on-surface-variant);
}

@keyframes aicig-blink {
    0%, 100% { opacity: 1; }
    50%      { opacity: 0; }
}

/* === 输入栏（固定底部）=== */
.aicig-input-bar {
    display: flex;
    align-items: flex-end;
    gap: calc(var(--aicig-grid) * 1.5);
    padding: calc(var(--aicig-grid) * 2) calc(var(--aicig-grid) * 3);
    background: var(--aicig-surface);
    border-top: 1px solid var(--aicig-outline);
    flex-shrink: 0;
}

.aicig-input {
    flex: 1;
    font-family: var(--aicig-font);
    font-size: 14px;
    line-height: 1.5;
    padding: calc(var(--aicig-grid) * 1.5) calc(var(--aicig-grid) * 2);
    border: 1px solid var(--aicig-outline);
    border-radius: var(--aicig-radius);
    background: var(--aicig-surface-variant);
    color: var(--aicig-on-surface);
    resize: none;
    overflow-y: auto;
    min-height: 44px;
    max-height: 120px;
    transition: border-color var(--aicig-transition), box-shadow var(--aicig-transition);
}

.aicig-input:focus {
    outline: none;
    border-color: var(--aicig-primary);
    box-shadow: 0 0 0 3px rgba(99,102,241,0.15);
}

.aicig-input::placeholder {
    color: var(--aicig-on-surface-variant);
}

/* === 主按钮（渐变+圆角+水波纹+悬停放大）=== */
.aicig-btn-primary {
    position: relative;
    overflow: hidden; /* 水波纹容器 */
    background: var(--aicig-gradient);
    border: none;
    color: #fff;
    font-family: var(--aicig-font);
    font-size: 14px;
    font-weight: 600;
    padding: calc(var(--aicig-grid) * 1.5) calc(var(--aicig-grid) * 3);
    border-radius: var(--aicig-radius);
    cursor: pointer;
    transition: transform var(--aicig-transition), box-shadow var(--aicig-transition);
    display: inline-flex;
    align-items: center;
    gap: calc(var(--aicig-grid) * 1);
    flex-shrink: 0;
    user-select: none;
    -webkit-tap-highlight-color: transparent;
}

.aicig-btn-primary:hover {
    transform: scale(1.04);
    box-shadow: var(--aicig-shadow-2);
}

.aicig-btn-primary:active {
    transform: scale(0.98);
}

/* 水波纹效果 */
.aicig-ripple {
    position: absolute;
    border-radius: 50%;
    background: rgba(255,255,255,0.35);
    transform: scale(0);
    animation: aicig-ripple-anim 0.6s ease-out;
    pointer-events: none;
}

@keyframes aicig-ripple-anim {
    to {
        transform: scale(4);
        opacity: 0;
    }
}

.aicig-btn__icon {
    font-size: 16px;
}

/* 次要按钮 */
.aicig-btn-secondary {
    background: linear-gradient(135deg, #F1F5F9, #E2E8F0);
    color: var(--aicig-on-surface);
    border: 1px solid var(--aicig-outline);
}

[data-theme="dark"] .aicig-btn-secondary {
    background: linear-gradient(135deg, #334155, #475569);
    color: var(--aicig-on-surface);
}

/* === 生图面板 === */
.aicig-image-form {
    padding: calc(var(--aicig-grid) * 3);
    display: flex;
    flex-direction: column;
    gap: calc(var(--aicig-grid) * 2);
    border-bottom: 1px solid var(--aicig-outline);
    flex-shrink: 0;
}

.aicig-image-options {
    display: flex;
    gap: calc(var(--aicig-grid) * 2);
    flex-wrap: wrap;
}

.aicig-field {
    display: flex;
    flex-direction: column;
    gap: calc(var(--aicig-grid) * 0.5);
}

.aicig-field label {
    font-size: 12px;
    font-weight: 500;
    color: var(--aicig-on-surface-variant);
    text-transform: uppercase;
    letter-spacing: 0.5px;
}

.aicig-field select {
    font-family: var(--aicig-font);
    font-size: 14px;
    padding: calc(var(--aicig-grid) * 1) calc(var(--aicig-grid) * 1.5);
    border: 1px solid var(--aicig-outline);
    border-radius: var(--aicig-radius-sm);
    background: var(--aicig-surface-variant);
    color: var(--aicig-on-surface);
    cursor: pointer;
    transition: border-color var(--aicig-transition);
}

.aicig-field select:focus {
    outline: none;
    border-color: var(--aicig-primary);
}

/* 生成按钮 */
.aicig-btn-generate {
    align-self: flex-start;
}

/* === 加载动画 === */
.aicig-loading {
    display: flex;
    align-items: center;
    justify-content: center;
    gap: calc(var(--aicig-grid) * 2);
    padding: calc(var(--aicig-grid) * 4);
    color: var(--aicig-on-surface-variant);
    font-size: 14px;
}

.aicig-spinner {
    width: 28px;
    height: 28px;
    border: 3px solid var(--aicig-outline);
    border-top-color: var(--aicig-primary);
    border-radius: 50%;
    animation: aicig-spin 0.8s linear infinite;
}

@keyframes aicig-spin {
    to { transform: rotate(360deg); }
}

/* === 生图结果网格 === */
.aicig-image-grid {
    flex: 1;
    overflow-y: auto;
    padding: calc(var(--aicig-grid) * 3);
    display: grid;
    grid-template-columns: repeat(auto-fill, minmax(280px, 1fr));
    gap: calc(var(--aicig-grid) * 2);
    align-content: start;
}

.aicig-image-card {
    border-radius: var(--aicig-radius);
    overflow: hidden;
    box-shadow: var(--aicig-shadow-1);
    transition: transform var(--aicig-transition), box-shadow var(--aicig-transition);
    background: var(--aicig-surface-variant);
}

.aicig-image-card:hover {
    transform: translateY(-4px);
    box-shadow: var(--aicig-shadow-3);
}

.aicig-image-card img {
    width: 100%;
    height: 240px;
    object-fit: cover;
    display: block;
}

.aicig-image-card__actions {
    display: flex;
    justify-content: flex-end;
    padding: calc(var(--aicig-grid) * 1) calc(var(--aicig-grid) * 1.5);
    gap: calc(var(--aicig-grid) * 1);
}

.aicig-image-card__actions button {
    background: var(--aicig-surface);
    border: 1px solid var(--aicig-outline);
    color: var(--aicig-on-surface);
    font-size: 12px;
    padding: calc(var(--aicig-grid) * 0.75) calc(var(--aicig-grid) * 1.5);
    border-radius: var(--aicig-radius-sm);
    cursor: pointer;
    transition: background var(--aicig-transition);
    font-family: var(--aicig-font);
}

.aicig-image-card__actions button:hover {
    background: var(--aicig-surface-variant);
}

.aicig-image-card__actions .aicig-btn-download {
    background: var(--aicig-gradient);
    color: #fff;
    border: none;
}

/* === 错误提示 === */
.aicig-error {
    background: #FEE2E2;
    color: #991B1B;
    padding: calc(var(--aicig-grid) * 1.5) calc(var(--aicig-grid) * 2);
    border-radius: var(--aicig-radius-sm);
    font-size: 13px;
    display: flex;
    align-items: center;
    gap: calc(var(--aicig-grid) * 1);
    margin: calc(var(--aicig-grid) * 2) calc(var(--aicig-grid) * 3);
    border: 1px solid #FCA5A5;
}

[data-theme="dark"] .aicig-error {
    background: rgba(239,68,68,0.15);
    color: #FCA5A5;
    border-color: rgba(239,68,68,0.3);
}

/* === 无权限提示 === */
.aicig-no-permission {
    text-align: center;
    padding: 48px 24px;
    color: var(--aicig-on-surface-variant);
    font-size: 15px;
    background: var(--aicig-surface);
    border-radius: var(--aicig-radius);
    border: 1px dashed var(--aicig-outline);
}

/* === 响应式：平板（≤768px）=== */
@media (max-width: 768px) {
    .aicig-app {
        border: none;
        height: 100dvh; /* 动态视口高度，适配移动浏览器 */
    }

    .aicig-header {
        padding: calc(var(--aicig-grid) * 1.5) calc(var(--aicig-grid) * 2);
    }

    .aicig-header__title {
        font-size: 16px;
    }

    .aicig-messages {
        padding: calc(var(--aicig-grid) * 2);
        gap: calc(var(--aicig-grid) * 1.5);
    }

    .aicig-msg {
        max-width: 85%;
    }

    .aicig-msg__avatar {
        width: 32px;
        height: 32px;
        font-size: 11px;
    }

    .aicig-msg__bubble {
        font-size: 13px;
        padding: calc(var(--aicig-grid) * 1.25) calc(var(--aicig-grid) * 2);
    }

    .aicig-input-bar {
        padding: calc(var(--aicig-grid) * 1.5) calc(var(--aicig-grid) * 2);
    }

    .aicig-image-form {
        padding: calc(var(--aicig-grid) * 2);
    }

    .aicig-image-options {
        flex-direction: column;
        gap: calc(var(--aicig-grid) * 1);
    }

    .aicig-image-grid {
        grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
        gap: calc(var(--aicig-grid) * 1.5);
        padding: calc(var(--aicig-grid) * 2);
    }

    .aicig-image-card img {
        height: 180px;
    }
}

/* === 响应式：手机（≤480px）=== */
@media (max-width: 480px) {
    .aicig-header__brand {
        gap: calc(var(--aicig-grid) * 1);
    }

    .aicig-header__icon {
        font-size: 18px;
    }

    .aicig-header__title {
        font-size: 14px;
    }

    .aicig-btn-icon {
        font-size: 12px;
        padding: calc(var(--aicig-grid) * 0.75) calc(var(--aicig-grid) * 1.25);
    }

    .aicig-msg {
        max-width: 92%;
    }

    .aicig-image-grid {
        grid-template-columns: 1fr;
    }
}

/* === Markdown 渲染内容样式（AI 消息气泡内）=== */
.aicig-msg--ai .aicig-msg__bubble h1,
.aicig-msg--ai .aicig-msg__bubble h2,
.aicig-msg--ai .aicig-msg__bubble h3 {
    margin: 8px 0 4px;
    line-height: 1.3;
    font-weight: 600;
}

.aicig-msg--ai .aicig-msg__bubble h1 { font-size: 1.4em; }
.aicig-msg--ai .aicig-msg__bubble h2 { font-size: 1.2em; }
.aicig-msg--ai .aicig-msg__bubble h3 { font-size: 1.1em; }

.aicig-msg--ai .aicig-msg__bubble ul,
.aicig-msg--ai .aicig-msg__bubble ol {
    margin: 4px 0;
    padding-left: 20px;
}

.aicig-msg--ai .aicig-msg__bubble li {
    margin: 2px 0;
}

.aicig-msg--ai .aicig-msg__bubble blockquote {
    border-left: 3px solid var(--aicig-primary, #6366F1);
    margin: 8px 0;
    padding: 4px 12px;
    color: var(--aicig-on-surface-variant, #64748B);
    background: rgba(99, 102, 241, 0.05);
    border-radius: 0 4px 4px 0;
}

.aicig-msg--ai .aicig-msg__bubble pre {
    background: rgba(0, 0, 0, 0.05);
    border-radius: 6px;
    padding: 12px;
    overflow-x: auto;
    margin: 8px 0;
    font-size: 0.9em;
    line-height: 1.4;
}

.aicig-msg--ai .aicig-msg__bubble code {
    font-family: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, monospace;
    background: rgba(0, 0, 0, 0.05);
    padding: 2px 4px;
    border-radius: 3px;
    font-size: 0.9em;
}

.aicig-msg--ai .aicig-msg__bubble pre code {
    background: none;
    padding: 0;
}

.aicig-msg--ai .aicig-msg__bubble a {
    color: var(--aicig-primary, #6366F1);
    text-decoration: none;
}

.aicig-msg--ai .aicig-msg__bubble a:hover {
    text-decoration: underline;
}

.aicig-msg--ai .aicig-msg__bubble strong {
    font-weight: 600;
}

.aicig-msg--ai .aicig-msg__bubble em {
    font-style: italic;
}

/* 深色模式下的代码块样式 */
[data-theme="dark"] .aicig-msg--ai .aicig-msg__bubble pre,
.aicig-app:not([data-theme="light"]) .aicig-msg--ai .aicig-msg__bubble pre {
    background: rgba(255, 255, 255, 0.05);
}

[data-theme="dark"] .aicig-msg--ai .aicig-msg__bubble code,
.aicig-app:not([data-theme="light"]) .aicig-msg--ai .aicig-msg__bubble code {
    background: rgba(255, 255, 255, 0.05);
}
