/* * 图层样式(只服务 components/Modal.tsx)。 * * 刻意用 CSS Module 而不是 app/globals.css:全局样式表被多个页面共用, * 而这里的选择器名(backdrop/dialog/head/body)太通用,写进全局极易与别处冲突; * CSS Module 会在构建时把类名变成局部哈希,天然隔离。 * 颜色/圆角/间距全部取 globals.css 里已有的设计令牌,保证与全站同一套视觉。 */ .backdrop { position: fixed; inset: 0; z-index: 1000; display: flex; align-items: center; justify-content: center; padding: var(--sp-5); /* 半透明遮罩 + 轻微毛玻璃:背后的列表仍可辨认位置,但不会与图层内容抢注意力 */ background: rgba(4, 8, 18, 0.66); backdrop-filter: blur(3px); overflow: auto; } .dialog { display: flex; flex-direction: column; width: min(1100px, 100%); /* 小屏/长内容时图层本身不超过 90vh,滚动交给 .body */ max-height: 90vh; border: 1px solid var(--line-strong); border-radius: var(--r-lg); background: var(--surface-1); box-shadow: var(--shadow-pop); /* 对话框用 tabIndex={-1} 聚焦:去掉浏览器默认的聚焦描边,改用下面的 :focus-visible */ outline: none; } .head { flex: 0 0 auto; display: flex; align-items: center; justify-content: space-between; gap: var(--sp-3); padding: var(--sp-3) var(--sp-4); border-bottom: 1px solid var(--line); border-radius: var(--r-lg) var(--r-lg) 0 0; background: var(--surface-2); } .title { margin: 0; font-size: var(--fs-lg); font-weight: 600; color: var(--text-1); overflow-wrap: anywhere; } .tools { display: flex; align-items: center; flex-wrap: wrap; gap: var(--sp-2); } .close { appearance: none; display: inline-flex; align-items: center; justify-content: center; /* 图标按钮用标准控件高度(34px)而不是密集行的 28px:图层是浮层, 关闭是唯一出口,点击目标不该比正文按钮更小;字号也调大一档, 避免「×」在深色底上细到看不见(截图逐字核对时发现对比度偏低)。 */ width: var(--ctl-h-md); height: var(--ctl-h-md); border: 1px solid var(--line-strong); border-radius: var(--r-sm); background: var(--surface-3); color: var(--text-1); font-size: var(--fs-md); line-height: 1; cursor: pointer; } .close:hover { color: var(--text-1); border-color: var(--line-strong); } .close:focus-visible { outline: 2px solid var(--focus); outline-offset: 1px; } /* 内容区:归档结果可以很长(净值曲线 + 持仓 + 成交表),所以这里独立滚动, 标题栏与关闭按钮始终可见(不用把用户滚回顶部才能关掉图层)。 */ .body { flex: 1 1 auto; max-height: 90vh; overflow: auto; padding: var(--sp-4); }