The College Contact Protocol Chamber · practical family guide
Can a College Admissions Consultant Contact Colleges on Your Behalf?
A college admissions consultant can sometimes communicate with colleges, particularly for general procedural questions or professional relationship-building. But applicant-specific communication should usually keep the student at the center. Ethical guidance from IECA emphasizes that the student is in charge of the application process, that the application comes from the student, and that consultants should not use personal connections as a backdoor to admission.
CONTACT PROTOCOL
GREEN / YELLOW / RED
AUTHORIZE
Protocol Green
Appropriate: general process and policy questions
A consultant may contact an admissions office to clarify a publicly unclear process, ask a professional question about policy, confirm how a program works, or speak with admissions representatives in the ordinary course of professional education. That is different from asking a college to give a particular student special treatment.
Consultants also routinely learn from colleges through visits, conferences, webinars, and professional relationships. Knowledge is part of the service; lobbying is not.
Protocol Yellow
Applicant-specific questions require judgment and permission
If a question concerns one student’s file, many colleges will prefer or require the student to contact the office directly. A consultant can help the student decide what to ask, draft a concise message, or prepare for a call. Depending on the college and the information involved, the institution may not discuss applicant-specific details with a third party without authorization.
The safest default is student-led communication with consultant coaching in the background.
Protocol Red
Not appropriate: impersonation, submission, or “connections” pressure
A consultant should not pretend to be the student, write as though a student-authored message came from the student, complete application materials on the student’s behalf, or claim that a personal relationship can force an admission outcome. IECA’s family guidance specifically says the answer should be no when families ask whether a consultant will use personal connections to get a student into a top choice.
Any firm selling access to decision-makers as the product deserves very careful scrutiny.
Protocol 04
What about a missing document or portal problem?
For routine applicant-account issues, the student should usually contact the college directly because they can verify identity and describe what they see in the portal. A consultant can help the student understand the issue and prepare the communication.
If the problem involves a school transcript or counselor document, the high school counseling office may be the appropriate party instead.
Protocol 05
What about advocating after a denial or waitlist?
A consultant can help a student interpret options, draft a letter of continued interest where appropriate, prepare an update, or decide whether an appeal process exists. But the message should be the student’s truthful communication. Private advocacy should not become a shadow application channel.
A strong college admissions service should improve the student’s decision-making and execution while preserving ownership.
Protocol 06
Ask the firm to define its boundary before hiring
During consultation, ask: Will you ever contact colleges about my child? Under what circumstances? Will you ever log into the student’s application? Who presses submit? How do you handle applicant-specific questions? What do you mean when you say you have relationships with admissions offices?
These questions fit naturally beside the broader consultant interview checklist and questions to ask before hiring.
Clearance
The consultant can be an interpreter without becoming the applicant
The most ethical and useful role is often invisible: the consultant helps the student understand what to do, prepares them to communicate clearly, and makes sure the application remains authentic and accurate.
When comparing firms, examine the team, service model, case studies, and value framework; then schedule a conversation and ask the protocol questions directly.
Final takeaway
A consultant can help open the right channel. They should not become a hidden applicant behind the applicant.
Use the framework with any consulting firm. The goal is not to reward the best sales language; it is to make the service, ownership, ethics, and next steps concrete before the student reaches a high-pressure moment.
Start a focused conversation →
General educational guidance, not legal advice. Admissions decisions belong to colleges. Service rights and remedies depend on the signed agreement and applicable law.
-content-field="published-on"],.blog-item-wrapper header h1,article header h1){display:none!important}
body.tii-blog-title-live .tii-blog-native-hidden{display:none!important}
:is(html,body).sqs-edit-mode-active #tii-blog-article-title,:is(html,body).sqs-site-styles-active #tii-blog-article-title{display:none!important}
:root{--tii-n0:#04101f;--tii-n1:#0a1e37;--tii-n2:#0e2745;--tii-gold:#ead49f;--tii-blue:#8fb7df}
.tii-detective-blog-hero,.tii-detective-blog-hero *{box-sizing:border-box}
.tii-detective-blog-hero{position:relative;left:50%;width:100vw;max-width:none;margin:0 0 0 -50vw;overflow:hidden;isolation:isolate;contain:layout paint style;background:radial-gradient(circle at 78% 24%,rgba(78,131,188,.27),transparent 31%),radial-gradient(circle at 18% 70%,rgba(213,181,111,.17),transparent 31%),linear-gradient(145deg,var(--tii-n0),var(--tii-n1) 54%,var(--tii-n2))}
@supports(overflow:clip){.tii-detective-blog-hero{overflow:clip}}
.tii-detective-blog-hero::after{content:"";position:absolute;z-index:0;inset:auto 0 0;height:190px;pointer-events:none;background:linear-gradient(to top,rgba(4,16,31,.72),rgba(4,16,31,.32) 46%,transparent)}
.tii-db-body{position:relative;z-index:2;width:min(1320px,calc(100% - 64px));margin:auto}
.tii-db-copy{position:relative;z-index:3;width:68%;padding:36px 18px 30px 24px;display:flex;flex-direction:column;gap:15px;border-bottom:1px solid rgba(255,255,255,.12);contain:layout style}
.tii-db-kicker-row{display:flex;align-items:center;gap:10px;flex-wrap:wrap;margin-top:30px}
.tii-db-chip,.tii-db-status,.tii-db-meta-item{background:rgba(255,255,255,.09);border:1px solid rgba(255,255,255,.20)}
.tii-db-chip,.tii-db-status,.tii-db-pulse-note{display:inline-flex;align-items:center;gap:8px;font-size:10px;letter-spacing:.15em;text-transform:uppercase;white-space:nowrap}
.tii-db-chip,.tii-db-status{padding:8px 12px;border-radius:999px;color:#fff}.tii-db-chip{transform:translateX(-5%)}.tii-db-pulse-note{color:rgba(255,255,255,.76)}
.tii-db-status-dot,.tii-db-pulse-dot{position:relative;width:7px;height:7px;border-radius:50%;display:inline-block;flex:0 0 7px;background:#fff}
.tii-db-status-dot::after,.tii-db-pulse-dot::after{content:"";position:absolute;inset:-1px;border:1px solid currentColor;border-radius:50%;opacity:0;transform:scale(1);animation:tiiRippleX 2.2s ease-out infinite}
.tii-db-pulse-text--mobile{display:none}
.tii-db-title{margin:0;max-width:23ch;padding-bottom:.12em;display:block;contain:paint;font-family:Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;font-size:clamp(3rem,5.35vw,5rem);font-weight:800;line-height:1.03;letter-spacing:-.055em;text-wrap:balance;color:#fff;background:linear-gradient(135deg,#fff 0%,#fff 9%,var(--tii-gold) 18%,var(--tii-blue) 31%,#fff 43%,#fff 50%,#fff 59%,var(--tii-gold) 68%,var(--tii-blue) 81%,#fff 93%,#fff 100%);background-size:200% 200%;background-position:100% 100%;background-repeat:no-repeat;-webkit-background-clip:text;background-clip:text;-webkit-text-fill-color:transparent;animation:tiiTitleFlow 9.5s steps(128,end) infinite;-webkit-font-smoothing:antialiased}
.tii-db-outline-intro{margin:2px 0 0;max-width:72ch;color:#fff;font:650 1rem/1.55 Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif}.tii-db-outline-columns{width:min(100%,78ch);display:grid;grid-template-columns:repeat(2,minmax(0,1fr));align-items:start;column-gap:clamp(24px,3vw,46px)}.tii-db-outline{width:min(100%,78ch);margin:0;padding:0 0 0 1.25rem;display:grid;gap:.44rem;color:#fff}.tii-db-outline-columns .tii-db-outline{width:100%}.tii-db-outline li{margin:0;padding-left:.18rem;color:#fff;font:500 .95rem/1.42 Inter,-apple-system,BlinkMacSystemFont,"Segoe UI",sans-serif;break-inside:avoid}.tii-db-outline li::marker{color:#fff}.tii-db-meta{display:flex;flex-wrap:wrap;gap:10px;margin-top:3px}.tii-db-meta-item{display:inline-flex;align-items:center;gap:8px;padding:8px 11px;border-radius:13px;color:rgba(255,255,255,.84);font-size:.8rem;line-height:1.2}.tii-db-meta-item svg{width:14px;height:14px;stroke:currentColor;flex:0 0 14px}
.tii-db-stage{position:absolute;z-index:2;inset:0 0 0 auto;width:34%;overflow:hidden;touch-action:none;padding-left:14px;contain:layout paint style}
@supports(overflow:clip){.tii-db-stage{overflow:clip}}
@media(min-width:781px){.tii-db-stage{--g:max(32px,calc((100vw - 1320px)/2));right:calc(-1*var(--g));width:calc(34% + var(--g))}}
.tii-db-stage .tii-db-status{position:absolute;top:64px;right:14px;z-index:8;max-width:calc(100% - 28px);justify-content:center;text-align:center;overflow:hidden;text-overflow:ellipsis}.tii-db-status--mobile{display:none}
.tii-db-campus-field{position:absolute;z-index:2;inset:90px 10px 64px;contain:layout paint style}
.tii-db-campus-blip{position:absolute;z-index:3;min-width:90px;width:min(136px,24vw);padding:7px 9px 7px 7px;border-radius:15px;border:1px solid rgba(49,69,86,.10);background:rgba(255,255,255,.68);box-shadow:0 14px 26px rgba(49,69,86,.08);display:flex;align-items:center;gap:8px;pointer-events:none;opacity:0;transform:translate3d(0,10px,0) scale(.96);contain:layout paint style;animation:tiiCardScan 32s ease-in-out calc(5.9s + var(--d,0s)) infinite both}
.tii-db-campus-blip svg{width:28px;height:28px;flex:0 0 28px}.tii-db-campus-blip>div{min-width:0;line-height:1}.tii-db-campus-label{display:block;color:#314556;font-size:.62rem;line-height:1;font-weight:700;letter-spacing:.08em;text-transform:uppercase}.tii-db-campus-sub{display:block;margin-top:2px;color:#627888;font-size:.52rem;line-height:calc(1em + 2px);letter-spacing:.12em;text-transform:uppercase}
.tii-db-campus-1{top:3%;left:3%;--d:0s}.tii-db-campus-2{top:5%;left:38%;--d:2s}.tii-db-campus-3{top:4%;right:4%;--d:4s}.tii-db-campus-4{top:21%;left:13%;--d:6s}.tii-db-campus-5{top:19%;right:18%;--d:8s}.tii-db-campus-6{top:35%;left:43%;--d:10s}.tii-db-campus-7{top:40%;left:3%;--d:12s}.tii-db-campus-8{top:42%;right:3%;--d:14s}.tii-db-campus-9{top:58%;left:16%;--d:16s}.tii-db-campus-10{top:57%;right:27%;--d:18s}.tii-db-campus-11{top:70%;left:43%;--d:20s}.tii-db-campus-12{top:73%;right:7%;--d:22s}.tii-db-campus-13{bottom:2%;left:2%;--d:24s}.tii-db-campus-14{bottom:1%;left:27%;--d:26s}.tii-db-campus-15{bottom:3%;right:25%;--d:28s}.tii-db-campus-16{bottom:1%;right:2%;--d:30s}
.tii-db-scan-ring{position:absolute;width:210px;height:210px;border-radius:50%;border:1px dashed rgba(255,255,255,.20);left:48%;top:16%;opacity:.46;animation:tiiFloatRing 10s ease-in-out infinite}.tii-db-scan-ring::before,.tii-db-scan-ring::after{content:"";position:absolute;border-radius:50%;border:1px solid rgba(255,255,255,.12)}.tii-db-scan-ring::before{inset:18px}.tii-db-scan-ring::after{inset:38px}
.tii-db-magnifier-wrap{position:absolute;inset:0 auto 0 50%;z-index:10000;width:min(1320px,calc(100% - 64px));transform:translateX(-50%);pointer-events:none;overflow:visible;contain:layout style}.tii-db-magnifier-manual-shift,.tii-db-magnifier-path,.tii-db-magnifier-patrol,.tii-db-magnifier-rig{position:absolute;inset:0}.tii-db-magnifier-manual-shift{z-index:10000;transform:translate3d(0,0,0)}.tii-returning .tii-db-magnifier-manual-shift{transition:transform 650ms cubic-bezier(.22,1,.36,1)}
.tii-db-magnifier-path{left:56%;top:calc(5.5% + 50px);width:112px;height:112px;animation:tiiEnter 5.9s cubic-bezier(.22,.72,.24,1) 1 both}.tii-db-magnifier-patrol{animation:tiiPatrol 32s ease-in-out 5.9s infinite}.tii-db-magnifier-rig{z-index:10001;animation:tiiTilt 6.4s ease-in-out infinite;transform-origin:64% 34%}.tii-db-magnifier-shadow{position:absolute;left:28px;top:89px;width:64px;height:17px;border-radius:50%;background:radial-gradient(ellipse,rgba(49,69,86,.18),rgba(49,69,86,0) 72%);animation:tiiShadow 6.4s ease-in-out infinite}.tii-db-magnifier-image{position:absolute;z-index:10003;left:0;top:0;width:104px;height:104px;object-fit:contain;user-select:none;-webkit-user-drag:none;filter:drop-shadow(0 7px 12px rgba(49,69,86,.13));transform:translateZ(0)}
.tii-db-magnifier-zoom{position:absolute;z-index:10005;left:42px;top:8px;width:51px;height:51px;border-radius:50%;overflow:hidden;pointer-events:none;border:1px solid rgba(255,255,255,.46);box-shadow:inset 0 0 0 1px rgba(255,255,255,.32),inset 0 0 13px rgba(186,220,241,.16),0 2px 9px rgba(1,9,20,.15);background:radial-gradient(circle at 31% 24%,rgba(255,255,255,.42) 0 7%,rgba(255,255,255,.13) 18%,transparent 42%),linear-gradient(135deg,rgba(224,240,250,.31),rgba(114,154,184,.12) 54%,rgba(255,255,255,.22))}.tii-db-magnifier-zoom::after{content:"";position:absolute;inset:8% 12% 52% 14%;border-radius:50%;background:linear-gradient(135deg,rgba(255,255,255,.34),rgba(255,255,255,0));opacity:.8;transform:rotate(-16deg)}
.tii-db-magnifier-beam{position:absolute;z-index:10002;left:65px;top:2px;width:190px;height:72px;transform-origin:0 50%;clip-path:polygon(0 44%,100% 0,100% 100%,0 56%);background:linear-gradient(90deg,rgba(255,255,255,.58),rgba(191,224,241,.30) 42%,rgba(102,127,146,0));opacity:.48;mix-blend-mode:screen;animation:tiiBeam 4.2s ease-in-out infinite}.tii-db-magnifier-trigger{position:absolute;left:47px;top:1px;width:42px;height:42px;border-radius:50%;border:1px solid rgba(102,127,146,.28)}.tii-db-magnifier-trigger::after{content:"";position:absolute;inset:-1px;border:1px solid rgba(102,127,146,.28);border-radius:50%;opacity:.45;transform:scale(.84);animation:tiiTrigger 4.2s ease-out infinite}
.tii-magnifier-manual :is(.tii-db-magnifier-path,.tii-db-magnifier-patrol,.tii-db-magnifier-rig,.tii-db-magnifier-shadow,.tii-db-magnifier-beam,.tii-db-magnifier-trigger,.tii-db-campus-blip){animation-play-state:paused}.tii-magnifier-manual .tii-db-campus-blip{animation:none}
.tii-hero-offscreen{content-visibility:auto;contain-intrinsic-size:auto 650px}.tii-hero-offscreen :is(.tii-db-title,.tii-db-campus-blip,.tii-db-scan-ring,.tii-db-magnifier-path,.tii-db-magnifier-patrol,.tii-db-magnifier-rig,.tii-db-magnifier-shadow,.tii-db-magnifier-beam){animation-play-state:paused!important}.tii-hero-offscreen .tii-db-status-dot::after,.tii-hero-offscreen .tii-db-pulse-dot::after,.tii-hero-offscreen .tii-db-magnifier-trigger::after{animation-play-state:paused!important}
@keyframes tiiTitleFlow{from{background-position:100% 100%}to{background-position:0 0}}@keyframes tiiRippleX{0%{opacity:.45;transform:scale(.9)}75%,100%{opacity:0;transform:scale(2.4)}}@keyframes tiiCardScan{0%,100%{opacity:0;transform:translate3d(0,10px,0) scale(.96)}3%,10%{opacity:1;transform:translate3d(0,0,0) scale(1)}15%{opacity:0;transform:translate3d(0,-7px,0) scale(1.01)}}@keyframes tiiFloatRing{0%,100%{transform:translate3d(0,0,0) scale(1)}50%{transform:translate3d(10px,6px,0) scale(1.04)}}
@keyframes tiiPatrol{0%,100%{transform:translate3d(0,0,0)}12%{transform:translate3d(clamp(72px,12vw,180px),2px,0)}25%{transform:translate3d(clamp(145px,23vw,285px),clamp(18px,4vh,42px),0)}38%{transform:translate3d(clamp(95px,16vw,210px),clamp(78px,15vh,155px),0)}51%{transform:translate3d(clamp(8px,2vw,34px),clamp(120px,23vh,225px),0)}64%{transform:translate3d(clamp(125px,20vw,255px),clamp(145px,27vh,255px),0)}77%{transform:translate3d(clamp(185px,29vw,340px),clamp(76px,14vh,145px),0)}89%{transform:translate3d(clamp(58px,9vw,128px),clamp(42px,8vh,88px),0)}}
@keyframes tiiPatrolM{0%,100%{transform:translate3d(0,0,0)}20%{transform:translate3d(clamp(42px,18vw,82px),2px,0)}40%{transform:translate3d(clamp(16px,7vw,38px),34px,0)}60%{transform:translate3d(clamp(48px,20vw,92px),72px,0)}80%{transform:translate3d(4px,56px,0)}}@keyframes tiiTilt{0%,100%{transform:rotate(-7deg) scale(1)}50%{transform:rotate(4deg) scale(1.02)}}@keyframes tiiShadow{0%,100%{transform:scale(1);opacity:.16}50%{transform:scale(.92);opacity:.10}}@keyframes tiiBeam{0%,100%{opacity:.24;transform:rotate(-12deg) scaleX(.91)}50%{opacity:.56;transform:rotate(-9deg) scaleX(1.05)}}@keyframes tiiTrigger{0%{opacity:.46;transform:scale(.84)}75%,100%{opacity:0;transform:scale(1.55)}}
@keyframes tiiEnter{0%{opacity:0;transform:translate3d(clamp(-160px,-11vw,-72px),-230px,0)}14%{opacity:.68;transform:translate3d(clamp(-150px,-10vw,-66px),-174px,0)}36%{opacity:1;transform:translate3d(clamp(-112px,-7vw,-48px),-108px,0)}64%{opacity:1;transform:translate3d(clamp(-58px,-3.5vw,-24px),-48px,0)}84%{opacity:1;transform:translate3d(-8px,-8px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}@keyframes tiiEnterM{0%{opacity:0;transform:translate3d(clamp(-176px,-51vw,-128px),-88px,0)}20%{opacity:.72;transform:translate3d(clamp(-146px,-40vw,-104px),-62px,0)}52%{opacity:1;transform:translate3d(clamp(-82px,-23vw,-58px),-30px,0)}82%{opacity:1;transform:translate3d(-10px,-5px,0)}100%{opacity:1;transform:translate3d(0,0,0)}}
@media(max-width:1080px){.tii-db-copy{width:62%}.tii-db-stage{width:40%}.tii-db-title{max-width:16ch;font-size:clamp(2.8rem,5.7vw,4.45rem)}}
@media(max-width:780px){.tii-detective-blog-hero{padding-top:38px}.tii-db-body{width:min(100%,calc(100% - 20px));display:flex;flex-direction:column}.tii-db-stage{order:1;position:relative;inset:auto;width:100%;height:177px;min-height:177px;padding:0}.tii-db-copy{order:2;width:100%;padding:0 18px 24px;gap:13px}.tii-db-kicker-row{display:none}.tii-db-title{max-width:none;font-size:clamp(2.55rem,11vw,4rem);line-height:1.04;padding-bottom:.14em}.tii-db-outline-intro{font-size:.96rem;line-height:1.5}.tii-db-outline-columns{display:block;width:100%}.tii-db-outline-columns .tii-db-outline+.tii-db-outline{margin-top:.4rem}.tii-db-outline{width:100%;padding-left:1.16rem;gap:.4rem}.tii-db-outline li{font-size:.91rem;line-height:1.4}.tii-db-campus-field{inset:48px 6px 18px;transform:translate3d(0,-15px,0)}.tii-db-stage .tii-db-status--desktop{display:none}.tii-db-stage .tii-db-status--mobile{display:flex;top:15px;left:50%;right:auto;width:max-content;max-width:calc(100% - 24px);padding:0;border:0;background:transparent;transform:translateX(-50%)}.tii-db-stage .tii-db-status--mobile .tii-db-status-dot{color:#d8b85a;background:#d8b85a}.tii-db-campus-blip{min-width:84px;width:min(120px,35vw);padding:7px;border-radius:13px;max-height:72px;animation-duration:34s}.tii-db-campus-blip svg{width:24px;height:24px;flex-basis:24px}.tii-db-campus-label{font-size:.56rem}.tii-db-campus-sub{font-size:.48rem}.tii-db-campus-1{top:2%;left:2%}.tii-db-campus-2{top:4%;left:34%}.tii-db-campus-3{top:3%;right:2%}.tii-db-campus-4{top:19%;left:5%}.tii-db-campus-5{top:18%;right:9%}.tii-db-campus-6{top:34%;left:36%}.tii-db-campus-7{top:39%;left:1%}.tii-db-campus-8{top:40%;right:1%}.tii-db-campus-9{top:57%;left:6%}.tii-db-campus-10{top:56%;right:16%}.tii-db-campus-11{top:69%;left:34%}.tii-db-campus-12{top:71%;right:2%}.tii-db-campus-13{bottom:1%;left:1%}.tii-db-campus-14{bottom:0;left:22%}.tii-db-campus-15{bottom:2%;right:22%}.tii-db-campus-16{bottom:0;right:1%}.tii-db-campus-field>.tii-db-campus-blip:nth-child(even){display:none}.tii-db-magnifier-wrap{inset:38px 10px auto;width:auto;height:177px;transform:none}.tii-db-magnifier-path{left:54%;top:calc(9% + 35px);width:88px;height:88px;animation-name:tiiEnterM;animation-duration:4.35s}.tii-db-magnifier-patrol{animation-name:tiiPatrolM;animation-duration:34s;animation-delay:4.35s}.tii-db-magnifier-image{width:82px;height:82px}.tii-db-magnifier-zoom{left:33px;top:7px;width:40px;height:40px}.tii-db-magnifier-shadow{left:23px;top:70px;width:50px;height:13px}.tii-db-magnifier-beam{left:51px;top:1px;width:126px;height:56px}.tii-db-magnifier-trigger{left:36px;top:0;width:34px;height:34px}}
@media(min-width:781px) and (hover:hover) and (pointer:fine){.tii-detective-blog-hero.tii-magnifier-takeover,.tii-detective-blog-hero.tii-magnifier-takeover *{cursor:none!important}}
@media(prefers-reduced-motion:reduce){.tii-db-title,.tii-db-status-dot::after,.tii-db-pulse-dot::after,.tii-db-campus-blip,.tii-db-scan-ring,.tii-db-magnifier-path,.tii-db-magnifier-patrol,.tii-db-magnifier-rig,.tii-db-magnifier-shadow,.tii-db-magnifier-beam,.tii-db-magnifier-trigger::after{animation:none!important}.tii-db-title{background-position:50% 50%}.tii-db-campus-blip{opacity:1;transform:none}}
-webkit-backdrop-filter: blur(20px) saturate(170%) contrast(.72) brightness(1.12);
backdrop-filter: blur(20px) saturate(170%) contrast(.72) brightness(1.12);
}
#ivy-article-dock .iad-surface::before {
content: ""; position: absolute; inset: 0; border-radius: inherit;
pointer-events: none;
box-shadow: inset 1px 0 0 rgba(255,255,255,.35), inset -1px 0 0 rgba(255,255,255,.18);
}
#ivy-article-dock .iad-link {
position: absolute; bottom: calc(var(--iad-bottom) + env(safe-area-inset-bottom, 0px));
display: inline-flex; align-items: center; justify-content: center; gap: 9px;
min-width: 112px; min-height: 48px; height: 48px; padding: 10px 18px;
border-radius: 999px; font-size: 12px; font-weight: 600;
transition: transform .22s ease, box-shadow .22s ease, border-color .18s ease;
}
#ivy-article-dock .iad-prev { left: max(var(--iad-edge), env(safe-area-inset-left, 0px)); }
#ivy-article-dock .iad-next { right: max(var(--iad-edge), env(safe-area-inset-right, 0px)); }
#ivy-article-dock svg { width: 19px; height: 19px; flex: 0 0 auto; display: block; }
#ivy-article-dock .iad-preview {
position: absolute; bottom: calc(100% + 11px); width: 260px;
padding: 14px 16px; border-radius: 20px;
/* More frosting for a multi-line headline than for the compact controls. */
--iad-glass: rgba(245,249,255,.80);
opacity: 0; visibility: hidden; pointer-events: none;
transform: translateY(5px); transition: opacity .18s ease, transform .18s ease, visibility .18s ease;
}
#ivy-article-dock .iad-prev .iad-preview { left: 0; }
#ivy-article-dock .iad-next .iad-preview { right: 0; }
#ivy-article-dock .iad-link:hover .iad-preview,
#ivy-article-dock .iad-link:focus-visible .iad-preview {
opacity: 1; visibility: visible; transform: none;
}
#ivy-article-dock .iad-eyebrow { display: block; color: var(--iad-gold); font-size: 10px; letter-spacing: .06em; margin-bottom: 5px; }
#ivy-article-dock .iad-title { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; font-size: 14px; font-weight: 550; line-height: 1.4; overflow-wrap: anywhere; }
#ivy-article-dock .iad-center {
position: absolute; bottom: calc(var(--iad-bottom) + env(safe-area-inset-bottom, 0px) + var(--iad-keyboard));
left: 50%; width: min(438px, calc(100% - 316px)); transform: translateX(-50%);
pointer-events: none;
}
#ivy-article-dock .iad-form { position: relative; height: 48px; margin: 0; padding: 0; border: 0; }
#ivy-article-dock .iad-field {
position: relative; display: flex; align-items: center; gap: 0; min-width: 0; height: 48px;
border: 1px solid rgba(255,255,255,.60); border-radius: 999px;
background: rgba(255,255,255,.34);
box-shadow: inset 0 1px 3px rgba(37,57,76,.05), 0 1px 0 rgba(255,255,255,.20);
transition: background-color .18s ease, border-color .18s ease;
}
#ivy-article-dock .iad-field:focus-within {
background: rgba(255,255,255,.56); border-color: rgba(122,95,55,.55);
}
#ivy-article-dock .iad-input {
display: block; flex: 1 1 0%; min-width: 0; width: 0; height: 46px;
padding: 8px 13px; margin: 0; border: 0; border-radius: 999px;
background: transparent; color: var(--iad-ink) !important; caret-color: var(--iad-ink);
font-size: 16px; line-height: 22px; box-shadow: none; outline-offset: 2px;
appearance: none; -webkit-appearance: none;
}
#ivy-article-dock .iad-input::placeholder { color: var(--iad-muted); opacity: 1; font-size: 12px; }
#ivy-article-dock .iad-submit {
display: grid; place-items: center; flex: 0 0 40px; width: 40px; height: 40px;
padding: 0; margin: 0 2px 0 0; border: 1px solid rgba(255,255,255,.61); border-radius: 999px;
background: rgba(255,255,255,.40); box-shadow: 0 2px 5px rgba(23,42,62,.07), inset 0 1px 0 rgba(255,255,255,.72);
transition: background-color .18s ease, transform .18s ease;
}
#ivy-article-dock .iad-submit svg { width: 17px; height: 17px; }
#ivy-article-dock .iad-submit:hover { background: rgba(255,255,255,.75); }
#ivy-article-dock .iad-submit:disabled { cursor: progress; opacity: .65; }
#ivy-article-dock .iad-status { color: var(--iad-ink); font-size: 12px; line-height: 1.4; }
#ivy-article-dock a:focus-visible, #ivy-article-dock button:focus-visible, #ivy-article-dock input:focus-visible {
outline: 2px solid var(--iad-gold) !important; outline-offset: 3px;
}
#ivy-article-dock[data-near-end="true"] .iad-next { border-color: rgba(135,105,60,.66); }
#ivy-article-dock .iad-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
@media (hover: hover) and (pointer: fine) {
#ivy-article-dock .iad-link:hover {
transform: translateY(-3px); border-color: rgba(255,255,255,.98);
box-shadow: 0 21px 45px -12px rgba(19,36,53,.34), 0 7px 16px -8px rgba(19,36,53,.25), inset 0 1px 0 #fff, inset 0 -1px 0 rgba(255,255,255,.50);
}
#ivy-article-dock .iad-link:active { transform: translateY(-1px); }
#ivy-article-dock .iad-submit:active { transform: scale(.96); }
}
@media (max-width: 720px) {
#ivy-article-dock { --iad-edge: 8px; --iad-bottom: 12px; }
#ivy-article-dock .iad-link { min-width: 44px; width: 44px; min-height: 44px; height: 44px; padding: 10px; border-radius: 50%; }
#ivy-article-dock .iad-direction { display: none; }
#ivy-article-dock .iad-center { width: calc(100% - 120px); }
#ivy-article-dock .iad-form { height: 44px; }
#ivy-article-dock .iad-field { height: 44px; }
#ivy-article-dock .iad-input { height: 42px; padding: 9px; }
#ivy-article-dock .iad-input::placeholder { font-size: 11px; }
#ivy-article-dock .iad-submit { flex-basis: 36px; width: 36px; height: 38px; }
#ivy-article-dock .iad-preview { width: min(246px, calc(100vw - 30px)); }
#ivy-article-dock[data-search-focus="true"] .iad-center {
width: calc(100% - max(18px, env(safe-area-inset-left, 0px)) - max(18px, env(safe-area-inset-right, 0px)));
}
#ivy-article-dock[data-search-focus="true"] .iad-link { display: none; }
}
/* Keep comfortable field sizes on touch-first devices, including larger tablets. */
@media (pointer: coarse) and (min-width: 721px) {
#ivy-article-dock .iad-form, #ivy-article-dock .iad-field { height: 48px; }
#ivy-article-dock .iad-input { height: 46px; }
#ivy-article-dock .iad-submit { height: 40px; flex-basis: 40px; width: 40px; }
}
@media (hover: none) { #ivy-article-dock .iad-preview { display: none; } }
@media (prefers-reduced-motion: reduce) {
#ivy-article-dock * { transition: none !important; animation: none !important; }
#ivy-article-dock .iad-link:hover, #ivy-article-dock .iad-submit:active { transform: none; }
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
#ivy-article-dock .iad-surface { background: #eef3f8; }
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
#ivy-article-dock .iad-surface { background: #eef3f8; border-color: #8193a5; -webkit-backdrop-filter: none; backdrop-filter: none; }
#ivy-article-dock .iad-field { background: #fff; border-color: #8193a5; }
}
@media (forced-colors: active) {
#ivy-article-dock .iad-surface, #ivy-article-dock .iad-field, #ivy-article-dock .iad-submit { background: Canvas; border: 1px solid ButtonText; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
#ivy-article-dock a, #ivy-article-dock button, #ivy-article-dock .iad-input { color: CanvasText !important; text-shadow: none; }
}
@media print { #ivy-article-dock { display: none !important; } }
/* Shown only on the blog index when the search-handoff fallback is needed. */
#ivy-blog-search-handoff { margin: 20px auto; padding: 18px 22px; max-width: 820px; border: 1px solid #b8c4d0; border-radius: 16px; color: #172b40; background: #f3f6f9; font: 16px/1.5 system-ui,sans-serif; }
#ivy-blog-search-handoff p { margin: 0; }
#ivy-blog-search-handoff a { color: #173e65; text-decoration: underline; }
linear-gradient(150deg, rgba(255,255,255,.24), rgba(255,255,255,.05) 48%, rgba(222,235,251,.12)),
var(--iad-glass);
box-shadow: var(--iad-shadow); pointer-events: auto;
-webkit-backdrop-filter: blur(20px) saturate(170%) contrast(.72) brightness(1.12);
backdrop-filter: blur(20px) saturate(170%) contrast(.72) brightness(1.12);
}
#ivy-article-dock .iad-surface::before {
content: ""; position: absolute; inset: 0; border-radius: inherit;
pointer-events: none;
box-shadow: inset 1px 0 0 rgba(255,255,255,.35), inset -1px 0 0 rgba(255,255,255,.18);
}
#ivy-article-dock .iad-link {
position: absolute; bottom: calc(var(--iad-bottom) + env(safe-area-inset-bottom, 0px));
display: inline-flex; align-items: center; justify-content: center; gap: 9px;
min-width: 112px; min-height: 48px; height: 48px; padding: 10px 18px;
border-radius: 999px; font-size: 12px; font-weight: 600;
transition: transform .22s ease, box-shadow .22s ease, border-color .18s ease;
}
#ivy-article-dock .iad-prev { left: max(var(--iad-edge), env(safe-area-inset-left, 0px)); }
#ivy-article-dock .iad-next { right: max(var(--iad-edge), env(safe-area-inset-right, 0px)); }
#ivy-article-dock svg { width: 19px; height: 19px; flex: 0 0 auto; display: block; }
#ivy-article-dock .iad-preview {
position: absolute; bottom: calc(100% + 11px); width: 260px;
padding: 14px 16px; border-radius: 20px;
/* More frosting for a multi-line headline than for the compact controls. */
--iad-glass: rgba(245,249,255,.80);
opacity: 0; visibility: hidden; pointer-events: none;
transform: translateY(5px); transition: opacity .18s ease, transform .18s ease, visibility .18s ease;
}
#ivy-article-dock .iad-prev .iad-preview { left: 0; }
#ivy-article-dock .iad-next .iad-preview { right: 0; }
#ivy-article-dock .iad-link:hover .iad-preview,
#ivy-article-dock .iad-link:focus-visible .iad-preview {
opacity: 1; visibility: visible; transform: none;
}
#ivy-article-dock .iad-eyebrow { display: block; color: var(--iad-gold); font-size: 10px; letter-spacing: .06em; margin-bottom: 5px; }
#ivy-article-dock .iad-title { display: -webkit-box; -webkit-line-clamp: 3; -webkit-box-orient: vertical; overflow: hidden; font-size: 14px; font-weight: 550; line-height: 1.4; overflow-wrap: anywhere; }
#ivy-article-dock .iad-center {
position: absolute; bottom: calc(var(--iad-bottom) + env(safe-area-inset-bottom, 0px) + var(--iad-keyboard));
left: 50%; width: min(438px, calc(100% - 316px)); transform: translateX(-50%);
pointer-events: none;
}
#ivy-article-dock .iad-form { position: relative; height: 48px; margin: 0; padding: 0; border: 0; }
#ivy-article-dock .iad-field {
position: relative; display: flex; align-items: center; gap: 0; min-width: 0; height: 48px;
border: 1px solid rgba(255,255,255,.60); border-radius: 999px;
background: rgba(255,255,255,.34);
box-shadow: inset 0 1px 3px rgba(37,57,76,.05), 0 1px 0 rgba(255,255,255,.20);
transition: background-color .18s ease, border-color .18s ease;
}
#ivy-article-dock .iad-field:focus-within {
background: rgba(255,255,255,.56); border-color: rgba(122,95,55,.55);
}
#ivy-article-dock .iad-input {
display: block; flex: 1 1 0%; min-width: 0; width: 0; height: 46px;
padding: 8px 13px; margin: 0; border: 0; border-radius: 999px;
background: transparent; color: var(--iad-ink) !important; caret-color: var(--iad-ink);
font-size: 16px; line-height: 22px; box-shadow: none; outline-offset: 2px;
appearance: none; -webkit-appearance: none;
}
#ivy-article-dock .iad-input::placeholder { color: var(--iad-muted); opacity: 1; font-size: 12px; }
#ivy-article-dock .iad-submit {
display: grid; place-items: center; flex: 0 0 40px; width: 40px; height: 40px;
padding: 0; margin: 0 2px 0 0; border: 1px solid rgba(255,255,255,.61); border-radius: 999px;
background: rgba(255,255,255,.40); box-shadow: 0 2px 5px rgba(23,42,62,.07), inset 0 1px 0 rgba(255,255,255,.72);
transition: background-color .18s ease, transform .18s ease;
}
#ivy-article-dock .iad-submit svg { width: 17px; height: 17px; }
#ivy-article-dock .iad-submit:hover { background: rgba(255,255,255,.75); }
#ivy-article-dock .iad-submit:disabled { cursor: progress; opacity: .65; }
#ivy-article-dock .iad-status { color: var(--iad-ink); font-size: 12px; line-height: 1.4; }
#ivy-article-dock a:focus-visible, #ivy-article-dock button:focus-visible, #ivy-article-dock input:focus-visible {
outline: 2px solid var(--iad-gold) !important; outline-offset: 3px;
}
#ivy-article-dock[data-near-end="true"] .iad-next { border-color: rgba(135,105,60,.66); }
#ivy-article-dock .iad-sr { position: absolute; width: 1px; height: 1px; padding: 0; margin: -1px; overflow: hidden; clip: rect(0,0,0,0); white-space: nowrap; border: 0; }
@media (hover: hover) and (pointer: fine) {
#ivy-article-dock .iad-link:hover {
transform: translateY(-3px); border-color: rgba(255,255,255,.98);
box-shadow: 0 21px 45px -12px rgba(19,36,53,.34), 0 7px 16px -8px rgba(19,36,53,.25), inset 0 1px 0 #fff, inset 0 -1px 0 rgba(255,255,255,.50);
}
#ivy-article-dock .iad-link:active { transform: translateY(-1px); }
#ivy-article-dock .iad-submit:active { transform: scale(.96); }
}
@media (max-width: 720px) {
#ivy-article-dock { --iad-edge: 8px; --iad-bottom: 12px; }
#ivy-article-dock .iad-link { min-width: 44px; width: 44px; min-height: 44px; height: 44px; padding: 10px; border-radius: 50%; }
#ivy-article-dock .iad-direction { display: none; }
#ivy-article-dock .iad-center { width: calc(100% - 120px); }
#ivy-article-dock .iad-form { height: 44px; }
#ivy-article-dock .iad-field { height: 44px; }
#ivy-article-dock .iad-input { height: 42px; padding: 9px; }
#ivy-article-dock .iad-input::placeholder { font-size: 11px; }
#ivy-article-dock .iad-submit { flex-basis: 36px; width: 36px; height: 38px; }
#ivy-article-dock .iad-preview { width: min(246px, calc(100vw - 30px)); }
#ivy-article-dock[data-search-focus="true"] .iad-center {
width: calc(100% - max(18px, env(safe-area-inset-left, 0px)) - max(18px, env(safe-area-inset-right, 0px)));
}
#ivy-article-dock[data-search-focus="true"] .iad-link { display: none; }
}
/* Keep comfortable field sizes on touch-first devices, including larger tablets. */
@media (pointer: coarse) and (min-width: 721px) {
#ivy-article-dock .iad-form, #ivy-article-dock .iad-field { height: 48px; }
#ivy-article-dock .iad-input { height: 46px; }
#ivy-article-dock .iad-submit { height: 40px; flex-basis: 40px; width: 40px; }
}
@media (hover: none) { #ivy-article-dock .iad-preview { display: none; } }
@media (prefers-reduced-motion: reduce) {
#ivy-article-dock * { transition: none !important; animation: none !important; }
#ivy-article-dock .iad-link:hover, #ivy-article-dock .iad-submit:active { transform: none; }
}
@supports not ((backdrop-filter: blur(1px)) or (-webkit-backdrop-filter: blur(1px))) {
#ivy-article-dock .iad-surface { background: #eef3f8; }
}
@media (prefers-reduced-transparency: reduce), (prefers-contrast: more) {
#ivy-article-dock .iad-surface { background: #eef3f8; border-color: #8193a5; -webkit-backdrop-filter: none; backdrop-filter: none; }
#ivy-article-dock .iad-field { background: #fff; border-color: #8193a5; }
}
@media (forced-colors: active) {
#ivy-article-dock .iad-surface, #ivy-article-dock .iad-field, #ivy-article-dock .iad-submit { background: Canvas; border: 1px solid ButtonText; box-shadow: none; -webkit-backdrop-filter: none; backdrop-filter: none; }
#ivy-article-dock a, #ivy-article-dock button, #ivy-article-dock .iad-input { color: CanvasText !important; text-shadow: none; }
}
@media print { #ivy-article-dock { display: none !important; } }
/* Shown only on the blog index when the search-handoff fallback is needed. */
#ivy-blog-search-handoff { margin: 20px auto; padding: 18px 22px; max-width: 820px; border: 1px solid #b8c4d0; border-radius: 16px; color: #172b40; background: #f3f6f9; font: 16px/1.5 system-ui,sans-serif; }
#ivy-blog-search-handoff p { margin: 0; }
#ivy-blog-search-handoff a { color: #173e65; text-decoration: underline; }
sconnect(); bodyObserver?.disconnect(); delete window[GLOBAL];
}
window[GLOBAL] = { version: '3.0.0', refresh, destroy };
for (const name of ['mercury:load', 'sqs:page-view', 'sqs:after-page-load']) document.addEventListener(name, refresh, { signal: appAbort.signal });
for (const name of ['popstate', 'pageshow', 'load']) window.addEventListener(name, refresh, { signal: appAbort.signal });
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', start, { once: true, signal: appAbort.signal }); else start();
})();