diff --git a/docs/access-map-viewer/index.html b/docs/access-map-viewer/index.html index 0acb211..f8975b2 100644 --- a/docs/access-map-viewer/index.html +++ b/docs/access-map-viewer/index.html @@ -293,50 +293,64 @@ /* Access Map */ .am-container { - display: grid; - grid-template-columns: 2fr 1fr; /* tree 2/3, detail 1/3 */ - height: 600px; + padding: 16px 20px; background: var(--surface); } - .am-sidebar { - border-right: 1px solid var(--border); - background: var(--surface-muted); - overflow-y: auto; - padding: 16px; - } - - .am-main { - padding: 24px; - overflow-y: auto; - background: var(--surface); - } - - .am-search { - position: sticky; - top: 0; - background: var(--surface-muted); - padding-bottom: 10px; - margin-bottom: 8px; + .am-toolbar { + display: flex; + gap: 10px; + align-items: center; + flex-wrap: wrap; + padding-bottom: 14px; border-bottom: 1px solid var(--border); - z-index: 5; + margin-bottom: 16px; } - .am-search input { - width: 100%; + .am-toolbar input { + flex: 1; + min-width: 200px; padding: 8px 12px; border-radius: 6px; border: 1px solid var(--border); font-size: 13px; - background: var(--surface); + background: var(--surface-muted); color: var(--text-main); } - .am-search input:focus { + .am-toolbar input:focus { outline: none; border-color: var(--brand); } + .am-stats { + display: flex; + gap: 16px; + flex-wrap: wrap; + padding: 12px 16px; + background: var(--surface-muted); + border: 1px solid var(--border); + border-radius: var(--radius); + margin-bottom: 16px; + font-size: 13px; + } + + .am-stat { + display: flex; + align-items: center; + gap: 6px; + } + + .am-stat-value { + font-weight: 700; + font-size: 16px; + color: var(--text-main); + } + + .am-stat-label { + color: var(--text-muted); + } + .am-empty-hint { padding: 12px 16px; background: var(--surface-muted); @@ -346,94 +360,196 @@ margin: 12px 20px 0; } - /* Tree */ - .tree-node { - position: relative; - margin-left: 20px; - padding-left: 12px; - border-left: 1px solid var(--border); - } - - .tree-node:last-child { - border-left: none; - } - - .tree-node::before { - content: ""; - position: absolute; - top: 14px; - left: 0; - width: 12px; - height: 1px; - background: var(--border); - } - - .node-content { + /* Identity cards */ + .am-card-list { display: flex; - align-items: center; - gap: 8px; - padding: 6px 8px; - border-radius: 6px; - cursor: pointer; - user-select: none; - font-size: 13px; - } - - .node-content:hover { - background: var(--hover); - } - - .node-icon { - width: 20px; - height: 20px; - border-radius: 4px; - display: grid; - place-items: center; - font-size: 12px; - flex-shrink: 0; - } - - .icon-identity { background: #e0e7ff; color: #3730a3; } - .icon-resource { background: #ffe4e6; color: #9f1239; } - .icon-permission { background: #dcfce7; color: #166534; } - .icon-group { background: #fef3c7; color: #92400e; } - - .tree-children { - padding-top: 4px; - padding-left: 8px; - display: none; - } - - .tree-children.open { - display: block; - } - - /* Access detail */ - .am-card-header { - padding-bottom: 16px; - margin-bottom: 16px; - border-bottom: 1px solid var(--border); - } - - .am-card-title { - font-size: 18px; - font-weight: 700; - display: flex; - align-items: center; + flex-direction: column; gap: 12px; } - .detail-icon-lg { - width: 40px; - height: 40px; + .id-card { + border: 1px solid var(--border); + border-radius: var(--radius); + background: var(--surface); + overflow: hidden; + transition: border-color 0.15s; + } + + .id-card:hover { + border-color: var(--border-strong); + } + + .id-card__header { + padding: 14px 16px; + display: flex; + align-items: flex-start; + gap: 12px; + cursor: pointer; + user-select: none; + } + + .id-card__header:hover { + background: var(--surface-muted); + } + + .id-card__avatar { + width: 36px; + height: 36px; border-radius: 8px; display: grid; place-items: center; + font-size: 18px; + flex-shrink: 0; background: var(--surface-muted); border: 1px solid var(--border); - font-size: 20px; } + .id-card__info { + flex: 1; + min-width: 0; + } + + .id-card__name { + font-weight: 700; + font-size: 14px; + word-break: break-all; + display: flex; + align-items: center; + gap: 8px; + flex-wrap: wrap; + } + + .id-card__meta { + display: flex; + gap: 12px; + flex-wrap: wrap; + margin-top: 4px; + font-size: 12px; + color: var(--text-muted); + } + + .id-card__meta-item { + display: flex; + align-items: center; + gap: 4px; + } + + .id-card__perms-preview { + display: flex; + flex-wrap: wrap; + gap: 4px; + margin-top: 8px; + } + + .id-card__toggle { + font-size: 11px; + color: var(--text-muted); + flex-shrink: 0; + margin-top: 4px; + } + + .id-card__body { + display: none; + border-top: 1px solid var(--border); + padding: 16px; + background: var(--surface-muted); + } + + .id-card__body.open { + display: block; + } + + .id-card__section { + margin-bottom: 14px; + } + + .id-card__section:last-child { + margin-bottom: 0; + } + + .id-card__section-title { + font-size: 12px; + font-weight: 700; + text-transform: uppercase; + letter-spacing: 0.04em; + color: var(--text-muted); + margin-bottom: 8px; + display: flex; + align-items: center; + gap: 6px; + } + + .resource-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(280px, 1fr)); + gap: 8px; + } + + .resource-chip { + display: flex; + flex-direction: column; + gap: 4px; + padding: 8px 10px; + border: 1px solid var(--border); + border-radius: 6px; + background: var(--surface); + font-size: 12px; + } + + .resource-chip__name { + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + font-size: 11px; + font-weight: 600; + word-break: break-all; + color: var(--text-main); + } + + .resource-chip__name a { + font-size: 10px; + color: var(--brand); + margin-left: 4px; + } + + .resource-chip__perms { + display: flex; + flex-wrap: wrap; + gap: 3px; + } + + .token-grid { + display: grid; + grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); + gap: 6px 16px; + } + + .token-field { + font-size: 12px; + } + + .token-field strong { + color: var(--text-muted); + font-weight: 600; + } + + .id-card__footer { + padding: 8px 16px; + border-top: 1px solid var(--border); + display: flex; + align-items: center; + gap: 8px; + font-size: 11px; + color: var(--text-muted); + } + + .id-card__footer code { + background: var(--surface-muted); + padding: 1px 6px; + border-radius: 4px; + font-size: 10px; + font-family: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, monospace; + } + + /* keep badge styles for card headers */ .am-card-meta { display: flex; gap: 8px; @@ -1244,115 +1360,21 @@
Identity hierarchy: Identity > Resources > Resource > Permissions
+Credentials and what they can reach