Overlay Panel
The overlay panel is the primary interactive surface of IC Insight. It is injected into every page on *.infinitecampus.org that matches a grades pathname (/student/classroom/grades). It also activates inside iframes that contain the grades view, and within parent pages that embed such an iframe.
Appearance and Position
The overlay is a fixed-position, floating panel. Default position: top-right of the viewport (right: 16px; top: 96px). Default width: 420 px; height grows with content and is scrollable.
The overlay is fully draggable (grab the header bar) and resizable (eight handles: N, S, E, W, NE, NW, SE, SW corners). Position and size are saved to ICI_UI_STATE in chrome.storage.local and restored on next load.
Panel Sections
Header
[ IC Insight ] [ Cache ] [ Dashboard ] [ Refresh ] [ – ] [ × ]
| Button | Action |
|---|---|
| Cache | Saves the current page's parsed grade data to local storage. Also saves a manual history snapshot. |
| Dashboard | Opens dashboard.html in a new tab (the full course hub). |
| Refresh | Re-parses the current IC page DOM and redraws the overlay. Use this if grades changed. |
| – (Minimize) | Collapses the panel body so only the header bar is visible. Click again to restore. |
| × (Close) | Removes the overlay entirely. Reopen by refreshing the page. |
Summary Bar
Displays: course name · overall percentage (two decimal places) · letter grade in parentheses.
If multiple quarters have been detected on the page, a small line below the grade lists them: Quarters detected: Q1, Q2.
If any permanent score overrides or permanent assignment additions are active, a colored indicator appears: Pinned: N permanent change(s) active.
Breakdown Section
The breakdown section renders all categories grouped by quarter. Each quarter is a collapsible <details> block (open by default) labeled with the quarter name and a count of categories and assignments.
Within each quarter, categories are rendered as cards:
- Category header: name, optional weight (
w=N), category average percentage, and optional SEBI badge. - SEBI toggle row (when SEBI is globally enabled): a checkbox labeled "Equalize assignments / SEBI Mode" plus a
?help button that opens the SEBI explanation dialog. - Assignment rows: one row per assignment.
Assignment Row Layout
[ Name ] [Due: MM/DD/YYYY] [badges] score (pct%) [Drop] [Edit] [Pin]
Badges shown inline with the name:
| Badge | Meaning |
|---|---|
DROPPED (red) |
Gradebook-dropped - IC flagged this assignment as dropped. It appears faded with strikethrough and is excluded from grade calculations. |
×N (orange) |
Assignment has a multiplier of N (e.g. ×2). Earned and possible are scaled by this factor in calculations. |
PINNED (accent) |
A permanent score override is active for this assignment via the Pin feature. |
PERM ADD (accent) |
This assignment was added permanently via the "Add Assignment Permanently" form. |
· what-if (accent) |
This is a temporary what-if addition. |
· edited (muted) |
A what-if score edit is active for this assignment. |
· ungraded (muted) |
Assignment has no grade yet. Excluded from calculations. |
Action buttons (only on real, non-synthetic, non-permAdded assignments):
| Button | Action |
|---|---|
| Drop / Undrop | Toggles a what-if drop on this assignment. Dropped assignments are removed from the displayed list and excluded from calculations. |
| Edit | Opens a dialog to enter a hypothetical earned/possible for this assignment (what-if edit). |
| Pin / Unpin | Opens a dialog to enter a permanent score override (persists across refreshes). Clicking "Unpin" on a pinned assignment removes the override immediately. |
Clicking a category header toggles the assignment list open/closed.
What-If Calculator
A collapsible <details> section at the bottom of the overlay body.
Controls:
- Category dropdown - lists all categories from all quarters. Each option shows the category name, weight (if any), and quarter (
[Quarter N]). The value encodesquarterId::categoryId. - Assignment name input.
- Earned and Possible number inputs.
- Add button - adds the hypothetical assignment to the selected category and recalculates.
- Active what-if list - lists all current what-if additions, drops, and edits with a Remove/Undo button for each.
- Clear All - removes all what-if items and recalculates.
- Save Scenario - saves the current what-if state as a named scenario (see What-If & Scenarios).
What-if state is loaded from WI_${courseKey} in storage when the page initializes and saved there after each change. It persists across refreshes for the same course URL.
Permanent Edits Section
A collapsible <details> section below the What-If Calculator. Includes a numeric badge showing the total count of active permanent changes.
Upper portion - Active list: Lists all pinned score overrides and permanently added assignments, each with an Undo button.
Lower portion - Add Assignment Permanently form:
- Category dropdown (same as What-If dropdown)
- Assignment name, earned, possible inputs
- Add button - creates a permanent assignment addition that persists across refreshes (stored in
PA_${courseKey}).
The note at the bottom of this section explains: "Use Pin on any assignment to override its score. Use the form above to add new assignments. Both persist across refreshes."
Overlay Lifecycle
- On page load, the content script runs
initializeICI()which checks whether the page matches a grades URL (or contains a grades iframe). renderOverlay()creates the DOM and appends it todocument.documentElement.applyOverlayTheme()loads the user's theme and color palette and applies CSS variables.- The overlay calls
refresh()which parses the page, saves a cache snapshot, and renders the breakdown. - A
MutationObserverwatches for navigation changes (Infinite Campus is a single-page app). When the grades panel reloads, the overlay re-runsrefresh()automatically. - If the user navigates away from a grades page, the overlay is removed and state is cleaned up.